diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 3e9db414a..45ca1a7c3 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -83,4 +83,12 @@
 #define ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN (1 && ENABLE_2_3_0_BETA1)
 
 
+//===================
+// 2.3.0.beta2 techs
+//===================
+#define ENABLE_2_3_0_BETA2 1
+
+#define ENABLE_ARROW_KEYS_WITH_SLIDERS (1 && ENABLE_2_3_0_BETA2) 
+
+
 #endif // _prusaslicer_technologies_h_
diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp
index 34660927a..b637c2e7f 100644
--- a/src/slic3r/GUI/DoubleSlider.cpp
+++ b/src/slic3r/GUI/DoubleSlider.cpp
@@ -1519,6 +1519,10 @@ void Control::move_current_thumb(const bool condition)
     if (accelerator > 0)
         delta *= accelerator;
 
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+    if (m_selection == ssUndef) m_selection = ssHigher;
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
+
     if (m_selection == ssLower) {
         m_lower_value -= delta;
         correct_lower_value();
@@ -1579,13 +1583,26 @@ void Control::OnKeyDown(wxKeyEvent &event)
             if (key == WXK_LEFT || key == WXK_RIGHT)
                 move_current_thumb(key == WXK_LEFT);
             else if (key == WXK_UP || key == WXK_DOWN) {
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+                if (key == WXK_DOWN)
+                    m_selection = ssHigher;
+                else if (key == WXK_UP && is_lower_thumb_editable())
+                    m_selection = ssLower;
+#else
                 if (key == WXK_UP)
                     m_selection = ssHigher;
                 else if (key == WXK_DOWN && is_lower_thumb_editable())
                     m_selection = ssLower;
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
                 Refresh();
             }
         }
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+        else {
+            if (key == WXK_LEFT || key == WXK_RIGHT)
+                move_current_thumb(key == WXK_LEFT);
+        }
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
     }
     else {
         if (m_is_focused) {
@@ -1599,6 +1616,12 @@ void Control::OnKeyDown(wxKeyEvent &event)
             else if (key == WXK_UP || key == WXK_DOWN)
                 move_current_thumb(key == WXK_UP);
         }
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+        else {
+            if (key == WXK_UP || key == WXK_DOWN)
+                move_current_thumb(key == WXK_UP);
+        }
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
     }
 
     event.Skip(); // !Needed to have EVT_CHAR generated as well
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index a8221ce69..8a2a318d6 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1078,7 +1078,11 @@ wxDEFINE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent);
 wxDEFINE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
 wxDEFINE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
 wxDEFINE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent);
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+wxDEFINE_EVENT(EVT_GLCANVAS_MOVE_SLIDERS, wxKeyEvent);
+#else
 wxDEFINE_EVENT(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, wxKeyEvent);
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
 wxDEFINE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
 wxDEFINE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent);
 wxDEFINE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent);
@@ -2818,7 +2822,11 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
                         keyCode == WXK_UP ||
                         keyCode == WXK_DOWN) {
                         if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+                            post_event(wxKeyEvent(EVT_GLCANVAS_MOVE_SLIDERS, evt));
+#else
                             post_event(wxKeyEvent(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, evt));
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
                     }
                 }
             }
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 7f44901d1..a40f1b98d 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -103,7 +103,11 @@ wxDECLARE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent);
 wxDECLARE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
 wxDECLARE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
 wxDECLARE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent);
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+wxDECLARE_EVENT(EVT_GLCANVAS_MOVE_SLIDERS, wxKeyEvent);
+#else
 wxDECLARE_EVENT(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, wxKeyEvent);
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
 wxDECLARE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
 wxDECLARE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent);
 wxDECLARE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent);
diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp
index 6d8c18f42..06fc35e0f 100644
--- a/src/slic3r/GUI/GUI_Preview.cpp
+++ b/src/slic3r/GUI/GUI_Preview.cpp
@@ -460,6 +460,13 @@ void Preview::unbind_event_handlers()
     m_moves_slider->Unbind(wxEVT_SCROLL_CHANGED, &Preview::on_moves_slider_scroll_changed, this);
 }
 
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+void Preview::move_moves_slider(wxKeyEvent& evt)
+{
+    if (m_moves_slider != nullptr) m_moves_slider->OnKeyDown(evt);
+}
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
+
 void Preview::hide_layers_slider()
 {
     m_layers_slider_sizer->Hide((size_t)0);
@@ -765,12 +772,26 @@ void Preview::update_layers_slider_from_canvas(wxKeyEvent& event)
 
     const auto key = event.GetKeyCode();
 
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+    if (key == 'S' || key == 'W') {
+        const int new_pos = key == 'W' ? m_layers_slider->GetHigherValue() + 1 : m_layers_slider->GetHigherValue() - 1;
+#else
     if (key == 'U' || key == 'D') {
         const int new_pos = key == 'U' ? m_layers_slider->GetHigherValue() + 1 : m_layers_slider->GetHigherValue() - 1;
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
         m_layers_slider->SetHigherValue(new_pos);
         if (event.ShiftDown() || m_layers_slider->is_one_layer()) m_layers_slider->SetLowerValue(m_layers_slider->GetHigherValue());
     }
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+    else if (key == 'A' || key == 'D') {
+        const int new_pos = key == 'D' ? m_moves_slider->GetHigherValue() + 1 : m_moves_slider->GetHigherValue() - 1;
+        m_moves_slider->SetHigherValue(new_pos);
+        if (event.ShiftDown() || m_moves_slider->is_one_layer()) m_moves_slider->SetLowerValue(m_moves_slider->GetHigherValue());
+    }
+    else if (key == 'X')
+#else
     else if (key == 'S')
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
         m_layers_slider->ChangeOneLayerLock();
     else if (key == WXK_SHIFT)
         m_layers_slider->UseDefaultColors(false);
diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp
index daa92d0b2..5c4083853 100644
--- a/src/slic3r/GUI/GUI_Preview.hpp
+++ b/src/slic3r/GUI/GUI_Preview.hpp
@@ -157,6 +157,9 @@ public:
     void update_bottom_toolbar();
     void update_moves_slider();
     void enable_moves_slider(bool enable);
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+    void move_moves_slider(wxKeyEvent& evt);
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
     void hide_layers_slider();
 
 private:
diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp
index 53ae8f66c..21fe6a747 100644
--- a/src/slic3r/GUI/KBShortcutsDialog.cpp
+++ b/src/slic3r/GUI/KBShortcutsDialog.cpp
@@ -203,22 +203,48 @@ void KBShortcutsDialog::fill_shortcuts()
     }
 
     Shortcuts preview_shortcuts = {
-        { L("Arrow Up"), L("Upper Layer") },
-        { L("Arrow Down"), L("Lower Layer") },
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+        { L("Arrow Up"), L("Move vertical slider current thumb Up") },
+        { L("Arrow Down"), L("Move vertical slider current thumb Down") },
+        { L("Arrow Left"), L("Move horizontal slider current thumb Left") },
+        { L("Arrow Right"), L("Move horizontal slider current thumb Right") },
+        { "W", L("Move vertical slider current thumb Up") },
+        { "S", L("Move vertical slider current thumb Down") },
+        { "A", L("Move horizontal slider current thumb Left") },
+        { "D", L("Move horizontal slider current thumb Right") },
+        { "O", L("Toggle vertical slider one layer mode ON/OFF") },
+        { "L", L("Show/Hide Legend and Estimated printing time") },
+#else
+        { L("Arrow Up"), L("Upper layer") },
+        { L("Arrow Down"), L("Lower layer") },
         { "U", L("Upper Layer") },
         { "D", L("Lower Layer") },
         { "L", L("Show/Hide Legend & Estimated printing time") },
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
     };
 
     m_full_shortcuts.push_back(std::make_pair(_L("Preview"), preview_shortcuts));
 
     Shortcuts layers_slider_shortcuts = {
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+        { L("Arrow Up"), L("Vertical slider - Move current thumb Up") },
+        { L("Arrow Down"), L("Vertical slider - Move current thumb Down") },
+        { L("Arrow Left"), L("Vertical slider - Set upper thumb to current thumb") },
+        { L("Arrow Right"), L("Vertical slider - Set lower thumb to current thumb") },
+        { "+", L("Vertical slider - Add color change marker for current layer") },
+        { "-", L("Vertical slider - Delete color change marker for current layer") },
+        { L("Arrow Up"), L("Horizontal slider - Set left thumb to current thumb") },
+        { L("Arrow Down"), L("Horizontal slider - Set right thumb to current thumb") },
+        { L("Arrow Left"), L("Horizontal slider - Move current thumb Left") },
+        { L("Arrow Right"), L("Horizontal slider - Move current thumb Right") },
+#else
         { L("Arrow Up"), L("Move current slider thumb Up") },
         { L("Arrow Down"), L("Move current slider thumb Down") },
         { L("Arrow Left"), L("Set upper thumb to current slider thumb") },
         { L("Arrow Right"), L("Set lower thumb to current slider thumb") },
         { "+", L("Add color change marker for current layer") },
         { "-", L("Delete color change marker for current layer") },
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
         { "Shift+", L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") },
         { ctrl, L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") },
     };
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 6709800ff..fd0245caa 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -2055,7 +2055,14 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
     preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_TAB, [this](SimpleEvent&) { select_next_view_3D(); });
     preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_COLLAPSE_SIDEBAR, [this](SimpleEvent&) { this->q->collapse_sidebar(!this->q->is_sidebar_collapsed());  });
     preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_JUMP_TO, [this](wxKeyEvent& evt) { preview->jump_layers_slider(evt); });
+#if ENABLE_ARROW_KEYS_WITH_SLIDERS
+    preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_MOVE_SLIDERS, [this](wxKeyEvent& evt) {
+        preview->move_layers_slider(evt);
+        preview->move_moves_slider(evt);
+        });
+#else
     preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, [this](wxKeyEvent& evt) { preview->move_layers_slider(evt); });
+#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
     preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_EDIT_COLOR_CHANGE, [this](wxKeyEvent& evt) { preview->edit_layers_slider(evt); });
 
     if (wxGetApp().is_editor()) {