diff --git a/fxbarcode/BC_Library.cpp b/fxbarcode/BC_Library.cpp
index 80de23c..393f329 100644
--- a/fxbarcode/BC_Library.cpp
+++ b/fxbarcode/BC_Library.cpp
@@ -8,8 +8,8 @@
 
 #include <stdint.h>
 
-#include "fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h"
 #include "fxbarcode/datamatrix/BC_SymbolInfo.h"
+#include "fxbarcode/qrcode/BC_QRCoderEncoder.h"
 #include "fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h"
 #include "fxbarcode/qrcode/BC_QRCoderMode.h"
 #include "fxbarcode/qrcode/BC_QRCoderVersion.h"
@@ -18,7 +18,7 @@
   CBC_QRCoderErrorCorrectionLevel::Initialize();
   CBC_QRCoderMode::Initialize();
   CBC_QRCoderVersion::Initialize();
-  CBC_ReedSolomonGF256::Initialize();
+  CBC_QRCoderEncoder::Initialize();
   CBC_SymbolInfo::Initialize();
 }
 
@@ -26,6 +26,6 @@
   CBC_QRCoderErrorCorrectionLevel::Finalize();
   CBC_QRCoderMode::Finalize();
   CBC_QRCoderVersion::Finalize();
-  CBC_ReedSolomonGF256::Finalize();
+  CBC_QRCoderEncoder::Finalize();
   CBC_SymbolInfo::Finalize();
 }
diff --git a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
index b0dd0a2..f2d86b3 100644
--- a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
+++ b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
@@ -27,23 +27,6 @@
 #include "fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h"
 #include "third_party/base/ptr_util.h"
 
-CBC_ReedSolomonGF256* CBC_ReedSolomonGF256::QRCodeField = nullptr;
-CBC_ReedSolomonGF256* CBC_ReedSolomonGF256::DataMatrixField = nullptr;
-
-void CBC_ReedSolomonGF256::Initialize() {
-  QRCodeField = new CBC_ReedSolomonGF256(0x011D);
-  QRCodeField->Init();
-  DataMatrixField = new CBC_ReedSolomonGF256(0x012D);
-  DataMatrixField->Init();
-}
-
-void CBC_ReedSolomonGF256::Finalize() {
-  delete QRCodeField;
-  QRCodeField = nullptr;
-  delete DataMatrixField;
-  DataMatrixField = nullptr;
-}
-
 CBC_ReedSolomonGF256::CBC_ReedSolomonGF256(int32_t primitive) {
   int32_t x = 1;
   for (int32_t j = 0; j < 256; j++) {
@@ -68,14 +51,6 @@
 
 CBC_ReedSolomonGF256::~CBC_ReedSolomonGF256() {}
 
-CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::GetZero() const {
-  return m_zero.get();
-}
-
-CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::GetOne() const {
-  return m_one.get();
-}
-
 std::unique_ptr<CBC_ReedSolomonGF256Poly> CBC_ReedSolomonGF256::BuildMonomial(
     int32_t degree,
     int32_t coefficient) {
diff --git a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h
index a9cf7ef..30f5524 100644
--- a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h
+++ b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h
@@ -18,11 +18,9 @@
   explicit CBC_ReedSolomonGF256(int32_t primitive);
   ~CBC_ReedSolomonGF256();
 
-  static void Initialize();
-  static void Finalize();
+  CBC_ReedSolomonGF256Poly* GetZero() const { return m_zero.get(); }
+  CBC_ReedSolomonGF256Poly* GetOne() const { return m_one.get(); }
 
-  CBC_ReedSolomonGF256Poly* GetZero() const;
-  CBC_ReedSolomonGF256Poly* GetOne() const;
   std::unique_ptr<CBC_ReedSolomonGF256Poly> BuildMonomial(int32_t degree,
                                                           int32_t coefficient);
   static int32_t AddOrSubtract(int32_t a, int32_t b);
@@ -31,9 +29,6 @@
   int32_t Multiply(int32_t a, int32_t b);
   void Init();
 
-  static CBC_ReedSolomonGF256* QRCodeField;
-  static CBC_ReedSolomonGF256* DataMatrixField;
-
  private:
   std::unique_ptr<CBC_ReedSolomonGF256Poly> m_zero;
   std::unique_ptr<CBC_ReedSolomonGF256Poly> m_one;
diff --git a/fxbarcode/qrcode/BC_QRCoderEncoder.cpp b/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
index 02f42bf..2ecd3b8 100644
--- a/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
+++ b/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
@@ -44,6 +44,8 @@
 
 namespace {
 
+CBC_ReedSolomonGF256* g_QRCodeField = nullptr;
+
 struct QRCoderBlockPair {
   std::vector<uint8_t> data;
   std::vector<uint8_t> ecc;
@@ -230,7 +232,7 @@
   std::copy(dataBytes.begin(), dataBytes.end(), toEncode.begin());
 
   std::vector<uint8_t> ecBytes;
-  CBC_ReedSolomonEncoder encoder(CBC_ReedSolomonGF256::QRCodeField);
+  CBC_ReedSolomonEncoder encoder(g_QRCodeField);
   if (encoder.Encode(&toEncode, numEcBytesInBlock)) {
     ecBytes = std::vector<uint8_t>(toEncode.begin() + dataBytes.size(),
                                    toEncode.end());
@@ -400,6 +402,18 @@
 }  // namespace
 
 // static
+void CBC_QRCoderEncoder::Initialize() {
+  g_QRCodeField = new CBC_ReedSolomonGF256(0x011D);
+  g_QRCodeField->Init();
+}
+
+// static
+void CBC_QRCoderEncoder::Finalize() {
+  delete g_QRCodeField;
+  g_QRCodeField = nullptr;
+}
+
+// static
 bool CBC_QRCoderEncoder::Encode(WideStringView content,
                                 const CBC_QRCoderErrorCorrectionLevel* ecLevel,
                                 CBC_QRCoder* qrCode) {
diff --git a/fxbarcode/qrcode/BC_QRCoderEncoder.h b/fxbarcode/qrcode/BC_QRCoderEncoder.h
index 75fd2e5..a3af1fc 100644
--- a/fxbarcode/qrcode/BC_QRCoderEncoder.h
+++ b/fxbarcode/qrcode/BC_QRCoderEncoder.h
@@ -17,6 +17,8 @@
   CBC_QRCoderEncoder() = delete;
   ~CBC_QRCoderEncoder() = delete;
 
+  static void Initialize();
+  static void Finalize();
   static bool Encode(WideStringView content,
                      const CBC_QRCoderErrorCorrectionLevel* ecLevel,
                      CBC_QRCoder* qrCode);
