diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 7067e0f8d..36bbb273f 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1530,7 +1530,7 @@ bool GLCanvas3D::init()
     if (m_initialized)
         return true;
 
-    if ((m_canvas == nullptr) || (m_context == nullptr))
+    if (m_canvas == nullptr || m_context == nullptr)
         return false;
 
     glsafe(::glClearColor(1.0f, 1.0f, 1.0f, 1.0f));
@@ -1580,8 +1580,7 @@ bool GLCanvas3D::init()
         m_layers_editing.init();
 
 #if ENABLE_GCODE_VIEWER
-    if (!m_main_toolbar.is_enabled())
-    {
+    if (!m_main_toolbar.is_enabled()) {
         if (!m_gcode_viewer.init())
             return false;
     }
@@ -5128,7 +5127,7 @@ bool GLCanvas3D::_set_current()
 
 void GLCanvas3D::_resize(unsigned int w, unsigned int h)
 {
-    if ((m_canvas == nullptr) && (m_context == nullptr))
+    if (m_canvas == nullptr && m_context == nullptr)
         return;
 
     auto *imgui = wxGetApp().imgui();
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 4c0ae7124..6e6778883 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -647,8 +647,8 @@ void GUI_App::init_app_config()
 #endif // ENABLE_GCODE_VIEWER
 
 	// load settings
-	app_conf_exists = app_config->exists();
-	if (app_conf_exists) {
+	m_app_conf_exists = app_config->exists();
+	if (m_app_conf_exists) {
         std::string error = app_config->load();
 #if ENABLE_GCODE_APP_CONFIG
         if (!error.empty()) {
@@ -1079,6 +1079,10 @@ void GUI_App::check_printer_presets()
 
 void GUI_App::recreate_GUI(const wxString& msg_name)
 {
+#if ENABLE_GCODE_APP_CONFIG
+    m_is_recreating_gui = true;
+#endif // ENABLE_GCODE_APP_CONFIG
+
     mainframe->shutdown();
 
     wxProgressDialog dlg(msg_name, msg_name, 100, nullptr, wxPD_AUTO_HIDE);
@@ -1087,8 +1091,11 @@ void GUI_App::recreate_GUI(const wxString& msg_name)
 
     MainFrame *old_main_frame = mainframe;
     mainframe = new MainFrame();
-    // hide settings tabs after first Layout
-    mainframe->select_tab(size_t(0));
+#if ENABLE_GCODE_APP_CONFIG
+    if (is_editor())
+#endif // ENABLE_GCODE_APP_CONFIG
+        // hide settings tabs after first Layout
+        mainframe->select_tab(size_t(0));
     // Propagate model objects to object list.
     sidebar().obj_list()->init_objects();
     SetTopWindow(mainframe);
@@ -1118,6 +1125,10 @@ void GUI_App::recreate_GUI(const wxString& msg_name)
 //         // Run the config wizard, don't offer the "reset user profile" checkbox.
 //         config_wizard_startup(true);
 //     });
+
+#if ENABLE_GCODE_APP_CONFIG
+    m_is_recreating_gui = false;
+#endif // ENABLE_GCODE_APP_CONFIG
 }
 
 void GUI_App::system_info()
@@ -1487,8 +1498,14 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
         Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { if (get_mode() == comExpert) evt.Check(true); }, config_id_base + ConfigMenuModeExpert);
 
         local_menu->AppendSubMenu(mode_menu, _L("Mode"), wxString::Format(_L("%s View Mode"), SLIC3R_APP_NAME));
-        local_menu->AppendSeparator();
-        local_menu->Append(config_id_base + ConfigMenuLanguage, _L("&Language"));
+#if ENABLE_GCODE_APP_CONFIG
+    }
+#endif // ENABLE_GCODE_APP_CONFIG
+    local_menu->AppendSeparator();
+    local_menu->Append(config_id_base + ConfigMenuLanguage, _L("&Language"));
+#if ENABLE_GCODE_APP_CONFIG
+    if (is_editor()) {
+#endif // ENABLE_GCODE_APP_CONFIG
         local_menu->AppendSeparator();
         local_menu->Append(config_id_base + ConfigMenuFlashFirmware, _L("Flash printer &firmware"), _L("Upload a firmware image into an Arduino based printer"));
         // TODO: for when we're able to flash dictionaries
@@ -1567,11 +1584,19 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
                 // the dialog needs to be destroyed before the call to switch_language()
                 // or sometimes the application crashes into wxDialogBase() destructor
                 // so we put it into an inner scope
+#if ENABLE_GCODE_APP_CONFIG
+                wxString title = is_editor() ? wxString(SLIC3R_APP_NAME) : wxString(GCODEVIEWER_APP_NAME);
+                title += " - " + _L("Language selection");
+#endif // ENABLE_GCODE_APP_CONFIG
                 wxMessageDialog dialog(nullptr,
                     _L("Switching the language will trigger application restart.\n"
                         "You will lose content of the plater.") + "\n\n" +
                     _L("Do you want to proceed?"),
+#if ENABLE_GCODE_APP_CONFIG
+                    title,
+#else
                     wxString(SLIC3R_APP_NAME) + " - " + _L("Language selection"),
+#endif // ENABLE_GCODE_APP_CONFIG
                     wxICON_QUESTION | wxOK | wxCANCEL);
                 if (dialog.ShowModal() == wxID_CANCEL)
                     return;
@@ -1948,7 +1973,7 @@ void GUI_App::window_pos_sanitize(wxTopLevelWindow* window)
 
 bool GUI_App::config_wizard_startup()
 {
-    if (!app_conf_exists || preset_bundle->printers.size() <= 1) {
+    if (!m_app_conf_exists || preset_bundle->printers.size() <= 1) {
         run_wizard(ConfigWizard::RR_DATA_EMPTY);
         return true;
     } else if (get_app_config()->legacy_datadir()) {
@@ -1965,8 +1990,7 @@ bool GUI_App::config_wizard_startup()
 }
 
 void GUI_App::check_updates(const bool verbose)
-{
-	
+{	
 	PresetUpdater::UpdateResult updater_result;
 	try {
 		updater_result = preset_updater->config_update(app_config->orig_version(), verbose);
@@ -1974,10 +1998,9 @@ void GUI_App::check_updates(const bool verbose)
 			mainframe->Close();
 		}
 		else if (updater_result == PresetUpdater::R_INCOMPAT_CONFIGURED) {
-			app_conf_exists = true;
+            m_app_conf_exists = true;
 		}
-		else if(verbose && updater_result == PresetUpdater::R_NOOP)
-		{
+		else if (verbose && updater_result == PresetUpdater::R_NOOP) {
 			MsgNoUpdates dlg;
 			dlg.ShowModal();
 		}
@@ -1985,9 +2008,8 @@ void GUI_App::check_updates(const bool verbose)
 	catch (const std::exception & ex) {
 		show_error(nullptr, ex.what());
 	}
-
-	
 }
+
 // static method accepting a wxWindow object as first parameter
 // void warning_catcher{
 //     my($self, $message_dialog) = @_;
diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp
index 113d8d756..74496ca54 100644
--- a/src/slic3r/GUI/GUI_App.hpp
+++ b/src/slic3r/GUI/GUI_App.hpp
@@ -106,9 +106,12 @@ private:
 #endif // ENABLE_GCODE_VIEWER
 
     bool            m_initialized { false };
-    bool            app_conf_exists{ false };
+    bool            m_app_conf_exists{ false };
 #if ENABLE_GCODE_VIEWER
     EAppMode        m_app_mode{ EAppMode::Editor };
+#if ENABLE_GCODE_APP_CONFIG
+    bool            m_is_recreating_gui{ false };
+#endif // ENABLE_GCODE_APP_CONFIG
 #endif // ENABLE_GCODE_VIEWER
 
     wxColour        m_color_label_modified;
@@ -184,6 +187,9 @@ public:
     EAppMode get_app_mode() const { return m_app_mode; }
     bool is_editor() const { return m_app_mode == EAppMode::Editor; }
     bool is_gcode_viewer() const { return m_app_mode == EAppMode::GCodeViewer; }
+#if ENABLE_GCODE_APP_CONFIG
+    bool is_recreating_gui() const { return m_is_recreating_gui; }
+#endif // ENABLE_GCODE_APP_CONFIG
 #endif // ENABLE_GCODE_VIEWER
 
     static std::string get_gl_info(bool format_as_html, bool extensions);
diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp
index 2890e2363..ec550513e 100644
--- a/src/slic3r/GUI/GUI_Preview.cpp
+++ b/src/slic3r/GUI/GUI_Preview.cpp
@@ -1212,8 +1212,12 @@ void Preview::update_double_slider_from_canvas(wxKeyEvent & event)
 void Preview::load_print_as_fff(bool keep_z_range)
 {
 #if ENABLE_GCODE_VIEWER
+#if ENABLE_GCODE_APP_CONFIG
+    if (wxGetApp().mainframe == nullptr || wxGetApp().is_recreating_gui())
+#else
     if (wxGetApp().mainframe == nullptr)
-        // avoid proessing while mainframe is being constructed
+#endif // ENABLE_GCODE_APP_CONFIG
+        // avoid processing while mainframe is being constructed
         return;
 #endif // ENABLE_GCODE_VIEWER
 
diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp
index 2dc6307a2..1448e0363 100644
--- a/src/slic3r/GUI/MainFrame.cpp
+++ b/src/slic3r/GUI/MainFrame.cpp
@@ -203,10 +203,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
     sizer->Add(m_main_sizer, 1, wxEXPAND);
     SetSizer(sizer);
     // initialize layout from config
-#if ENABLE_GCODE_VIEWER
-    if (wxGetApp().is_editor())
-#endif // ENABLE_GCODE_VIEWER
-        update_layout();
+    update_layout();
     sizer->SetSizeHints(this);
     Fit();
 
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index e14b36c0d..c28df81d8 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -5418,7 +5418,7 @@ void Plater::on_config_change(const DynamicPrintConfig &config)
             p->reset_gcode_toolpaths();
 #endif // ENABLE_GCODE_VIEWER
         }
-        else if ((opt_key == "bed_shape") || (opt_key == "bed_custom_texture") || (opt_key == "bed_custom_model")) {
+        else if (opt_key == "bed_shape" || opt_key == "bed_custom_texture" || opt_key == "bed_custom_model") {
             bed_shape_changed = true;
             update_scheduled = true;
         }