diff --git a/core/fpdfapi/page/cpdf_pagemodule.cpp b/core/fpdfapi/page/cpdf_pagemodule.cpp
index 705d313..3c6c751 100644
--- a/core/fpdfapi/page/cpdf_pagemodule.cpp
+++ b/core/fpdfapi/page/cpdf_pagemodule.cpp
@@ -10,7 +10,6 @@
 #include "core/fpdfapi/page/cpdf_colorspace.h"
 #include "core/fpdfapi/page/cpdf_devicecs.h"
 #include "core/fpdfapi/page/cpdf_patterncs.h"
-#include "core/fxcodec/fx_codec.h"
 
 namespace {
 
@@ -21,7 +20,6 @@
 // static
 void CPDF_PageModule::Create() {
   ASSERT(!g_PageModule);
-  fxcodec::ModuleMgr::Create();
   g_PageModule = new CPDF_PageModule();
 }
 
@@ -30,7 +28,6 @@
   ASSERT(g_PageModule);
   delete g_PageModule;
   g_PageModule = nullptr;
-  fxcodec::ModuleMgr::Destroy();
 }
 
 // static
diff --git a/core/fxcodec/BUILD.gn b/core/fxcodec/BUILD.gn
index 136d77c..d380db8 100644
--- a/core/fxcodec/BUILD.gn
+++ b/core/fxcodec/BUILD.gn
@@ -90,6 +90,8 @@
     ]
     if (pdf_enable_xfa_bmp) {
       sources += [
+        "bmp/bmp_progressive_decoder.cpp",
+        "bmp/bmp_progressive_decoder.h",
         "bmp/bmpmodule.cpp",
         "bmp/bmpmodule.h",
         "bmp/cfx_bmpcontext.cpp",
diff --git a/core/fxcodec/bmp/bmp_progressive_decoder.cpp b/core/fxcodec/bmp/bmp_progressive_decoder.cpp
new file mode 100644
index 0000000..6af9d64
--- /dev/null
+++ b/core/fxcodec/bmp/bmp_progressive_decoder.cpp
@@ -0,0 +1,34 @@
+// Copyright 2020 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.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "core/fxcodec/bmp/bmp_progressive_decoder.h"
+
+#include "core/fxcodec/bmp/bmpmodule.h"
+#include "core/fxcodec/cfx_codec_memory.h"
+
+namespace fxcodec {
+
+// static
+BmpProgressiveDecoder* BmpProgressiveDecoder::GetInstance() {
+  static pdfium::base::NoDestructor<BmpProgressiveDecoder> s;
+  return s.get();
+}
+
+BmpProgressiveDecoder::BmpProgressiveDecoder() = default;
+
+BmpProgressiveDecoder::~BmpProgressiveDecoder() = default;
+
+FX_FILESIZE BmpProgressiveDecoder::GetAvailInput(Context* context) const {
+  return BmpModule::GetAvailInput(context);
+}
+
+bool BmpProgressiveDecoder::Input(Context* context,
+                                  RetainPtr<CFX_CodecMemory> codec_memory,
+                                  CFX_DIBAttribute* pAttribute) {
+  return BmpModule::Input(context, codec_memory, pAttribute);
+}
+
+}  // namespace fxcodec
diff --git a/core/fxcodec/bmp/bmp_progressive_decoder.h b/core/fxcodec/bmp/bmp_progressive_decoder.h
new file mode 100644
index 0000000..26a354c
--- /dev/null
+++ b/core/fxcodec/bmp/bmp_progressive_decoder.h
@@ -0,0 +1,40 @@
+// Copyright 2020 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.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef CORE_FXCODEC_BMP_BMP_PROGRESSIVE_DECODER_H_
+#define CORE_FXCODEC_BMP_BMP_PROGRESSIVE_DECODER_H_
+
+#include "core/fxcodec/progressive_decoder_iface.h"
+#include "third_party/base/no_destructor.h"
+
+#ifndef PDF_ENABLE_XFA_BMP
+#error "BMP must be enabled"
+#endif
+
+namespace fxcodec {
+
+class BmpProgressiveDecoder final : public ProgressiveDecoderIface {
+ public:
+  static BmpProgressiveDecoder* GetInstance();
+
+  // ProgressiveDecoderIface:
+  FX_FILESIZE GetAvailInput(Context* context) const override;
+  bool Input(Context* context,
+             RetainPtr<CFX_CodecMemory> codec_memory,
+             CFX_DIBAttribute* pAttribute) override;
+
+ private:
+  friend pdfium::base::NoDestructor<BmpProgressiveDecoder>;
+
+  BmpProgressiveDecoder();
+  ~BmpProgressiveDecoder() override;
+};
+
+}  // namespace fxcodec
+
+using BmpProgressiveDecoder = fxcodec::BmpProgressiveDecoder;
+
+#endif  // CORE_FXCODEC_BMP_BMP_PROGRESSIVE_DECODER_H_
diff --git a/core/fxcodec/bmp/bmpmodule.cpp b/core/fxcodec/bmp/bmpmodule.cpp
index 56ffad1..68275ac 100644
--- a/core/fxcodec/bmp/bmpmodule.cpp
+++ b/core/fxcodec/bmp/bmpmodule.cpp
@@ -11,28 +11,28 @@
 #include "core/fxcodec/bmp/cfx_bmpcontext.h"
 #include "core/fxcodec/cfx_codec_memory.h"
 #include "core/fxcodec/fx_codec.h"
+#include "core/fxcodec/fx_codec_def.h"
 #include "core/fxge/fx_dib.h"
 #include "third_party/base/ptr_util.h"
 
 namespace fxcodec {
 
-BmpModule::BmpModule() = default;
-
-BmpModule::~BmpModule() = default;
-
-std::unique_ptr<ProgressiveDecoderIface::Context> BmpModule::Start(
+// static
+std::unique_ptr<ProgressiveDecoderIface::Context> BmpModule::StartDecode(
     Delegate* pDelegate) {
-  return pdfium::MakeUnique<CFX_BmpContext>(this, pDelegate);
+  return pdfium::MakeUnique<CFX_BmpContext>(pDelegate);
 }
 
-BmpModule::Status BmpModule::ReadHeader(Context* pContext,
-                                        int32_t* width,
-                                        int32_t* height,
-                                        bool* tb_flag,
-                                        int32_t* components,
-                                        int32_t* pal_num,
-                                        const std::vector<uint32_t>** palette,
-                                        CFX_DIBAttribute* pAttribute) {
+// static
+BmpModule::Status BmpModule::ReadHeader(
+    ProgressiveDecoderIface::Context* pContext,
+    int32_t* width,
+    int32_t* height,
+    bool* tb_flag,
+    int32_t* components,
+    int32_t* pal_num,
+    const std::vector<uint32_t>** palette,
+    CFX_DIBAttribute* pAttribute) {
   ASSERT(pAttribute);
 
   auto* ctx = static_cast<CFX_BmpContext*>(pContext);
@@ -52,15 +52,20 @@
   return Status::kSuccess;
 }
 
-BmpModule::Status BmpModule::LoadImage(Context* pContext) {
+// static
+BmpModule::Status BmpModule::LoadImage(
+    ProgressiveDecoderIface::Context* pContext) {
   return static_cast<CFX_BmpContext*>(pContext)->m_Bmp.DecodeImage();
 }
 
-FX_FILESIZE BmpModule::GetAvailInput(Context* pContext) const {
+// static
+FX_FILESIZE BmpModule::GetAvailInput(
+    ProgressiveDecoderIface::Context* pContext) {
   return static_cast<CFX_BmpContext*>(pContext)->m_Bmp.GetAvailInput();
 }
 
-bool BmpModule::Input(Context* pContext,
+// static
+bool BmpModule::Input(ProgressiveDecoderIface::Context* pContext,
                       RetainPtr<CFX_CodecMemory> codec_memory,
                       CFX_DIBAttribute*) {
   auto* ctx = static_cast<CFX_BmpContext*>(pContext);
diff --git a/core/fxcodec/bmp/bmpmodule.h b/core/fxcodec/bmp/bmpmodule.h
index a180ceb..08d2c7a 100644
--- a/core/fxcodec/bmp/bmpmodule.h
+++ b/core/fxcodec/bmp/bmpmodule.h
@@ -13,11 +13,15 @@
 #include "core/fxcodec/progressive_decoder_iface.h"
 #include "third_party/base/span.h"
 
+#ifndef PDF_ENABLE_XFA_BMP
+#error "BMP must be enabled"
+#endif
+
 namespace fxcodec {
 
 class CFX_DIBAttribute;
 
-class BmpModule final : public ProgressiveDecoderIface {
+class BmpModule {
  public:
   class Delegate {
    public:
@@ -28,25 +32,25 @@
 
   enum class Status : uint8_t { kFail, kSuccess, kContinue };
 
-  BmpModule();
-  ~BmpModule() override;
-
-  // ProgressiveDecoderIface:
-  FX_FILESIZE GetAvailInput(Context* pContext) const override;
-  bool Input(Context* pContext,
-             RetainPtr<CFX_CodecMemory> codec_memory,
-             CFX_DIBAttribute* pAttribute) override;
-
-  std::unique_ptr<Context> Start(Delegate* pDelegate);
-  Status ReadHeader(Context* pContext,
-                    int32_t* width,
-                    int32_t* height,
-                    bool* tb_flag,
-                    int32_t* components,
-                    int32_t* pal_num,
-                    const std::vector<uint32_t>** palette,
+  static std::unique_ptr<ProgressiveDecoderIface::Context> StartDecode(
+      Delegate* pDelegate);
+  static Status ReadHeader(ProgressiveDecoderIface::Context* pContext,
+                           int32_t* width,
+                           int32_t* height,
+                           bool* tb_flag,
+                           int32_t* components,
+                           int32_t* pal_num,
+                           const std::vector<uint32_t>** palette,
+                           CFX_DIBAttribute* pAttribute);
+  static Status LoadImage(ProgressiveDecoderIface::Context* pContext);
+  static FX_FILESIZE GetAvailInput(ProgressiveDecoderIface::Context* pContext);
+  static bool Input(ProgressiveDecoderIface::Context* pContext,
+                    RetainPtr<CFX_CodecMemory> codec_memory,
                     CFX_DIBAttribute* pAttribute);
-  Status LoadImage(Context* pContext);
+
+  BmpModule() = delete;
+  BmpModule(const BmpModule&) = delete;
+  BmpModule& operator=(const BmpModule&) = delete;
 };
 
 }  // namespace fxcodec
diff --git a/core/fxcodec/bmp/cfx_bmpcontext.cpp b/core/fxcodec/bmp/cfx_bmpcontext.cpp
index a35a585..494dfac 100644
--- a/core/fxcodec/bmp/cfx_bmpcontext.cpp
+++ b/core/fxcodec/bmp/cfx_bmpcontext.cpp
@@ -8,9 +8,8 @@
 
 namespace fxcodec {
 
-CFX_BmpContext::CFX_BmpContext(BmpModule* pModule,
-                               BmpModule::Delegate* pDelegate)
-    : m_Bmp(this), m_pModule(pModule), m_pDelegate(pDelegate) {}
+CFX_BmpContext::CFX_BmpContext(BmpModule::Delegate* pDelegate)
+    : m_Bmp(this), m_pDelegate(pDelegate) {}
 
 CFX_BmpContext::~CFX_BmpContext() = default;
 
diff --git a/core/fxcodec/bmp/cfx_bmpcontext.h b/core/fxcodec/bmp/cfx_bmpcontext.h
index aea65df..0e21d31 100644
--- a/core/fxcodec/bmp/cfx_bmpcontext.h
+++ b/core/fxcodec/bmp/cfx_bmpcontext.h
@@ -16,11 +16,10 @@
 
 class CFX_BmpContext final : public ProgressiveDecoderIface::Context {
  public:
-  CFX_BmpContext(BmpModule* pModule, BmpModule::Delegate* pDelegate);
+  explicit CFX_BmpContext(BmpModule::Delegate* pDelegate);
   ~CFX_BmpContext() override;
 
   CFX_BmpDecompressor m_Bmp;
-  UnownedPtr<BmpModule> const m_pModule;
   UnownedPtr<BmpModule::Delegate> const m_pDelegate;
 };
 
diff --git a/core/fxcodec/fx_codec.cpp b/core/fxcodec/fx_codec.cpp
index b3cd13d..300a0a5 100644
--- a/core/fxcodec/fx_codec.cpp
+++ b/core/fxcodec/fx_codec.cpp
@@ -6,52 +6,10 @@
 
 #include "core/fxcodec/fx_codec.h"
 
-#include <algorithm>
-#include <cmath>
-#include <memory>
-#include <utility>
-
-#include "core/fxcrt/fx_extension.h"
 #include "core/fxcrt/fx_memory.h"
-#include "core/fxcrt/fx_safe_types.h"
-#include "third_party/base/logging.h"
-#include "third_party/base/ptr_util.h"
 
 namespace fxcodec {
 
-namespace {
-
-ModuleMgr* g_ModuleMgr = nullptr;
-
-}  // namespace
-
-// static
-void ModuleMgr::Create() {
-  ASSERT(!g_ModuleMgr);
-  g_ModuleMgr = new ModuleMgr();
-}
-
-// static
-void ModuleMgr::Destroy() {
-  ASSERT(g_ModuleMgr);
-  delete g_ModuleMgr;
-  g_ModuleMgr = nullptr;
-}
-
-// static
-ModuleMgr* ModuleMgr::GetInstance() {
-  ASSERT(g_ModuleMgr);
-  return g_ModuleMgr;
-}
-
-ModuleMgr::ModuleMgr() {
-#ifdef PDF_ENABLE_XFA_BMP
-  SetBmpModule(pdfium::MakeUnique<BmpModule>());
-#endif
-}
-
-ModuleMgr::~ModuleMgr() = default;
-
 #ifdef PDF_ENABLE_XFA
 CFX_DIBAttribute::CFX_DIBAttribute() = default;
 
diff --git a/core/fxcodec/fx_codec.h b/core/fxcodec/fx_codec.h
index f730def..f84e752 100644
--- a/core/fxcodec/fx_codec.h
+++ b/core/fxcodec/fx_codec.h
@@ -8,19 +8,9 @@
 #define CORE_FXCODEC_FX_CODEC_H_
 
 #include <map>
-#include <memory>
-#include <utility>
 
-#include "core/fxcodec/fx_codec_def.h"
-#include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_safe_types.h"
 
-#ifdef PDF_ENABLE_XFA
-#ifdef PDF_ENABLE_XFA_BMP
-#include "core/fxcodec/bmp/bmpmodule.h"
-#endif  // PDF_ENABLE_XFA_BMP
-#endif
-
 namespace fxcodec {
 
 #ifdef PDF_ENABLE_XFA
@@ -36,37 +26,6 @@
 };
 #endif  // PDF_ENABLE_XFA
 
-class ProgressiveDecoder;
-
-class ModuleMgr {
- public:
-  // Per-process singleton managed by callers.
-  static void Create();
-  static void Destroy();
-  static ModuleMgr* GetInstance();
-
-#ifdef PDF_ENABLE_XFA
-  std::unique_ptr<ProgressiveDecoder> CreateProgressiveDecoder();
-
-#ifdef PDF_ENABLE_XFA_BMP
-  BmpModule* GetBmpModule() const { return m_pBmpModule.get(); }
-  void SetBmpModule(std::unique_ptr<BmpModule> module) {
-    m_pBmpModule = std::move(module);
-  }
-#endif  // PDF_ENABLE_XFA_BMP
-#endif  // PDF_ENABLE_XFA
-
- private:
-  ModuleMgr();
-  ~ModuleMgr();
-
-#ifdef PDF_ENABLE_XFA
-#ifdef PDF_ENABLE_XFA_BMP
-  std::unique_ptr<BmpModule> m_pBmpModule;
-#endif  // PDF_ENABLE_XFA_BMP
-#endif  // PDF_ENABLE_XFA
-};
-
 void ReverseRGB(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels);
 
 FX_SAFE_UINT32 CalculatePitch8(uint32_t bpc, uint32_t components, int width);
diff --git a/core/fxcodec/progressivedecoder.cpp b/core/fxcodec/progressivedecoder.cpp
index 96e1466..bbc5c35 100644
--- a/core/fxcodec/progressivedecoder.cpp
+++ b/core/fxcodec/progressivedecoder.cpp
@@ -13,7 +13,6 @@
 
 #include "build/build_config.h"
 #include "core/fxcodec/cfx_codec_memory.h"
-#include "core/fxcodec/fx_codec.h"
 #include "core/fxcodec/jpeg/jpeg_progressive_decoder.h"
 #include "core/fxcrt/fx_safe_types.h"
 #include "core/fxcrt/fx_stream.h"
@@ -23,6 +22,10 @@
 #include "third_party/base/logging.h"
 #include "third_party/base/ptr_util.h"
 
+#ifdef PDF_ENABLE_XFA_BMP
+#include "core/fxcodec/bmp/bmp_progressive_decoder.h"
+#endif  // PDF_ENABLE_XFA_BMP
+
 #ifdef PDF_ENABLE_XFA_GIF
 #include "core/fxcodec/gif/gif_progressive_decoder.h"
 #endif  // PDF_ENABLE_XFA_GIF
@@ -243,8 +246,7 @@
   }
 }
 
-ProgressiveDecoder::ProgressiveDecoder(ModuleMgr* pCodecMgr)
-    : m_pCodecMgr(pCodecMgr) {}
+ProgressiveDecoder::ProgressiveDecoder() = default;
 
 ProgressiveDecoder::~ProgressiveDecoder() = default;
 
@@ -568,8 +570,7 @@
 bool ProgressiveDecoder::BmpInputImagePositionBuf(uint32_t rcd_pos) {
   m_offSet = rcd_pos;
   FXCODEC_STATUS error_status = FXCODEC_STATUS_ERROR;
-  return BmpReadMoreData(m_pCodecMgr->GetBmpModule(), m_pBmpContext.get(),
-                         &error_status);
+  return BmpReadMoreData(m_pBmpContext.get(), &error_status);
 }
 
 void ProgressiveDecoder::BmpReadScanline(uint32_t row_num,
@@ -700,22 +701,21 @@
 
 bool ProgressiveDecoder::BmpDetectImageTypeInBuffer(
     CFX_DIBAttribute* pAttribute) {
-  BmpModule* pBmpModule = m_pCodecMgr->GetBmpModule();
   std::unique_ptr<ProgressiveDecoderIface::Context> pBmpContext =
-      pBmpModule->Start(this);
-  pBmpModule->Input(pBmpContext.get(), m_pCodecMemory, nullptr);
+      BmpModule::StartDecode(this);
+  BmpModule::Input(pBmpContext.get(), m_pCodecMemory, nullptr);
 
   const std::vector<uint32_t>* palette;
-  BmpModule::Status read_result = pBmpModule->ReadHeader(
+  BmpModule::Status read_result = BmpModule::ReadHeader(
       pBmpContext.get(), &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom,
       &m_SrcComponents, &m_SrcPaletteNumber, &palette, pAttribute);
   while (read_result == BmpModule::Status::kContinue) {
     FXCODEC_STATUS error_status = FXCODEC_STATUS_ERR_FORMAT;
-    if (!BmpReadMoreData(pBmpModule, pBmpContext.get(), &error_status)) {
+    if (!BmpReadMoreData(pBmpContext.get(), &error_status)) {
       m_status = error_status;
       return false;
     }
-    read_result = pBmpModule->ReadHeader(
+    read_result = BmpModule::ReadHeader(
         pBmpContext.get(), &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom,
         &m_SrcComponents, &m_SrcPaletteNumber, &palette, pAttribute);
   }
@@ -753,7 +753,7 @@
   }
 
   uint32_t availableData = m_pFile->GetSize() - m_offSet +
-                           pBmpModule->GetAvailInput(pBmpContext.get());
+                           BmpModule::GetAvailInput(pBmpContext.get());
   if (neededData > availableData) {
     m_status = FXCODEC_STATUS_ERR_FORMAT;
     return false;
@@ -773,10 +773,10 @@
 }
 
 bool ProgressiveDecoder::BmpReadMoreData(
-    BmpModule* pBmpModule,
     ProgressiveDecoderIface::Context* pContext,
     FXCODEC_STATUS* err_status) {
-  return ReadMoreData(pBmpModule, pContext, false, err_status);
+  return ReadMoreData(BmpProgressiveDecoder::GetInstance(), pContext, false,
+                      err_status);
 }
 
 FXCODEC_STATUS ProgressiveDecoder::BmpStartDecode(
@@ -791,17 +791,16 @@
 }
 
 FXCODEC_STATUS ProgressiveDecoder::BmpContinueDecode() {
-  BmpModule* pBmpModule = m_pCodecMgr->GetBmpModule();
-  BmpModule::Status read_res = pBmpModule->LoadImage(m_pBmpContext.get());
+  BmpModule::Status read_res = BmpModule::LoadImage(m_pBmpContext.get());
   while (read_res == BmpModule::Status::kContinue) {
     FXCODEC_STATUS error_status = FXCODEC_STATUS_DECODE_FINISH;
-    if (!BmpReadMoreData(pBmpModule, m_pBmpContext.get(), &error_status)) {
+    if (!BmpReadMoreData(m_pBmpContext.get(), &error_status)) {
       m_pDeviceBitmap = nullptr;
       m_pFile = nullptr;
       m_status = error_status;
       return m_status;
     }
-    read_res = pBmpModule->LoadImage(m_pBmpContext.get());
+    read_res = BmpModule::LoadImage(m_pBmpContext.get());
   }
 
   m_pDeviceBitmap = nullptr;
@@ -2246,8 +2245,4 @@
   }
 }
 
-std::unique_ptr<ProgressiveDecoder> ModuleMgr::CreateProgressiveDecoder() {
-  return pdfium::MakeUnique<ProgressiveDecoder>(this);
-}
-
 }  // namespace fxcodec
diff --git a/core/fxcodec/progressivedecoder.h b/core/fxcodec/progressivedecoder.h
index 6c76754..87e3d1c 100644
--- a/core/fxcodec/progressivedecoder.h
+++ b/core/fxcodec/progressivedecoder.h
@@ -37,7 +37,6 @@
 namespace fxcodec {
 
 class CFX_DIBAttribute;
-class ModuleMgr;
 
 class Dummy {};  // Placeholder to work around C++ syntax issues
 
@@ -65,7 +64,7 @@
     FXCodec_Cmyk = 0x120
   };
 
-  explicit ProgressiveDecoder(ModuleMgr* pCodecMgr);
+  ProgressiveDecoder();
   virtual ~ProgressiveDecoder();
 
   FXCODEC_STATUS LoadImageInfo(const RetainPtr<IFX_SeekableReadStream>& pFile,
@@ -176,8 +175,7 @@
 
  private:
 #ifdef PDF_ENABLE_XFA_BMP
-  bool BmpReadMoreData(BmpModule* pBmpModule,
-                       ProgressiveDecoderIface::Context* pBmpContext,
+  bool BmpReadMoreData(ProgressiveDecoderIface::Context* pBmpContext,
                        FXCODEC_STATUS* err_status);
   bool BmpDetectImageTypeInBuffer(CFX_DIBAttribute* pAttribute);
   FXCODEC_STATUS BmpStartDecode(const RetainPtr<CFX_DIBitmap>& pDIBitmap);
@@ -243,7 +241,6 @@
   FXCODEC_IMAGE_TYPE m_imageType = FXCODEC_IMAGE_UNKNOWN;
   RetainPtr<IFX_SeekableReadStream> m_pFile;
   RetainPtr<CFX_DIBitmap> m_pDeviceBitmap;
-  UnownedPtr<ModuleMgr> m_pCodecMgr;
   RetainPtr<CFX_CodecMemory> m_pCodecMemory;
   std::unique_ptr<uint8_t, FxFreeDeleter> m_pDecodeBuf;
   std::unique_ptr<FX_ARGB, FxFreeDeleter> m_pSrcPalette;
diff --git a/core/fxcodec/progressivedecoder_unittest.cpp b/core/fxcodec/progressivedecoder_unittest.cpp
index 0c4b30a..f756f5e 100644
--- a/core/fxcodec/progressivedecoder_unittest.cpp
+++ b/core/fxcodec/progressivedecoder_unittest.cpp
@@ -370,10 +370,8 @@
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
 
-  ModuleMgr::Create();
   {
-    std::unique_ptr<ProgressiveDecoder> decoder =
-        ModuleMgr::GetInstance()->CreateProgressiveDecoder();
+    auto decoder = pdfium::MakeUnique<ProgressiveDecoder>();
 
     auto source = pdfium::MakeRetain<CFX_ReadOnlyMemoryStream>(kInput);
     CFX_DIBAttribute attr;
@@ -398,7 +396,6 @@
       status = decoder->ContinueDecode();
     EXPECT_EQ(FXCODEC_STATUS_DECODE_FINISH, status);
   }
-  ModuleMgr::Destroy();
 }
 #endif  // PDF_ENABLE_XFA_GIF
 
diff --git a/core/fxcodec/tiff/tiff_decoder.cpp b/core/fxcodec/tiff/tiff_decoder.cpp
index f2b86fa..1776c26 100644
--- a/core/fxcodec/tiff/tiff_decoder.cpp
+++ b/core/fxcodec/tiff/tiff_decoder.cpp
@@ -11,6 +11,7 @@
 
 #include "core/fxcodec/cfx_codec_memory.h"
 #include "core/fxcodec/fx_codec.h"
+#include "core/fxcodec/fx_codec_def.h"
 #include "core/fxcrt/fx_safe_types.h"
 #include "core/fxcrt/fx_stream.h"
 #include "core/fxcrt/retain_ptr.h"
diff --git a/testing/fuzzers/xfa_codec_fuzzer.h b/testing/fuzzers/xfa_codec_fuzzer.h
index 427a0c1..ef9ce69 100644
--- a/testing/fuzzers/xfa_codec_fuzzer.h
+++ b/testing/fuzzers/xfa_codec_fuzzer.h
@@ -12,6 +12,7 @@
 #include "core/fxcrt/cfx_readonlymemorystream.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxge/dib/cfx_dibitmap.h"
+#include "third_party/base/ptr_util.h"
 #include "third_party/base/span.h"
 
 // Support up to 64 MB. This prevents trivial OOM when MSAN is on and
@@ -21,9 +22,7 @@
 class XFACodecFuzzer {
  public:
   static int Fuzz(const uint8_t* data, size_t size, FXCODEC_IMAGE_TYPE type) {
-    auto* mgr = fxcodec::ModuleMgr::GetInstance();
-    std::unique_ptr<ProgressiveDecoder> decoder =
-        mgr->CreateProgressiveDecoder();
+    auto decoder = pdfium::MakeUnique<ProgressiveDecoder>();
     auto source = pdfium::MakeRetain<CFX_ReadOnlyMemoryStream>(
         pdfium::make_span(data, size));
     CFX_DIBAttribute attr;
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index 13e7aa6..2515454 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -18,6 +18,7 @@
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/dib/cfx_dibitmap.h"
+#include "third_party/base/ptr_util.h"
 #include "xfa/fwl/fwl_widgethit.h"
 #include "xfa/fxfa/cxfa_eventparam.h"
 #include "xfa/fxfa/cxfa_ffapp.h"
@@ -155,9 +156,7 @@
     FXCODEC_IMAGE_TYPE type,
     int32_t& iImageXDpi,
     int32_t& iImageYDpi) {
-  auto* pCodecMgr = fxcodec::ModuleMgr::GetInstance();
-  std::unique_ptr<ProgressiveDecoder> pProgressiveDecoder =
-      pCodecMgr->CreateProgressiveDecoder();
+  auto pProgressiveDecoder = pdfium::MakeUnique<ProgressiveDecoder>();
 
   CFX_DIBAttribute dibAttr;
   pProgressiveDecoder->LoadImageInfo(pImageFileRead, type, &dibAttr, false);
