void SetFonts(wxString normal_face, wxString fixed_face,
                   const int *sizes = NULL);
 
-    // Sets font sizes to be relative to the given size or the system default size
-    void NormalizeFontSizes(int size=-1);
+    // Sets font sizes to be relative to the given size or the system
+    // default size; use either specified or default font
+    void SetStandardFonts(int size = -1,
+                          const wxString& normal_face = wxEmptyString,
+                          const wxString& fixed_face = wxEmptyString);
     
     // Sets space between text and window borders.
     void SetBorders(int b) {m_Borders = b;}
 
     // Sets fonts to be used when displaying HTML page. (if size null then default sizes used).
     void SetFonts(wxString normal_face, wxString fixed_face, const int *sizes = NULL);
 
-    // Sets font sizes to be relative to the given size or the system default size
-    void NormalizeFontSizes(int size=-1);
+    // Sets font sizes to be relative to the given size or the system
+    // default size; use either specified or default font
+    void SetStandardFonts(int size = -1,
+                          const wxString& normal_face = wxEmptyString,
+                          const wxString& fixed_face = wxEmptyString);
 
     // [x,y] is position of upper-left corner of printing rectangle (see SetSize)
     // from is y-coordinate of the very first visible cell
     // Sets fonts to be used when displaying HTML page. (if size null then default sizes used).
     void SetFonts(wxString normal_face, wxString fixed_face, const int *sizes = NULL);
 
-    // Sets font sizes to be relative to the given size or the system default size
-    void NormalizeFontSizes(int size=-1);
+    // Sets font sizes to be relative to the given size or the system
+    // default size; use either specified or default font
+    void SetStandardFonts(int size = -1,
+                          const wxString& normal_face = wxEmptyString,
+                          const wxString& fixed_face = wxEmptyString);
 
     void SetMargins(float top = 25.2, float bottom = 25.2, float left = 25.2, float right = 25.2, 
                     float spaces = 5);
     void SetFonts(wxString normal_face, wxString fixed_face, const int *sizes = 0);
     // Sets fonts to be used when displaying HTML page. (if size null then default sizes used)
 
-    void NormalizeFontSizes(int size=-1);
-    // Sets font sizes to be relative to the given size or the system default size
+    // Sets font sizes to be relative to the given size or the system
+    // default size; use either specified or default font
+    void SetStandardFonts(int size = -1,
+                          const wxString& normal_face = wxEmptyString,
+                          const wxString& fixed_face = wxEmptyString);
     
     wxPrintData *GetPrintData();
     wxPageSetupDialogData *GetPageSetupData() {return m_PageSetupData;}
     int m_FontsSizesArr[7];
     int *m_FontsSizes;
     wxString m_FontFaceFixed, m_FontFaceNormal;
+
+    enum FontMode
+    {
+        FontMode_Explicit,
+        FontMode_Standard
+    };
+    FontMode m_fontMode;
+    
     wxString m_Headers[2], m_Footers[2];
     wxWindow *m_ParentWindow;
 
 
     // Sets fonts to be used when displaying HTML page. (if size null then default sizes used).
     void SetFonts(wxString normal_face, wxString fixed_face, const int *sizes = NULL);
 
-    // Sets font sizes to be relative to the given size or the system default size
-    void NormalizeFontSizes(int size=-1);
+    // Sets font sizes to be relative to the given size or the system
+    // default size; use either specified or default font
+    void SetStandardFonts(int size = -1,
+                          const wxString& normal_face = wxEmptyString,
+                          const wxString& fixed_face = wxEmptyString);
     
     // Adds tags module. see wxHtmlTagsModule for details.
     static void AddModule(wxHtmlTagsModule *module);
 
     m_Parser->SetFonts(normal_face, fixed_face, sizes);
     // fonts changed => contents invalid, so reload the page:
     SetPage(wxT("<html><body></body></html>"));
-    if (!op.IsEmpty()) LoadPage(op);
+    if (!op.empty())
+        LoadPage(op);
 }
 
-void wxHtmlWindow::NormalizeFontSizes(int size)
+void wxHtmlWindow::SetStandardFonts(int size,
+                                    const wxString& normal_face,
+                                    const wxString& fixed_face)
 {
-    int f_sizes[7];
-    if (size == -1)
-        size = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).GetPointSize();
-
-    f_sizes[0] = int(size * 0.6);
-    f_sizes[1] = int(size * 0.8);
-    f_sizes[2] = size;
-    f_sizes[3] = int(size * 1.2);
-    f_sizes[4] = int(size * 1.4);
-    f_sizes[5] = int(size * 1.6);
-    f_sizes[6] = int(size * 1.8);
-    
-    SetFonts(wxEmptyString, wxEmptyString, f_sizes);
+    wxString op = m_OpenedPage;
+
+    m_Parser->SetStandardFonts(size, normal_face, fixed_face);
+    // fonts changed => contents invalid, so reload the page:
+    SetPage(wxT("<html><body></body></html>"));
+    if (!op.empty())
+        LoadPage(op);
 }
 
 
 
                                 const int *sizes)
 {
     m_Parser->SetFonts(normal_face, fixed_face, sizes);
-    if (m_DC == NULL && m_Cells != NULL) m_Cells->Layout(m_Width);
+    if (m_DC == NULL && m_Cells != NULL)
+        m_Cells->Layout(m_Width);
 }
 
-
-void wxHtmlDCRenderer::NormalizeFontSizes(int size)
+void wxHtmlDCRenderer::SetStandardFonts(int size,
+                                        const wxString& normal_face,
+                                        const wxString& fixed_face)
 {
-    int f_sizes[7];
-    if (size == -1)
-        size = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).GetPointSize();
-
-    f_sizes[0] = int(size * 0.6);
-    f_sizes[1] = int(size * 0.8);
-    f_sizes[2] = size;
-    f_sizes[3] = int(size * 1.2);
-    f_sizes[4] = int(size * 1.4);
-    f_sizes[5] = int(size * 1.6);
-    f_sizes[6] = int(size * 1.8);
-    
-    SetFonts(wxEmptyString, wxEmptyString, f_sizes);
+    m_Parser->SetStandardFonts(size, normal_face, fixed_face);
+    if (m_DC == NULL && m_Cells != NULL)
+        m_Cells->Layout(m_Width);
 }
 
 
     m_RendererHdr->SetFonts(normal_face, fixed_face, sizes);
 }
 
-
-void wxHtmlPrintout::NormalizeFontSizes(int size)
+void wxHtmlPrintout::SetStandardFonts(int size,
+                                      const wxString& normal_face,
+                                      const wxString& fixed_face)
 {
-    int f_sizes[7];
-    if (size == -1)
-        size = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).GetPointSize();
-
-    f_sizes[0] = int(size * 0.6);
-    f_sizes[1] = int(size * 0.8);
-    f_sizes[2] = size;
-    f_sizes[3] = int(size * 1.2);
-    f_sizes[4] = int(size * 1.4);
-    f_sizes[5] = int(size * 1.6);
-    f_sizes[6] = int(size * 1.8);
-    
-    SetFonts(wxEmptyString, wxEmptyString, f_sizes);
+    m_Renderer->SetStandardFonts(size, normal_face, fixed_face);
+    m_RendererHdr->SetStandardFonts(size, normal_face, fixed_face);
 }
 
 
 void wxHtmlEasyPrinting::SetFonts(wxString normal_face, wxString fixed_face,
                                   const int *sizes)
 {
+    m_fontMode = FontMode_Explicit;
     m_FontFaceNormal = normal_face;
     m_FontFaceFixed = fixed_face;
 
         m_FontsSizes = NULL;
 }
 
-void wxHtmlEasyPrinting::NormalizeFontSizes(int size)
+void wxHtmlEasyPrinting::SetStandardFonts(int size,
+                                          const wxString& normal_face,
+                                          const wxString& fixed_face)
 {
-    int f_sizes[7];
-    if (size == -1)
-        size = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).GetPointSize();
-
-    f_sizes[0] = int(size * 0.6);
-    f_sizes[1] = int(size * 0.8);
-    f_sizes[2] = size;
-    f_sizes[3] = int(size * 1.2);
-    f_sizes[4] = int(size * 1.4);
-    f_sizes[5] = int(size * 1.6);
-    f_sizes[6] = int(size * 1.8);
-    
-    SetFonts(wxEmptyString, wxEmptyString, f_sizes);
+    m_fontMode = FontMode_Standard;
+    m_FontFaceNormal = normal_face;
+    m_FontFaceFixed = fixed_face;
+    m_FontsSizesArr[0] = size;
 }
 
 
 {
     wxHtmlPrintout *p = new wxHtmlPrintout(m_Name);
 
-    p->SetFonts(m_FontFaceNormal, m_FontFaceFixed, m_FontsSizes);
+    if (m_fontMode == FontMode_Explicit)
+    {
+        p->SetFonts(m_FontFaceNormal, m_FontFaceFixed, m_FontsSizes);
+    }
+    else // FontMode_Standard
+    {
+        p->SetStandardFonts(m_FontsSizesArr[0],
+                            m_FontFaceNormal, m_FontFaceFixed);
+    }
 
     p->SetHeader(m_Headers[0], wxPAGE_EVEN);
     p->SetHeader(m_Headers[1], wxPAGE_ODD);
 
                     }
 }
 
-void wxHtmlWinParser::NormalizeFontSizes(int size)
+void wxHtmlWinParser::SetStandardFonts(int size,
+                                       const wxString& normal_face,
+                                       const wxString& fixed_face)
 {
+    wxFont defaultFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+    
     int f_sizes[7];
     if (size == -1)
-        size = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).GetPointSize();
+        size = defaultFont.GetPointSize();
 
     f_sizes[0] = int(size * 0.6);
     f_sizes[1] = int(size * 0.8);
     f_sizes[4] = int(size * 1.4);
     f_sizes[5] = int(size * 1.6);
     f_sizes[6] = int(size * 1.8);
+
+    wxString normal = normal_face.empty() ? 
+                      defaultFont.GetFaceName() : normal_face;
     
-    SetFonts(wxEmptyString, wxEmptyString, f_sizes);
+    SetFonts(normal, fixed_face, f_sizes);
 }
 
 void wxHtmlWinParser::InitParser(const wxString& source)