diff --git a/core/fpdfapi/cpdf_modulemgr.cpp b/core/fpdfapi/cpdf_modulemgr.cpp
index 889e557..34fe049 100644
--- a/core/fpdfapi/cpdf_modulemgr.cpp
+++ b/core/fpdfapi/cpdf_modulemgr.cpp
@@ -37,32 +37,29 @@
 }  // namespace
 
 // static
-void CPDF_ModuleMgr::Create() {
-  ASSERT(!g_pDefaultMgr);
-  g_pDefaultMgr = new CPDF_ModuleMgr;
-  g_pDefaultMgr->InitCodecModule();
-  g_pDefaultMgr->InitPageModule();
-  g_pDefaultMgr->LoadEmbeddedMaps();
-  g_pDefaultMgr->LoadCodecModules();
+CPDF_ModuleMgr* CPDF_ModuleMgr::Get() {
+  if (!g_pDefaultMgr)
+    g_pDefaultMgr = new CPDF_ModuleMgr;
+  return g_pDefaultMgr;
 }
 
 // static
 void CPDF_ModuleMgr::Destroy() {
-  ASSERT(g_pDefaultMgr);
   delete g_pDefaultMgr;
   g_pDefaultMgr = nullptr;
 }
 
-// static
-CPDF_ModuleMgr* CPDF_ModuleMgr::Get() {
-  ASSERT(g_pDefaultMgr);
-  return g_pDefaultMgr;
+CPDF_ModuleMgr::CPDF_ModuleMgr() {}
+
+CPDF_ModuleMgr::~CPDF_ModuleMgr() {}
+
+void CPDF_ModuleMgr::Init() {
+  InitCodecModule();
+  InitPageModule();
+  LoadEmbeddedMaps();
+  LoadCodecModules();
 }
 
-CPDF_ModuleMgr::CPDF_ModuleMgr() = default;
-
-CPDF_ModuleMgr::~CPDF_ModuleMgr() = default;
-
 CCodec_FaxModule* CPDF_ModuleMgr::GetFaxModule() {
   return m_pCodecModule->GetFaxModule();
 }
diff --git a/core/fpdfapi/cpdf_modulemgr.h b/core/fpdfapi/cpdf_modulemgr.h
index e916947..69b4833 100644
--- a/core/fpdfapi/cpdf_modulemgr.h
+++ b/core/fpdfapi/cpdf_modulemgr.h
@@ -35,11 +35,12 @@
 
 class CPDF_ModuleMgr {
  public:
-  static void Create();
-  static void Destroy();
   static CPDF_ModuleMgr* Get();
+  static void Destroy();
   static const int kFileBufSize = 512;
 
+  void Init();
+
   void SetUnsupportInfoAdapter(
       std::unique_ptr<fpdfapi::UnsupportedInfoAdapter> pAdapter) {
     m_pUnsupportInfoAdapter = std::move(pAdapter);
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
index 1ce21f4..975b3c9 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -25,8 +25,11 @@
 
 class CPDF_PageContentGeneratorTest : public testing::Test {
  protected:
-  void SetUp() override { CPDF_ModuleMgr::Create(); }
-  void TearDown() override { CPDF_ModuleMgr::Destroy(); }
+  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
+
+  void TearDown() override {
+    CPDF_ModuleMgr::Destroy();
+  }
 
   void TestProcessPath(CPDF_PageContentGenerator* pGen,
                        std::ostringstream* buf,
diff --git a/core/fpdfapi/font/cpdf_cidfont_unittest.cpp b/core/fpdfapi/font/cpdf_cidfont_unittest.cpp
index fe10bc9..4166a93 100644
--- a/core/fpdfapi/font/cpdf_cidfont_unittest.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont_unittest.cpp
@@ -15,7 +15,8 @@
 
 class CPDF_CIDFontTest : public testing::Test {
  protected:
-  void SetUp() override { CPDF_ModuleMgr::Create(); }
+  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
+
   void TearDown() override { CPDF_ModuleMgr::Destroy(); }
 };
 
diff --git a/core/fpdfapi/parser/cpdf_document_unittest.cpp b/core/fpdfapi/parser/cpdf_document_unittest.cpp
index 682ac95..5078bf4 100644
--- a/core/fpdfapi/parser/cpdf_document_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_document_unittest.cpp
@@ -151,7 +151,7 @@
 
 class cpdf_document_test : public testing::Test {
  public:
-  void SetUp() override { CPDF_ModuleMgr::Create(); }
+  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
   void TearDown() override { CPDF_ModuleMgr::Destroy(); }
 };
 
diff --git a/core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp b/core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp
index fda209f..85db7d3 100644
--- a/core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp
@@ -63,7 +63,7 @@
  public:
   CPDF_HintTablesTest() {
     // Needs for encoding Hint table stream.
-    CPDF_ModuleMgr::Create();
+    CPDF_ModuleMgr::Get()->Init();
   }
 
   ~CPDF_HintTablesTest() override { CPDF_ModuleMgr::Destroy(); }
diff --git a/core/fxge/cfx_gemodule.cpp b/core/fxge/cfx_gemodule.cpp
index ea6b4ac..b9b232d 100644
--- a/core/fxge/cfx_gemodule.cpp
+++ b/core/fxge/cfx_gemodule.cpp
@@ -17,19 +17,17 @@
 
 }  // namespace
 
-CFX_GEModule::CFX_GEModule(const char** pUserFontPaths)
-    : m_pFontCache(pdfium::MakeUnique<CFX_FontCache>()),
-      m_pFontMgr(pdfium::MakeUnique<CFX_FontMgr>()),
-      m_pPlatform(PlatformIface::Create()),
-      m_pUserFontPaths(pUserFontPaths) {}
+CFX_GEModule::CFX_GEModule()
+    : m_pFontMgr(pdfium::MakeUnique<CFX_FontMgr>()),
+      m_pPlatform(PlatformIface::Create()) {}
 
 CFX_GEModule::~CFX_GEModule() = default;
 
 // static
-void CFX_GEModule::Create(const char** pUserFontPaths) {
-  ASSERT(!g_pGEModule);
-  g_pGEModule = new CFX_GEModule(pUserFontPaths);
-  g_pGEModule->m_pPlatform->Init();
+CFX_GEModule* CFX_GEModule::Get() {
+  if (!g_pGEModule)
+    g_pGEModule = new CFX_GEModule();
+  return g_pGEModule;
 }
 
 // static
@@ -39,8 +37,14 @@
   g_pGEModule = nullptr;
 }
 
-// static
-CFX_GEModule* CFX_GEModule::Get() {
+void CFX_GEModule::Init(const char** userFontPaths) {
   ASSERT(g_pGEModule);
-  return g_pGEModule;
+  m_pUserFontPaths = userFontPaths;
+  m_pPlatform->Init();
+}
+
+CFX_FontCache* CFX_GEModule::GetFontCache() {
+  if (!m_pFontCache)
+    m_pFontCache = pdfium::MakeUnique<CFX_FontCache>();
+  return m_pFontCache.get();
 }
diff --git a/core/fxge/cfx_gemodule.h b/core/fxge/cfx_gemodule.h
index 59eddb7..afcbff4 100644
--- a/core/fxge/cfx_gemodule.h
+++ b/core/fxge/cfx_gemodule.h
@@ -22,23 +22,23 @@
     virtual void Init() = 0;
   };
 
-  static void Create(const char** pUserFontPaths);
-  static void Destroy();
   static CFX_GEModule* Get();
+  static void Destroy();
 
-  CFX_FontCache* GetFontCache() const { return m_pFontCache.get(); }
+  void Init(const char** pUserFontPaths);
+  CFX_FontCache* GetFontCache();
   CFX_FontMgr* GetFontMgr() const { return m_pFontMgr.get(); }
   PlatformIface* GetPlatform() const { return m_pPlatform.get(); }
   const char** GetUserFontPaths() const { return m_pUserFontPaths; }
 
  private:
-  explicit CFX_GEModule(const char** pUserFontPaths);
+  CFX_GEModule();
   ~CFX_GEModule();
 
-  std::unique_ptr<CFX_FontCache> const m_pFontCache;
-  std::unique_ptr<CFX_FontMgr> const m_pFontMgr;
-  std::unique_ptr<PlatformIface> const m_pPlatform;
-  const char** const m_pUserFontPaths;
+  std::unique_ptr<CFX_FontCache> m_pFontCache;
+  std::unique_ptr<CFX_FontMgr> m_pFontMgr;
+  std::unique_ptr<PlatformIface> m_pPlatform;
+  const char** m_pUserFontPaths = nullptr;
 };
 
 #endif  // CORE_FXGE_CFX_GEMODULE_H_
diff --git a/fpdfsdk/fpdf_catalog_unittest.cpp b/fpdfsdk/fpdf_catalog_unittest.cpp
index ff3adcf..180fb79 100644
--- a/fpdfsdk/fpdf_catalog_unittest.cpp
+++ b/fpdfsdk/fpdf_catalog_unittest.cpp
@@ -27,7 +27,7 @@
 class PDFCatalogTest : public testing::Test {
  public:
   void SetUp() override {
-    CPDF_ModuleMgr::Create();
+    CPDF_ModuleMgr::Get()->Init();
     auto pTestDoc = pdfium::MakeUnique<CPDF_TestDocument>();
     m_pDoc.reset(FPDFDocumentFromCPDFDocument(pTestDoc.release()));
     m_pRootObj = pdfium::MakeRetain<CPDF_Dictionary>();
diff --git a/fpdfsdk/fpdf_doc_unittest.cpp b/fpdfsdk/fpdf_doc_unittest.cpp
index 08517d7..b0337e8 100644
--- a/fpdfsdk/fpdf_doc_unittest.cpp
+++ b/fpdfsdk/fpdf_doc_unittest.cpp
@@ -40,7 +40,7 @@
   };
 
   void SetUp() override {
-    CPDF_ModuleMgr::Create();
+    CPDF_ModuleMgr::Get()->Init();
     auto pTestDoc = pdfium::MakeUnique<CPDF_TestDocument>();
     m_pIndirectObjs = pTestDoc->GetHolder();
     m_pRootObj.Reset(m_pIndirectObjs->NewIndirect<CPDF_Dictionary>());
diff --git a/fpdfsdk/fpdf_edit_unittest.cpp b/fpdfsdk/fpdf_edit_unittest.cpp
index 1fcd93d..499a655 100644
--- a/fpdfsdk/fpdf_edit_unittest.cpp
+++ b/fpdfsdk/fpdf_edit_unittest.cpp
@@ -8,7 +8,8 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 class PDFEditTest : public testing::Test {
-  void SetUp() override { CPDF_ModuleMgr::Create(); }
+  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
+
   void TearDown() override { CPDF_ModuleMgr::Destroy(); }
 };
 
diff --git a/fpdfsdk/fpdf_editimg_unittest.cpp b/fpdfsdk/fpdf_editimg_unittest.cpp
index 81a4877..fa04758 100644
--- a/fpdfsdk/fpdf_editimg_unittest.cpp
+++ b/fpdfsdk/fpdf_editimg_unittest.cpp
@@ -9,7 +9,8 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 class PDFEditImgTest : public testing::Test {
-  void SetUp() override { CPDF_ModuleMgr::Create(); }
+  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
+
   void TearDown() override { CPDF_ModuleMgr::Destroy(); }
 };
 
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index 3712697..f9bc6c0 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -158,8 +158,12 @@
     return;
 
   FXMEM_InitializePartitionAlloc();
-  CFX_GEModule::Create(cfg ? cfg->m_pUserFontPaths : nullptr);
-  CPDF_ModuleMgr::Create();
+
+  CFX_GEModule* pModule = CFX_GEModule::Get();
+  pModule->Init(cfg ? cfg->m_pUserFontPaths : nullptr);
+
+  CPDF_ModuleMgr* pModuleMgr = CPDF_ModuleMgr::Get();
+  pModuleMgr->Init();
 
 #ifdef PDF_ENABLE_XFA
   BC_Library_Init();
@@ -180,6 +184,7 @@
 
   CPDF_ModuleMgr::Destroy();
   CFX_GEModule::Destroy();
+
   IJS_Runtime::Destroy();
 
   g_bLibraryInitialized = false;
diff --git a/testing/BUILD.gn b/testing/BUILD.gn
index 9eee51c..d2a0411 100644
--- a/testing/BUILD.gn
+++ b/testing/BUILD.gn
@@ -17,7 +17,6 @@
     "string_write_stream.h",
     "test_loader.cpp",
     "test_loader.h",
-    "test_support.cpp",
     "test_support.h",
     "utils/bitmap_saver.cpp",
     "utils/bitmap_saver.h",
@@ -35,7 +34,6 @@
     "../:pdfium_public_headers",
     "../core/fdrm",
     "../core/fxcrt",
-    "../core/fxge",
     "image_diff",
   ]
   configs += [ "../:pdfium_core_config" ]
diff --git a/testing/test_support.cpp b/testing/test_support.cpp
deleted file mode 100644
index 94ce528..0000000
--- a/testing/test_support.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2019 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "testing/test_support.h"
-
-#include "core/fxge/cfx_gemodule.h"
-
-void InitializePDFTestEnvironment() {
-  CFX_GEModule::Create(nullptr);
-}
-
-void DestroyPDFTestEnvironment() {
-  CFX_GEModule::Destroy();
-}
diff --git a/testing/test_support.h b/testing/test_support.h
index f237ea5..f257787 100644
--- a/testing/test_support.h
+++ b/testing/test_support.h
@@ -5,8 +5,6 @@
 #ifndef TESTING_TEST_SUPPORT_H_
 #define TESTING_TEST_SUPPORT_H_
 
-#include <stdint.h>
-
 namespace pdfium {
 
 #define STR_IN_TEST_CASE(input_literal, ...)               \
@@ -46,7 +44,4 @@
 
 }  // namespace pdfium
 
-void InitializePDFTestEnvironment();
-void DestroyPDFTestEnvironment();
-
 #endif  // TESTING_TEST_SUPPORT_H_
diff --git a/testing/unit_test_main.cpp b/testing/unit_test_main.cpp
index 35c4939..44918fc 100644
--- a/testing/unit_test_main.cpp
+++ b/testing/unit_test_main.cpp
@@ -8,7 +8,6 @@
 #include "core/fxcrt/fx_memory.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "testing/test_support.h"
 
 #ifdef PDF_ENABLE_V8
 #include "testing/v8_initializer.h"
@@ -37,7 +36,6 @@
 #endif  // V8_USE_EXTERNAL_STARTUP_DATA
 #endif  // PDF_ENABLE_V8
 
-  InitializePDFTestEnvironment();
 #ifdef PDF_ENABLE_XFA
   InitializeXFATestEnvironment();
 #endif  // PDF_ENABLE_XFA
@@ -47,9 +45,6 @@
 
   int ret_val = RUN_ALL_TESTS();
 
-  DestroyPDFTestEnvironment();
-  // NOTE: XFA test environment, if present, destroyed by gtest.
-
 #ifdef PDF_ENABLE_V8
   v8::V8::ShutdownPlatform();
 #endif  // PDF_ENABLE_V8
diff --git a/xfa/fgas/crt/cfgas_stringformatter_unittest.cpp b/xfa/fgas/crt/cfgas_stringformatter_unittest.cpp
index f9bd450..e06e04c 100644
--- a/xfa/fgas/crt/cfgas_stringformatter_unittest.cpp
+++ b/xfa/fgas/crt/cfgas_stringformatter_unittest.cpp
@@ -21,10 +21,10 @@
  public:
   CFGAS_StringFormatterTest() {
     SetTZ("UTC");
-    CPDF_ModuleMgr::Create();
+    CPDF_ModuleMgr::Get()->Init();
   }
 
-  ~CFGAS_StringFormatterTest() override { CPDF_ModuleMgr::Destroy(); }
+  ~CFGAS_StringFormatterTest() override { CPDF_ModuleMgr::Get()->Destroy(); }
 
   void TearDown() override {
     fmt_.reset();
