diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp
index c8d1687e1..7c9403382 100644
--- a/src/libslic3r/AppConfig.cpp
+++ b/src/libslic3r/AppConfig.cpp
@@ -117,6 +117,12 @@ void AppConfig::set_defaults()
 
         if (get("use_inches").empty())
             set("use_inches", "0");
+
+        if (get("default_action_on_close_application").empty())
+            set("default_action_on_close_application", "none"); // , "discard" or "save" 
+
+        if (get("default_action_on_select_preset").empty())
+            set("default_action_on_select_preset", "none");     // , "transfer", "discard" or "save" 
     }
 #if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
     else {
@@ -142,11 +148,12 @@ void AppConfig::set_defaults()
     if (get("show_splash_screen").empty())
         set("show_splash_screen", "1");
 
-    if (get("default_action_on_close_application").empty())
-        set("default_action_on_close_application", "none"); // , "discard" or "save" 
-
-    if (get("default_action_on_select_preset").empty())
-        set("default_action_on_select_preset", "none");     // , "transfer", "discard" or "save" 
+#if ENABLE_CTRL_M_ON_WINDOWS
+#ifdef _WIN32
+    if (get("use_legacy_3DConnexion").empty())
+        set("use_legacy_3DConnexion", "0");
+#endif // _WIN32
+#endif // ENABLE_CTRL_M_ON_WINDOWS
 
     // Remove legacy window positions/sizes
     erase("", "main_frame_maximized");
diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 85493d6f1..3e9db414a 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -61,7 +61,7 @@
 //====================
 #define ENABLE_2_3_0_ALPHA3 1
 
-#define ENABLE_CTRL_M_ON_WINDOWS (0 && ENABLE_2_3_0_ALPHA3)
+#define ENABLE_CTRL_M_ON_WINDOWS (1 && ENABLE_2_3_0_ALPHA3)
 
 
 //====================
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index e55c5fa8c..a8221ce69 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -2434,9 +2434,15 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
 #if ENABLE_CTRL_M_ON_WINDOWS
         case WXK_CONTROL_M:
         {
-            Mouse3DController& controller = wxGetApp().plater()->get_mouse3d_controller();
-            controller.show_settings_dialog(!controller.is_settings_dialog_shown());
-            m_dirty = true;
+#ifdef _WIN32
+            if (wxGetApp().app_config->get("use_legacy_3DConnexion") == "1") {
+#endif //_WIN32
+                Mouse3DController& controller = wxGetApp().plater()->get_mouse3d_controller();
+                controller.show_settings_dialog(!controller.is_settings_dialog_shown());
+                m_dirty = true;
+#ifdef _WIN32
+            }
+#endif //_WIN32
             break;
         }
 #else
@@ -3880,26 +3886,26 @@ bool GLCanvas3D::_render_arrange_menu(float pos_x)
     const float x = pos_x * float(wxGetApp().plater()->get_camera().get_zoom()) + 0.5f * canvas_w;
     imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f);
 
-    imgui->begin(_(L("Arrange options")), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
+    imgui->begin(_L("Arrange options"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
     ArrangeSettings settings = m_arrange_settings;
 
     auto &appcfg = wxGetApp().app_config;
 
     bool settings_changed = false;
 
-    if (imgui->slider_float(_(L("Gap size")), &settings.distance, 0.f, 100.f)) {
+    if (imgui->slider_float(_L("Gap size"), &settings.distance, 0.f, 100.f)) {
         m_arrange_settings.distance = settings.distance;
         settings_changed = true;
     }
 
-    if (imgui->checkbox(_(L("Enable rotations (slow)")), settings.enable_rotation)) {
+    if (imgui->checkbox(_L("Enable rotations (slow)"), settings.enable_rotation)) {
         m_arrange_settings.enable_rotation = settings.enable_rotation;
         settings_changed = true;
     }
 
     ImGui::Separator();
 
-    if (imgui->button(_(L("Reset")))) {
+    if (imgui->button(_L("Reset"))) {
         m_arrange_settings = ArrangeSettings{};
         settings_changed = true;
     }
@@ -3911,7 +3917,7 @@ bool GLCanvas3D::_render_arrange_menu(float pos_x)
 
     ImGui::SameLine();
 
-    if (imgui->button(_(L("Arrange")))) {
+    if (imgui->button(_L("Arrange"))) {
         wxGetApp().plater()->arrange();
     }
 
diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp
index 62fb1cec9..608cc7a48 100644
--- a/src/slic3r/GUI/KBShortcutsDialog.cpp
+++ b/src/slic3r/GUI/KBShortcutsDialog.cpp
@@ -171,7 +171,11 @@ void KBShortcutsDialog::fill_shortcuts()
             { "Tab", L("Switch between Editor/Preview") },
             { "Shift+Tab", L("Collapse/Expand the sidebar") },
 #if ENABLE_CTRL_M_ON_WINDOWS
+#ifdef _WIN32
+            { ctrl + "M", L("Show/Hide 3Dconnexion devices settings dialog, if enabled") },
+#else
             { ctrl + "M", L("Show/Hide 3Dconnexion devices settings dialog") },
+#endif // _WIN32
 #else
 #if defined(__linux__) || defined(__APPLE__)
             { ctrl + "M", L("Show/Hide 3Dconnexion devices settings dialog") },
diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp
index 44ccb8b3e..24da199db 100644
--- a/src/slic3r/GUI/Mouse3DController.cpp
+++ b/src/slic3r/GUI/Mouse3DController.cpp
@@ -99,7 +99,7 @@ void Mouse3DController::State::append_button(unsigned int id, size_t /* input_qu
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
 }
 
-#ifdef WIN32
+#ifdef _WIN32
 #if ENABLE_CTRL_M_ON_WINDOWS
 static std::string format_device_string(int vid, int pid)
 {
@@ -319,7 +319,7 @@ bool Mouse3DController::State::process_mouse_wheel()
     m_mouse_wheel_counter = 0;
     return true;
 }
-#endif // WIN32
+#endif // _WIN32
 
 bool Mouse3DController::State::apply(const Mouse3DController::Params &params, Camera& camera)
 {
@@ -700,10 +700,10 @@ void Mouse3DController::shutdown()
 	}
 
 #if ENABLE_CTRL_M_ON_WINDOWS
-#ifdef WIN32
+#ifdef _WIN32
     if (!m_device_str.empty())
         m_params_by_device[m_device_str] = m_params_ui;
-#endif // WIN32
+#endif // _WIN32
 #endif // ENABLE_CTRL_M_ON_WINDOWS
 }
 
diff --git a/src/slic3r/GUI/Mouse3DController.hpp b/src/slic3r/GUI/Mouse3DController.hpp
index 559e0874f..d99cbad1e 100644
--- a/src/slic3r/GUI/Mouse3DController.hpp
+++ b/src/slic3r/GUI/Mouse3DController.hpp
@@ -189,7 +189,7 @@ public:
     bool handle_input(const DataPacketAxis& packet);
 #endif // __APPLE__
 
-#ifdef WIN32
+#ifdef _WIN32
 	bool handle_raw_input_win32(const unsigned char *data, const int packet_lenght);
 
     // Called by Win32 HID enumeration callback.
@@ -202,7 +202,7 @@ public:
     // if the application does not register at the driver. This is a workaround to ignore these superfluous
     // mouse wheel events.
     bool process_mouse_wheel() { return m_state.process_mouse_wheel(); }
-#endif // WIN32
+#endif // _WIN32
 
     // Apply the received 3DConnexion mouse events to the camera. Called from the UI rendering thread.
     bool apply(Camera& camera);
diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp
index 6a1a95b03..a2d65d2d1 100644
--- a/src/slic3r/GUI/Preferences.cpp
+++ b/src/slic3r/GUI/Preferences.cpp
@@ -202,6 +202,17 @@ void PreferencesDialog::build()
 	option = Option(def, "show_splash_screen");
 	m_optgroup_general->append_single_option_line(option);
 
+#if ENABLE_CTRL_M_ON_WINDOWS
+#ifdef _WIN32
+	def.label = L("Enable support for legacy 3DConnexion devices");
+	def.type = coBool;
+	def.tooltip = L("If enabled, the legacy 3DConnexion devices settings dialog is available by pressing CTRL+M");
+	def.set_default_value(new ConfigOptionBool{ app_config->get("use_legacy_3DConnexion") == "1" });
+	option = Option(def, "use_legacy_3DConnexion");
+	m_optgroup_general->append_single_option_line(option);
+#endif // _WIN32
+#endif // ENABLE_CTRL_M_ON_WINDOWS
+
 	m_optgroup_general->activate();
 
 	m_optgroup_camera = std::make_shared<ConfigOptionsGroup>(this, _L("Camera"));