diff --git a/BUILD.gn b/BUILD.gn
index 4125d0f..bf28674 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -543,6 +543,8 @@
     "core/fpdfapi/render/cpdf_charposlist.h",
     "core/fpdfapi/render/cpdf_devicebuffer.cpp",
     "core/fpdfapi/render/cpdf_devicebuffer.h",
+    "core/fpdfapi/render/cpdf_dibtransferfunc.cpp",
+    "core/fpdfapi/render/cpdf_dibtransferfunc.h",
     "core/fpdfapi/render/cpdf_docrenderdata.cpp",
     "core/fpdfapi/render/cpdf_docrenderdata.h",
     "core/fpdfapi/render/cpdf_imagecacheentry.cpp",
@@ -563,6 +565,7 @@
     "core/fpdfapi/render/cpdf_renderstatus.h",
     "core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp",
     "core/fpdfapi/render/cpdf_scaledrenderbuffer.h",
+    "core/fpdfapi/render/cpdf_textrenderer.cpp",
     "core/fpdfapi/render/cpdf_textrenderer.h",
     "core/fpdfapi/render/cpdf_transferfunc.cpp",
     "core/fpdfapi/render/cpdf_transferfunc.h",
@@ -570,9 +573,7 @@
     "core/fpdfapi/render/cpdf_type3cache.h",
     "core/fpdfapi/render/cpdf_type3glyphs.cpp",
     "core/fpdfapi/render/cpdf_type3glyphs.h",
-    "core/fpdfapi/render/fpdf_render_image.cpp",
     "core/fpdfapi/render/fpdf_render_loadimage.cpp",
-    "core/fpdfapi/render/fpdf_render_text.cpp",
     "core/fpdfapi/render/render_int.h",
   ]
   configs += [ ":pdfium_core_config" ]
diff --git a/core/fpdfapi/render/fpdf_render_image.cpp b/core/fpdfapi/render/cpdf_dibtransferfunc.cpp
similarity index 77%
rename from core/fpdfapi/render/fpdf_render_image.cpp
rename to core/fpdfapi/render/cpdf_dibtransferfunc.cpp
index da5eda2..41575fc 100644
--- a/core/fpdfapi/render/fpdf_render_image.cpp
+++ b/core/fpdfapi/render/cpdf_dibtransferfunc.cpp
@@ -1,47 +1,29 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
+// Copyright 2016 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/fpdfapi/render/render_int.h"
+#include "core/fpdfapi/render/cpdf_dibtransferfunc.h"
 
-#include <memory>
-#include <utility>
 #include <vector>
 
-#include "core/fpdfapi/page/cpdf_docpagedata.h"
-#include "core/fpdfapi/page/cpdf_form.h"
-#include "core/fpdfapi/page/cpdf_image.h"
-#include "core/fpdfapi/page/cpdf_imageobject.h"
-#include "core/fpdfapi/page/cpdf_page.h"
-#include "core/fpdfapi/page/cpdf_shadingpattern.h"
-#include "core/fpdfapi/page/cpdf_tilingpattern.h"
-#include "core/fpdfapi/page/pageint.h"
-#include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
-#include "core/fpdfapi/parser/cpdf_document.h"
-#include "core/fpdfapi/render/cpdf_pagerendercache.h"
-#include "core/fpdfapi/render/cpdf_rendercontext.h"
-#include "core/fpdfapi/render/cpdf_renderoptions.h"
-#include "core/fpdfapi/render/cpdf_renderstatus.h"
 #include "core/fpdfapi/render/cpdf_transferfunc.h"
-#include "core/fpdfdoc/cpdf_occontext.h"
-#include "core/fxcodec/fx_codec.h"
-#include "core/fxcrt/fx_safe_types.h"
-#include "core/fxge/cfx_fxgedevice.h"
-#include "core/fxge/cfx_pathdata.h"
 
-#ifdef _SKIA_SUPPORT_
-#include "core/fxge/skia/fx_skia_device.h"
-#endif
+CPDF_DIBTransferFunc::CPDF_DIBTransferFunc(
+    const CPDF_TransferFunc* pTransferFunc) {
+  m_RampR = pTransferFunc->m_Samples;
+  m_RampG = &pTransferFunc->m_Samples[256];
+  m_RampB = &pTransferFunc->m_Samples[512];
+}
 
 CPDF_DIBTransferFunc::~CPDF_DIBTransferFunc() {}
 
 FXDIB_Format CPDF_DIBTransferFunc::GetDestFormat() {
-  if (m_pSrc->IsAlphaMask()) {
+  if (m_pSrc->IsAlphaMask())
     return FXDIB_8bppMask;
-  }
+
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
   return (m_pSrc->HasAlpha()) ? FXDIB_Argb : FXDIB_Rgb32;
 #else
@@ -53,13 +35,6 @@
   return nullptr;
 }
 
-CPDF_DIBTransferFunc::CPDF_DIBTransferFunc(
-    const CPDF_TransferFunc* pTransferFunc) {
-  m_RampR = pTransferFunc->m_Samples;
-  m_RampG = &pTransferFunc->m_Samples[256];
-  m_RampB = &pTransferFunc->m_Samples[512];
-}
-
 void CPDF_DIBTransferFunc::TranslateScanline(
     const uint8_t* src_buf,
     std::vector<uint8_t>* dest_buf) const {
@@ -125,9 +100,8 @@
     }
     case FXDIB_8bppMask: {
       int index = 0;
-      for (int i = 0; i < m_Width; i++) {
+      for (int i = 0; i < m_Width; i++)
         (*dest_buf)[index++] = m_RampR[*(src_buf++)];
-      }
       break;
     }
     case FXDIB_Rgb: {
@@ -171,9 +145,8 @@
                                                 int pixels,
                                                 int Bpp) const {
   if (Bpp == 8) {
-    for (int i = 0; i < pixels; i++) {
+    for (int i = 0; i < pixels; i++)
       *dest_buf++ = m_RampR[*(src_buf++)];
-    }
   } else if (Bpp == 24) {
     for (int i = 0; i < pixels; i++) {
       *dest_buf++ = m_RampB[*(src_buf++)];
@@ -203,12 +176,3 @@
 #endif
   }
 }
-
-CCodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder(
-    const uint8_t* src_buf,
-    uint32_t src_size,
-    int width,
-    int height,
-    int nComps,
-    int bpc,
-    const CPDF_Dictionary* pParams);
diff --git a/core/fpdfapi/render/cpdf_dibtransferfunc.h b/core/fpdfapi/render/cpdf_dibtransferfunc.h
new file mode 100644
index 0000000..d290c00
--- /dev/null
+++ b/core/fpdfapi/render/cpdf_dibtransferfunc.h
@@ -0,0 +1,37 @@
+// Copyright 2016 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_RENDER_CPDF_DIBTRANSFERFUNC_H_
+#define CORE_FPDFAPI_RENDER_CPDF_DIBTRANSFERFUNC_H_
+
+#include <vector>
+
+#include "core/fxge/fx_dib.h"
+
+class CPDF_TransferFunc;
+
+class CPDF_DIBTransferFunc : public CFX_FilteredDIB {
+ public:
+  explicit CPDF_DIBTransferFunc(const CPDF_TransferFunc* pTransferFunc);
+  ~CPDF_DIBTransferFunc() override;
+
+  // CFX_FilteredDIB
+  FXDIB_Format GetDestFormat() override;
+  FX_ARGB* GetDestPalette() override;
+  void TranslateScanline(const uint8_t* src_buf,
+                         std::vector<uint8_t>* dest_buf) const override;
+  void TranslateDownSamples(uint8_t* dest_buf,
+                            const uint8_t* src_buf,
+                            int pixels,
+                            int Bpp) const override;
+
+ private:
+  const uint8_t* m_RampR;
+  const uint8_t* m_RampG;
+  const uint8_t* m_RampB;
+};
+
+#endif  // CORE_FPDFAPI_RENDER_CPDF_DIBTRANSFERFUNC_H_
diff --git a/core/fpdfapi/render/fpdf_render_text.cpp b/core/fpdfapi/render/cpdf_textrenderer.cpp
similarity index 85%
rename from core/fpdfapi/render/fpdf_render_text.cpp
rename to core/fpdfapi/render/cpdf_textrenderer.cpp
index 1a749bc..9cb8ce9 100644
--- a/core/fpdfapi/render/fpdf_render_text.cpp
+++ b/core/fpdfapi/render/cpdf_textrenderer.cpp
@@ -1,38 +1,19 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
+// Copyright 2016 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/fpdfapi/render/render_int.h"
+#include "core/fpdfapi/render/cpdf_textrenderer.h"
 
 #include <vector>
 
-#include "core/fpdfapi/font/cpdf_cidfont.h"
 #include "core/fpdfapi/font/cpdf_font.h"
-#include "core/fpdfapi/font/cpdf_type3char.h"
-#include "core/fpdfapi/font/cpdf_type3font.h"
-#include "core/fpdfapi/page/cpdf_docpagedata.h"
-#include "core/fpdfapi/page/cpdf_form.h"
-#include "core/fpdfapi/page/cpdf_imageobject.h"
-#include "core/fpdfapi/page/cpdf_pageobject.h"
-#include "core/fpdfapi/page/cpdf_pathobject.h"
-#include "core/fpdfapi/page/cpdf_textobject.h"
-#include "core/fpdfapi/parser/cpdf_dictionary.h"
-#include "core/fpdfapi/parser/cpdf_document.h"
 #include "core/fpdfapi/render/cpdf_charposlist.h"
-#include "core/fpdfapi/render/cpdf_docrenderdata.h"
 #include "core/fpdfapi/render/cpdf_renderoptions.h"
-#include "core/fpdfapi/render/cpdf_renderstatus.h"
-#include "core/fpdfapi/render/cpdf_textrenderer.h"
-#include "core/fpdfapi/render/cpdf_type3cache.h"
-#include "core/fxge/cfx_facecache.h"
-#include "core/fxge/cfx_fxgedevice.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
-#include "third_party/base/numerics/safe_math.h"
 
 // static
 bool CPDF_TextRenderer::DrawTextPath(CFX_RenderDevice* pDevice,
@@ -52,6 +33,7 @@
   CharPosList.Load(nChars, pCharCodes, pCharPos, pFont, font_size);
   if (CharPosList.m_nChars == 0)
     return true;
+
   bool bDraw = true;
   int32_t fontPosition = CharPosList.m_pCharPos[0].m_FallbackFontPosition;
   uint32_t startIndex = 0;
@@ -159,28 +141,22 @@
     uint32_t dwFlags = pOptions->m_Flags;
     if (dwFlags & RENDER_CLEARTYPE) {
       FXGE_flags |= FXTEXT_CLEARTYPE;
-      if (dwFlags & RENDER_BGR_STRIPE) {
+      if (dwFlags & RENDER_BGR_STRIPE)
         FXGE_flags |= FXTEXT_BGR_STRIPE;
-      }
     }
-    if (dwFlags & RENDER_NOTEXTSMOOTH) {
+    if (dwFlags & RENDER_NOTEXTSMOOTH)
       FXGE_flags |= FXTEXT_NOSMOOTH;
-    }
-    if (dwFlags & RENDER_PRINTGRAPHICTEXT) {
+    if (dwFlags & RENDER_PRINTGRAPHICTEXT)
       FXGE_flags |= FXTEXT_PRINTGRAPHICTEXT;
-    }
-    if (dwFlags & RENDER_NO_NATIVETEXT) {
+    if (dwFlags & RENDER_NO_NATIVETEXT)
       FXGE_flags |= FXTEXT_NO_NATIVETEXT;
-    }
-    if (dwFlags & RENDER_PRINTIMAGETEXT) {
+    if (dwFlags & RENDER_PRINTIMAGETEXT)
       FXGE_flags |= FXTEXT_PRINTIMAGETEXT;
-    }
   } else {
     FXGE_flags = FXTEXT_CLEARTYPE;
   }
-  if (pFont->IsCIDFont()) {
+  if (pFont->IsCIDFont())
     FXGE_flags |= FXFONT_CIDFONT;
-  }
   bool bDraw = true;
   int32_t fontPosition = CharPosList.m_pCharPos[0].m_FallbackFontPosition;
   uint32_t startIndex = 0;
diff --git a/core/fpdfapi/render/cpdf_transferfunc.cpp b/core/fpdfapi/render/cpdf_transferfunc.cpp
index a2cee39..be4836d 100644
--- a/core/fpdfapi/render/cpdf_transferfunc.cpp
+++ b/core/fpdfapi/render/cpdf_transferfunc.cpp
@@ -7,7 +7,7 @@
 #include "core/fpdfapi/render/cpdf_transferfunc.h"
 
 #include "core/fpdfapi/parser/cpdf_document.h"
-#include "core/fpdfapi/render/render_int.h"
+#include "core/fpdfapi/render/cpdf_dibtransferfunc.h"
 
 CPDF_TransferFunc::CPDF_TransferFunc(CPDF_Document* pDoc) : m_pPDFDoc(pDoc) {}
 
diff --git a/core/fpdfapi/render/render_int.h b/core/fpdfapi/render/render_int.h
index ca82736..5d04fa7 100644
--- a/core/fpdfapi/render/render_int.h
+++ b/core/fpdfapi/render/render_int.h
@@ -56,6 +56,8 @@
   int m_ColorKeyMax;
 } DIB_COMP_DATA;
 
+#define FPDF_HUGE_IMAGE_SIZE 60000000
+
 class CPDF_DIBSource : public CFX_DIBSource {
  public:
   CPDF_DIBSource();
@@ -173,25 +175,13 @@
   int m_Status;
 };
 
-#define FPDF_HUGE_IMAGE_SIZE 60000000
-class CPDF_DIBTransferFunc : public CFX_FilteredDIB {
- public:
-  explicit CPDF_DIBTransferFunc(const CPDF_TransferFunc* pTransferFunc);
-  ~CPDF_DIBTransferFunc() override;
-
-  // CFX_FilteredDIB
-  FXDIB_Format GetDestFormat() override;
-  FX_ARGB* GetDestPalette() override;
-  void TranslateScanline(const uint8_t* src_buf,
-                         std::vector<uint8_t>* dest_buf) const override;
-  void TranslateDownSamples(uint8_t* dest_buf,
-                            const uint8_t* src_buf,
-                            int pixels,
-                            int Bpp) const override;
-
-  const uint8_t* m_RampR;
-  const uint8_t* m_RampG;
-  const uint8_t* m_RampB;
-};
+CCodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder(
+    const uint8_t* src_buf,
+    uint32_t src_size,
+    int width,
+    int height,
+    int nComps,
+    int bpc,
+    const CPDF_Dictionary* pParams);
 
 #endif  // CORE_FPDFAPI_RENDER_RENDER_INT_H_
