diff --git a/BUILD.gn b/BUILD.gn
index 73d339f..adf318e 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -436,9 +436,10 @@
     "core/fpdfapi/cpdf_pagerendercontext.cpp",
     "core/fpdfapi/cpdf_pagerendercontext.h",
     "core/fpdfapi/edit/cpdf_creator.h",
+    "core/fpdfapi/edit/cpdf_objectstream.h",
     "core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp",
     "core/fpdfapi/edit/cpdf_pagecontentgenerator.h",
-    "core/fpdfapi/edit/editint.h",
+    "core/fpdfapi/edit/cpdf_xrefstream.h",
     "core/fpdfapi/edit/fpdf_edit_create.cpp",
     "core/fpdfapi/font/cpdf_cidfont.cpp",
     "core/fpdfapi/font/cpdf_cidfont.h",
diff --git a/core/fpdfapi/edit/cpdf_objectstream.h b/core/fpdfapi/edit/cpdf_objectstream.h
new file mode 100644
index 0000000..3e5c5a7
--- /dev/null
+++ b/core/fpdfapi/edit/cpdf_objectstream.h
@@ -0,0 +1,40 @@
+// Copyright 2017 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_FPDFAPI_EDIT_CPDF_OBJECTSTREAM_H_
+#define CORE_FPDFAPI_EDIT_CPDF_OBJECTSTREAM_H_
+
+#include <vector>
+
+#include "core/fxcrt/fx_basic.h"
+
+class CPDF_Creator;
+class CPDF_Object;
+
+class CPDF_ObjectStream {
+ public:
+  struct Item {
+    uint32_t objnum;
+    FX_STRSIZE offset;
+  };
+
+  CPDF_ObjectStream();
+  ~CPDF_ObjectStream();
+
+  void Start();
+  FX_FILESIZE End(CPDF_Creator* pCreator);
+  void CompressIndirectObject(uint32_t dwObjNum, const CPDF_Object* pObj);
+  void CompressIndirectObject(uint32_t dwObjNum,
+                              const uint8_t* pBuffer,
+                              uint32_t dwSize);
+
+  std::vector<Item> m_Items;
+  CFX_ByteTextBuf m_Buffer;
+  uint32_t m_dwObjNum;
+  int32_t m_index;
+};
+
+#endif  // CORE_FPDFAPI_EDIT_CPDF_OBJECTSTREAM_H_
diff --git a/core/fpdfapi/edit/cpdf_xrefstream.h b/core/fpdfapi/edit/cpdf_xrefstream.h
new file mode 100644
index 0000000..cb11261
--- /dev/null
+++ b/core/fpdfapi/edit/cpdf_xrefstream.h
@@ -0,0 +1,50 @@
+// Copyright 2017 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_FPDFAPI_EDIT_CPDF_XREFSTREAM_H_
+#define CORE_FPDFAPI_EDIT_CPDF_XREFSTREAM_H_
+
+#include <vector>
+
+class CPDF_Creator;
+class CPDF_Object;
+
+class CPDF_XRefStream {
+ public:
+  struct Index {
+    uint32_t objnum;
+    uint32_t count;
+  };
+
+  CPDF_XRefStream();
+  ~CPDF_XRefStream();
+
+  bool Start();
+  int32_t CompressIndirectObject(uint32_t dwObjNum,
+                                 const CPDF_Object* pObj,
+                                 CPDF_Creator* pCreator);
+  int32_t CompressIndirectObject(uint32_t dwObjNum,
+                                 const uint8_t* pBuffer,
+                                 uint32_t dwSize,
+                                 CPDF_Creator* pCreator);
+  bool End(CPDF_Creator* pCreator, bool bEOF);
+  void AddObjectNumberToIndexArray(uint32_t objnum);
+  bool EndXRefStream(CPDF_Creator* pCreator);
+
+  std::vector<Index> m_IndexArray;
+  FX_FILESIZE m_PrevOffset;
+  uint32_t m_dwTempObjNum;
+
+ protected:
+  int32_t EndObjectStream(CPDF_Creator* pCreator, bool bEOF);
+  bool GenerateXRefStream(CPDF_Creator* pCreator, bool bEOF);
+
+  size_t m_iSeg;
+  CPDF_ObjectStream m_ObjStream;
+  CFX_ByteTextBuf m_Buffer;
+};
+
+#endif  // CORE_FPDFAPI_EDIT_CPDF_XREFSTREAM_H_
diff --git a/core/fpdfapi/edit/editint.h b/core/fpdfapi/edit/editint.h
deleted file mode 100644
index 881c2cc..0000000
--- a/core/fpdfapi/edit/editint.h
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2014 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_FPDFAPI_EDIT_EDITINT_H_
-#define CORE_FPDFAPI_EDIT_EDITINT_H_
-
-#include <vector>
-
-#include "core/fxcrt/fx_basic.h"
-#include "core/fxcrt/fx_stream.h"
-#include "core/fxcrt/fx_system.h"
-
-class CPDF_Creator;
-class CPDF_Object;
-
-class CPDF_ObjectStream {
- public:
-  struct Item {
-    uint32_t objnum;
-    FX_STRSIZE offset;
-  };
-
-  CPDF_ObjectStream();
-  ~CPDF_ObjectStream();
-
-  void Start();
-  FX_FILESIZE End(CPDF_Creator* pCreator);
-  void CompressIndirectObject(uint32_t dwObjNum, const CPDF_Object* pObj);
-  void CompressIndirectObject(uint32_t dwObjNum,
-                              const uint8_t* pBuffer,
-                              uint32_t dwSize);
-
-  std::vector<Item> m_Items;
-  CFX_ByteTextBuf m_Buffer;
-  uint32_t m_dwObjNum;
-  int32_t m_index;
-};
-
-class CPDF_XRefStream {
- public:
-  struct Index {
-    uint32_t objnum;
-    uint32_t count;
-  };
-
-  CPDF_XRefStream();
-  ~CPDF_XRefStream();
-
-  bool Start();
-  int32_t CompressIndirectObject(uint32_t dwObjNum,
-                                 const CPDF_Object* pObj,
-                                 CPDF_Creator* pCreator);
-  int32_t CompressIndirectObject(uint32_t dwObjNum,
-                                 const uint8_t* pBuffer,
-                                 uint32_t dwSize,
-                                 CPDF_Creator* pCreator);
-  bool End(CPDF_Creator* pCreator, bool bEOF = false);
-  void AddObjectNumberToIndexArray(uint32_t objnum);
-  bool EndXRefStream(CPDF_Creator* pCreator);
-
-  std::vector<Index> m_IndexArray;
-  FX_FILESIZE m_PrevOffset;
-  uint32_t m_dwTempObjNum;
-
- protected:
-  int32_t EndObjectStream(CPDF_Creator* pCreator, bool bEOF = true);
-  bool GenerateXRefStream(CPDF_Creator* pCreator, bool bEOF);
-
-  size_t m_iSeg;
-  CPDF_ObjectStream m_ObjStream;
-  CFX_ByteTextBuf m_Buffer;
-};
-
-#endif  // CORE_FPDFAPI_EDIT_EDITINT_H_
diff --git a/core/fpdfapi/edit/fpdf_edit_create.cpp b/core/fpdfapi/edit/fpdf_edit_create.cpp
index ecae681..42fe13d 100644
--- a/core/fpdfapi/edit/fpdf_edit_create.cpp
+++ b/core/fpdfapi/edit/fpdf_edit_create.cpp
@@ -4,12 +4,12 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fpdfapi/edit/editint.h"
-
 #include <memory>
 #include <vector>
 
 #include "core/fpdfapi/edit/cpdf_creator.h"
+#include "core/fpdfapi/edit/cpdf_objectstream.h"
+#include "core/fpdfapi/edit/cpdf_xrefstream.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_crypto_handler.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
@@ -420,7 +420,7 @@
       m_ObjStream.m_Buffer.GetLength() < kObjectStreamMaxLength) {
     return 1;
   }
-  return EndObjectStream(pCreator);
+  return EndObjectStream(pCreator, true);
 }
 
 int32_t CPDF_XRefStream::CompressIndirectObject(uint32_t dwObjNum,
@@ -436,7 +436,7 @@
       m_ObjStream.m_Buffer.GetLength() < kObjectStreamMaxLength) {
     return 1;
   }
-  return EndObjectStream(pCreator);
+  return EndObjectStream(pCreator, true);
 }
 
 int32_t CPDF_XRefStream::EndObjectStream(CPDF_Creator* pCreator, bool bEOF) {
@@ -728,7 +728,7 @@
     return -1;
   if (!IsXRefNeedEnd())
     return 0;
-  if (!m_pXRefStream->End(this))
+  if (!m_pXRefStream->End(this, false))
     return -1;
   if (!m_pXRefStream->Start())
     return -1;
@@ -747,7 +747,7 @@
     return iRet;
   if (!IsXRefNeedEnd())
     return 0;
-  if (!m_pXRefStream->End(this))
+  if (!m_pXRefStream->End(this, false))
     return -1;
   if (!m_pXRefStream->Start())
     return -1;
@@ -761,7 +761,7 @@
   m_pXRefStream->AddObjectNumberToIndexArray(objnum);
   if (!IsXRefNeedEnd())
     return 0;
-  if (!m_pXRefStream->End(this))
+  if (!m_pXRefStream->End(this, false))
     return -1;
   if (!m_pXRefStream->Start())
     return -1;
