diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp
index af3b65530..44d1972bc 100644
--- a/src/slic3r/GUI/AboutDialog.cpp
+++ b/src/slic3r/GUI/AboutDialog.cpp
@@ -32,8 +32,11 @@ void AboutDialogLogo::onRepaint(wxEvent &event)
 }
 
 AboutDialog::AboutDialog()
-    : wxDialog(NULL, wxID_ANY, _(L("About Slic3r")), wxDefaultPosition, wxDefaultSize, wxCAPTION)
+    : DPIDialog(NULL, wxID_ANY, _(L("About Slic3r")), wxDefaultPosition, 
+                wxDefaultSize, /*wxCAPTION*/wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
 {
+    SetFont(wxGetApp().normal_font());
+
 	wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
 	SetBackgroundColour(bgr_clr);
     wxBoxSizer* hsizer = new wxBoxSizer(wxHORIZONTAL);
@@ -42,8 +45,10 @@ AboutDialog::AboutDialog()
 	main_sizer->Add(hsizer, 0, wxEXPAND | wxALL, 20);
 
     // logo
-    auto *logo = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap(this, "Slic3r_192px.png", 192));
-	hsizer->Add(logo, 1, wxALIGN_CENTER_VERTICAL);
+    m_logo_bitmap = PrusaBitmap(this, "Slic3r_192px.png", 192);
+    m_logo = new wxStaticBitmap(this, wxID_ANY, m_logo_bitmap.bmp());
+//     auto *logo = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap(this, "Slic3r_192px.png", 192));
+	hsizer->Add(m_logo, 1, wxALIGN_CENTER_VERTICAL);
     
     wxBoxSizer* vsizer = new wxBoxSizer(wxVERTICAL); 	
     hsizer->Add(vsizer, 2, wxEXPAND|wxLEFT, 20);
@@ -51,8 +56,8 @@ AboutDialog::AboutDialog()
     // title
     {
         wxStaticText* title = new wxStaticText(this, wxID_ANY, "Slic3r Prusa Edition", wxDefaultPosition, wxDefaultSize);
-        wxFont title_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
-        title_font.SetWeight(wxFONTWEIGHT_BOLD);
+        wxFont title_font = GUI::wxGetApp().bold_font();// wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+//         title_font.SetWeight(wxFONTWEIGHT_BOLD);
         title_font.SetFamily(wxFONTFAMILY_ROMAN);
         title_font.SetPointSize(24);
         title->SetFont(title_font);
@@ -63,9 +68,9 @@ AboutDialog::AboutDialog()
     {
         auto version_string = _(L("Version"))+ " " + std::string(SLIC3R_VERSION);
         wxStaticText* version = new wxStaticText(this, wxID_ANY, version_string.c_str(), wxDefaultPosition, wxDefaultSize);
-        wxFont version_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+        wxFont version_font = GetFont();//wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
         #ifdef __WXMSW__
-            version_font.SetPointSize(9);
+        version_font.SetPointSize(/*9*/version_font.GetPointSize()-1);
         #else
             version_font.SetPointSize(11);
         #endif
@@ -74,18 +79,18 @@ AboutDialog::AboutDialog()
     }
     
     // text
-    wxHtmlWindow* html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO/*NEVER*/);
+    m_html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO/*NEVER*/);
     {
-        html->SetMinSize(wxSize(-1, 16 * wxGetApp().em_unit()));
-        wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+        m_html->SetMinSize(wxSize(-1, 16 * wxGetApp().em_unit()));
+        wxFont font = GetFont();//GUI::wxGetApp().normal_font(); // wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
         const auto text_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
 		auto text_clr_str = wxString::Format(wxT("#%02X%02X%02X"), text_clr.Red(), text_clr.Green(), text_clr.Blue());
 		auto bgr_clr_str = wxString::Format(wxT("#%02X%02X%02X"), bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue());
 
 		const int fs = font.GetPointSize()-1;
         int size[] = {fs,fs,fs,fs,fs,fs,fs};
-        html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
-        html->SetBorders(2);
+        m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
+        m_html->SetBorders(2);
 		const auto text = wxString::Format(
             "<html>"
             "<body bgcolor= %s link= %s>"
@@ -101,9 +106,9 @@ AboutDialog::AboutDialog()
             "</font>"
             "</body>"
             "</html>", bgr_clr_str, text_clr_str, text_clr_str);
-        html->SetPage(text);
-        vsizer->Add(html, 1, wxEXPAND | wxBOTTOM, 10);
-        html->Bind(wxEVT_HTML_LINK_CLICKED, &AboutDialog::onLinkClicked, this);
+        m_html->SetPage(text);
+        vsizer->Add(m_html, 1, wxEXPAND | wxBOTTOM, 10);
+        m_html->Bind(wxEVT_HTML_LINK_CLICKED, &AboutDialog::onLinkClicked, this);
     }
     
     wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxCLOSE);
@@ -118,6 +123,29 @@ AboutDialog::AboutDialog()
 	main_sizer->SetSizeHints(this);
 }
 
+void AboutDialog::on_dpi_changed(const wxRect &suggested_rect)
+{
+    m_logo_bitmap.rescale();
+    m_logo->SetBitmap(m_logo_bitmap.bmp());
+
+    const wxFont& font = GetFont();
+    const int fs = font.GetPointSize() - 1;
+    int font_size[] = { fs, fs, fs, fs, fs, fs, fs };
+    m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), font_size);
+
+    const int& em = em_unit();
+
+    m_html->SetMinSize(wxSize(-1, 16 * em));
+    m_html->Refresh();
+
+    const wxSize& size = wxSize(65 * em, 30 * em);
+
+    SetMinSize(size);
+    SetSize(size);
+
+    Refresh();
+}
+
 void AboutDialog::onLinkClicked(wxHtmlLinkEvent &event)
 {
     wxLaunchDefaultBrowser(event.GetLinkInfo().GetHref());
diff --git a/src/slic3r/GUI/AboutDialog.hpp b/src/slic3r/GUI/AboutDialog.hpp
index 01f7564c5..f74ab52f3 100644
--- a/src/slic3r/GUI/AboutDialog.hpp
+++ b/src/slic3r/GUI/AboutDialog.hpp
@@ -7,6 +7,9 @@
 #include <wx/intl.h>
 #include <wx/html/htmlwin.h>
 
+#include "GUI_Utils.hpp"
+#include "wxExtensions.hpp"
+
 namespace Slic3r { 
 namespace GUI {
 
@@ -20,10 +23,16 @@ private:
     void onRepaint(wxEvent &event);
 };
 
-class AboutDialog : public wxDialog
+class AboutDialog : public DPIDialog
 {
+    PrusaBitmap     m_logo_bitmap;
+    wxHtmlWindow*   m_html;
+    wxStaticBitmap* m_logo;
 public:
     AboutDialog();
+
+protected:
+    void on_dpi_changed(const wxRect &suggested_rect) override;
     
 private:
     void onLinkClicked(wxHtmlLinkEvent &event);
diff --git a/src/slic3r/GUI/ConfigSnapshotDialog.cpp b/src/slic3r/GUI/ConfigSnapshotDialog.cpp
index 205e84f57..dd3e46229 100644
--- a/src/slic3r/GUI/ConfigSnapshotDialog.cpp
+++ b/src/slic3r/GUI/ConfigSnapshotDialog.cpp
@@ -95,21 +95,26 @@ static wxString generate_html_page(const Config::SnapshotDB &snapshot_db, const
 }
 
 ConfigSnapshotDialog::ConfigSnapshotDialog(const Config::SnapshotDB &snapshot_db, const wxString &on_snapshot)
-    : wxDialog(NULL, wxID_ANY, _(L("Configuration Snapshots")), wxDefaultPosition, 
+    : DPIDialog(NULL, wxID_ANY, _(L("Configuration Snapshots")), wxDefaultPosition, 
                wxSize(45 * wxGetApp().em_unit(), 40 * wxGetApp().em_unit()), 
                wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMAXIMIZE_BOX)
 {
+    this->SetFont(wxGetApp().normal_font());
     this->SetBackgroundColour(*wxWHITE);
     
     wxBoxSizer* vsizer = new wxBoxSizer(wxVERTICAL);
     this->SetSizer(vsizer);
 
     // text
-    wxHtmlWindow* html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO);
+    html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO);
     {
-        wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+        wxFont font = wxGetApp().normal_font();//wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
         #ifdef __WXMSW__
-            int size[] = {8,8,8,8,11,11,11};
+            const int fs = font.GetPointSize();
+            const int fs1 = static_cast<int>(0.8f*fs);
+            const int fs2 = static_cast<int>(1.1f*fs);
+            int size[] = {fs1, fs1, fs1, fs1, fs2, fs2, fs2};
+//             int size[] = {8,8,8,8,11,11,11};
         #else
             int size[] = {11,11,11,11,14,14,14};
         #endif
@@ -127,6 +132,26 @@ ConfigSnapshotDialog::ConfigSnapshotDialog(const Config::SnapshotDB &snapshot_db
     vsizer->Add(buttons, 0, wxEXPAND | wxRIGHT | wxBOTTOM, 3);
 }
 
+void ConfigSnapshotDialog::on_dpi_changed(const wxRect &suggested_rect)
+{
+    wxFont font = GetFont();
+    const int fs = font.GetPointSize();
+    const int fs1 = static_cast<int>(0.8f*fs);
+    const int fs2 = static_cast<int>(1.1f*fs);
+    int font_size[] = { fs1, fs1, fs1, fs1, fs2, fs2, fs2 };
+
+    html->SetFonts(font.GetFaceName(), font.GetFaceName(), font_size);
+    html->Refresh();
+
+    const int& em = em_unit();
+    const wxSize& size = wxSize(45 * em, 40 * em);
+
+    SetMinSize(size);
+    SetSize(size);
+
+    Refresh();
+}
+
 void ConfigSnapshotDialog::onLinkClicked(wxHtmlLinkEvent &event)
 {
     m_snapshot_to_activate = event.GetLinkInfo().GetHref();
diff --git a/src/slic3r/GUI/ConfigSnapshotDialog.hpp b/src/slic3r/GUI/ConfigSnapshotDialog.hpp
index f43fb8ed1..9b8b69ecf 100644
--- a/src/slic3r/GUI/ConfigSnapshotDialog.hpp
+++ b/src/slic3r/GUI/ConfigSnapshotDialog.hpp
@@ -2,6 +2,7 @@
 #define slic3r_GUI_ConfigSnapshotDialog_hpp_
 
 #include "GUI.hpp"
+#include "GUI_Utils.hpp"
 
 #include <wx/wx.h>
 #include <wx/intl.h>
@@ -14,18 +15,23 @@ namespace Config {
 	class SnapshotDB;
 }
 
-class ConfigSnapshotDialog : public wxDialog
+class ConfigSnapshotDialog : public DPIDialog
 {
 public:
     ConfigSnapshotDialog(const Config::SnapshotDB &snapshot_db, const wxString &id);
     const std::string& snapshot_to_activate() const { return m_snapshot_to_activate; }
 
+protected:
+    void on_dpi_changed(const wxRect &suggested_rect) override;
+
 private:
     void onLinkClicked(wxHtmlLinkEvent &event);
     void onCloseDialog(wxEvent &);
 
     // If set, it contains a snapshot ID to be restored after the dialog closes.
     std::string m_snapshot_to_activate;
+
+    wxHtmlWindow* html;
 };
 
 } // namespace GUI
diff --git a/src/slic3r/GUI/FirmwareDialog.cpp b/src/slic3r/GUI/FirmwareDialog.cpp
index 8095a3237..4fdc57679 100644
--- a/src/slic3r/GUI/FirmwareDialog.cpp
+++ b/src/slic3r/GUI/FirmwareDialog.cpp
@@ -732,7 +732,7 @@ const char* FirmwareDialog::priv::avr109_dev_name(Avr109Pid usb_pid) {
 // Public
 
 FirmwareDialog::FirmwareDialog(wxWindow *parent) :
-	wxDialog(parent, wxID_ANY, _(L("Firmware flasher")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER),
+	GUI::DPIDialog(parent, wxID_ANY, _(L("Firmware flasher")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER),
 	p(new priv(this))
 {
 	enum {
@@ -748,7 +748,13 @@ FirmwareDialog::FirmwareDialog(wxWindow *parent) :
 	int min_height = MIN_HEIGHT * em;
 	int min_height_expanded = MIN_HEIGHT_EXPANDED * em;
 
-	wxFont status_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+    /* get current font from application, 
+     * because of wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT) function
+     * returns font for primary Display
+     */
+    const wxFont& font = GUI::wxGetApp().normal_font();
+    SetFont(font);
+    wxFont status_font = font;//wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
 	status_font.MakeBold();
 	wxFont mono_font(wxFontInfo().Family(wxFONTFAMILY_TELETYPE));
 	mono_font.MakeSmaller();
diff --git a/src/slic3r/GUI/FirmwareDialog.hpp b/src/slic3r/GUI/FirmwareDialog.hpp
index ad048bf5d..a1eac00de 100644
--- a/src/slic3r/GUI/FirmwareDialog.hpp
+++ b/src/slic3r/GUI/FirmwareDialog.hpp
@@ -4,12 +4,13 @@
 #include <memory>
 
 #include <wx/dialog.h>
+#include "GUI_Utils.hpp"
 
 
 namespace Slic3r {
 
 
-class FirmwareDialog: public wxDialog
+class FirmwareDialog: public GUI::DPIDialog
 {
 public:
 	FirmwareDialog(wxWindow *parent);
@@ -20,6 +21,9 @@ public:
 	~FirmwareDialog();
 
 	static void run(wxWindow *parent);
+
+protected:
+    void on_dpi_changed(const wxRect &suggested_rect) override{;}
 private:
 	struct priv;
 	std::unique_ptr<priv> p;
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 39628a9cb..42385bd63 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -682,6 +682,12 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
             // Take a configuration snapshot.
             if (check_unsaved_changes()) {
                 wxTextEntryDialog dlg(nullptr, _(L("Taking configuration snapshot")), _(L("Snapshot name")));
+                
+                // set current normal font for dialog children, 
+                // because of just dlg.SetFont(normal_font()) has no result;
+                for (auto child : dlg.GetChildren())
+                    child->SetFont(normal_font());
+
                 if (dlg.ShowModal() == wxID_OK)
                     app_config->set("on_snapshot",
                     Slic3r::GUI::Config::SnapshotDB::singleton().take_snapshot(
@@ -731,7 +737,6 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
             get_installed_languages(names, identifiers);
             if (select_language(names, identifiers)) {
                 save_language();
-//                 show_info(mainframe->m_tabpanel, _(L("Application will be restarted")), _(L("Attention!")));
                 _3DScene::remove_all_canvases();// remove all canvas before recreate GUI
                 recreate_GUI();
             }
diff --git a/src/slic3r/GUI/GUI_Utils.hpp b/src/slic3r/GUI/GUI_Utils.hpp
index ac367a22e..9da6bc8d8 100644
--- a/src/slic3r/GUI/GUI_Utils.hpp
+++ b/src/slic3r/GUI/GUI_Utils.hpp
@@ -58,6 +58,9 @@ public:
         : P(parent, id, title, pos, size, style, name)
     {
         m_scale_factor = (float)get_dpi_for_window(this) / (float)DPI_DEFAULT;
+        m_normal_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+        // An analog of em_unit value from GUI_App.
+        m_em_unit = std::max<size_t>(10, 10 * m_scale_factor);
 
         m_prev_scale_factor = m_scale_factor;
 
@@ -104,6 +107,7 @@ public:
 
     int     em_unit() const             { return m_em_unit; }
     int     font_size() const           { return m_font_size; }
+    const wxFont& normal_font() const   { return m_normal_font; }
 
 protected:
     virtual void on_dpi_changed(const wxRect &suggested_rect) = 0;
@@ -113,6 +117,7 @@ private:
     int m_em_unit;
     int m_font_size;
 
+    wxFont m_normal_font;
     float m_prev_scale_factor;
     bool  m_can_rescale{ true };
 
@@ -121,7 +126,7 @@ private:
         wxClientDC dc(this);
         const auto metrics = dc.GetFontMetrics();
         m_font_size = metrics.height;
-        m_em_unit = metrics.averageWidth;
+//         m_em_unit = metrics.averageWidth;
     }
 
     // check if new scale is differ from previous
@@ -143,9 +148,18 @@ private:
     void    rescale(const wxRect &suggested_rect)
     {
         this->Freeze();
+        const float relative_scale_factor = m_scale_factor / m_prev_scale_factor;
 
         // rescale fonts of all controls
-        scale_controls_fonts(this, m_scale_factor / m_prev_scale_factor);
+        scale_controls_fonts(this, relative_scale_factor);
+        this->SetFont(this->GetFont().Scaled(relative_scale_factor));
+
+
+        // rescale normal_font value
+        m_normal_font = m_normal_font.Scaled(relative_scale_factor);
+
+        // An analog of em_unit value from GUI_App.
+        m_em_unit = std::max<size_t>(10, 10 * m_scale_factor);
 
         // rescale missed controls sizes and images
         on_dpi_changed(suggested_rect);
diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp
index bf2ff8286..63f331b92 100644
--- a/src/slic3r/GUI/KBShortcutsDialog.cpp
+++ b/src/slic3r/GUI/KBShortcutsDialog.cpp
@@ -13,7 +13,7 @@ KBShortcutsDialog::KBShortcutsDialog()
     : DPIDialog(NULL, wxID_ANY, _(L("Slic3r Prusa Edition - Keyboard Shortcuts")), 
      wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
 {
-	SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));    
+	SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
 
 	main_sizer = new wxBoxSizer(wxVERTICAL);
 
@@ -21,16 +21,17 @@ KBShortcutsDialog::KBShortcutsDialog()
     m_logo_bmp = PrusaBitmap(this, "Slic3r_32px.png", 32);
 
     // fonts
-    wxFont head_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).Bold();
+    const wxFont& font = wxGetApp().normal_font();
+    const wxFont& bold_font = wxGetApp().bold_font();   
+    SetFont(font);
+
+    wxFont head_font = bold_font;// wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).Bold();
 #ifdef __WXOSX__
     head_font.SetPointSize(14);
 #else
-    head_font.SetPointSize(12);
+    head_font.SetPointSize(/*12*/bold_font.GetPointSize() + 2);
 #endif // __WXOSX__
 
-    const wxFont& font = wxGetApp().normal_font();
-    const wxFont& bold_font = wxGetApp().bold_font();
-
     fill_shortcuts();
 
     auto panel = new wxPanel(this);
diff --git a/src/slic3r/GUI/SysInfoDialog.cpp b/src/slic3r/GUI/SysInfoDialog.cpp
index 052656974..0067e6438 100644
--- a/src/slic3r/GUI/SysInfoDialog.cpp
+++ b/src/slic3r/GUI/SysInfoDialog.cpp
@@ -41,10 +41,12 @@ std::string get_main_info(bool format_as_html)
 }
 
 SysInfoDialog::SysInfoDialog()
-    : wxDialog(NULL, wxID_ANY, _(L("Slic3r Prusa Edition - System Information")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)
+    : DPIDialog(NULL, wxID_ANY, _(L("Slic3r Prusa Edition - System Information")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)
 {
 	wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
 	SetBackgroundColour(bgr_clr);
+    SetFont(wxGetApp().normal_font());
+
     wxBoxSizer* hsizer = new wxBoxSizer(wxHORIZONTAL);
     hsizer->SetMinSize(wxSize(50 * wxGetApp().em_unit(), -1));
 
@@ -52,8 +54,10 @@ SysInfoDialog::SysInfoDialog()
 	main_sizer->Add(hsizer, 1, wxEXPAND | wxALL, 10);
 
     // logo
-    auto *logo = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap(this, "Slic3r_192px.png", 192));
-	hsizer->Add(logo, 0, wxALIGN_CENTER_VERTICAL);
+    m_logo_bmp = PrusaBitmap(this, "Slic3r_192px.png", 192);
+//     auto *logo = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap(this, "Slic3r_192px.png", 192));
+    m_logo = new wxStaticBitmap(this, wxID_ANY, m_logo_bmp.bmp());
+	hsizer->Add(m_logo, 0, wxALIGN_CENTER_VERTICAL);
     
     wxBoxSizer* vsizer = new wxBoxSizer(wxVERTICAL);
     hsizer->Add(vsizer, 1, wxEXPAND|wxLEFT, 20);
@@ -61,8 +65,8 @@ SysInfoDialog::SysInfoDialog()
     // title
     {
         wxStaticText* title = new wxStaticText(this, wxID_ANY, SLIC3R_FORK_NAME, wxDefaultPosition, wxDefaultSize);
-        wxFont title_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
-        title_font.SetWeight(wxFONTWEIGHT_BOLD);
+        wxFont title_font = wxGetApp().bold_font();//wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+//         title_font.SetWeight(wxFONTWEIGHT_BOLD);
         title_font.SetFamily(wxFONTFAMILY_ROMAN);
         title_font.SetPointSize(22);
         title->SetFont(title_font);
@@ -70,7 +74,7 @@ SysInfoDialog::SysInfoDialog()
     }
 
     // main_info_text
-    wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+    wxFont font = wxGetApp().normal_font();//wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
     const auto text_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
     auto text_clr_str = wxString::Format(wxT("#%02X%02X%02X"), text_clr.Red(), text_clr.Green(), text_clr.Blue());
     auto bgr_clr_str = wxString::Format(wxT("#%02X%02X%02X"), bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue());
@@ -78,10 +82,10 @@ SysInfoDialog::SysInfoDialog()
     const int fs = font.GetPointSize() - 1;
     int size[] = { static_cast<int>(fs*1.5), static_cast<int>(fs*1.4), static_cast<int>(fs*1.3), fs, fs, fs, fs };
 
-    wxHtmlWindow* html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_NEVER);
+    m_html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_NEVER);
     {
-        html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
-        html->SetBorders(2);
+        m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
+        m_html->SetBorders(2);
 		const auto text = wxString::Format(
             "<html>"
             "<body bgcolor= %s link= %s>"
@@ -91,16 +95,16 @@ SysInfoDialog::SysInfoDialog()
             "</body>"
             "</html>", bgr_clr_str, text_clr_str, text_clr_str,
             get_main_info(true));
-        html->SetPage(text);
-        vsizer->Add(html, 1, wxEXPAND | wxBOTTOM, wxGetApp().em_unit());
+        m_html->SetPage(text);
+        vsizer->Add(m_html, 1, wxEXPAND | wxBOTTOM, wxGetApp().em_unit());
     }
 
     // opengl_info
-    wxHtmlWindow* opengl_info_html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO);
+    m_opengl_info_html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO);
     {
-        opengl_info_html->SetMinSize(wxSize(-1, 16 * wxGetApp().em_unit()));
-        opengl_info_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
-        opengl_info_html->SetBorders(10);
+        m_opengl_info_html->SetMinSize(wxSize(-1, 16 * wxGetApp().em_unit()));
+        m_opengl_info_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
+        m_opengl_info_html->SetBorders(10);
         const auto text = wxString::Format(
             "<html>"
             "<body bgcolor= %s link= %s>"
@@ -110,8 +114,8 @@ SysInfoDialog::SysInfoDialog()
             "</body>"
             "</html>", bgr_clr_str, text_clr_str, text_clr_str,
             _3DScene::get_gl_info(true, true));
-        opengl_info_html->SetPage(text);
-        main_sizer->Add(opengl_info_html, 1, wxEXPAND | wxBOTTOM, 15);
+        m_opengl_info_html->SetPage(text);
+        main_sizer->Add(m_opengl_info_html, 1, wxEXPAND | wxBOTTOM, 15);
     }
     
     wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxOK);
@@ -130,6 +134,32 @@ SysInfoDialog::SysInfoDialog()
 	main_sizer->SetSizeHints(this);
 }
 
+void SysInfoDialog::on_dpi_changed(const wxRect &suggested_rect)
+{
+    m_logo_bmp.rescale();
+    m_logo->SetBitmap(m_logo_bmp.bmp());
+
+    wxFont font = GetFont();
+    const int fs = font.GetPointSize() - 1;
+    int font_size[] = { static_cast<int>(fs*1.5), static_cast<int>(fs*1.4), static_cast<int>(fs*1.3), fs, fs, fs, fs };
+
+    m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), font_size);
+    m_html->Refresh();
+
+    const int& em = em_unit();
+
+    m_opengl_info_html->SetMinSize(wxSize(-1, 16 * em));
+    m_opengl_info_html->SetFonts(font.GetFaceName(), font.GetFaceName(), font_size);
+    m_opengl_info_html->Refresh();
+
+    const wxSize& size = wxSize(65 * em, 55 * em);
+
+    SetMinSize(size);
+    SetSize(size);
+
+    Refresh();
+}
+
 void SysInfoDialog::onCopyToClipboard(wxEvent &)
 {
     wxTheClipboard->Open();
diff --git a/src/slic3r/GUI/SysInfoDialog.hpp b/src/slic3r/GUI/SysInfoDialog.hpp
index ee1b85ce6..6215d90ca 100644
--- a/src/slic3r/GUI/SysInfoDialog.hpp
+++ b/src/slic3r/GUI/SysInfoDialog.hpp
@@ -4,14 +4,25 @@
 #include <wx/wx.h>
 #include <wx/html/htmlwin.h>
 
+#include "GUI_Utils.hpp"
+#include "wxExtensions.hpp"
+
 namespace Slic3r { 
 namespace GUI {
 
-class SysInfoDialog : public wxDialog
+class SysInfoDialog : public DPIDialog
 {
     wxString text_info {wxEmptyString};
+    PrusaBitmap     m_logo_bmp;
+    wxStaticBitmap* m_logo;
+    wxHtmlWindow* m_opengl_info_html;
+    wxHtmlWindow* m_html;
+
 public:
     SysInfoDialog();
+
+protected:
+    void on_dpi_changed(const wxRect &suggested_rect) override;
     
 private:
     void onCopyToClipboard(wxEvent &);
diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp
index 570872363..4dc6b6e2a 100644
--- a/src/slic3r/GUI/wxExtensions.cpp
+++ b/src/slic3r/GUI/wxExtensions.cpp
@@ -428,16 +428,11 @@ void PrusaCollapsiblePaneMSW::Collapse(bool collapse)
  * Displays with different HDPI */
 int em_unit(wxWindow* win)
 {
-    if (win) {
-        // get TopLevelWindow for some window
-        wxWindow* top_win = win;
-        while (!top_win->IsTopLevel())
-            top_win = top_win->GetParent();
-
-        Slic3r::GUI::DPIDialog* dlg = dynamic_cast<Slic3r::GUI::DPIDialog*>(top_win);
+    if (win)
+    {
+        Slic3r::GUI::DPIDialog* dlg = dynamic_cast<Slic3r::GUI::DPIDialog*>(Slic3r::GUI::find_toplevel_parent(win));
         if (dlg)
-            // An analog of em_unit value from GUI_App.
-            return 10 * dlg->scale_factor();
+            return dlg->em_unit();
     }
     
     return Slic3r::GUI::wxGetApp().em_unit();
@@ -2574,10 +2569,6 @@ void PrusaModeButton::SetState(const bool state)
 
 void PrusaModeButton::focus_button(const bool focus)
 {
-//     const wxBitmap& bmp = focus ? m_bmp_on : m_bmp_off;
-//     SetBitmap(bmp);
-
-//     const wxFont& new_font = focus ? Slic3r::GUI::wxGetApp().bold_font() : Slic3r::GUI::wxGetApp().small_font();
     wxFont font = GetFont();
     const wxFont& new_font = focus ? font.Bold() : font.GetBaseFont();