diff --git a/resources/icons/PrusaSlicer.icns b/resources/icons/PrusaSlicer.icns
index 2364b6c13..051477dc3 100644
Binary files a/resources/icons/PrusaSlicer.icns and b/resources/icons/PrusaSlicer.icns differ
diff --git a/src/libslic3r/GCode/WipeTowerPrusaMM.cpp b/src/libslic3r/GCode/WipeTowerPrusaMM.cpp
index 34065a491..edfe475b5 100644
--- a/src/libslic3r/GCode/WipeTowerPrusaMM.cpp
+++ b/src/libslic3r/GCode/WipeTowerPrusaMM.cpp
@@ -474,6 +474,8 @@ WipeTowerPrusaMM::material_type WipeTowerPrusaMM::parse_material(const char *nam
 		return NGEN;
 	if (strcasecmp(name, "PVA") == 0)
 		return PVA;
+	if (strcasecmp(name, "PC") == 0)
+		return PC;
 	return INVALID;
 }
 
@@ -489,6 +491,7 @@ std::string WipeTowerPrusaMM::to_string(material_type material)
 	case EDGE:		return "EDGE";
 	case NGEN:		return "NGEN";
 	case PVA:		return "PVA";
+	case PC:		return "PC";
 	case INVALID: 	
 	default: 		return "INVALID";
 	}
diff --git a/src/libslic3r/GCode/WipeTowerPrusaMM.hpp b/src/libslic3r/GCode/WipeTowerPrusaMM.hpp
index 90f50b57a..f8adf4c5f 100644
--- a/src/libslic3r/GCode/WipeTowerPrusaMM.hpp
+++ b/src/libslic3r/GCode/WipeTowerPrusaMM.hpp
@@ -34,7 +34,8 @@ public:
 		SCAFF = 5,		// E:215C	B:55C
 		EDGE  = 6,		// E:240C	B:80C
 		NGEN  = 7,		// E:230C	B:80C
-		PVA   = 8	    // E:210C	B:80C
+		PVA   = 8,	    // E:210C	B:80C
+		PC    = 9
 	};
 
 	// Parse material name into material_type.
diff --git a/src/libslic3r/PrintBase.cpp b/src/libslic3r/PrintBase.cpp
index 3fe9a2b4d..412aae338 100644
--- a/src/libslic3r/PrintBase.cpp
+++ b/src/libslic3r/PrintBase.cpp
@@ -57,8 +57,10 @@ std::string PrintBase::output_filename(const std::string &format, const std::str
     PlaceholderParser::update_timestamp(cfg);
     this->update_object_placeholders(cfg);
     try {
-        boost::filesystem::path filename = this->placeholder_parser().process(format, 0, &cfg);
-        if (filename.extension().empty())
+		boost::filesystem::path filename = format.empty() ?
+			cfg.opt_string("input_filename_base") + "." + default_ext :
+			this->placeholder_parser().process(format, 0, &cfg);
+		if (filename.extension().empty())
         	filename = boost::filesystem::change_extension(filename, default_ext);
         return filename.string();
     } catch (std::runtime_error &err) {
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 8140177b3..87ea26301 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -699,12 +699,22 @@ void PrintConfigDef::init_fff_params()
     def->enum_values.push_back("PLA");
     def->enum_values.push_back("ABS");
     def->enum_values.push_back("PET");
-    def->enum_values.push_back("HIPS");
     def->enum_values.push_back("FLEX");
-    def->enum_values.push_back("SCAFF");
+    def->enum_values.push_back("HIPS");
     def->enum_values.push_back("EDGE");
     def->enum_values.push_back("NGEN");
+    def->enum_values.push_back("NYLON");
     def->enum_values.push_back("PVA");
+    def->enum_values.push_back("PC");
+    def->enum_values.push_back("PP");
+    def->enum_values.push_back("PEI");
+    def->enum_values.push_back("PEEK");
+    def->enum_values.push_back("PEKK");
+    def->enum_values.push_back("POM");
+    def->enum_values.push_back("PSU");
+    def->enum_values.push_back("PVDF");
+    def->enum_values.push_back("SCAFF");
+
     def->mode = comAdvanced;
     def->set_default_value(new ConfigOptionStrings { "PLA" });
 
@@ -1323,7 +1333,7 @@ void PrintConfigDef::init_fff_params()
                    "[input_filename_base].");
     def->full_width = true;
     def->mode = comExpert;
-    def->set_default_value(new ConfigOptionString("[input_filename_base]"));
+    def->set_default_value(new ConfigOptionString("[input_filename_base].gcode"));
 
     def = this->add("overhangs", coBool);
     def->label = L("Detect bridging perimeters");
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index d4ad1db8c..1da22b377 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -46,9 +46,11 @@ enum SeamPosition {
     spRandom, spNearest, spAligned, spRear
 };
 
+/*
 enum FilamentType {
     ftPLA, ftABS, ftPET, ftHIPS, ftFLEX, ftSCAFF, ftEDGE, ftNGEN, ftPVA
 };
+*/
 
 enum SLADisplayOrientation {
     sladoLandscape,
@@ -137,6 +139,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum<SeamPosition>::ge
     return keys_map;
 }
 
+/*
 template<> inline const t_config_enum_values& ConfigOptionEnum<FilamentType>::get_enum_values() {
     static t_config_enum_values keys_map;
     if (keys_map.empty()) {
@@ -152,6 +155,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum<FilamentType>::ge
     }
     return keys_map;
 }
+*/
 
 template<> inline const t_config_enum_values& ConfigOptionEnum<SLADisplayOrientation>::get_enum_values() {
     static const t_config_enum_values keys_map = {
diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp
index c60732fda..ad58d9482 100644
--- a/src/slic3r/GUI/AboutDialog.cpp
+++ b/src/slic3r/GUI/AboutDialog.cpp
@@ -31,6 +31,165 @@ void AboutDialogLogo::onRepaint(wxEvent &event)
     event.Skip();
 }
 
+
+// -----------------------------------------
+// CopyrightsDialog
+// -----------------------------------------
+CopyrightsDialog::CopyrightsDialog()
+    : DPIDialog(NULL, wxID_ANY, wxString::Format("%s - %s", SLIC3R_APP_NAME, _(L("Portions copyright"))), 
+                wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
+{
+    this->SetFont(wxGetApp().normal_font());
+	this->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
+
+	auto sizer = new wxBoxSizer(wxVERTICAL);
+    
+    fill_entries();
+
+    m_html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, 
+                              wxSize(40 * em_unit(), 20 * em_unit()), wxHW_SCROLLBAR_AUTO);
+
+    wxFont font = GetFont();
+    const int fs = font.GetPointSize();
+    const int fs2 = static_cast<int>(1.2f*fs);
+    int size[] = { fs, fs, fs, fs, fs2, fs2, fs2 };
+
+    m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
+    m_html->SetBorders(2);        
+    m_html->SetPage(get_html_text());
+
+    sizer->Add(m_html, 1, wxEXPAND | wxALL, 15);
+    m_html->Bind(wxEVT_HTML_LINK_CLICKED, &CopyrightsDialog::onLinkClicked, this);
+
+    wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxCLOSE);
+
+    this->SetEscapeId(wxID_CLOSE);
+    this->Bind(wxEVT_BUTTON, &CopyrightsDialog::onCloseDialog, this, wxID_CLOSE);
+    sizer->Add(buttons, 0, wxEXPAND | wxRIGHT | wxBOTTOM, 3);
+
+    SetSizer(sizer);
+    sizer->SetSizeHints(this);
+    
+}
+
+void CopyrightsDialog::fill_entries()
+{
+    m_entries = {
+        { "wxWidgets"       , "2019 wxWidgets"                              , "https://www.wxwidgets.org/" },
+        { "OpenGL"          , "1997-2019 The Khronos� Group Inc"            , "https://www.opengl.org/" },
+        { "GNU gettext"     , "1998, 2019 Free Software Foundation, Inc."   , "https://www.gnu.org/software/gettext/" },
+        { "PoEdit"          , "2019 V�clav Slav�k"                          , "https://poedit.net/" },
+        { "ImGUI"           , "2014-2019 Omar Cornut"                       , "https://github.com/ocornut/imgui" },
+        { "Eigen"           , ""                                            , "http://eigen.tuxfamily.org" },
+        { "ADMesh"          , "1995, 1996  Anthony D. Martin; "
+                              "2015, ADMesh contributors"                   , "https://admesh.readthedocs.io/en/latest/" },
+        { "Anti-Grain Geometry"
+                            , "2002-2005 Maxim Shemanarev (McSeem)"         , "http://antigrain.com" },
+        { "Boost"           , "1998-2005 Beman Dawes, David Abrahams; "
+                              "2004 - 2007 Rene Rivera"                     , "https://www.boost.org/" },
+        { "Clipper"         , "2010-2015 Angus Johnson "                    , "http://www.angusj.com " },
+        { "GLEW (The OpenGL Extension Wrangler Library)", 
+                              "2002 - 2007, Milan Ikits; "
+                              "2002 - 2007, Marcelo E.Magallon; "
+                              "2002, Lev Povalahev"                         , "http://glew.sourceforge.net/" },
+        { "Libigl"          , "2013 Alec Jacobson and others"               , "https://libigl.github.io/" },
+        { "Poly2Tri"        , "2009-2018, Poly2Tri Contributors"            , "https://github.com/jhasse/poly2tri" },
+        { "PolyPartition"   , "2011 Ivan Fratric"                           , "https://github.com/ivanfratric/polypartition" },
+        { "Qhull"           , "1993-2015 C.B.Barber Arlington and "
+                              "University of Minnesota"                     , "http://qhull.org/" },
+        { "SemVer"          , "2015-2017 Tomas Aparicio"                    , "https://semver.org/" },
+        { "Nanosvg"         , "2013-14 Mikko Mononen"                       , "https://github.com/memononen/nanosvg" },
+        { "Miniz"           , "2013-2014 RAD Game Tools and Valve Software; "
+                              "2010-2014 Rich Geldreich and Tenacious Software LLC"
+                                                                            , "https://github.com/richgel999/miniz" },
+        { "Expat"           , "1998-2000 Thai Open Source Software Center Ltd and Clark Cooper"
+                              "2001-2016 Expat maintainers"                 , "http://www.libexpat.org/" },
+        { "AVRDUDE"         , "2018  Free Software Foundation, Inc."        , "http://savannah.nongnu.org/projects/avrdude" },
+        { "Shinyprofiler"   , "2007-2010 Aidin Abedi"                       , "http://code.google.com/p/shinyprofiler/" },
+        { "Icons for STL and GCODE files."
+                            , "Akira Yasuda"                                , "http://3dp0.com/icons-for-stl-and-gcode/" }
+    };
+}
+
+wxString CopyrightsDialog::get_html_text()
+{
+    wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
+
+    const auto text_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
+    const auto text_clr_str = wxString::Format(wxT("#%02X%02X%02X"), text_clr.Red(), text_clr.Green(), text_clr.Blue());
+    const auto bgr_clr_str = wxString::Format(wxT("#%02X%02X%02X"), bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue());
+
+    const wxString copyright_str = _(L("Copyright")) + "&copy; ";
+    // TRN "Slic3r _is licensed under the_ License"
+    const wxString header_str = _(L("License agreements of all following programs (libraries) are part of application license agreement"));
+
+    wxString text = wxString::Format(
+        "<html>"
+            "<body bgcolor= %s link= %s>"
+            "<font color=%s>"
+                "<font size=\"5\">%s.</font>"
+                "<br /><br />"
+                "<font size=\"3\">"
+        , bgr_clr_str, text_clr_str
+        , text_clr_str
+        , header_str);
+
+    for (auto& entry : m_entries) {
+        text += wxString::Format(
+                    "<a href=\"%s\">%s</a><br/>"
+                    , entry.link, entry.lib_name);
+
+        if (!entry.copyright.empty())
+            text += wxString::Format(
+                    "%s %s"
+                    "<br/><br/>"
+                    , copyright_str, entry.copyright);
+    }
+
+    text += wxString(
+                "</font>"
+            "</font>"
+            "</body>"
+        "</html>");
+
+    return text;
+}
+
+void CopyrightsDialog::on_dpi_changed(const wxRect &suggested_rect)
+{
+    const wxFont& font = GetFont();
+    const int fs = font.GetPointSize();
+    const int fs2 = static_cast<int>(1.2f*fs);
+    int font_size[] = { fs, fs, fs, fs, fs2, fs2, fs2 };
+
+    m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), font_size);
+
+    const int& em = em_unit();
+
+    msw_buttons_rescale(this, em, { wxID_CLOSE });
+
+    const wxSize& size = wxSize(40 * em, 20 * em);
+
+    m_html->SetMinSize(size);
+    m_html->Refresh();
+
+    SetMinSize(size);
+    Fit();
+
+    Refresh();
+}
+
+void CopyrightsDialog::onLinkClicked(wxHtmlLinkEvent &event)
+{
+    wxLaunchDefaultBrowser(event.GetLinkInfo().GetHref());
+    event.Skip(false);
+}
+
+void CopyrightsDialog::onCloseDialog(wxEvent &)
+{
+     this->EndModal(wxID_CLOSE);
+}
+
 AboutDialog::AboutDialog()
     : DPIDialog(NULL, wxID_ANY, wxString::Format(_(L("About %s")), SLIC3R_APP_NAME), wxDefaultPosition, 
                 wxDefaultSize, /*wxCAPTION*/wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
@@ -119,8 +278,15 @@ AboutDialog::AboutDialog()
         vsizer->Add(m_html, 1, wxEXPAND | wxBOTTOM, 10);
         m_html->Bind(wxEVT_HTML_LINK_CLICKED, &AboutDialog::onLinkClicked, this);
     }
-    
+
+
     wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxCLOSE);
+
+    m_copy_rights_btn_id = NewControlId();
+    auto copy_rights_btn = new wxButton(this, m_copy_rights_btn_id, _(L("Portions copyright"))+dots);
+    buttons->Insert(0, copy_rights_btn, 0, wxLEFT, 5);
+    copy_rights_btn->Bind(wxEVT_BUTTON, &AboutDialog::onCopyrightBtn, this);
+    
     this->SetEscapeId(wxID_CLOSE);
     this->Bind(wxEVT_BUTTON, &AboutDialog::onCloseDialog, this, wxID_CLOSE);
     vsizer->Add(buttons, 0, wxEXPAND | wxRIGHT | wxBOTTOM, 3);
@@ -141,7 +307,7 @@ void AboutDialog::on_dpi_changed(const wxRect &suggested_rect)
 
     const int& em = em_unit();
 
-    msw_buttons_rescale(this, em, { wxID_CLOSE });
+    msw_buttons_rescale(this, em, { wxID_CLOSE, m_copy_rights_btn_id });
 
     m_html->SetMinSize(wxSize(-1, 16 * em));
     m_html->Refresh();
@@ -163,7 +329,12 @@ void AboutDialog::onLinkClicked(wxHtmlLinkEvent &event)
 void AboutDialog::onCloseDialog(wxEvent &)
 {
     this->EndModal(wxID_CLOSE);
-    this->Close();
+}
+
+void AboutDialog::onCopyrightBtn(wxEvent &)
+{
+    CopyrightsDialog dlg;
+    dlg.ShowModal();
 }
 
 } // namespace GUI
diff --git a/src/slic3r/GUI/AboutDialog.hpp b/src/slic3r/GUI/AboutDialog.hpp
index 7019b21f6..5fec21495 100644
--- a/src/slic3r/GUI/AboutDialog.hpp
+++ b/src/slic3r/GUI/AboutDialog.hpp
@@ -23,11 +23,45 @@ private:
     void onRepaint(wxEvent &event);
 };
 
+
+
+class CopyrightsDialog : public DPIDialog
+{
+public:
+    CopyrightsDialog();
+    ~CopyrightsDialog() {}
+
+    struct Entry {
+        Entry(const std::string &lib_name, const std::string &copyright, const std::string &link) : 
+            lib_name(lib_name), copyright(copyright), link(link) {}
+
+        std::string     lib_name;
+        std::string     copyright;
+        std::string   	link;
+    };
+
+protected:
+    void on_dpi_changed(const wxRect &suggested_rect) override;
+    
+private:
+    wxHtmlWindow*   m_html;
+    std::vector<Entry> m_entries;
+
+    void onLinkClicked(wxHtmlLinkEvent &event);
+    void onCloseDialog(wxEvent &);
+
+    void fill_entries();
+    wxString get_html_text();
+};
+
+
+
 class AboutDialog : public DPIDialog
 {
     ScalableBitmap  m_logo_bitmap;
     wxHtmlWindow*   m_html;
     wxStaticBitmap* m_logo;
+    int             m_copy_rights_btn_id { wxID_ANY };
 public:
     AboutDialog();
 
@@ -37,6 +71,7 @@ protected:
 private:
     void onLinkClicked(wxHtmlLinkEvent &event);
     void onCloseDialog(wxEvent &);
+    void onCopyrightBtn(wxEvent &);
 };
 
 } // namespace GUI
diff --git a/src/slic3r/GUI/AppConfig.cpp b/src/slic3r/GUI/AppConfig.cpp
index ac7c8d46e..4b7f5d863 100644
--- a/src/slic3r/GUI/AppConfig.cpp
+++ b/src/slic3r/GUI/AppConfig.cpp
@@ -22,7 +22,7 @@ namespace Slic3r {
 
 static const std::string VENDOR_PREFIX = "vendor:";
 static const std::string MODEL_PREFIX = "model:";
-static const std::string VERSION_CHECK_URL = "https://raw.githubusercontent.com/prusa3d/PrusaSlicer-settings/master/live/PrusaSlicer.version";
+static const std::string VERSION_CHECK_URL = "http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaSlicer.version";
 
 void AppConfig::reset()
 {
diff --git a/src/slic3r/GUI/ConfigSnapshotDialog.cpp b/src/slic3r/GUI/ConfigSnapshotDialog.cpp
index f905941f3..59ed38412 100644
--- a/src/slic3r/GUI/ConfigSnapshotDialog.cpp
+++ b/src/slic3r/GUI/ConfigSnapshotDialog.cpp
@@ -159,13 +159,11 @@ void ConfigSnapshotDialog::onLinkClicked(wxHtmlLinkEvent &event)
 {
     m_snapshot_to_activate = event.GetLinkInfo().GetHref();
     this->EndModal(wxID_CLOSE);
-    this->Close();
 }
 
 void ConfigSnapshotDialog::onCloseDialog(wxEvent &)
 {
     this->EndModal(wxID_CLOSE);
-    this->Close();
 }
 
 } // namespace GUI
diff --git a/src/slic3r/GUI/FirmwareDialog.cpp b/src/slic3r/GUI/FirmwareDialog.cpp
index a9969802f..b400e27ea 100644
--- a/src/slic3r/GUI/FirmwareDialog.cpp
+++ b/src/slic3r/GUI/FirmwareDialog.cpp
@@ -723,10 +723,10 @@ void FirmwareDialog::priv::ensure_joined()
 const char* FirmwareDialog::priv::avr109_dev_name(Avr109Pid usb_pid) {
 	switch (usb_pid.boot) {
 		case USB_PID_MMU_BOOT:
-			return "Prusa MMU 2.0 Control";
+			return "Original Prusa MMU 2.0 Control";
 		break;
 		case USB_PID_CW1_BOOT:
-			return "Prusa CurWa";
+			return "Original Prusa CW1";
 		break;
 
 		default: throw std::runtime_error((boost::format("Invalid avr109 device USB PID: %1%") % usb_pid.boot).str());
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index cb8a459af..ff821d3c9 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -183,9 +183,8 @@ bool GUI_App::on_init_inner()
     // supplied as argument to --datadir; in that case we should still run the wizard
     preset_bundle->setup_directories();
 
-    app_conf_exists = app_config->exists();
     // load settings
-    if (app_conf_exists)
+    if (app_config->exists())
         app_config->load();
     app_config->set("version", SLIC3R_VERSION);
     app_config->save();
@@ -258,7 +257,7 @@ bool GUI_App::on_init_inner()
             }
 
             CallAfter([this] {
-                if (!config_wizard_startup(app_conf_exists)) {
+                if (!config_wizard_startup(app_config->exists())) {
                     // Only notify if there was no wizard so as not to bother too much ...
                     preset_updater->slic3r_update_notify();
                 }
@@ -442,14 +441,12 @@ void GUI_App::system_info()
 {
     SysInfoDialog dlg;
     dlg.ShowModal();
-    dlg.Destroy();
 }
 
 void GUI_App::keyboard_shortcuts()
 {
     KBShortcutsDialog dlg;
     dlg.ShowModal();
-    dlg.Destroy();
 }
 
 // static method accepting a wxWindow object as first parameter
@@ -1000,7 +997,7 @@ void GUI_App::associate_3mf_files()
 {
     // see as reference: https://stackoverflow.com/questions/20245262/c-program-needs-an-file-association
 
-    auto reg_set = [](HKEY hkeyHive, const wchar_t* pszVar, const wchar_t* pszValue)
+    auto reg_set = [](HKEY hkeyHive, const wchar_t* pszVar, const wchar_t* pszValue)->bool
     {
         wchar_t szValueCurrent[1000];
         DWORD dwType;
@@ -1012,26 +1009,32 @@ void GUI_App::associate_3mf_files()
 
         if ((iRC != ERROR_SUCCESS) && !bDidntExist)
             // an error occurred
-            return;
+            return false;
 
         if (!bDidntExist)
         {
             if (dwType != REG_SZ)
                 // invalid type
-                return;
+                return false;
 
             if (::wcscmp(szValueCurrent, pszValue) == 0)
                 // value already set
-                return;
+                return false;
         }
 
         DWORD dwDisposition;
         HKEY hkey;
         iRC = ::RegCreateKeyExW(hkeyHive, pszVar, 0, 0, 0, KEY_ALL_ACCESS, nullptr, &hkey, &dwDisposition);
+        bool ret = false;
         if (iRC == ERROR_SUCCESS)
+        {
             iRC = ::RegSetValueExW(hkey, L"", 0, REG_SZ, (BYTE*)pszValue, (::wcslen(pszValue) + 1) * sizeof(wchar_t));
+            if (iRC == ERROR_SUCCESS)
+                ret = true;
+        }
 
         RegCloseKey(hkey);
+        return ret;
     };
 
     wchar_t app_path[MAX_PATH];
@@ -1046,11 +1049,14 @@ void GUI_App::associate_3mf_files()
     std::wstring reg_prog_id = reg_base + L"\\" + prog_id;
     std::wstring reg_prog_id_command = reg_prog_id + L"\\Shell\\Open\\Command";
 
-    reg_set(HKEY_CURRENT_USER, reg_extension.c_str(), prog_id.c_str());
-    reg_set(HKEY_CURRENT_USER, reg_prog_id.c_str(), prog_desc.c_str());
-    reg_set(HKEY_CURRENT_USER, reg_prog_id_command.c_str(), prog_command.c_str());
+    bool is_new = false;
+    is_new |= reg_set(HKEY_CURRENT_USER, reg_extension.c_str(), prog_id.c_str());
+    is_new |= reg_set(HKEY_CURRENT_USER, reg_prog_id.c_str(), prog_desc.c_str());
+    is_new |= reg_set(HKEY_CURRENT_USER, reg_prog_id_command.c_str(), prog_command.c_str());
 
-    ::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nullptr, nullptr);
+    if (is_new)
+        // notify Windows only when any of the values gets changed
+        ::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nullptr, nullptr);
 }
 #endif // __WXMSW__
 
diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp
index 1c9a462c6..68f8d86df 100644
--- a/src/slic3r/GUI/GUI_App.hpp
+++ b/src/slic3r/GUI/GUI_App.hpp
@@ -72,7 +72,6 @@ static wxString dots("…", wxConvUTF8);
 class GUI_App : public wxApp
 {
     bool            m_initialized { false };
-    bool            app_conf_exists{ false };
 
     wxColour        m_color_label_modified;
     wxColour        m_color_label_sys;
diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp
index c9228d085..d28b921d9 100644
--- a/src/slic3r/GUI/GUI_Preview.cpp
+++ b/src/slic3r/GUI/GUI_Preview.cpp
@@ -533,6 +533,7 @@ void Preview::create_double_slider()
 
     m_slider->Bind(wxEVT_SCROLL_CHANGED, &Preview::on_sliders_scroll_changed, this);
 
+
     Bind(wxCUSTOMEVT_TICKSCHANGED, [this](wxEvent&) {
             auto& config = wxGetApp().preset_bundle->project_config;
             ((config.option<ConfigOptionFloats>("colorprint_heights"))->values) = (m_slider->GetTicksValues());
@@ -823,7 +824,7 @@ void Preview::load_print_as_sla()
     }
 }
 
-void Preview::on_sliders_scroll_changed(wxEvent& event)
+void Preview::on_sliders_scroll_changed(wxCommandEvent& event)
 {
     if (IsShown())
     {
@@ -831,7 +832,7 @@ void Preview::on_sliders_scroll_changed(wxEvent& event)
         if (tech == ptFFF)
         {
             m_canvas->set_toolpaths_range(m_slider->GetLowerValueD() - 1e-6, m_slider->GetHigherValueD() + 1e-6);
-            m_canvas_widget->Refresh();
+            m_canvas->render();
             m_canvas->set_use_clipping_planes(false);
         }
         else if (tech == ptSLA)
@@ -839,10 +840,11 @@ void Preview::on_sliders_scroll_changed(wxEvent& event)
             m_canvas->set_clipping_plane(0, ClippingPlane(Vec3d::UnitZ(), -m_slider->GetLowerValueD()));
             m_canvas->set_clipping_plane(1, ClippingPlane(-Vec3d::UnitZ(), m_slider->GetHigherValueD()));
             m_canvas->set_use_clipping_planes(m_slider->GetHigherValue() != 0);
-            m_canvas_widget->Refresh();
+            m_canvas->render();
         }
     }
 }
 
+
 } // namespace GUI
 } // namespace Slic3r
diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp
index b70d01fa4..1838082c3 100644
--- a/src/slic3r/GUI/GUI_Preview.hpp
+++ b/src/slic3r/GUI/GUI_Preview.hpp
@@ -154,7 +154,7 @@ private:
     void load_print_as_fff(bool keep_z_range = false);
     void load_print_as_sla();
 
-    void on_sliders_scroll_changed(wxEvent& event);
+    void on_sliders_scroll_changed(wxCommandEvent& event);
 
 };
 
diff --git a/src/slic3r/GUI/GUI_Utils.cpp b/src/slic3r/GUI/GUI_Utils.cpp
index 754e69351..74e70c554 100644
--- a/src/slic3r/GUI/GUI_Utils.cpp
+++ b/src/slic3r/GUI/GUI_Utils.cpp
@@ -12,6 +12,8 @@
 #include <wx/sizer.h>
 #include <wx/checkbox.h>
 #include <wx/dcclient.h>
+#include <wx/font.h>
+#include <wx/fontutil.h>
 
 #include "libslic3r/Config.hpp"
 
@@ -113,6 +115,32 @@ int get_dpi_for_window(wxWindow *window)
 #endif
 }
 
+wxFont get_default_font_for_dpi(int dpi)
+{
+#ifdef _WIN32
+    // First try to load the font with the Windows 10 specific way.
+    struct SystemParametersInfoForDpi_t { typedef BOOL (WINAPI *FN)(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni, UINT dpi); };
+    static auto SystemParametersInfoForDpi_fn = winapi_get_function<SystemParametersInfoForDpi_t>(L"User32.dll", "SystemParametersInfoForDpi");
+    if (SystemParametersInfoForDpi_fn != nullptr) {
+        NONCLIENTMETRICS nm;
+        memset(&nm, 0, sizeof(NONCLIENTMETRICS));
+        nm.cbSize = sizeof(NONCLIENTMETRICS);
+		if (SystemParametersInfoForDpi_fn(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &nm, 0, dpi)) {
+            wxNativeFontInfo info;
+            info.lf = nm.lfMessageFont;
+            return wxFont(info);
+        }
+    }
+    // Then try to guesstimate the font DPI scaling on Windows 8.
+    // Let's hope that the font returned by the SystemParametersInfo(), which is used by wxWidgets internally, makes sense.
+    int dpi_primary = get_dpi_for_window(nullptr);
+    if (dpi_primary != dpi) {
+        // Rescale the font.
+        return wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).Scaled(float(dpi) / float(dpi_primary));
+    }
+#endif
+    return wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+}
 
 CheckboxFileDialog::ExtraPanel::ExtraPanel(wxWindow *parent)
     : wxPanel(parent, wxID_ANY)
diff --git a/src/slic3r/GUI/GUI_Utils.hpp b/src/slic3r/GUI/GUI_Utils.hpp
index 9577cebf4..a17bbf6d3 100644
--- a/src/slic3r/GUI/GUI_Utils.hpp
+++ b/src/slic3r/GUI/GUI_Utils.hpp
@@ -34,6 +34,7 @@ void on_window_geometry(wxTopLevelWindow *tlw, std::function<void()> callback);
 enum { DPI_DEFAULT = 96 };
 
 int get_dpi_for_window(wxWindow *window);
+wxFont get_default_font_for_dpi(int dpi);
 
 struct DpiChangedEvent : public wxEvent {
     int dpi;
@@ -58,12 +59,10 @@ public:
         const wxSize &size=wxDefaultSize, long style=wxDEFAULT_FRAME_STYLE, const wxString &name=wxFrameNameStr)
         : P(parent, id, title, pos, size, style, name)
     {
-        m_scale_factor = (float)get_dpi_for_window(this) / (float)DPI_DEFAULT;
+        int dpi = get_dpi_for_window(this);
+        m_scale_factor = (float)dpi / (float)DPI_DEFAULT;
         m_prev_scale_factor = m_scale_factor;
-		float scale_primary_display = (float)get_dpi_for_window(nullptr) / (float)DPI_DEFAULT;
-		m_normal_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
-		if (std::abs(m_scale_factor - scale_primary_display) > 1e-6)
-			m_normal_font = m_normal_font.Scale(m_scale_factor / scale_primary_display);
+		m_normal_font = get_default_font_for_dpi(dpi);
 
         // initialize default width_unit according to the width of the one symbol ("m") of the currently active font of this window.
         m_em_unit = std::max<size_t>(10, this->GetTextExtent("m").x - 1);
diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp
index a7b011013..474521ee7 100644
--- a/src/slic3r/GUI/KBShortcutsDialog.cpp
+++ b/src/slic3r/GUI/KBShortcutsDialog.cpp
@@ -211,7 +211,6 @@ void KBShortcutsDialog::on_dpi_changed(const wxRect &suggested_rect)
 void KBShortcutsDialog::onCloseDialog(wxEvent &)
 {
     this->EndModal(wxID_CLOSE);
-    this->Close();
 }
 
 } // namespace GUI
diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp
index ea36231de..a29ba5c91 100644
--- a/src/slic3r/GUI/Preferences.cpp
+++ b/src/slic3r/GUI/Preferences.cpp
@@ -136,7 +136,6 @@ void PreferencesDialog::accept()
 	}
 
 	EndModal(wxID_OK);
-	Close();  // needed on Linux
 
 	// Nothify the UI to update itself from the ini file.
     wxGetApp().update_ui_from_settings();
diff --git a/src/slic3r/GUI/PresetBundle.cpp b/src/slic3r/GUI/PresetBundle.cpp
index e92311cfe..f6cc73b6f 100644
--- a/src/slic3r/GUI/PresetBundle.cpp
+++ b/src/slic3r/GUI/PresetBundle.cpp
@@ -78,6 +78,7 @@ PresetBundle::PresetBundle() :
     this->sla_materials.default_preset().inherits();
 
     this->sla_prints.default_preset().config.optptr("sla_print_settings_id", true);
+    this->sla_prints.default_preset().config.opt_string("output_filename_format", true) = "[input_filename_base].sl1";
     this->sla_prints.default_preset().compatible_printers_condition();
     this->sla_prints.default_preset().inherits();
 
diff --git a/src/slic3r/GUI/SysInfoDialog.cpp b/src/slic3r/GUI/SysInfoDialog.cpp
index 052a5c12a..bd19c38c3 100644
--- a/src/slic3r/GUI/SysInfoDialog.cpp
+++ b/src/slic3r/GUI/SysInfoDialog.cpp
@@ -117,7 +117,7 @@ SysInfoDialog::SysInfoDialog()
     }
     
     wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxOK);
-    m_btn_copy_to_clipboard = new wxButton(this, wxID_ANY, "Copy to Clipboard", wxDefaultPosition, wxDefaultSize);
+    m_btn_copy_to_clipboard = new wxButton(this, wxID_ANY, _(L("Copy to Clipboard")), wxDefaultPosition, wxDefaultSize);
 
     buttons->Insert(0, m_btn_copy_to_clipboard, 0, wxLEFT, 5);
     m_btn_copy_to_clipboard->Bind(wxEVT_BUTTON, &SysInfoDialog::onCopyToClipboard, this);
@@ -172,7 +172,6 @@ void SysInfoDialog::onCopyToClipboard(wxEvent &)
 void SysInfoDialog::onCloseDialog(wxEvent &)
 {
     this->EndModal(wxID_CLOSE);
-    this->Close();
 }
 
 } // namespace GUI
diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp
index 0e89a72f2..599d3edac 100644
--- a/src/slic3r/GUI/wxExtensions.cpp
+++ b/src/slic3r/GUI/wxExtensions.cpp
@@ -2235,14 +2235,16 @@ void DoubleSlider::OnMotion(wxMouseEvent& event)
     }
     else if (m_is_left_down || m_is_right_down) {
         if (m_selection == ssLower) {
+            int current_value = m_lower_value;
             m_lower_value = get_value_from_position(pos.x, pos.y);
             correct_lower_value();
-            action = true;
+            action = (current_value != m_lower_value);
         }
         else if (m_selection == ssHigher) {
+            int current_value = m_higher_value;
             m_higher_value = get_value_from_position(pos.x, pos.y);
             correct_higher_value();
-            action = true;
+            action = (current_value != m_higher_value);
         }
     }
     Refresh();
@@ -2253,6 +2255,7 @@ void DoubleSlider::OnMotion(wxMouseEvent& event)
     {
         wxCommandEvent e(wxEVT_SCROLL_CHANGED);
         e.SetEventObject(this);
+        e.SetString("moving");
         ProcessWindowEvent(e);
     }
 }