diff --git a/core/src/fxge/ge/fx_ge_fontmap.cpp b/core/src/fxge/ge/fx_ge_fontmap.cpp
index cd21958..02af775 100644
--- a/core/src/fxge/ge/fx_ge_fontmap.cpp
+++ b/core/src/fxge/ge/fx_ge_fontmap.cpp
@@ -453,12 +453,13 @@
   return TRUE;
 }
 CFX_FontMapper::CFX_FontMapper(CFX_FontMgr* mgr)
-    : m_pFontInfo(nullptr),
-      m_bListLoaded(FALSE),
+    : m_bListLoaded(FALSE),
+      m_pFontInfo(nullptr),
       m_pFontEnumerator(nullptr),
       m_pFontMgr(mgr) {
-  FXSYS_memset(m_FoxitFaces, 0, sizeof m_FoxitFaces);
-  m_MMFaces[0] = m_MMFaces[1] = NULL;
+  m_MMFaces[0] = nullptr;
+  m_MMFaces[1] = nullptr;
+  FXSYS_memset(m_FoxitFaces, 0, sizeof(m_FoxitFaces));
 }
 CFX_FontMapper::~CFX_FontMapper() {
   for (int i = 0; i < 14; i++)
@@ -1280,7 +1281,7 @@
     CFX_ByteString key;
     void* value;
     m_FontList.GetNextAssoc(pos, key, value);
-    delete (CFontFaceInfo*)value;
+    delete (CFX_FontFaceInfo*)value;
   }
 }
 void CFX_FolderFontInfo::AddPath(const CFX_ByteStringC& path) {
@@ -1394,13 +1395,8 @@
   if (m_FontList.Lookup(facename, p)) {
     return;
   }
-  CFontFaceInfo* pInfo = new CFontFaceInfo;
-  pInfo->m_FilePath = path;
-  pInfo->m_FaceName = facename;
-  pInfo->m_FontTables = tables;
-  pInfo->m_FontOffset = offset;
-  pInfo->m_FileSize = filesize;
-  pInfo->m_Charsets = 0;
+  CFX_FontFaceInfo* pInfo =
+      new CFX_FontFaceInfo(path, facename, tables, offset, filesize);
   CFX_ByteString os2 =
       _FPDF_LoadTableFromTT(pFile, tables, nTables, 0x4f532f32);
   if (os2.GetLength() >= 86) {
@@ -1464,7 +1460,7 @@
   if (hFont == NULL) {
     return 0;
   }
-  CFontFaceInfo* pFont = (CFontFaceInfo*)hFont;
+  CFX_FontFaceInfo* pFont = (CFX_FontFaceInfo*)hFont;
   FXSYS_FILE* pFile = NULL;
   if (size > 0) {
     pFile = FXSYS_fopen(pFont->m_FilePath, "rb");
@@ -1504,7 +1500,7 @@
   if (hFont == NULL) {
     return FALSE;
   }
-  CFontFaceInfo* pFont = (CFontFaceInfo*)hFont;
+  CFX_FontFaceInfo* pFont = (CFX_FontFaceInfo*)hFont;
   name = pFont->m_FaceName;
   return TRUE;
 }
diff --git a/core/src/fxge/ge/fx_ge_linux.cpp b/core/src/fxge/ge/fx_ge_linux.cpp
index 6120259..299806c 100644
--- a/core/src/fxge/ge/fx_ge_linux.cpp
+++ b/core/src/fxge/ge/fx_ge_linux.cpp
@@ -198,13 +198,13 @@
                                   int pitch_family,
                                   const FX_CHAR* family,
                                   FX_BOOL bMatchName) {
-  CFontFaceInfo* pFind = NULL;
+  CFX_FontFaceInfo* pFind = NULL;
   FX_DWORD charset_flag = _LinuxGetCharset(charset);
   int32_t iBestSimilar = 0;
   FX_POSITION pos = m_FontList.GetStartPosition();
   while (pos) {
     CFX_ByteString bsName;
-    CFontFaceInfo* pFont = NULL;
+    CFX_FontFaceInfo* pFont = NULL;
     m_FontList.GetNextAssoc(pos, bsName, (void*&)pFont);
     if (!(pFont->m_Charsets & charset_flag) &&
         charset != FXFONT_DEFAULT_CHARSET) {
diff --git a/core/src/fxge/ge/text_int.h b/core/src/fxge/ge/text_int.h
index a059071..efa134d 100644
--- a/core/src/fxge/ge/text_int.h
+++ b/core/src/fxge/ge/text_int.h
@@ -64,20 +64,34 @@
 #define CHARSET_FLAG_BIG5 8
 #define CHARSET_FLAG_GB 16
 #define CHARSET_FLAG_KOREAN 32
-class CFontFaceInfo {
+
+class CFX_FontFaceInfo {
  public:
-  CFX_ByteString m_FilePath;
-  CFX_ByteString m_FaceName;
+  CFX_FontFaceInfo(CFX_ByteString filePath, CFX_ByteString faceName,
+                   CFX_ByteString fontTables, FX_DWORD fontOffset,
+                   FX_DWORD fileSize)
+      : m_FilePath(filePath),
+        m_FaceName(faceName),
+        m_FontTables(fontTables),
+        m_FontOffset(fontOffset),
+        m_FileSize(fileSize),
+        m_Styles(0),
+        m_Charsets(0) {}
+
+  const CFX_ByteString m_FilePath;
+  const CFX_ByteString m_FaceName;
+  const CFX_ByteString m_FontTables;
+  const FX_DWORD m_FontOffset;
+  const FX_DWORD m_FileSize;
   FX_DWORD m_Styles;
   FX_DWORD m_Charsets;
-  FX_DWORD m_FontOffset;
-  FX_DWORD m_FileSize;
-  CFX_ByteString m_FontTables;
 };
+
 class CFontFileFaceInfo {
  public:
   CFontFileFaceInfo();
   ~CFontFileFaceInfo();
+
   IFX_FileStream* m_pFile;
   FXFT_Face m_Face;
   CFX_ByteString m_FaceName;
