diff --git a/core/fpdfapi/parser/cfdf_document.cpp b/core/fpdfapi/parser/cfdf_document.cpp
index 41e2852..a6045e7 100644
--- a/core/fpdfapi/parser/cfdf_document.cpp
+++ b/core/fpdfapi/parser/cfdf_document.cpp
@@ -45,8 +45,8 @@
 
 std::unique_ptr<CFDF_Document> CFDF_Document::ParseMemory(const uint8_t* pData,
                                                           uint32_t size) {
-  return CFDF_Document::ParseFile(FX_CreateMemoryStream((uint8_t*)pData, size),
-                                  true);
+  return CFDF_Document::ParseFile(
+      IFX_MemoryStream::Create((uint8_t*)pData, size), true);
 }
 
 void CFDF_Document::ParseStream(IFX_SeekableReadStream* pFile, bool bOwnFile) {
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index 1ac6e06..2487484 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -718,7 +718,7 @@
   if (m_pLinearized)
     return true;
 
-  ScopedFileStream file(FX_CreateMemoryStream(pData, (size_t)dwLen, false));
+  ScopedFileStream file(IFX_MemoryStream::Create(pData, (size_t)dwLen, false));
   int32_t offset = GetHeaderOffset(file.get());
   if (offset == -1) {
     m_docStatus = PDF_DATAAVAIL_ERROR;
@@ -753,7 +753,8 @@
     uint8_t buffer[1024];
     m_pFileRead->ReadBlock(buffer, req_pos, dwSize);
 
-    ScopedFileStream file(FX_CreateMemoryStream(buffer, (size_t)dwSize, false));
+    ScopedFileStream file(
+        IFX_MemoryStream::Create(buffer, (size_t)dwSize, false));
     m_syntaxParser.InitParser(file.get(), 0);
     m_syntaxParser.RestorePos(dwSize - 1);
 
@@ -800,7 +801,7 @@
 
     m_pFileRead->ReadBlock(pBuf, m_dwCurrentXRefSteam, iSize);
 
-    ScopedFileStream file(FX_CreateMemoryStream(pBuf, (size_t)iSize, false));
+    ScopedFileStream file(IFX_MemoryStream::Create(pBuf, (size_t)iSize, false));
     m_parser.m_pSyntax->InitParser(file.get(), 0);
 
     bool bNumber;
@@ -1046,7 +1047,7 @@
     if (!m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize))
       return false;
 
-    ScopedFileStream file(FX_CreateMemoryStream(pBuf, (size_t)iSize, false));
+    ScopedFileStream file(IFX_MemoryStream::Create(pBuf, (size_t)iSize, false));
     m_syntaxParser.InitParser(file.get(), 0);
 
     std::unique_ptr<CPDF_Object> pTrailer(
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index 2f432ed..1fae0d6 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -1124,7 +1124,7 @@
   if (!pObjStream)
     return nullptr;
 
-  ScopedFileStream file(FX_CreateMemoryStream(
+  ScopedFileStream file(IFX_MemoryStream::Create(
       (uint8_t*)pObjStream->GetData(), (size_t)pObjStream->GetSize(), false));
   CPDF_SyntaxParser syntax;
   syntax.InitParser(file.get(), 0);
@@ -1204,7 +1204,7 @@
     const uint8_t* pData = pObjStream->GetData();
     uint32_t totalsize = pObjStream->GetSize();
     ScopedFileStream file(
-        FX_CreateMemoryStream((uint8_t*)pData, (size_t)totalsize, false));
+        IFX_MemoryStream::Create((uint8_t*)pData, (size_t)totalsize, false));
 
     CPDF_SyntaxParser syntax;
     syntax.InitParser(file.get(), 0);
diff --git a/core/fpdfapi/parser/cpdf_parser_unittest.cpp b/core/fpdfapi/parser/cpdf_parser_unittest.cpp
index 7148c54..0a70103 100644
--- a/core/fpdfapi/parser/cpdf_parser_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_parser_unittest.cpp
@@ -45,7 +45,8 @@
 
   // Setup reading from a file and initial states.
   bool InitTestFromFile(const FX_CHAR* path) {
-    IFX_SeekableReadStream* pFileAccess = FX_CreateFileRead(path);
+    IFX_SeekableReadStream* pFileAccess =
+        IFX_SeekableReadStream::CreateFromFilename(path);
     if (!pFileAccess)
       return false;
 
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser_unittest.cpp b/core/fpdfapi/parser/cpdf_syntax_parser_unittest.cpp
index a23c0ed..f94b431 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser_unittest.cpp
@@ -16,7 +16,7 @@
   {
     // Empty string.
     uint8_t data[] = "";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 0, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 0, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
@@ -27,7 +27,7 @@
   {
     // Blank string.
     uint8_t data[] = "  ";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 2, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 2, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
@@ -38,7 +38,7 @@
   {
     // Skips unknown characters.
     uint8_t data[] = "z12b";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 4, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 4, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
@@ -49,7 +49,7 @@
   {
     // Skips unknown characters.
     uint8_t data[] = "*<&*#$^&@1";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 10, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 10, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
@@ -60,7 +60,7 @@
   {
     // Skips unknown characters.
     uint8_t data[] = "\x80zab";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 4, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 4, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
@@ -71,7 +71,7 @@
   {
     // Skips unknown characters.
     uint8_t data[] = "\xffzab";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 4, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 4, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
@@ -82,7 +82,7 @@
   {
     // Regular conversion.
     uint8_t data[] = "1A2b>abcd";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 9, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 9, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
@@ -93,7 +93,7 @@
   {
     // Position out of bounds.
     uint8_t data[] = "12ab>";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 5, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 5, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
@@ -117,7 +117,7 @@
   {
     // Missing ending >.
     uint8_t data[] = "1A2b";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 4, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 4, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
@@ -128,7 +128,7 @@
   {
     // Missing ending >.
     uint8_t data[] = "12abz";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 5, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 5, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
@@ -139,7 +139,7 @@
   {
     // Uneven number of bytes.
     uint8_t data[] = "1A2>asdf";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 8, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 8, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
@@ -150,7 +150,7 @@
   {
     // Uneven number of bytes.
     uint8_t data[] = "1A2zasdf";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 8, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 8, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
@@ -161,7 +161,7 @@
   {
     // Just ending character.
     uint8_t data[] = ">";
-    ScopedFileStream stream(FX_CreateMemoryStream(data, 1, false));
+    ScopedFileStream stream(IFX_MemoryStream::Create(data, 1, false));
 
     CPDF_SyntaxParser parser;
     parser.InitParser(stream.get(), 0);
diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp
index 39bf028..6bf61f1 100644
--- a/core/fxcrt/fx_extension.cpp
+++ b/core/fxcrt/fx_extension.cpp
@@ -40,7 +40,7 @@
 }
 
 IFX_SeekableStream* CFX_CRTFileAccess::CreateFileStream(uint32_t dwModes) {
-  return FX_CreateFileStream(m_path.c_str(), dwModes);
+  return IFX_SeekableStream::CreateFromFilename(m_path.c_str(), dwModes);
 }
 
 bool CFX_CRTFileAccess::Init(const CFX_WideStringC& wsPath) {
@@ -338,33 +338,41 @@
 }
 #endif  // PDF_ENABLE_XFA
 
-IFX_SeekableStream* FX_CreateFileStream(const FX_CHAR* filename,
-                                        uint32_t dwModes) {
+// static
+IFX_SeekableStream* IFX_SeekableStream::CreateFromFilename(
+    const FX_CHAR* filename,
+    uint32_t dwModes) {
   std::unique_ptr<IFXCRT_FileAccess> pFA(IFXCRT_FileAccess::Create());
   if (!pFA->Open(filename, dwModes))
     return nullptr;
   return new CFX_CRTFileStream(std::move(pFA));
 }
 
-IFX_SeekableStream* FX_CreateFileStream(const FX_WCHAR* filename,
-                                        uint32_t dwModes) {
+// static
+IFX_SeekableStream* IFX_SeekableStream::CreateFromFilename(
+    const FX_WCHAR* filename,
+    uint32_t dwModes) {
   std::unique_ptr<IFXCRT_FileAccess> pFA(IFXCRT_FileAccess::Create());
   if (!pFA->Open(filename, dwModes))
     return nullptr;
   return new CFX_CRTFileStream(std::move(pFA));
 }
-IFX_SeekableReadStream* FX_CreateFileRead(const FX_CHAR* filename) {
-  return FX_CreateFileStream(filename, FX_FILEMODE_ReadOnly);
+
+// static
+IFX_SeekableReadStream* IFX_SeekableReadStream::CreateFromFilename(
+    const FX_CHAR* filename) {
+  return IFX_SeekableStream::CreateFromFilename(filename, FX_FILEMODE_ReadOnly);
 }
-IFX_SeekableReadStream* FX_CreateFileRead(const FX_WCHAR* filename) {
-  return FX_CreateFileStream(filename, FX_FILEMODE_ReadOnly);
-}
-IFX_MemoryStream* FX_CreateMemoryStream(uint8_t* pBuffer,
-                                        size_t dwSize,
-                                        bool bTakeOver) {
+
+// static
+IFX_MemoryStream* IFX_MemoryStream::Create(uint8_t* pBuffer,
+                                           size_t dwSize,
+                                           bool bTakeOver) {
   return new CFX_MemoryStream(pBuffer, dwSize, bTakeOver);
 }
-IFX_MemoryStream* FX_CreateMemoryStream(bool bConsecutive) {
+
+// static
+IFX_MemoryStream* IFX_MemoryStream::Create(bool bConsecutive) {
   return new CFX_MemoryStream(bConsecutive);
 }
 
diff --git a/core/fxcrt/fx_stream.h b/core/fxcrt/fx_stream.h
index dc687cf..fe92c93 100644
--- a/core/fxcrt/fx_stream.h
+++ b/core/fxcrt/fx_stream.h
@@ -85,6 +85,8 @@
 
 class IFX_SeekableReadStream : public IFX_ReadStream {
  public:
+  static IFX_SeekableReadStream* CreateFromFilename(const FX_CHAR* filename);
+
   // IFX_ReadStream:
   void Release() override = 0;
   bool IsEOF() override;
@@ -95,12 +97,14 @@
   virtual FX_FILESIZE GetSize() = 0;
 };
 
-IFX_SeekableReadStream* FX_CreateFileRead(const FX_CHAR* filename);
-IFX_SeekableReadStream* FX_CreateFileRead(const FX_WCHAR* filename);
-
 class IFX_SeekableStream : public IFX_SeekableReadStream,
                            public IFX_SeekableWriteStream {
  public:
+  static IFX_SeekableStream* CreateFromFilename(const FX_CHAR* filename,
+                                                uint32_t dwModes);
+  static IFX_SeekableStream* CreateFromFilename(const FX_WCHAR* filename,
+                                                uint32_t dwModes);
+
   virtual IFX_SeekableStream* Retain() = 0;
 
   // IFX_SeekableReadStream:
@@ -119,11 +123,6 @@
   bool Flush() override = 0;
 };
 
-IFX_SeekableStream* FX_CreateFileStream(const FX_CHAR* filename,
-                                        uint32_t dwModes);
-IFX_SeekableStream* FX_CreateFileStream(const FX_WCHAR* filename,
-                                        uint32_t dwModes);
-
 #ifdef PDF_ENABLE_XFA
 class IFX_FileAccess {
  public:
@@ -138,6 +137,11 @@
 
 class IFX_MemoryStream : public IFX_SeekableStream {
  public:
+  static IFX_MemoryStream* Create(uint8_t* pBuffer,
+                                  size_t nSize,
+                                  bool bTakeOver = false);
+  static IFX_MemoryStream* Create(bool bConsecutive = false);
+
   virtual bool IsConsecutive() const = 0;
   virtual void EstimateSize(size_t nInitSize, size_t nGrowSize) = 0;
   virtual uint8_t* GetBuffer() const = 0;
@@ -147,11 +151,6 @@
   virtual void DetachBuffer() = 0;
 };
 
-IFX_MemoryStream* FX_CreateMemoryStream(uint8_t* pBuffer,
-                                        size_t nSize,
-                                        bool bTakeOver = false);
-IFX_MemoryStream* FX_CreateMemoryStream(bool bConsecutive = false);
-
 class IFX_BufferRead : public IFX_ReadStream {
  public:
   // IFX_ReadStream:
diff --git a/fpdfsdk/fpdfsave.cpp b/fpdfsdk/fpdfsave.cpp
index cb01ab6..c65ff88 100644
--- a/fpdfsdk/fpdfsave.cpp
+++ b/fpdfsdk/fpdfsave.cpp
@@ -136,7 +136,7 @@
     streamAcc.LoadAllData(pTemplateStream);
     uint8_t* pData = (uint8_t*)streamAcc.GetData();
     uint32_t dwSize2 = streamAcc.GetSize();
-    ScopedFileStream pTemplate(FX_CreateMemoryStream(pData, dwSize2));
+    ScopedFileStream pTemplate(IFX_MemoryStream::Create(pData, dwSize2));
     pChecksum->UpdateChecksum(pTemplate.get());
   }
   CPDF_Stream* pFormStream = nullptr;
@@ -169,7 +169,7 @@
   }
   // L"datasets"
   {
-    ScopedFileStream pDsfileWrite(FX_CreateMemoryStream());
+    ScopedFileStream pDsfileWrite(IFX_MemoryStream::Create());
     if (pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Datasets,
                                            pDsfileWrite.get(), nullptr) &&
         pDsfileWrite->GetSize() > 0) {
@@ -196,7 +196,7 @@
   }
   // L"form"
   {
-    ScopedFileStream pfileWrite(FX_CreateMemoryStream());
+    ScopedFileStream pfileWrite(IFX_MemoryStream::Create());
     if (pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Form, pfileWrite.get(),
                                            pChecksum.get()) &&
         pfileWrite->GetSize() > 0) {
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp
index c7cc124..1c27b6c 100644
--- a/fpdfsdk/fpdfview.cpp
+++ b/fpdfsdk/fpdfview.cpp
@@ -393,16 +393,14 @@
   // NOTE: the creation of the file needs to be by the embedder on the
   // other side of this API.
   IFX_SeekableReadStream* pFileAccess =
-      FX_CreateFileRead((const FX_CHAR*)file_path);
-  if (!pFileAccess) {
+      IFX_SeekableReadStream::CreateFromFilename((const FX_CHAR*)file_path);
+  if (!pFileAccess)
     return nullptr;
-  }
 
-  std::unique_ptr<CPDF_Parser> pParser(new CPDF_Parser);
+  auto pParser = pdfium::MakeUnique<CPDF_Parser>();
   pParser->SetPassword(password);
 
-  std::unique_ptr<CPDF_Document> pDocument(
-      new CPDF_Document(std::move(pParser)));
+  auto pDocument = pdfium::MakeUnique<CPDF_Document>(std::move(pParser));
   CPDF_Parser::Error error =
       pDocument->GetParser()->StartParse(pFileAccess, pDocument.get());
   if (error != CPDF_Parser::SUCCESS) {
diff --git a/testing/libfuzzer/pdf_cfx_saxreader_fuzzer.cc b/testing/libfuzzer/pdf_cfx_saxreader_fuzzer.cc
index b32a182..923a732 100644
--- a/testing/libfuzzer/pdf_cfx_saxreader_fuzzer.cc
+++ b/testing/libfuzzer/pdf_cfx_saxreader_fuzzer.cc
@@ -18,7 +18,7 @@
 
   std::unique_ptr<IFX_SeekableReadStream,
                   ReleaseDeleter<IFX_SeekableReadStream>>
-      fileRead(FX_CreateFileRead(stream.get(), false));
+      fileRead(stream->MakeSeekableReadStream());
   if (!fileRead)
     return 0;
 
diff --git a/xfa/fgas/crt/fgas_stream.cpp b/xfa/fgas/crt/fgas_stream.cpp
index c3850c0..73d3d0b 100644
--- a/xfa/fgas/crt/fgas_stream.cpp
+++ b/xfa/fgas/crt/fgas_stream.cpp
@@ -1452,10 +1452,8 @@
   return pShared;
 }
 
-IFX_SeekableReadStream* FX_CreateFileRead(IFX_Stream* pBaseStream,
-                                          bool bReleaseStream) {
-  ASSERT(pBaseStream);
-  return new CFGAS_FileRead(pBaseStream, bReleaseStream);
+IFX_SeekableReadStream* IFX_Stream::MakeSeekableReadStream() {
+  return new CFGAS_FileRead(this, false);
 }
 
 CFGAS_FileRead::CFGAS_FileRead(IFX_Stream* pStream, bool bReleaseStream)
diff --git a/xfa/fgas/crt/fgas_stream.h b/xfa/fgas/crt/fgas_stream.h
index 674007e..413927d 100644
--- a/xfa/fgas/crt/fgas_stream.h
+++ b/xfa/fgas/crt/fgas_stream.h
@@ -37,6 +37,7 @@
                                   uint32_t dwAccess);
   static IFX_Stream* CreateTextStream(IFX_Stream* pBaseStream,
                                       bool bDeleteOnRelease);
+
   virtual ~IFX_Stream() {}
   virtual void Release() = 0;
   virtual IFX_Stream* Retain() = 0;
@@ -61,9 +62,9 @@
   virtual int32_t GetBOM(uint8_t bom[4]) const = 0;
   virtual uint16_t GetCodePage() const = 0;
   virtual uint16_t SetCodePage(uint16_t wCodePage) = 0;
+
+  IFX_SeekableReadStream* MakeSeekableReadStream();
 };
 
-IFX_SeekableReadStream* FX_CreateFileRead(IFX_Stream* pBaseStream,
-                                          bool bReleaseStream);
 
 #endif  // XFA_FGAS_CRT_FGAS_STREAM_H_
diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 9b95318..219e67d 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -909,7 +909,7 @@
   uint8_t* pBuffer = FX_Alloc(uint8_t, dwFileSize + 1);
   dwFileSize = pSystemFontInfo->GetFontData(hFont, 0, pBuffer, dwFileSize);
 
-  return FX_CreateMemoryStream(pBuffer, dwFileSize, true);
+  return IFX_MemoryStream::Create(pBuffer, dwFileSize, true);
 }
 
 IFX_SeekableReadStream* CFGAS_FontMgr::CreateFontStream(
diff --git a/xfa/fgas/font/cfgas_gefont.cpp b/xfa/fgas/font/cfgas_gefont.cpp
index ffe791a..c1dfa2b 100644
--- a/xfa/fgas/font/cfgas_gefont.cpp
+++ b/xfa/fgas/font/cfgas_gefont.cpp
@@ -209,7 +209,7 @@
   if (bSaveStream)
     m_pStream.reset(pFontStream);
 
-  m_pFileRead.reset(FX_CreateFileRead(pFontStream, false));
+  m_pFileRead.reset(pFontStream->MakeSeekableReadStream());
   m_pFont = new CFX_Font;
   if (m_pFont->LoadFile(m_pFileRead.get()))
     return InitFont();
diff --git a/xfa/fxfa/app/xfa_ffdoc.cpp b/xfa/fxfa/app/xfa_ffdoc.cpp
index 1b5665b..cf5b289 100644
--- a/xfa/fxfa/app/xfa_ffdoc.cpp
+++ b/xfa/fxfa/app/xfa_ffdoc.cpp
@@ -417,8 +417,8 @@
   CPDF_StreamAcc streamAcc;
   streamAcc.LoadAllData(pStream);
 
-  IFX_SeekableReadStream* pImageFileRead =
-      FX_CreateMemoryStream((uint8_t*)streamAcc.GetData(), streamAcc.GetSize());
+  IFX_SeekableReadStream* pImageFileRead = IFX_MemoryStream::Create(
+      (uint8_t*)streamAcc.GetData(), streamAcc.GetSize());
 
   CFX_DIBitmap* pDibSource = XFA_LoadImageFromBuffer(
       pImageFileRead, FXCODEC_IMAGE_UNKNOWN, iImageXDpi, iImageYDpi);
diff --git a/xfa/fxfa/app/xfa_ffwidget.cpp b/xfa/fxfa/app/xfa_ffwidget.cpp
index e6c0c59..bc1854e 100644
--- a/xfa/fxfa/app/xfa_ffwidget.cpp
+++ b/xfa/fxfa/app/xfa_ffwidget.cpp
@@ -1066,11 +1066,11 @@
       pImageBuffer = FX_Alloc(uint8_t, iLength);
       int32_t iRead = XFA_Base64Decode(bsData.c_str(), pImageBuffer);
       if (iRead > 0) {
-        pImageFileRead = FX_CreateMemoryStream(pImageBuffer, iRead);
+        pImageFileRead = IFX_MemoryStream::Create(pImageBuffer, iRead);
       }
     } else {
       bsContent = CFX_ByteString::FromUnicode(wsImage);
-      pImageFileRead = FX_CreateMemoryStream(
+      pImageFileRead = IFX_MemoryStream::Create(
           const_cast<uint8_t*>(bsContent.raw_str()), bsContent.GetLength());
     }
   } else {
diff --git a/xfa/fxfa/parser/cxfa_dataexporter.cpp b/xfa/fxfa/parser/cxfa_dataexporter.cpp
index ad9693f..1ec9c44 100644
--- a/xfa/fxfa/parser/cxfa_dataexporter.cpp
+++ b/xfa/fxfa/parser/cxfa_dataexporter.cpp
@@ -197,7 +197,7 @@
         if (!pRichTextXML)
           break;
 
-        IFX_MemoryStream* pMemStream = FX_CreateMemoryStream(true);
+        IFX_MemoryStream* pMemStream = IFX_MemoryStream::Create(true);
         IFX_Stream* pTempStream = IFX_Stream::CreateStream(
             (IFX_SeekableWriteStream*)pMemStream, FX_STREAMACCESS_Text |
                                                       FX_STREAMACCESS_Write |
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 18ea414..05ddcfc 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -1442,7 +1442,7 @@
       XFA_DataExporter_DealWithDataGroupNode(this);
     }
     std::unique_ptr<IFX_MemoryStream, ReleaseDeleter<IFX_MemoryStream>>
-        pMemoryStream(FX_CreateMemoryStream(true));
+        pMemoryStream(IFX_MemoryStream::Create(true));
     std::unique_ptr<IFX_Stream, ReleaseDeleter<IFX_Stream>> pStream(
         IFX_Stream::CreateStream(
             static_cast<IFX_SeekableWriteStream*>(pMemoryStream.get()),
