diff --git a/xfa/fwl/basewidget/fwl_pictureboximp.cpp b/xfa/fwl/basewidget/fwl_pictureboximp.cpp
index f1b72b8..2787423 100644
--- a/xfa/fwl/basewidget/fwl_pictureboximp.cpp
+++ b/xfa/fwl/basewidget/fwl_pictureboximp.cpp
@@ -9,7 +9,7 @@
 #include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/fwl_targetimp.h"
 #include "xfa/fwl/core/fwl_widgetimp.h"
-#include "xfa/include/fwl/lightwidget/picturebox.h"
+#include "xfa/fwl/lightwidget/cfwl_picturebox.h"
 
 // static
 IFWL_PictureBox* IFWL_PictureBox::Create(
diff --git a/xfa/fwl/basewidget/ifwl_edit.h b/xfa/fwl/basewidget/ifwl_edit.h
index f777141..b27f8b4 100644
--- a/xfa/fwl/basewidget/ifwl_edit.h
+++ b/xfa/fwl/basewidget/ifwl_edit.h
@@ -9,8 +9,8 @@
 
 #include <vector>
 
-#include "xfa/include/fwl/lightwidget/widget.h"
 #include "xfa/fwl/core/ifwl_dataprovider.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 
 #define FWL_CLASS_Edit L"FWL_EDIT"
 #define FWL_CLASSHASH_Edit 2893987822
diff --git a/xfa/fwl/core/ifwl_widgetdelegate.h b/xfa/fwl/core/ifwl_widgetdelegate.h
index eeca68e..7fb56d3 100644
--- a/xfa/fwl/core/ifwl_widgetdelegate.h
+++ b/xfa/fwl/core/ifwl_widgetdelegate.h
@@ -20,7 +20,7 @@
   virtual int32_t OnProcessMessage(CFWL_Message* pMessage) = 0;
   virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent) = 0;
   virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
-                               const CFX_Matrix* pMatrix = NULL) = 0;
+                               const CFX_Matrix* pMatrix = nullptr) = 0;
 };
 
 #endif  // XFA_FWL_CORE_IFWL_WIDGETDELEGATE_H_
diff --git a/xfa/fwl/lightwidget/app.cpp b/xfa/fwl/lightwidget/cfwl_app.cpp
similarity index 88%
rename from xfa/fwl/lightwidget/app.cpp
rename to xfa/fwl/lightwidget/cfwl_app.cpp
index 1d5b7d6..c09e5c0 100644
--- a/xfa/fwl/lightwidget/app.cpp
+++ b/xfa/fwl/lightwidget/cfwl_app.cpp
@@ -4,28 +4,30 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/app.h"
+#include "xfa/fwl/lightwidget/cfwl_app.h"
 
 #include "core/fxcrt/include/fx_coordinates.h"
 #include "xfa/fwl/core/fwl_error.h"
 #include "xfa/fwl/core/ifwl_app.h"
-#include "xfa/include/fwl/lightwidget/theme.h"
+#include "xfa/fwl/lightwidget/cfwl_theme.h"
 
 CFWL_App::CFWL_App() : m_pIface(IFWL_App::Create(nullptr)), m_pTheme(nullptr) {}
+
 CFWL_App::~CFWL_App() {
   if (m_pTheme) {
     m_pTheme->Finalize();
     delete m_pTheme;
-    m_pTheme = NULL;
   }
   m_pIface->Release();
 }
+
 FWL_ERR CFWL_App::Initialize() {
   m_pTheme = new CFWL_Theme;
   m_pTheme->Initialize();
   m_pIface->SetThemeProvider(m_pTheme);
   return m_pIface->Initialize();
 }
+
 FWL_ERR CFWL_App::Exit(int32_t iExitCode) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
diff --git a/xfa/include/fwl/lightwidget/app.h b/xfa/fwl/lightwidget/cfwl_app.h
similarity index 81%
rename from xfa/include/fwl/lightwidget/app.h
rename to xfa/fwl/lightwidget/cfwl_app.h
index dee8d04..24cbd5a 100644
--- a/xfa/include/fwl/lightwidget/app.h
+++ b/xfa/fwl/lightwidget/cfwl_app.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_APP_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_APP_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_APP_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_APP_H_
 
 #include "xfa/fwl/core/fwl_error.h"
 
@@ -28,4 +28,4 @@
   CFWL_Theme* m_pTheme;
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_APP_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_APP_H_
diff --git a/xfa/fwl/lightwidget/barcode.cpp b/xfa/fwl/lightwidget/cfwl_barcode.cpp
similarity index 96%
rename from xfa/fwl/lightwidget/barcode.cpp
rename to xfa/fwl/lightwidget/cfwl_barcode.cpp
index 4f05837..4ac358c 100644
--- a/xfa/fwl/lightwidget/barcode.cpp
+++ b/xfa/fwl/lightwidget/cfwl_barcode.cpp
@@ -4,13 +4,14 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/barcode.h"
+#include "xfa/fwl/lightwidget/cfwl_barcode.h"
 
 #include <memory>
 
 CFWL_Barcode* CFWL_Barcode::Create() {
   return new CFWL_Barcode;
 }
+
 FWL_ERR CFWL_Barcode::Initialize(const CFWL_WidgetProperties* pProperties) {
   if (m_pIface)
     return FWL_ERR_Indefinite;
@@ -27,13 +28,17 @@
   CFWL_Widget::Initialize();
   return FWL_ERR_Succeeded;
 }
+
 CFWL_Barcode::CFWL_Barcode() {}
+
 CFWL_Barcode::~CFWL_Barcode() {}
+
 void CFWL_Barcode::SetType(BC_TYPE type) {
   if (!m_pIface)
     return;
   static_cast<IFWL_Barcode*>(m_pIface)->SetType(type);
 }
+
 FX_BOOL CFWL_Barcode::IsProtectedType() {
   if (!m_pIface)
     return 0;
diff --git a/xfa/include/fwl/lightwidget/barcode.h b/xfa/fwl/lightwidget/cfwl_barcode.h
similarity index 95%
rename from xfa/include/fwl/lightwidget/barcode.h
rename to xfa/fwl/lightwidget/cfwl_barcode.h
index 2aa05a2..e1e7e65 100644
--- a/xfa/include/fwl/lightwidget/barcode.h
+++ b/xfa/fwl/lightwidget/cfwl_barcode.h
@@ -4,12 +4,12 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_BARCODE_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_BARCODE_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_BARCODE_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_BARCODE_H_
 
 #include "xfa/fwl/basewidget/ifwl_barcode.h"
 #include "xfa/fwl/core/fwl_error.h"
-#include "xfa/include/fwl/lightwidget/edit.h"
+#include "xfa/fwl/lightwidget/cfwl_edit.h"
 
 class CFWL_Widget;
 class CFWL_WidgetProperties;
@@ -21,7 +21,6 @@
   void SetType(BC_TYPE type);
   FX_BOOL IsProtectedType();
 
- public:
   void SetCharEncoding(BC_CHAR_ENCODING encoding) {
     m_barcodeData.m_dwAttributeMask |= FWL_BCDATTRIBUTE_CHARENCODING;
     m_barcodeData.m_eCharEncoding = encoding;
@@ -80,6 +79,7 @@
  protected:
   CFWL_Barcode();
   virtual ~CFWL_Barcode();
+
   class CFWL_BarcodeDP : public IFWL_BarcodeDP {
    public:
     virtual FWL_ERR GetCaption(IFWL_Widget* pWidget, CFX_WideString& wsCaption);
@@ -117,4 +117,4 @@
   CFWL_BarcodeDP m_barcodeData;
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_BARCODE_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_BARCODE_H_
diff --git a/xfa/fwl/lightwidget/caret.cpp b/xfa/fwl/lightwidget/cfwl_caret.cpp
similarity index 93%
rename from xfa/fwl/lightwidget/caret.cpp
rename to xfa/fwl/lightwidget/cfwl_caret.cpp
index 9c2b90b..7fea4f9 100644
--- a/xfa/fwl/lightwidget/caret.cpp
+++ b/xfa/fwl/lightwidget/cfwl_caret.cpp
@@ -4,18 +4,19 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/caret.h"
+#include "xfa/fwl/lightwidget/cfwl_caret.h"
 
 #include <memory>
 
 #include "xfa/fwl/basewidget/ifwl_caret.h"
 #include "xfa/fwl/core/fwl_targetimp.h"
 #include "xfa/fxgraphics/cfx_color.h"
-#include "xfa/include/fwl/lightwidget/edit.h"
+#include "xfa/fwl/lightwidget/cfwl_edit.h"
 
 CFWL_Caret* CFWL_Caret::Create() {
   return new CFWL_Caret;
 }
+
 FWL_ERR CFWL_Caret::Initialize(const CFWL_WidgetProperties* pProperties) {
   if (m_pIface)
     return FWL_ERR_Indefinite;
@@ -32,17 +33,23 @@
   CFWL_Widget::Initialize();
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_Caret::ShowCaret(FX_BOOL bFlag) {
   return static_cast<IFWL_Caret*>(m_pIface)->ShowCaret(bFlag);
 }
+
 FWL_ERR CFWL_Caret::GetFrequency(uint32_t& elapse) {
   return static_cast<IFWL_Caret*>(m_pIface)->GetFrequency(elapse);
 }
+
 FWL_ERR CFWL_Caret::SetFrequency(uint32_t elapse) {
   return static_cast<IFWL_Caret*>(m_pIface)->SetFrequency(elapse);
 }
+
 FWL_ERR CFWL_Caret::SetColor(CFX_Color crFill) {
   return static_cast<IFWL_Caret*>(m_pIface)->SetColor(crFill);
 }
+
 CFWL_Caret::CFWL_Caret() {}
+
 CFWL_Caret::~CFWL_Caret() {}
diff --git a/xfa/include/fwl/lightwidget/caret.h b/xfa/fwl/lightwidget/cfwl_caret.h
similarity index 78%
rename from xfa/include/fwl/lightwidget/caret.h
rename to xfa/fwl/lightwidget/cfwl_caret.h
index 0d8817d..c806f2e 100644
--- a/xfa/include/fwl/lightwidget/caret.h
+++ b/xfa/fwl/lightwidget/cfwl_caret.h
@@ -4,12 +4,12 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_CARET_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_CARET_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_CARET_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_CARET_H_
 
 #include "xfa/fwl/core/fwl_error.h"
 #include "xfa/fxgraphics/cfx_color.h"
-#include "xfa/include/fwl/lightwidget/widget.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 
 class CFWL_Caret : public CFWL_Widget {
  public:
@@ -25,4 +25,4 @@
   virtual ~CFWL_Caret();
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_CARET_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_CARET_H_
diff --git a/xfa/fwl/lightwidget/checkbox.cpp b/xfa/fwl/lightwidget/cfwl_checkbox.cpp
similarity index 96%
rename from xfa/fwl/lightwidget/checkbox.cpp
rename to xfa/fwl/lightwidget/cfwl_checkbox.cpp
index 1d92199..b5e2a87 100644
--- a/xfa/fwl/lightwidget/checkbox.cpp
+++ b/xfa/fwl/lightwidget/cfwl_checkbox.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/checkbox.h"
+#include "xfa/fwl/lightwidget/cfwl_checkbox.h"
 
 #include <memory>
 
@@ -13,6 +13,7 @@
 CFWL_CheckBox* CFWL_CheckBox::Create() {
   return new CFWL_CheckBox;
 }
+
 FWL_ERR CFWL_CheckBox::Initialize(const CFWL_WidgetProperties* pProperties) {
   if (m_pIface)
     return FWL_ERR_Indefinite;
@@ -29,29 +30,38 @@
   CFWL_Widget::Initialize();
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_CheckBox::SetCaption(const CFX_WideStringC& wsCaption) {
   m_checkboxData.m_wsCaption = wsCaption;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_CheckBox::SetBoxSize(FX_FLOAT fHeight) {
   m_checkboxData.m_fBoxHeight = fHeight;
   return FWL_ERR_Succeeded;
 }
+
 int32_t CFWL_CheckBox::GetCheckState() {
   return static_cast<IFWL_CheckBox*>(m_pIface)->GetCheckState();
 }
+
 FWL_ERR CFWL_CheckBox::SetCheckState(int32_t iCheck) {
   return static_cast<IFWL_CheckBox*>(m_pIface)->SetCheckState(iCheck);
 }
+
 CFWL_CheckBox::CFWL_CheckBox() {}
+
 CFWL_CheckBox::~CFWL_CheckBox() {}
+
 CFWL_CheckBox::CFWL_CheckBoxDP::CFWL_CheckBoxDP()
     : m_fBoxHeight(16.0f), m_wsCaption(L"Check box") {}
+
 FWL_ERR CFWL_CheckBox::CFWL_CheckBoxDP::GetCaption(IFWL_Widget* pWidget,
                                                    CFX_WideString& wsCaption) {
   wsCaption = m_wsCaption;
   return FWL_ERR_Succeeded;
 }
+
 FX_FLOAT CFWL_CheckBox::CFWL_CheckBoxDP::GetBoxSize(IFWL_Widget* pWidget) {
   return m_fBoxHeight;
 }
diff --git a/xfa/include/fwl/lightwidget/checkbox.h b/xfa/fwl/lightwidget/cfwl_checkbox.h
similarity index 83%
rename from xfa/include/fwl/lightwidget/checkbox.h
rename to xfa/fwl/lightwidget/cfwl_checkbox.h
index a691c96..7b7e400 100644
--- a/xfa/include/fwl/lightwidget/checkbox.h
+++ b/xfa/fwl/lightwidget/cfwl_checkbox.h
@@ -4,11 +4,11 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_CHECKBOX_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_CHECKBOX_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_CHECKBOX_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_CHECKBOX_H_
 
 #include "xfa/fwl/basewidget/ifwl_checkbox.h"
-#include "xfa/include/fwl/lightwidget/widget.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 
 class CFWL_CheckBox : public CFWL_Widget {
  public:
@@ -35,4 +35,4 @@
   CFWL_CheckBoxDP m_checkboxData;
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_CHECKBOX_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_CHECKBOX_H_
diff --git a/xfa/fwl/lightwidget/combobox.cpp b/xfa/fwl/lightwidget/cfwl_combobox.cpp
similarity index 99%
rename from xfa/fwl/lightwidget/combobox.cpp
rename to xfa/fwl/lightwidget/cfwl_combobox.cpp
index 65b1081..bdcc36f 100644
--- a/xfa/fwl/lightwidget/combobox.cpp
+++ b/xfa/fwl/lightwidget/cfwl_combobox.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/combobox.h"
+#include "xfa/fwl/lightwidget/cfwl_combobox.h"
 
 #include <utility>
 
@@ -14,6 +14,7 @@
 CFWL_ComboBox* CFWL_ComboBox::Create() {
   return new CFWL_ComboBox;
 }
+
 FWL_ERR CFWL_ComboBox::Initialize(const CFWL_WidgetProperties* pProperties) {
   if (m_pIface)
     return FWL_ERR_Indefinite;
@@ -30,6 +31,7 @@
   CFWL_Widget::Initialize();
   return FWL_ERR_Succeeded;
 }
+
 int32_t CFWL_ComboBox::AddString(const CFX_WideStringC& wsText) {
   std::unique_ptr<CFWL_ComboBoxItem> pItem(new CFWL_ComboBoxItem);
   pItem->m_wsText = wsText;
@@ -37,6 +39,7 @@
   m_comboBoxData.m_ItemArray.push_back(std::move(pItem));
   return m_comboBoxData.m_ItemArray.size() - 1;
 }
+
 int32_t CFWL_ComboBox::AddString(const CFX_WideStringC& wsText,
                                  CFX_DIBitmap* pIcon) {
   std::unique_ptr<CFWL_ComboBoxItem> pItem(new CFWL_ComboBoxItem);
@@ -46,6 +49,7 @@
   m_comboBoxData.m_ItemArray.push_back(std::move(pItem));
   return m_comboBoxData.m_ItemArray.size() - 1;
 }
+
 bool CFWL_ComboBox::RemoveAt(int32_t iIndex) {
   if (iIndex < 0 ||
       static_cast<size_t>(iIndex) >= m_comboBoxData.m_ItemArray.size()) {
@@ -54,12 +58,15 @@
   m_comboBoxData.m_ItemArray.erase(m_comboBoxData.m_ItemArray.begin() + iIndex);
   return true;
 }
+
 void CFWL_ComboBox::RemoveAll() {
   m_comboBoxData.m_ItemArray.clear();
 }
+
 int32_t CFWL_ComboBox::CountItems() {
   return m_comboBoxData.CountItems(GetWidget());
 }
+
 FWL_ERR CFWL_ComboBox::GetTextByIndex(int32_t iIndex, CFX_WideString& wsText) {
   CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>(
       m_comboBoxData.GetItem(m_pIface, iIndex));
@@ -68,26 +75,31 @@
   wsText = pItem->m_wsText;
   return FWL_ERR_Succeeded;
 }
+
 int32_t CFWL_ComboBox::GetCurSel() {
   if (!m_pIface)
     return -1;
   return static_cast<IFWL_ComboBox*>(m_pIface)->GetCurSel();
 }
+
 FWL_ERR CFWL_ComboBox::SetCurSel(int32_t iSel) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ComboBox*>(m_pIface)->SetCurSel(iSel);
 }
+
 FWL_ERR CFWL_ComboBox::SetEditText(const CFX_WideStringC& wsText) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ComboBox*>(m_pIface)->SetEditText(wsText);
 }
+
 int32_t CFWL_ComboBox::GetEditTextLength() const {
   if (!m_pIface)
     return 0;
   return static_cast<IFWL_ComboBox*>(m_pIface)->GetEditTextLength();
 }
+
 FWL_ERR CFWL_ComboBox::GetEditText(CFX_WideString& wsText,
                                    int32_t nStart,
                                    int32_t nCount) const {
@@ -96,45 +108,54 @@
   return static_cast<IFWL_ComboBox*>(m_pIface)
       ->GetEditText(wsText, nStart, nCount);
 }
+
 FWL_ERR CFWL_ComboBox::SetEditSelRange(int32_t nStart, int32_t nCount) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ComboBox*>(m_pIface)->SetEditSelRange(nStart, nCount);
 }
+
 int32_t CFWL_ComboBox::GetEditSelRange(int32_t nIndex, int32_t& nStart) {
   if (!m_pIface)
     return 0;
   return static_cast<IFWL_ComboBox*>(m_pIface)->GetEditSelRange(nIndex, nStart);
 }
+
 int32_t CFWL_ComboBox::GetEditLimit() {
   if (!m_pIface)
     return 0;
   return static_cast<IFWL_ComboBox*>(m_pIface)->GetEditLimit();
 }
+
 FWL_ERR CFWL_ComboBox::SetEditLimit(int32_t nLimit) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ComboBox*>(m_pIface)->SetEditLimit(nLimit);
 }
+
 FWL_ERR CFWL_ComboBox::EditDoClipboard(int32_t iCmd) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditDoClipboard(iCmd);
 }
+
 FX_BOOL CFWL_ComboBox::EditRedo(const CFX_ByteStringC& bsRecord) {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditRedo(bsRecord);
 }
+
 FX_BOOL CFWL_ComboBox::EditUndo(const CFX_ByteStringC& bsRecord) {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditUndo(bsRecord);
 }
+
 FWL_ERR CFWL_ComboBox::SetMaxListHeight(FX_FLOAT fMaxHeight) {
   m_comboBoxData.m_fMaxListHeight = fMaxHeight;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ComboBox::SetItemData(int32_t iIndex, void* pData) {
   CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>(
       m_comboBoxData.GetItem(m_pIface, iIndex));
@@ -143,6 +164,7 @@
   pItem->m_pData = pData;
   return FWL_ERR_Succeeded;
 }
+
 void* CFWL_ComboBox::GetItemData(int32_t iIndex) {
   CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>(
       m_comboBoxData.GetItem(m_pIface, iIndex));
@@ -150,86 +172,104 @@
     return NULL;
   return pItem->m_pData;
 }
+
 FWL_ERR CFWL_ComboBox::SetListTheme(IFWL_ThemeProvider* pTheme) {
   return static_cast<IFWL_ComboBox*>(m_pIface)->GetListBoxt()->SetThemeProvider(
       pTheme);
 }
+
 FX_BOOL CFWL_ComboBox::AfterFocusShowDropList() {
   return static_cast<IFWL_ComboBox*>(m_pIface)->AfterFocusShowDropList();
 }
+
 FWL_ERR CFWL_ComboBox::OpenDropDownList(FX_BOOL bActivate) {
   return static_cast<IFWL_ComboBox*>(m_pIface)->OpenDropDownList(bActivate);
 }
+
 FX_BOOL CFWL_ComboBox::EditCanUndo() {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditCanUndo();
 }
+
 FX_BOOL CFWL_ComboBox::EditCanRedo() {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditCanRedo();
 }
+
 FX_BOOL CFWL_ComboBox::EditUndo() {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditUndo();
 }
+
 FX_BOOL CFWL_ComboBox::EditRedo() {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditRedo();
 }
+
 FX_BOOL CFWL_ComboBox::EditCanCopy() {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditCanCopy();
 }
+
 FX_BOOL CFWL_ComboBox::EditCanCut() {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditCanCut();
 }
+
 FX_BOOL CFWL_ComboBox::EditCanSelectAll() {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditCanSelectAll();
 }
+
 FX_BOOL CFWL_ComboBox::EditCopy(CFX_WideString& wsCopy) {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditCopy(wsCopy);
 }
+
 FX_BOOL CFWL_ComboBox::EditCut(CFX_WideString& wsCut) {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditCut(wsCut);
 }
+
 FX_BOOL CFWL_ComboBox::EditPaste(const CFX_WideString& wsPaste) {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditPaste(wsPaste);
 }
+
 FX_BOOL CFWL_ComboBox::EditSelectAll() {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditSelectAll();
 }
+
 FX_BOOL CFWL_ComboBox::EditDelete() {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditDelete();
 }
+
 FX_BOOL CFWL_ComboBox::EditDeSelect() {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->EditDeSelect();
 }
+
 FWL_ERR CFWL_ComboBox::GetBBox(CFX_RectF& rect) {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ComboBox*>(m_pIface)->GetBBox(rect);
 }
+
 FWL_ERR CFWL_ComboBox::EditModifyStylesEx(uint32_t dwStylesExAdded,
                                           uint32_t dwStylesExRemoved) {
   if (!m_pIface)
@@ -237,16 +277,22 @@
   return static_cast<IFWL_ComboBox*>(m_pIface)
       ->EditModifyStylesEx(dwStylesExAdded, dwStylesExRemoved);
 }
+
 CFWL_ComboBox::CFWL_ComboBox() {}
+
 CFWL_ComboBox::~CFWL_ComboBox() {}
+
 CFWL_ComboBox::CFWL_ComboBoxDP::CFWL_ComboBoxDP() {
   m_fItemHeight = 0;
   m_fMaxListHeight = 0;
 }
+
 CFWL_ComboBox::CFWL_ComboBoxDP::~CFWL_ComboBoxDP() {}
+
 int32_t CFWL_ComboBox::CFWL_ComboBoxDP::CountItems(IFWL_Widget* pWidget) {
   return m_ItemArray.size();
 }
+
 FWL_HLISTITEM CFWL_ComboBox::CFWL_ComboBoxDP::GetItem(IFWL_Widget* pWidget,
                                                       int32_t nIndex) {
   if (nIndex < 0 || static_cast<size_t>(nIndex) >= m_ItemArray.size())
@@ -254,6 +300,7 @@
 
   return reinterpret_cast<FWL_HLISTITEM>(m_ItemArray[nIndex].get());
 }
+
 int32_t CFWL_ComboBox::CFWL_ComboBoxDP::GetItemIndex(IFWL_Widget* pWidget,
                                                      FWL_HLISTITEM hItem) {
   auto it = std::find_if(
@@ -263,6 +310,7 @@
       });
   return it != m_ItemArray.end() ? it - m_ItemArray.begin() : -1;
 }
+
 FX_BOOL CFWL_ComboBox::CFWL_ComboBoxDP::SetItemIndex(IFWL_Widget* pWidget,
                                                      FWL_HLISTITEM hItem,
                                                      int32_t nIndex) {
@@ -272,12 +320,14 @@
   m_ItemArray[nIndex].reset(reinterpret_cast<CFWL_ComboBoxItem*>(hItem));
   return TRUE;
 }
+
 uint32_t CFWL_ComboBox::CFWL_ComboBoxDP::GetItemStyles(IFWL_Widget* pWidget,
                                                        FWL_HLISTITEM hItem) {
   if (!hItem)
     return 0;
   return reinterpret_cast<CFWL_ComboBoxItem*>(hItem)->m_dwStyles;
 }
+
 FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::GetItemText(IFWL_Widget* pWidget,
                                                     FWL_HLISTITEM hItem,
                                                     CFX_WideString& wsText) {
@@ -286,6 +336,7 @@
   wsText = reinterpret_cast<CFWL_ComboBoxItem*>(hItem)->m_wsText;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::GetItemRect(IFWL_Widget* pWidget,
                                                     FWL_HLISTITEM hItem,
                                                     CFX_RectF& rtItem) {
@@ -296,6 +347,7 @@
              pItem->m_rtItem.height);
   return FWL_ERR_Succeeded;
 }
+
 void* CFWL_ComboBox::CFWL_ComboBoxDP::GetItemData(IFWL_Widget* pWidget,
                                                   FWL_HLISTITEM hItem) {
   if (!hItem)
@@ -303,6 +355,7 @@
   CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>(hItem);
   return pItem->m_pData;
 }
+
 FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemStyles(IFWL_Widget* pWidget,
                                                       FWL_HLISTITEM hItem,
                                                       uint32_t dwStyle) {
@@ -311,6 +364,7 @@
   reinterpret_cast<CFWL_ComboBoxItem*>(hItem)->m_dwStyles = dwStyle;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemText(IFWL_Widget* pWidget,
                                                     FWL_HLISTITEM hItem,
                                                     const FX_WCHAR* pszText) {
@@ -319,6 +373,7 @@
   reinterpret_cast<CFWL_ComboBoxItem*>(hItem)->m_wsText = pszText;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemRect(IFWL_Widget* pWidget,
                                                     FWL_HLISTITEM hItem,
                                                     const CFX_RectF& rtItem) {
@@ -327,15 +382,18 @@
   reinterpret_cast<CFWL_ComboBoxItem*>(hItem)->m_rtItem = rtItem;
   return FWL_ERR_Succeeded;
 }
+
 FX_FLOAT CFWL_ComboBox::CFWL_ComboBoxDP::GetItemHeight(IFWL_Widget* pWidget) {
   return m_fItemHeight;
 }
+
 CFX_DIBitmap* CFWL_ComboBox::CFWL_ComboBoxDP::GetItemIcon(IFWL_Widget* pWidget,
                                                           FWL_HLISTITEM hItem) {
   if (!hItem)
     return NULL;
   return reinterpret_cast<CFWL_ComboBoxItem*>(hItem)->m_pDIB;
 }
+
 FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::GetItemCheckRect(IFWL_Widget* pWidget,
                                                          FWL_HLISTITEM hItem,
                                                          CFX_RectF& rtCheck) {
@@ -343,6 +401,7 @@
   rtCheck = pItem->m_rtCheckBox;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemCheckRect(
     IFWL_Widget* pWidget,
     FWL_HLISTITEM hItem,
@@ -351,12 +410,14 @@
   pItem->m_rtCheckBox = rtCheck;
   return FWL_ERR_Succeeded;
 }
+
 uint32_t CFWL_ComboBox::CFWL_ComboBoxDP::GetItemCheckState(
     IFWL_Widget* pWidget,
     FWL_HLISTITEM hItem) {
   CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>(hItem);
   return pItem->m_dwCheckState;
 }
+
 FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemCheckState(
     IFWL_Widget* pWidget,
     FWL_HLISTITEM hItem,
@@ -365,6 +426,7 @@
   pItem->m_dwCheckState = dwCheckState;
   return FWL_ERR_Succeeded;
 }
+
 FX_FLOAT CFWL_ComboBox::CFWL_ComboBoxDP::GetListHeight(IFWL_Widget* pWidget) {
   return m_fMaxListHeight;
 }
diff --git a/xfa/include/fwl/lightwidget/combobox.h b/xfa/fwl/lightwidget/cfwl_combobox.h
similarity index 95%
rename from xfa/include/fwl/lightwidget/combobox.h
rename to xfa/fwl/lightwidget/cfwl_combobox.h
index c89ddb2..59b542c 100644
--- a/xfa/include/fwl/lightwidget/combobox.h
+++ b/xfa/fwl/lightwidget/cfwl_combobox.h
@@ -4,14 +4,14 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_COMBOBOX_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_COMBOBOX_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_COMBOBOX_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_COMBOBOX_H_
 
 #include <memory>
 #include <vector>
 
 #include "xfa/fwl/basewidget/ifwl_combobox.h"
-#include "xfa/include/fwl/lightwidget/widget.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 
 class CFWL_WidgetProperties;
 class IFWL_ComboBoxDP;
@@ -49,7 +49,6 @@
   FX_BOOL AfterFocusShowDropList();
   FWL_ERR OpenDropDownList(FX_BOOL bActivate);
 
- public:
   FX_BOOL EditCanUndo();
   FX_BOOL EditCanRedo();
   FX_BOOL EditUndo();
@@ -141,4 +140,4 @@
   void* m_pData;
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_COMBOBOX_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_COMBOBOX_H_
diff --git a/xfa/fwl/lightwidget/datetimepicker.cpp b/xfa/fwl/lightwidget/cfwl_datetimepicker.cpp
similarity index 98%
rename from xfa/fwl/lightwidget/datetimepicker.cpp
rename to xfa/fwl/lightwidget/cfwl_datetimepicker.cpp
index a3ace90..e470616 100644
--- a/xfa/fwl/lightwidget/datetimepicker.cpp
+++ b/xfa/fwl/lightwidget/cfwl_datetimepicker.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/datetimepicker.h"
+#include "xfa/fwl/lightwidget/cfwl_datetimepicker.h"
 
 #include <memory>
 
@@ -15,6 +15,7 @@
 CFWL_DateTimePicker* CFWL_DateTimePicker::Create() {
   return new CFWL_DateTimePicker;
 }
+
 FWL_ERR CFWL_DateTimePicker::Initialize(
     const CFWL_WidgetProperties* pProperties) {
   if (m_pIface)
@@ -43,44 +44,55 @@
   m_DateTimePickerDP.m_iDay = iDay;
   return FWL_ERR_Succeeded;
 }
+
 int32_t CFWL_DateTimePicker::CountSelRanges() {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->CountSelRanges();
 }
+
 int32_t CFWL_DateTimePicker::GetSelRange(int32_t nIndex, int32_t& nStart) {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)
       ->GetSelRange(nIndex, nStart);
 }
+
 FWL_ERR CFWL_DateTimePicker::GetEditText(CFX_WideString& wsText) {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->GetEditText(wsText);
 }
+
 FWL_ERR CFWL_DateTimePicker::SetEditText(const CFX_WideStringC& wsText) {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->SetEditText(wsText);
 }
+
 FWL_ERR CFWL_DateTimePicker::GetCurSel(int32_t& iYear,
                                        int32_t& iMonth,
                                        int32_t& iDay) {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)
       ->GetCurSel(iYear, iMonth, iDay);
 }
+
 FWL_ERR CFWL_DateTimePicker::SetCurSel(int32_t iYear,
                                        int32_t iMonth,
                                        int32_t iDay) {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)
       ->SetCurSel(iYear, iMonth, iDay);
 }
+
 CFWL_DateTimePicker::CFWL_DateTimePicker() {}
+
 CFWL_DateTimePicker::~CFWL_DateTimePicker() {}
+
 CFWL_DateTimePicker::CFWL_DateTimePickerDP::CFWL_DateTimePickerDP() {
   m_iYear = 2011;
   m_iMonth = 1;
   m_iDay = 1;
 }
+
 FWL_ERR CFWL_DateTimePicker::CFWL_DateTimePickerDP::GetCaption(
     IFWL_Widget* pWidget,
     CFX_WideString& wsCaption) {
   wsCaption = m_wsData;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_DateTimePicker::CFWL_DateTimePickerDP::GetToday(
     IFWL_Widget* pWidget,
     int32_t& iYear,
@@ -91,51 +103,67 @@
   iDay = m_iDay;
   return FWL_ERR_Succeeded;
 }
+
 FX_BOOL CFWL_DateTimePicker::CanUndo() {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->CanUndo();
 }
+
 FX_BOOL CFWL_DateTimePicker::CanRedo() {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->CanRedo();
 }
+
 FX_BOOL CFWL_DateTimePicker::Undo() {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->Undo();
 }
+
 FX_BOOL CFWL_DateTimePicker::Redo() {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->Redo();
 }
+
 FX_BOOL CFWL_DateTimePicker::CanCopy() {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->CanCopy();
 }
+
 FX_BOOL CFWL_DateTimePicker::CanCut() {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->CanCut();
 }
+
 FX_BOOL CFWL_DateTimePicker::CanSelectAll() {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->CanSelectAll();
 }
+
 FX_BOOL CFWL_DateTimePicker::Copy(CFX_WideString& wsCopy) {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->Copy(wsCopy);
 }
+
 FX_BOOL CFWL_DateTimePicker::Cut(CFX_WideString& wsCut) {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->Copy(wsCut);
 }
+
 FX_BOOL CFWL_DateTimePicker::Paste(const CFX_WideString& wsPaste) {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->Paste(wsPaste);
 }
+
 FX_BOOL CFWL_DateTimePicker::SelectAll() {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->SelectAll();
 }
+
 FX_BOOL CFWL_DateTimePicker::Delete() {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->Delete();
 }
+
 FX_BOOL CFWL_DateTimePicker::DeSelect() {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->DeSelect();
 }
+
 FWL_ERR CFWL_DateTimePicker::GetBBox(CFX_RectF& rect) {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->GetBBox(rect);
 }
+
 FWL_ERR CFWL_DateTimePicker::SetEditLimit(int32_t nLimit) {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)->SetEditLimit(nLimit);
 }
+
 FWL_ERR CFWL_DateTimePicker::ModifyEditStylesEx(uint32_t dwStylesExAdded,
                                                 uint32_t dwStylesExRemoved) {
   return static_cast<IFWL_DateTimePicker*>(m_pIface)
diff --git a/xfa/include/fwl/lightwidget/datetimepicker.h b/xfa/fwl/lightwidget/cfwl_datetimepicker.h
similarity index 89%
rename from xfa/include/fwl/lightwidget/datetimepicker.h
rename to xfa/fwl/lightwidget/cfwl_datetimepicker.h
index 17ab11c..a96ac53 100644
--- a/xfa/include/fwl/lightwidget/datetimepicker.h
+++ b/xfa/fwl/lightwidget/cfwl_datetimepicker.h
@@ -4,11 +4,11 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_DATETIMEPICKER_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_DATETIMEPICKER_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_DATETIMEPICKER_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_DATETIMEPICKER_H_
 
 #include "xfa/fwl/basewidget/ifwl_datetimepicker.h"
-#include "xfa/include/fwl/lightwidget/widget.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 
 class CFWL_DateTimePicker : public CFWL_Widget {
  public:
@@ -58,4 +58,4 @@
   CFWL_DateTimePickerDP m_DateTimePickerDP;
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_DATETIMEPICKER_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_DATETIMEPICKER_H_
diff --git a/xfa/fwl/lightwidget/edit.cpp b/xfa/fwl/lightwidget/cfwl_edit.cpp
similarity index 98%
rename from xfa/fwl/lightwidget/edit.cpp
rename to xfa/fwl/lightwidget/cfwl_edit.cpp
index efceb4e..ba0ff58 100644
--- a/xfa/fwl/lightwidget/edit.cpp
+++ b/xfa/fwl/lightwidget/cfwl_edit.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/edit.h"
+#include "xfa/fwl/lightwidget/cfwl_edit.h"
 
 #include <memory>
 #include <vector>
@@ -14,6 +14,7 @@
 CFWL_Edit* CFWL_Edit::Create() {
   return new CFWL_Edit;
 }
+
 FWL_ERR CFWL_Edit::Initialize(const CFWL_WidgetProperties* pProperties) {
   if (m_pIface)
     return FWL_ERR_Indefinite;
@@ -30,16 +31,19 @@
   CFWL_Widget::Initialize();
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_Edit::SetText(const CFX_WideString& wsText) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->SetText(wsText);
 }
+
 int32_t CFWL_Edit::GetTextLength() const {
   if (!m_pIface)
     return 0;
   return static_cast<IFWL_Edit*>(m_pIface)->GetTextLength();
 }
+
 FWL_ERR CFWL_Edit::GetText(CFX_WideString& wsText,
                            int32_t nStart,
                            int32_t nCount) const {
@@ -47,21 +51,25 @@
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->GetText(wsText, nStart, nCount);
 }
+
 FWL_ERR CFWL_Edit::ClearText() {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->ClearText();
 }
+
 int32_t CFWL_Edit::GetCaretPos() const {
   if (!m_pIface)
     return -1;
   return static_cast<IFWL_Edit*>(m_pIface)->GetCaretPos();
 }
+
 int32_t CFWL_Edit::SetCaretPos(int32_t nIndex, FX_BOOL bBefore) {
   if (!m_pIface)
     return -1;
   return static_cast<IFWL_Edit*>(m_pIface)->SetCaretPos(nIndex, bBefore);
 }
+
 FWL_ERR CFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
@@ -75,36 +83,43 @@
   }
   return static_cast<IFWL_Edit*>(m_pIface)->SetCaretPos(pos);
 }
+
 int32_t CFWL_Edit::CountSelRanges() {
   if (!m_pIface)
     return 0;
   return static_cast<IFWL_Edit*>(m_pIface)->CountSelRanges();
 }
+
 int32_t CFWL_Edit::GetSelRange(int32_t nIndex, int32_t& nStart) {
   if (!m_pIface)
     return 0;
   return static_cast<IFWL_Edit*>(m_pIface)->GetSelRange(nIndex, nStart);
 }
+
 FWL_ERR CFWL_Edit::ClearSelections() {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->ClearSelections();
 }
+
 int32_t CFWL_Edit::GetLimit() {
   if (!m_pIface)
     return -1;
   return static_cast<IFWL_Edit*>(m_pIface)->GetLimit();
 }
+
 FWL_ERR CFWL_Edit::SetLimit(int32_t nLimit) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->SetLimit(nLimit);
 }
+
 FWL_ERR CFWL_Edit::SetAliasChar(FX_WCHAR wAlias) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->SetAliasChar(wAlias);
 }
+
 FWL_ERR CFWL_Edit::Insert(int32_t nStart,
                           const FX_WCHAR* lpText,
                           int32_t nLen) {
@@ -112,21 +127,25 @@
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->Insert(nStart, lpText, nLen);
 }
+
 FWL_ERR CFWL_Edit::DeleteSelections() {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->DeleteSelections();
 }
+
 FWL_ERR CFWL_Edit::DeleteRange(int32_t nStart, int32_t nCount) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->DeleteRange(nStart, nCount);
 }
+
 FWL_ERR CFWL_Edit::ReplaceSelections(const CFX_WideStringC& wsReplace) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->ReplaceSelections(wsReplace);
 }
+
 FWL_ERR CFWL_Edit::Replace(int32_t nStart,
                            int32_t nLen,
                            const CFX_WideStringC& wsReplace) {
@@ -134,78 +153,98 @@
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->Replace(nStart, nLen, wsReplace);
 }
+
 FWL_ERR CFWL_Edit::DoClipboard(int32_t iCmd) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->DoClipboard(iCmd);
 }
+
 FX_BOOL CFWL_Edit::Redo(const CFX_ByteStringC& bsRecord) {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_Edit*>(m_pIface)->Redo(bsRecord);
 }
+
 FX_BOOL CFWL_Edit::Undo(const CFX_ByteStringC& bsRecord) {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_Edit*>(m_pIface)->Undo(bsRecord);
 }
+
 FWL_ERR CFWL_Edit::SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)
       ->SetTabWidth(fTabWidth, bEquidistant);
 }
+
 FWL_ERR CFWL_Edit::SetNumberRange(int32_t iMin, int32_t iMax) {
   if (iMin > iMax) {
     return FWL_ERR_Parameter_Invalid;
   }
   return static_cast<IFWL_Edit*>(m_pIface)->SetNumberRange(iMin, iMax);
 }
+
 FWL_ERR CFWL_Edit::SetBackColor(uint32_t dwColor) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->SetBackColor(dwColor);
 }
+
 FWL_ERR CFWL_Edit::SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_Edit*>(m_pIface)->SetFont(wsFont, fSize);
 }
+
 FX_BOOL CFWL_Edit::CanUndo() {
   return static_cast<IFWL_Edit*>(m_pIface)->CanUndo();
 }
+
 FX_BOOL CFWL_Edit::CanRedo() {
   return static_cast<IFWL_Edit*>(m_pIface)->CanRedo();
 }
+
 FX_BOOL CFWL_Edit::Undo() {
   return static_cast<IFWL_Edit*>(m_pIface)->Undo();
 }
+
 FX_BOOL CFWL_Edit::Redo() {
   return static_cast<IFWL_Edit*>(m_pIface)->Undo();
 }
+
 FX_BOOL CFWL_Edit::Copy(CFX_WideString& wsCopy) {
   return static_cast<IFWL_Edit*>(m_pIface)->Copy(wsCopy);
 }
+
 FX_BOOL CFWL_Edit::Cut(CFX_WideString& wsCut) {
   return static_cast<IFWL_Edit*>(m_pIface)->Cut(wsCut);
 }
+
 FX_BOOL CFWL_Edit::Paste(const CFX_WideString& wsPaste) {
   return static_cast<IFWL_Edit*>(m_pIface)->Paste(wsPaste);
 }
+
 FX_BOOL CFWL_Edit::Delete() {
   return static_cast<IFWL_Edit*>(m_pIface)->Delete();
 }
+
 void CFWL_Edit::SetScrollOffset(FX_FLOAT fScrollOffset) {
   return static_cast<IFWL_Edit*>(m_pIface)->SetScrollOffset(fScrollOffset);
 }
+
 FX_BOOL CFWL_Edit::GetSuggestWords(CFX_PointF pointf,
                                    std::vector<CFX_ByteString>& sSuggest) {
   return static_cast<IFWL_Edit*>(m_pIface)->GetSuggestWords(pointf, sSuggest);
 }
+
 FX_BOOL CFWL_Edit::ReplaceSpellCheckWord(CFX_PointF pointf,
                                          const CFX_ByteStringC& bsReplace) {
   return static_cast<IFWL_Edit*>(m_pIface)
       ->ReplaceSpellCheckWord(pointf, bsReplace);
 }
+
 CFWL_Edit::CFWL_Edit() {}
+
 CFWL_Edit::~CFWL_Edit() {}
diff --git a/xfa/include/fwl/lightwidget/edit.h b/xfa/fwl/lightwidget/cfwl_edit.h
similarity index 92%
rename from xfa/include/fwl/lightwidget/edit.h
rename to xfa/fwl/lightwidget/cfwl_edit.h
index a142f48..153c756 100644
--- a/xfa/include/fwl/lightwidget/edit.h
+++ b/xfa/fwl/lightwidget/cfwl_edit.h
@@ -4,12 +4,12 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_EDIT_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_EDIT_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_EDIT_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_EDIT_H_
 
 #include <vector>
 
-#include "xfa/include/fwl/lightwidget/widget.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 
 class CFWL_WidgetProperties;
 
@@ -64,4 +64,4 @@
   virtual ~CFWL_Edit();
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_EDIT_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_EDIT_H_
diff --git a/xfa/fwl/lightwidget/listbox.cpp b/xfa/fwl/lightwidget/cfwl_listbox.cpp
similarity index 99%
rename from xfa/fwl/lightwidget/listbox.cpp
rename to xfa/fwl/lightwidget/cfwl_listbox.cpp
index 7913727..2102d2d 100644
--- a/xfa/fwl/lightwidget/listbox.cpp
+++ b/xfa/fwl/lightwidget/cfwl_listbox.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/listbox.h"
+#include "xfa/fwl/lightwidget/cfwl_listbox.h"
 
 #include <memory>
 
@@ -13,6 +13,7 @@
 CFWL_ListBox* CFWL_ListBox::Create() {
   return new CFWL_ListBox;
 }
+
 FWL_ERR CFWL_ListBox::Initialize(const CFWL_WidgetProperties* pProperties) {
   if (m_pIface)
     return FWL_ERR_Indefinite;
@@ -29,10 +30,12 @@
   CFWL_Widget::Initialize();
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ListBox::AddDIBitmap(CFX_DIBitmap* pDIB, FWL_HLISTITEM hItem) {
   reinterpret_cast<CFWL_ListItem*>(hItem)->m_pDIB = pDIB;
   return FWL_ERR_Succeeded;
 }
+
 FWL_HLISTITEM CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd,
                                       FX_BOOL bSelect) {
   std::unique_ptr<CFWL_ListItem> pItem(new CFWL_ListItem);
@@ -42,6 +45,7 @@
   m_ListBoxDP.m_ItemArray.push_back(std::move(pItem));
   return (FWL_HLISTITEM)m_ListBoxDP.m_ItemArray.back().get();
 }
+
 FX_BOOL CFWL_ListBox::DeleteString(FWL_HLISTITEM hItem) {
   int32_t nIndex = m_ListBoxDP.GetItemIndex(GetWidget(), hItem);
   if (nIndex < 0 ||
@@ -64,43 +68,52 @@
   m_ListBoxDP.m_ItemArray.erase(m_ListBoxDP.m_ItemArray.begin() + nIndex);
   return TRUE;
 }
+
 void CFWL_ListBox::DeleteAll() {
   m_ListBoxDP.m_ItemArray.clear();
 }
+
 int32_t CFWL_ListBox::CountSelItems() {
   if (!m_pIface)
     return 0;
   return static_cast<IFWL_ListBox*>(m_pIface)->CountSelItems();
 }
+
 FWL_HLISTITEM CFWL_ListBox::GetSelItem(int32_t nIndexSel) {
   if (!m_pIface)
     return NULL;
   return static_cast<IFWL_ListBox*>(m_pIface)->GetSelItem(nIndexSel);
 }
+
 int32_t CFWL_ListBox::GetSelIndex(int32_t nIndex) {
   if (!m_pIface)
     return 0;
   return static_cast<IFWL_ListBox*>(m_pIface)->GetSelIndex(nIndex);
 }
+
 FWL_ERR CFWL_ListBox::SetSelItem(FWL_HLISTITEM hItem, FX_BOOL bSelect) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ListBox*>(m_pIface)->SetSelItem(hItem, bSelect);
 }
+
 FWL_ERR CFWL_ListBox::GetItemText(FWL_HLISTITEM hItem, CFX_WideString& wsText) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ListBox*>(m_pIface)->GetItemText(hItem, wsText);
 }
+
 FWL_ERR CFWL_ListBox::GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ListBox*>(m_pIface)->GetScrollPos(fPos, bVert);
 }
+
 FWL_ERR CFWL_ListBox::SetItemHeight(FX_FLOAT fItemHeight) {
   m_ListBoxDP.m_fItemHeight = fItemHeight;
   return FWL_ERR_Succeeded;
 }
+
 FWL_HLISTITEM CFWL_ListBox::GetFocusItem() {
   for (const auto& hItem : m_ListBoxDP.m_ItemArray) {
     if (hItem->m_dwStates & FWL_ITEMSTATE_LTB_Focused)
@@ -108,23 +121,28 @@
   }
   return nullptr;
 }
+
 FWL_ERR CFWL_ListBox::SetFocusItem(FWL_HLISTITEM hItem) {
   int32_t nIndex = m_ListBoxDP.GetItemIndex(GetWidget(), hItem);
   m_ListBoxDP.m_ItemArray[nIndex]->m_dwStates |= FWL_ITEMSTATE_LTB_Focused;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR* CFWL_ListBox::Sort(IFWL_ListBoxCompare* pCom) {
   return static_cast<IFWL_ListBox*>(m_pIface)->Sort(pCom);
 }
+
 int32_t CFWL_ListBox::CountItems() {
   return pdfium::CollectionSize<int32_t>(m_ListBoxDP.m_ItemArray);
 }
+
 FWL_HLISTITEM CFWL_ListBox::GetItem(int32_t nIndex) {
   if (nIndex < 0 || nIndex >= CountItems())
     return nullptr;
 
   return (FWL_HLISTITEM)m_ListBoxDP.m_ItemArray[nIndex].get();
 }
+
 FWL_ERR CFWL_ListBox::SetItemString(FWL_HLISTITEM hItem,
                                     const CFX_WideStringC& wsText) {
   if (!hItem)
@@ -132,6 +150,7 @@
   reinterpret_cast<CFWL_ListItem*>(hItem)->m_wsText = wsText;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ListBox::GetItemString(FWL_HLISTITEM hItem,
                                     CFX_WideString& wsText) {
   if (!hItem)
@@ -139,17 +158,20 @@
   wsText = reinterpret_cast<CFWL_ListItem*>(hItem)->m_wsText;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ListBox::SetItemData(FWL_HLISTITEM hItem, void* pData) {
   if (!hItem)
     return FWL_ERR_Indefinite;
   reinterpret_cast<CFWL_ListItem*>(hItem)->m_pData = pData;
   return FWL_ERR_Succeeded;
 }
+
 void* CFWL_ListBox::GetItemData(FWL_HLISTITEM hItem) {
   if (!hItem)
     return NULL;
   return reinterpret_cast<CFWL_ListItem*>(hItem)->m_pData;
 }
+
 FWL_HLISTITEM CFWL_ListBox::GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy) {
   CFX_RectF rtClient;
   m_pIface->GetClientRect(rtClient);
@@ -174,24 +196,32 @@
   }
   return NULL;
 }
+
 uint32_t CFWL_ListBox::GetItemStates(FWL_HLISTITEM hItem) {
   if (!hItem)
     return 0;
   CFWL_ListItem* pItem = reinterpret_cast<CFWL_ListItem*>(hItem);
   return pItem->m_dwStates | pItem->m_dwCheckState;
 }
+
 CFWL_ListBox::CFWL_ListBox() {}
+
 CFWL_ListBox::~CFWL_ListBox() {}
+
 CFWL_ListBox::CFWL_ListBoxDP::CFWL_ListBoxDP() {}
+
 CFWL_ListBox::CFWL_ListBoxDP::~CFWL_ListBoxDP() {}
+
 FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::GetCaption(IFWL_Widget* pWidget,
                                                  CFX_WideString& wsCaption) {
   wsCaption = m_wsData;
   return FWL_ERR_Succeeded;
 }
+
 int32_t CFWL_ListBox::CFWL_ListBoxDP::CountItems(IFWL_Widget* pWidget) {
   return pdfium::CollectionSize<int32_t>(m_ItemArray);
 }
+
 FWL_HLISTITEM CFWL_ListBox::CFWL_ListBoxDP::GetItem(IFWL_Widget* pWidget,
                                                     int32_t nIndex) {
   if (nIndex < 0 || nIndex >= CountItems(pWidget))
@@ -199,6 +229,7 @@
 
   return (FWL_HLISTITEM)m_ItemArray[nIndex].get();
 }
+
 int32_t CFWL_ListBox::CFWL_ListBoxDP::GetItemIndex(IFWL_Widget* pWidget,
                                                    FWL_HLISTITEM hItem) {
   auto it = std::find_if(
@@ -208,6 +239,7 @@
       });
   return it != m_ItemArray.end() ? it - m_ItemArray.begin() : -1;
 }
+
 FX_BOOL CFWL_ListBox::CFWL_ListBoxDP::SetItemIndex(IFWL_Widget* pWidget,
                                                    FWL_HLISTITEM hItem,
                                                    int32_t nIndex) {
@@ -216,12 +248,14 @@
   m_ItemArray[nIndex].reset(reinterpret_cast<CFWL_ListItem*>(hItem));
   return TRUE;
 }
+
 uint32_t CFWL_ListBox::CFWL_ListBoxDP::GetItemStyles(IFWL_Widget* pWidget,
                                                      FWL_HLISTITEM hItem) {
   if (!hItem)
     return -1;
   return reinterpret_cast<CFWL_ListItem*>(hItem)->m_dwStates;
 }
+
 FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::GetItemText(IFWL_Widget* pWidget,
                                                   FWL_HLISTITEM hItem,
                                                   CFX_WideString& wsText) {
@@ -230,6 +264,7 @@
   wsText = reinterpret_cast<CFWL_ListItem*>(hItem)->m_wsText;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::GetItemRect(IFWL_Widget* pWidget,
                                                   FWL_HLISTITEM hItem,
                                                   CFX_RectF& rtItem) {
@@ -239,6 +274,7 @@
   rtItem = pItem->m_rtItem;
   return FWL_ERR_Succeeded;
 }
+
 void* CFWL_ListBox::CFWL_ListBoxDP::GetItemData(IFWL_Widget* pWidget,
                                                 FWL_HLISTITEM hItem) {
   if (!hItem)
@@ -246,6 +282,7 @@
   CFWL_ListItem* pItem = reinterpret_cast<CFWL_ListItem*>(hItem);
   return pItem->m_pData;
 }
+
 FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemStyles(IFWL_Widget* pWidget,
                                                     FWL_HLISTITEM hItem,
                                                     uint32_t dwStyle) {
@@ -254,6 +291,7 @@
   reinterpret_cast<CFWL_ListItem*>(hItem)->m_dwStates = dwStyle;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemText(IFWL_Widget* pWidget,
                                                   FWL_HLISTITEM hItem,
                                                   const FX_WCHAR* pszText) {
@@ -262,6 +300,7 @@
   reinterpret_cast<CFWL_ListItem*>(hItem)->m_wsText = pszText;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemRect(IFWL_Widget* pWidget,
                                                   FWL_HLISTITEM hItem,
                                                   const CFX_RectF& rtItem) {
@@ -270,19 +309,23 @@
   reinterpret_cast<CFWL_ListItem*>(hItem)->m_rtItem = rtItem;
   return FWL_ERR_Succeeded;
 }
+
 FX_FLOAT CFWL_ListBox::CFWL_ListBoxDP::GetItemHeight(IFWL_Widget* pWidget) {
   return m_fItemHeight;
 }
+
 CFX_DIBitmap* CFWL_ListBox::CFWL_ListBoxDP::GetItemIcon(IFWL_Widget* pWidget,
                                                         FWL_HLISTITEM hItem) {
   return reinterpret_cast<CFWL_ListItem*>(hItem)->m_pDIB;
 }
+
 FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::GetItemCheckRect(IFWL_Widget* pWidget,
                                                        FWL_HLISTITEM hItem,
                                                        CFX_RectF& rtCheck) {
   rtCheck = reinterpret_cast<CFWL_ListItem*>(hItem)->m_rtCheckBox;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemCheckRect(
     IFWL_Widget* pWidget,
     FWL_HLISTITEM hItem,
@@ -290,10 +333,12 @@
   reinterpret_cast<CFWL_ListItem*>(hItem)->m_rtCheckBox = rtCheck;
   return FWL_ERR_Succeeded;
 }
+
 uint32_t CFWL_ListBox::CFWL_ListBoxDP::GetItemCheckState(IFWL_Widget* pWidget,
                                                          FWL_HLISTITEM hItem) {
   return reinterpret_cast<CFWL_ListItem*>(hItem)->m_dwCheckState;
 }
+
 FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemCheckState(IFWL_Widget* pWidget,
                                                         FWL_HLISTITEM hItem,
                                                         uint32_t dwCheckState) {
diff --git a/xfa/include/fwl/lightwidget/listbox.h b/xfa/fwl/lightwidget/cfwl_listbox.h
similarity index 95%
rename from xfa/include/fwl/lightwidget/listbox.h
rename to xfa/fwl/lightwidget/cfwl_listbox.h
index 6e35de7..28fb42a 100644
--- a/xfa/include/fwl/lightwidget/listbox.h
+++ b/xfa/fwl/lightwidget/cfwl_listbox.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_LISTBOX_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_LISTBOX_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_LISTBOX_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_LISTBOX_H_
 
 #include <memory>
 #include <vector>
@@ -13,7 +13,7 @@
 #include "xfa/fwl/basewidget/ifwl_listbox.h"
 #include "xfa/fwl/core/fwl_error.h"
 #include "xfa/fwl/core/ifwl_widget.h"
-#include "xfa/include/fwl/lightwidget/widget.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 
 class CFWL_ListItem;
 
@@ -124,4 +124,4 @@
   CFX_RectF m_rtCheckBox;
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_LISTBOX_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_LISTBOX_H_
diff --git a/xfa/fwl/lightwidget/picturebox.cpp b/xfa/fwl/lightwidget/cfwl_picturebox.cpp
similarity index 98%
rename from xfa/fwl/lightwidget/picturebox.cpp
rename to xfa/fwl/lightwidget/cfwl_picturebox.cpp
index e35741c..b0bd3c9 100644
--- a/xfa/fwl/lightwidget/picturebox.cpp
+++ b/xfa/fwl/lightwidget/cfwl_picturebox.cpp
@@ -4,13 +4,14 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/picturebox.h"
+#include "xfa/fwl/lightwidget/cfwl_picturebox.h"
 
 #include <memory>
 
 CFWL_PictureBox* CFWL_PictureBox::Create() {
   return new CFWL_PictureBox;
 }
+
 FWL_ERR CFWL_PictureBox::Initialize(const CFWL_WidgetProperties* pProperties) {
   if (m_pIface)
     return FWL_ERR_Indefinite;
@@ -27,45 +28,56 @@
   CFWL_Widget::Initialize();
   return FWL_ERR_Succeeded;
 }
+
 CFX_DIBitmap* CFWL_PictureBox::GetPicture() {
   return m_PictureBoxDP.m_pBitmap;
 }
+
 FWL_ERR CFWL_PictureBox::SetPicture(CFX_DIBitmap* pBitmap) {
   m_PictureBoxDP.m_pBitmap = pBitmap;
   return FWL_ERR_Succeeded;
 }
+
 FX_FLOAT CFWL_PictureBox::GetRotation() {
   return m_PictureBoxDP.m_fRotation;
 }
+
 FWL_ERR CFWL_PictureBox::SetRotation(FX_FLOAT fRotation) {
   m_PictureBoxDP.m_fRotation = fRotation;
   return FWL_ERR_Succeeded;
 }
+
 int32_t CFWL_PictureBox::GetFlipMode() {
   return m_PictureBoxDP.GetFlipMode(m_pIface);
 }
+
 FWL_ERR CFWL_PictureBox::SetFlipMode(int32_t iFlipMode) {
   m_PictureBoxDP.m_iFlipMode = iFlipMode;
   return FWL_ERR_Succeeded;
 }
+
 int32_t CFWL_PictureBox::GetOpacity() {
   return m_PictureBoxDP.GetOpacity(m_pIface);
 }
+
 FWL_ERR CFWL_PictureBox::SetOpacity(int32_t iOpacity) {
   m_PictureBoxDP.m_iOpacity = iOpacity;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_PictureBox::GetScale(FX_FLOAT& fScaleX, FX_FLOAT& fScaleY) {
   CFX_Matrix matrix;
   m_PictureBoxDP.GetMatrix(m_pIface, matrix);
   matrix.Scale(fScaleX, fScaleY);
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_PictureBox::SetScale(FX_FLOAT fScaleX, FX_FLOAT fScaleY) {
   m_PictureBoxDP.m_fScaleX = fScaleX;
   m_PictureBoxDP.m_fScaleY = fScaleY;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_PictureBox::GetOffset(FX_FLOAT& fx, FX_FLOAT& fy) {
   CFX_Matrix matrix;
   m_PictureBoxDP.GetMatrix(m_pIface, matrix);
@@ -73,33 +85,42 @@
   fy = matrix.f;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_PictureBox::SetOffset(FX_FLOAT fx, FX_FLOAT fy) {
   m_PictureBoxDP.m_fOffSetX = fx;
   m_PictureBoxDP.m_fOffSetY = fy;
   return FWL_ERR_Succeeded;
 }
+
 CFWL_PictureBox::CFWL_PictureBox() {}
+
 CFWL_PictureBox::~CFWL_PictureBox() {}
+
 FWL_ERR CFWL_PictureBox::CFWL_PictureBoxDP::GetCaption(
     IFWL_Widget* pWidget,
     CFX_WideString& wsCaption) {
   return FWL_ERR_Succeeded;
 }
+
 CFX_DIBitmap* CFWL_PictureBox::CFWL_PictureBoxDP::GetPicture(
     IFWL_Widget* pWidget) {
   return m_pBitmap;
 }
+
 CFX_DIBitmap* CFWL_PictureBox::CFWL_PictureBoxDP::GetErrorPicture(
     IFWL_Widget* pWidget) {
   return m_pBitmap;
 }
+
 CFX_DIBitmap* CFWL_PictureBox::CFWL_PictureBoxDP::GetInitialPicture(
     IFWL_Widget* pWidget) {
   return m_pBitmap;
 }
+
 int32_t CFWL_PictureBox::CFWL_PictureBoxDP::GetOpacity(IFWL_Widget* pWidget) {
   return m_iOpacity;
 }
+
 FWL_ERR CFWL_PictureBox::CFWL_PictureBoxDP::GetMatrix(IFWL_Widget* pWidget,
                                                       CFX_Matrix& matrix) {
   CFX_RectF rect;
@@ -114,6 +135,7 @@
   matrix.Translate(m_fOffSetX, m_fOffSetY);
   return FWL_ERR_Succeeded;
 }
+
 int32_t CFWL_PictureBox::CFWL_PictureBoxDP::GetFlipMode(IFWL_Widget* pWidget) {
   return m_iFlipMode;
 }
diff --git a/xfa/include/fwl/lightwidget/picturebox.h b/xfa/fwl/lightwidget/cfwl_picturebox.h
similarity index 90%
rename from xfa/include/fwl/lightwidget/picturebox.h
rename to xfa/fwl/lightwidget/cfwl_picturebox.h
index b5c8ae5..8fa985a 100644
--- a/xfa/include/fwl/lightwidget/picturebox.h
+++ b/xfa/fwl/lightwidget/cfwl_picturebox.h
@@ -4,12 +4,12 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_PICTUREBOX_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_PICTUREBOX_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_PICTUREBOX_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_PICTUREBOX_H_
 
 #include "xfa/fwl/basewidget/ifwl_picturebox.h"
 #include "xfa/fwl/core/fwl_error.h"
-#include "xfa/include/fwl/lightwidget/widget.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 
 class CFWL_PictureBox : public CFWL_Widget {
  public:
@@ -61,4 +61,4 @@
   CFWL_PictureBoxDP m_PictureBoxDP;
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_PICTUREBOX_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_PICTUREBOX_H_
diff --git a/xfa/fwl/lightwidget/pushbutton.cpp b/xfa/fwl/lightwidget/cfwl_pushbutton.cpp
similarity index 96%
rename from xfa/fwl/lightwidget/pushbutton.cpp
rename to xfa/fwl/lightwidget/cfwl_pushbutton.cpp
index c9fb74e..52747bd 100644
--- a/xfa/fwl/lightwidget/pushbutton.cpp
+++ b/xfa/fwl/lightwidget/cfwl_pushbutton.cpp
@@ -4,13 +4,14 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/pushbutton.h"
+#include "xfa/fwl/lightwidget/cfwl_pushbutton.h"
 
 #include <memory>
 
 CFWL_PushButton* CFWL_PushButton::Create() {
   return new CFWL_PushButton;
 }
+
 FWL_ERR CFWL_PushButton::Initialize(const CFWL_WidgetProperties* pProperties) {
   if (m_pIface)
     return FWL_ERR_Indefinite;
@@ -27,29 +28,37 @@
   CFWL_Widget::Initialize();
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_PushButton::GetCaption(CFX_WideString& wsCaption) {
   wsCaption = m_buttonData.m_wsCaption;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_PushButton::SetCaption(const CFX_WideStringC& wsCaption) {
   m_buttonData.m_wsCaption = wsCaption;
   return FWL_ERR_Succeeded;
 }
+
 CFX_DIBitmap* CFWL_PushButton::GetPicture() {
   return m_buttonData.m_pBitmap;
 }
+
 FWL_ERR CFWL_PushButton::SetPicture(CFX_DIBitmap* pBitmap) {
   m_buttonData.m_pBitmap = pBitmap;
   return FWL_ERR_Succeeded;
 }
+
 CFWL_PushButton::CFWL_PushButton() {}
+
 CFWL_PushButton::~CFWL_PushButton() {}
+
 FWL_ERR CFWL_PushButton::CFWL_PushButtonDP::GetCaption(
     IFWL_Widget* pWidget,
     CFX_WideString& wsCaption) {
   wsCaption = m_wsCaption;
   return FWL_ERR_Succeeded;
 }
+
 CFX_DIBitmap* CFWL_PushButton::CFWL_PushButtonDP::GetPicture(
     IFWL_Widget* pWidget) {
   return m_pBitmap;
diff --git a/xfa/include/fwl/lightwidget/pushbutton.h b/xfa/fwl/lightwidget/cfwl_pushbutton.h
similarity index 83%
rename from xfa/include/fwl/lightwidget/pushbutton.h
rename to xfa/fwl/lightwidget/cfwl_pushbutton.h
index abd76f5..99b067d 100644
--- a/xfa/include/fwl/lightwidget/pushbutton.h
+++ b/xfa/fwl/lightwidget/cfwl_pushbutton.h
@@ -4,11 +4,11 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_PUSHBUTTON_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_PUSHBUTTON_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_PUSHBUTTON_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_PUSHBUTTON_H_
 
 #include "xfa/fwl/basewidget/ifwl_pushbutton.h"
-#include "xfa/include/fwl/lightwidget/widget.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 
 class CFWL_PushButton : public CFWL_Widget {
  public:
@@ -33,4 +33,4 @@
   CFWL_PushButtonDP m_buttonData;
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_PUSHBUTTON_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_PUSHBUTTON_H_
diff --git a/xfa/fwl/lightwidget/scrollbar.cpp b/xfa/fwl/lightwidget/cfwl_scrollbar.cpp
similarity index 97%
rename from xfa/fwl/lightwidget/scrollbar.cpp
rename to xfa/fwl/lightwidget/cfwl_scrollbar.cpp
index 62f2ffd..0c02314 100644
--- a/xfa/fwl/lightwidget/scrollbar.cpp
+++ b/xfa/fwl/lightwidget/cfwl_scrollbar.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/scrollbar.h"
+#include "xfa/fwl/lightwidget/cfwl_scrollbar.h"
 
 #include <memory>
 
@@ -13,6 +13,11 @@
 CFWL_ScrollBar* CFWL_ScrollBar::Create() {
   return new CFWL_ScrollBar;
 }
+
+CFWL_ScrollBar::CFWL_ScrollBar() {}
+
+CFWL_ScrollBar::~CFWL_ScrollBar() {}
+
 FWL_ERR CFWL_ScrollBar::Initialize(const CFWL_WidgetProperties* pProperties) {
   if (m_pIface)
     return FWL_ERR_Indefinite;
@@ -29,65 +34,75 @@
   CFWL_Widget::Initialize();
   return FWL_ERR_Succeeded;
 }
+
 FX_BOOL CFWL_ScrollBar::IsVertical() {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ScrollBar*>(m_pIface)->IsVertical();
 }
+
 FWL_ERR CFWL_ScrollBar::GetRange(FX_FLOAT& fMin, FX_FLOAT& fMax) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ScrollBar*>(m_pIface)->GetRange(fMin, fMax);
 }
+
 FWL_ERR CFWL_ScrollBar::SetRange(FX_FLOAT fMin, FX_FLOAT fMax) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ScrollBar*>(m_pIface)->SetRange(fMin, fMax);
 }
+
 FX_FLOAT CFWL_ScrollBar::GetPageSize() {
   if (!m_pIface)
     return 0;
   return static_cast<IFWL_ScrollBar*>(m_pIface)->GetPageSize();
 }
+
 FWL_ERR CFWL_ScrollBar::SetPageSize(FX_FLOAT fPageSize) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ScrollBar*>(m_pIface)->SetPageSize(fPageSize);
 }
+
 FX_FLOAT CFWL_ScrollBar::GetStepSize() {
   if (!m_pIface)
     return 0;
   return static_cast<IFWL_ScrollBar*>(m_pIface)->GetStepSize();
 }
+
 FWL_ERR CFWL_ScrollBar::SetStepSize(FX_FLOAT fStepSize) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ScrollBar*>(m_pIface)->SetStepSize(fStepSize);
 }
+
 FX_FLOAT CFWL_ScrollBar::GetPos() {
   if (!m_pIface)
     return -1;
   return static_cast<IFWL_ScrollBar*>(m_pIface)->GetPos();
 }
+
 FWL_ERR CFWL_ScrollBar::SetPos(FX_FLOAT fPos) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ScrollBar*>(m_pIface)->SetPos(fPos);
 }
+
 FX_FLOAT CFWL_ScrollBar::GetTrackPos() {
   if (!m_pIface)
     return -1;
   return static_cast<IFWL_ScrollBar*>(m_pIface)->GetTrackPos();
 }
+
 FWL_ERR CFWL_ScrollBar::SetTrackPos(FX_FLOAT fTrackPos) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return static_cast<IFWL_ScrollBar*>(m_pIface)->SetTrackPos(fTrackPos);
 }
+
 FX_BOOL CFWL_ScrollBar::DoScroll(uint32_t dwCode, FX_FLOAT fPos) {
   if (!m_pIface)
     return FALSE;
   return static_cast<IFWL_ScrollBar*>(m_pIface)->DoScroll(dwCode, fPos);
 }
-CFWL_ScrollBar::CFWL_ScrollBar() {}
-CFWL_ScrollBar::~CFWL_ScrollBar() {}
diff --git a/xfa/include/fwl/lightwidget/scrollbar.h b/xfa/fwl/lightwidget/cfwl_scrollbar.h
similarity index 81%
rename from xfa/include/fwl/lightwidget/scrollbar.h
rename to xfa/fwl/lightwidget/cfwl_scrollbar.h
index 3d35ee6..89c0fe4 100644
--- a/xfa/include/fwl/lightwidget/scrollbar.h
+++ b/xfa/fwl/lightwidget/cfwl_scrollbar.h
@@ -4,10 +4,10 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_SCROLLBAR_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_SCROLLBAR_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_SCROLLBAR_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_SCROLLBAR_H_
 
-#include "xfa/include/fwl/lightwidget/widget.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 
 class CFWL_ScrollBar : public CFWL_Widget {
  public:
@@ -29,4 +29,4 @@
   virtual ~CFWL_ScrollBar();
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_SCROLLBAR_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_SCROLLBAR_H_
diff --git a/xfa/fwl/lightwidget/theme.cpp b/xfa/fwl/lightwidget/cfwl_theme.cpp
similarity index 87%
rename from xfa/fwl/lightwidget/theme.cpp
rename to xfa/fwl/lightwidget/cfwl_theme.cpp
index 59729c1..fdb0a89 100644
--- a/xfa/fwl/lightwidget/theme.cpp
+++ b/xfa/fwl/lightwidget/cfwl_theme.cpp
@@ -4,25 +4,25 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/theme.h"
+#include "xfa/fwl/lightwidget/cfwl_theme.h"
 
 #include <algorithm>
 
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_themepart.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
-#include "xfa/include/fwl/theme/barcodetp.h"
-#include "xfa/include/fwl/theme/carettp.h"
-#include "xfa/include/fwl/theme/checkboxtp.h"
-#include "xfa/include/fwl/theme/comboboxtp.h"
-#include "xfa/include/fwl/theme/datetimepickertp.h"
-#include "xfa/include/fwl/theme/edittp.h"
-#include "xfa/include/fwl/theme/formtp.h"
-#include "xfa/include/fwl/theme/listboxtp.h"
-#include "xfa/include/fwl/theme/monthcalendartp.h"
-#include "xfa/include/fwl/theme/pictureboxtp.h"
-#include "xfa/include/fwl/theme/pushbuttontp.h"
-#include "xfa/include/fwl/theme/scrollbartp.h"
+#include "xfa/fwl/theme/cfwl_barcodetp.h"
+#include "xfa/fwl/theme/cfwl_carettp.h"
+#include "xfa/fwl/theme/cfwl_checkboxtp.h"
+#include "xfa/fwl/theme/cfwl_comboboxtp.h"
+#include "xfa/fwl/theme/cfwl_datetimepickertp.h"
+#include "xfa/fwl/theme/cfwl_edittp.h"
+#include "xfa/fwl/theme/cfwl_formtp.h"
+#include "xfa/fwl/theme/cfwl_listboxtp.h"
+#include "xfa/fwl/theme/cfwl_monthcalendartp.h"
+#include "xfa/fwl/theme/cfwl_pictureboxtp.h"
+#include "xfa/fwl/theme/cfwl_pushbuttontp.h"
+#include "xfa/fwl/theme/cfwl_scrollbartp.h"
 
 CFWL_Theme::CFWL_Theme() {
   m_ThemesArray.push_back(std::unique_ptr<CFWL_WidgetTP>(new CFWL_FormTP));
diff --git a/xfa/include/fwl/lightwidget/theme.h b/xfa/fwl/lightwidget/cfwl_theme.h
similarity index 92%
rename from xfa/include/fwl/lightwidget/theme.h
rename to xfa/fwl/lightwidget/cfwl_theme.h
index 9e91236..fa62e09 100644
--- a/xfa/include/fwl/lightwidget/theme.h
+++ b/xfa/fwl/lightwidget/cfwl_theme.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_THEME_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_THEME_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_THEME_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_THEME_H_
 
 #include <memory>
 #include <vector>
@@ -56,4 +56,4 @@
   std::vector<std::unique_ptr<CFWL_WidgetTP>> m_ThemesArray;
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_THEME_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_THEME_H_
diff --git a/xfa/fwl/lightwidget/tooltipctrl.cpp b/xfa/fwl/lightwidget/cfwl_tooltip.cpp
similarity index 97%
rename from xfa/fwl/lightwidget/tooltipctrl.cpp
rename to xfa/fwl/lightwidget/cfwl_tooltip.cpp
index 323eed0..abdf489 100644
--- a/xfa/fwl/lightwidget/tooltipctrl.cpp
+++ b/xfa/fwl/lightwidget/cfwl_tooltip.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/tooltipctrl.h"
+#include "xfa/fwl/lightwidget/cfwl_tooltip.h"
 
 #include <memory>
 
@@ -18,6 +18,7 @@
 CFWL_ToolTip* CFWL_ToolTip::Create() {
   return new CFWL_ToolTip;
 }
+
 FWL_ERR CFWL_ToolTip::Initialize(const CFWL_WidgetProperties* pProperties) {
   if (m_pIface)
     return FWL_ERR_Indefinite;
@@ -34,78 +35,100 @@
   CFWL_Widget::Initialize();
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ToolTip::GetCaption(CFX_WideString& wsCaption) {
   wsCaption = m_tooltipData.m_wsCaption;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ToolTip::SetCaption(const CFX_WideStringC& wsCaption) {
   m_tooltipData.m_wsCaption = wsCaption;
   return FWL_ERR_Succeeded;
 }
+
 int32_t CFWL_ToolTip::GetInitialDelay() {
   return m_tooltipData.m_nInitDelayTime;
 }
+
 int32_t CFWL_ToolTip::SetInitialDelay(int32_t nDelayTime) {
   m_tooltipData.m_nInitDelayTime = nDelayTime;
   return FWL_ERR_Succeeded;
 }
+
 int32_t CFWL_ToolTip::GetAutoPopDelay() {
   return m_tooltipData.m_nAutoPopDelayTime;
 }
+
 int32_t CFWL_ToolTip::SetAutoPopDelay(int32_t nDelayTime) {
   m_tooltipData.m_nAutoPopDelayTime = nDelayTime;
   return FWL_ERR_Succeeded;
 }
+
 CFX_DIBitmap* CFWL_ToolTip::GetToolTipIcon() {
   return m_tooltipData.m_pBitmap;
 }
+
 FWL_ERR CFWL_ToolTip::SetToolTipIcon(CFX_DIBitmap* pBitmap) {
   m_tooltipData.m_pBitmap = pBitmap;
   return FWL_ERR_Succeeded;
 }
+
 CFX_SizeF CFWL_ToolTip::GetToolTipIconSize() {
   return m_tooltipData.m_fIconSize;
 }
+
 FWL_ERR CFWL_ToolTip::SetToolTipIconSize(CFX_SizeF fSize) {
   m_tooltipData.m_fIconSize = fSize;
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ToolTip::SetAnchor(const CFX_RectF& rtAnchor) {
   return static_cast<IFWL_ToolTip*>(m_pIface)->SetAnchor(rtAnchor);
 }
+
 FWL_ERR CFWL_ToolTip::Show() {
   return static_cast<IFWL_ToolTip*>(m_pIface)->Show();
 }
+
 FWL_ERR CFWL_ToolTip::Hide() {
   return static_cast<IFWL_ToolTip*>(m_pIface)->Hide();
 }
+
 CFWL_ToolTip::CFWL_ToolTip() {}
+
 CFWL_ToolTip::~CFWL_ToolTip() {}
+
 CFWL_ToolTip::CFWL_ToolTipDP::CFWL_ToolTipDP() : m_pBitmap(NULL) {
   m_wsCaption = L"";
   m_nInitDelayTime = 500;
   m_nAutoPopDelayTime = 50000;
   m_fAnchor.Set(0.0, 0.0, 0.0, 0.0);
 }
+
 FWL_ERR CFWL_ToolTip::CFWL_ToolTipDP::GetCaption(IFWL_Widget* pWidget,
                                                  CFX_WideString& wsCaption) {
   wsCaption = m_wsCaption;
   return FWL_ERR_Succeeded;
 }
+
 int32_t CFWL_ToolTip::CFWL_ToolTipDP::GetInitialDelay(IFWL_Widget* pWidget) {
   return m_nInitDelayTime;
 }
+
 int32_t CFWL_ToolTip::CFWL_ToolTipDP::GetAutoPopDelay(IFWL_Widget* pWidget) {
   return m_nAutoPopDelayTime;
 }
+
 CFX_DIBitmap* CFWL_ToolTip::CFWL_ToolTipDP::GetToolTipIcon(
     IFWL_Widget* pWidget) {
   return m_pBitmap;
 }
+
 CFX_SizeF CFWL_ToolTip::CFWL_ToolTipDP::GetToolTipIconSize(
     IFWL_Widget* pWidget) {
   return m_fIconSize;
 }
+
 CFX_RectF CFWL_ToolTip::CFWL_ToolTipDP::GetAnchor() {
   return m_fAnchor;
 }
diff --git a/xfa/include/fwl/lightwidget/tooltipctrl.h b/xfa/fwl/lightwidget/cfwl_tooltip.h
similarity index 88%
rename from xfa/include/fwl/lightwidget/tooltipctrl.h
rename to xfa/fwl/lightwidget/cfwl_tooltip.h
index 6a487f2..817362a 100644
--- a/xfa/include/fwl/lightwidget/tooltipctrl.h
+++ b/xfa/fwl/lightwidget/cfwl_tooltip.h
@@ -4,11 +4,11 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_TOOLTIPCTRL_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_TOOLTIPCTRL_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_TOOLTIP_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_TOOLTIP_H_
 
 #include "xfa/fwl/basewidget/ifwl_tooltip.h"
-#include "xfa/include/fwl/lightwidget/widget.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 
 class CFWL_ToolTip : public CFWL_Widget {
  public:
@@ -50,4 +50,4 @@
   CFWL_ToolTipDP m_tooltipData;
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_TOOLTIPCTRL_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_TOOLTIP_H_
diff --git a/xfa/fwl/lightwidget/widget.cpp b/xfa/fwl/lightwidget/cfwl_widget.cpp
similarity index 89%
rename from xfa/fwl/lightwidget/widget.cpp
rename to xfa/fwl/lightwidget/cfwl_widget.cpp
index 294604a..1f4512e 100644
--- a/xfa/fwl/lightwidget/widget.cpp
+++ b/xfa/fwl/lightwidget/cfwl_widget.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/lightwidget/widget.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 
 #include "xfa/fde/tto/fde_textout.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
@@ -16,65 +16,60 @@
 #include "xfa/fwl/core/ifwl_notethread.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 
-CFWL_WidgetImpProperties CFWL_WidgetProperties::MakeWidgetImpProperties(
-    IFWL_DataProvider* pDataProvider) const {
-  CFWL_WidgetImpProperties result;
-  result.m_ctmOnParent = m_ctmOnParent;
-  result.m_rtWidget = m_rtWidget;
-  result.m_dwStyles = m_dwStyles;
-  result.m_dwStyleExes = m_dwStyleExes;
-  result.m_dwStates = m_dwStates;
-  if (m_pParent)
-    result.m_pParent = m_pParent->GetWidget();
-  if (m_pOwner)
-    result.m_pOwner = m_pOwner->GetWidget();
-  result.m_pDataProvider = pDataProvider;
-  return result;
-}
 IFWL_Widget* CFWL_Widget::GetWidget() {
   return m_pIface;
 }
+
 FWL_ERR CFWL_Widget::GetClassName(CFX_WideString& wsClass) const {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->GetClassName(wsClass);
 }
+
 uint32_t CFWL_Widget::GetClassID() const {
   if (!m_pIface)
     return 0;
   return m_pIface->GetClassID();
 }
+
 FX_BOOL CFWL_Widget::IsInstance(const CFX_WideStringC& wsClass) const {
   if (!m_pIface)
     return FALSE;
   return m_pIface->IsInstance(wsClass);
 }
+
 static void* gs_pFWLWidget = (void*)FXBSTR_ID('l', 'i', 'g', 't');
+
 FWL_ERR CFWL_Widget::Initialize(const CFWL_WidgetProperties* pProperties) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->SetPrivateData(gs_pFWLWidget, this, NULL);
 }
+
 FWL_ERR CFWL_Widget::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->GetWidgetRect(rect, bAutoSize);
 }
+
 FWL_ERR CFWL_Widget::GetGlobalRect(CFX_RectF& rect) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->GetGlobalRect(rect);
 }
+
 FWL_ERR CFWL_Widget::SetWidgetRect(const CFX_RectF& rect) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->SetWidgetRect(rect);
 }
+
 FWL_ERR CFWL_Widget::GetClientRect(CFX_RectF& rect) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->GetClientRect(rect);
 }
+
 CFWL_Widget* CFWL_Widget::GetParent() {
   if (!m_pIface)
     return NULL;
@@ -84,26 +79,31 @@
   }
   return NULL;
 }
+
 FWL_ERR CFWL_Widget::SetParent(CFWL_Widget* pParent) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->SetParent(pParent ? pParent->GetWidget() : NULL);
 }
+
 CFWL_Widget* CFWL_Widget::GetOwner() {
   if (!m_pIface)
     return NULL;
   return NULL;
 }
+
 FWL_ERR CFWL_Widget::SetOwner(CFWL_Widget* pOwner) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return FWL_ERR_Succeeded;
 }
+
 uint32_t CFWL_Widget::GetStyles() {
   if (!m_pIface)
     return 0;
   return m_pIface->GetStyles();
 }
+
 FWL_ERR CFWL_Widget::ModifyStyles(uint32_t dwStylesAdded,
                                   uint32_t dwStylesRemoved) {
   if (!m_pIface)
@@ -115,20 +115,24 @@
     return 0;
   return m_pIface->GetStylesEx();
 }
+
 FWL_ERR CFWL_Widget::ModifyStylesEx(uint32_t dwStylesExAdded,
                                     uint32_t dwStylesExRemoved) {
   return m_pIface->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved);
 }
+
 uint32_t CFWL_Widget::GetStates() {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->GetStates();
 }
+
 FWL_ERR CFWL_Widget::SetStates(uint32_t dwStates, FX_BOOL bSet) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->SetStates(dwStates, bSet);
 }
+
 FWL_ERR CFWL_Widget::SetPrivateData(void* module_id,
                                     void* pData,
                                     PD_CALLBACK_FREEDATA callback) {
@@ -136,31 +140,37 @@
     return FWL_ERR_Indefinite;
   return m_pIface->SetPrivateData(module_id, pData, callback);
 }
+
 void* CFWL_Widget::GetPrivateData(void* module_id) {
   if (!m_pIface)
     return NULL;
   return m_pIface->GetPrivateData(module_id);
 }
+
 FWL_ERR CFWL_Widget::Update() {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->Update();
 }
+
 FWL_ERR CFWL_Widget::LockUpdate() {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->LockUpdate();
 }
+
 FWL_ERR CFWL_Widget::UnlockUpdate() {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->UnlockUpdate();
 }
+
 uint32_t CFWL_Widget::HitTest(FX_FLOAT fx, FX_FLOAT fy) {
   if (!m_pIface)
     return 0;
   return m_pIface->HitTest(fx, fy);
 }
+
 FWL_ERR CFWL_Widget::TransformTo(CFWL_Widget* pWidget,
                                  FX_FLOAT& fx,
                                  FX_FLOAT& fy) {
@@ -168,39 +178,46 @@
     return FWL_ERR_Indefinite;
   return m_pIface->TransformTo(pWidget ? pWidget->GetWidget() : NULL, fx, fy);
 }
+
 FWL_ERR CFWL_Widget::TransformTo(CFWL_Widget* pWidget, CFX_RectF& rt) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->TransformTo(pWidget ? pWidget->GetWidget() : NULL, rt);
 }
+
 FWL_ERR CFWL_Widget::GetMatrix(CFX_Matrix& matrix, FX_BOOL bGlobal) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->GetMatrix(matrix, bGlobal);
 }
+
 FWL_ERR CFWL_Widget::SetMatrix(const CFX_Matrix& matrix) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->SetMatrix(matrix);
 }
+
 FWL_ERR CFWL_Widget::DrawWidget(CFX_Graphics* pGraphics,
                                 const CFX_Matrix* pMatrix) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
   return m_pIface->DrawWidget(pGraphics, pMatrix);
 }
+
 IFWL_WidgetDelegate* CFWL_Widget::SetDelegate(IFWL_WidgetDelegate* pDelegate) {
   if (!m_pIface)
     return NULL;
   m_pDelegate = m_pIface->SetDelegate(pDelegate);
   return m_pDelegate;
 }
+
 CFWL_Widget::CFWL_Widget()
     : m_pIface(NULL), m_pDelegate(NULL), m_pProperties(NULL) {
   m_pProperties = new CFWL_WidgetProperties;
   m_pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr());
   FXSYS_assert(m_pWidgetMgr != NULL);
 }
+
 CFWL_Widget::~CFWL_Widget() {
   delete m_pProperties;
   if (m_pIface) {
@@ -208,6 +225,7 @@
     delete m_pIface;
   }
 }
+
 FWL_ERR CFWL_Widget::Repaint(const CFX_RectF* pRect) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
@@ -220,6 +238,7 @@
   }
   return m_pWidgetMgr->RepaintWidget(m_pIface, &rect);
 }
+
 FWL_ERR CFWL_Widget::SetFocus(FX_BOOL bFocus) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
@@ -238,6 +257,7 @@
   }
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_Widget::SetGrab(FX_BOOL bSet) {
   if (!m_pIface)
     return FWL_ERR_Indefinite;
@@ -250,6 +270,7 @@
   pDriver->SetGrab(m_pIface, bSet);
   return FWL_ERR_Succeeded;
 }
+
 void CFWL_Widget::RegisterEventTarget(CFWL_Widget* pEventSource,
                                       uint32_t dwFilter) {
   if (!m_pIface)
@@ -264,6 +285,7 @@
       !pEventSource ? NULL : pEventSource->GetWidget();
   pNoteDriver->RegisterEventTarget(GetWidget(), pEventSourceImp, dwFilter);
 }
+
 void CFWL_Widget::DispatchEvent(CFWL_Event* pEvent) {
   if (!m_pIface)
     return;
@@ -278,9 +300,11 @@
     return;
   pNoteDriver->SendNote(pEvent);
 }
+
 #define FWL_WGT_CalcHeight 2048
 #define FWL_WGT_CalcWidth 2048
 #define FWL_WGT_CalcMultiLineDefWidth 120.0f
+
 CFX_SizeF CFWL_Widget::CalcTextSize(const CFX_WideString& wsText,
                                     FX_BOOL bMultiLine,
                                     int32_t iLineWidth) {
@@ -305,15 +329,3 @@
   pTheme->CalcTextRect(&calPart, rect);
   return CFX_SizeF(rect.width, rect.height);
 }
-CFWL_WidgetDelegate::CFWL_WidgetDelegate() {}
-CFWL_WidgetDelegate::~CFWL_WidgetDelegate() {}
-int32_t CFWL_WidgetDelegate::OnProcessMessage(CFWL_Message* pMessage) {
-  return 1;
-}
-FWL_ERR CFWL_WidgetDelegate::OnProcessEvent(CFWL_Event* pEvent) {
-  return FWL_ERR_Succeeded;
-}
-FWL_ERR CFWL_WidgetDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
-                                          const CFX_Matrix* pMatrix) {
-  return FWL_ERR_Succeeded;
-}
diff --git a/xfa/include/fwl/lightwidget/widget.h b/xfa/fwl/lightwidget/cfwl_widget.h
similarity index 70%
rename from xfa/include/fwl/lightwidget/widget.h
rename to xfa/fwl/lightwidget/cfwl_widget.h
index 38fe777..f1b6715 100644
--- a/xfa/include/fwl/lightwidget/widget.h
+++ b/xfa/fwl/lightwidget/cfwl_widget.h
@@ -4,11 +4,11 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_LIGHTWIDGET_WIDGET_H_
-#define XFA_INCLUDE_FWL_LIGHTWIDGET_WIDGET_H_
+#ifndef XFA_FWL_LIGHTWIDGET_CFWL_WIDGET_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_WIDGET_H_
 
 #include "xfa/fwl/core/cfwl_event.h"
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/lightwidget/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/ifwl_widget.h"
 
 class CFWL_Event;
@@ -17,30 +17,6 @@
 class CFWL_WidgetDelegate;
 class CFWL_WidgetMgr;
 
-class CFWL_WidgetProperties {
- public:
-  CFWL_WidgetProperties() {
-    m_ctmOnParent.SetIdentity();
-    m_rtWidget.Set(0, 0, 0, 0);
-    m_dwStyles = FWL_WGTSTYLE_Child;
-    m_dwStyleExes = 0;
-    m_dwStates = 0;
-    m_pParent = NULL;
-    m_pOwner = NULL;
-  }
-  CFWL_WidgetImpProperties MakeWidgetImpProperties(
-      IFWL_DataProvider* pDataProvider) const;
-
-  CFX_WideString m_wsWindowclass;
-  CFX_Matrix m_ctmOnParent;
-  CFX_RectF m_rtWidget;
-  uint32_t m_dwStyles;
-  uint32_t m_dwStyleExes;
-  uint32_t m_dwStates;
-  CFWL_Widget* m_pParent;
-  CFWL_Widget* m_pOwner;
-};
-
 class CFWL_Widget {
  public:
   virtual ~CFWL_Widget();
@@ -49,10 +25,6 @@
   uint32_t GetClassID() const;
   virtual FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const;
 
- protected:
-  FWL_ERR Initialize(const CFWL_WidgetProperties* pProperties = NULL);
-
- public:
   FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE);
   FWL_ERR GetGlobalRect(CFX_RectF& rect);
   FWL_ERR SetWidgetRect(const CFX_RectF& rect);
@@ -96,15 +68,9 @@
   IFWL_WidgetDelegate* m_pDelegate;
   CFWL_WidgetMgr* m_pWidgetMgr;
   CFWL_WidgetProperties* m_pProperties;
-};
-class CFWL_WidgetDelegate {
- public:
-  CFWL_WidgetDelegate();
-  virtual ~CFWL_WidgetDelegate();
-  virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
-  virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
-  virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
-                               const CFX_Matrix* pMatrix = NULL);
+
+ protected:
+  FWL_ERR Initialize(const CFWL_WidgetProperties* pProperties = NULL);
 };
 
-#endif  // XFA_INCLUDE_FWL_LIGHTWIDGET_WIDGET_H_
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_WIDGET_H_
diff --git a/xfa/fwl/lightwidget/cfwl_widgetdelegate.cpp b/xfa/fwl/lightwidget/cfwl_widgetdelegate.cpp
new file mode 100644
index 0000000..1596aba
--- /dev/null
+++ b/xfa/fwl/lightwidget/cfwl_widgetdelegate.cpp
@@ -0,0 +1,27 @@
+// 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 "xfa/fwl/lightwidget/cfwl_widgetdelegate.h"
+
+#include "xfa/fwl/core/cfwl_event.h"
+#include "xfa/fwl/core/cfwl_message.h"
+
+CFWL_WidgetDelegate::CFWL_WidgetDelegate() {}
+
+CFWL_WidgetDelegate::~CFWL_WidgetDelegate() {}
+
+int32_t CFWL_WidgetDelegate::OnProcessMessage(CFWL_Message* pMessage) {
+  return 1;
+}
+
+FWL_ERR CFWL_WidgetDelegate::OnProcessEvent(CFWL_Event* pEvent) {
+  return FWL_ERR_Succeeded;
+}
+
+FWL_ERR CFWL_WidgetDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
+                                          const CFX_Matrix* pMatrix) {
+  return FWL_ERR_Succeeded;
+}
diff --git a/xfa/fwl/lightwidget/cfwl_widgetdelegate.h b/xfa/fwl/lightwidget/cfwl_widgetdelegate.h
new file mode 100644
index 0000000..42f6f93
--- /dev/null
+++ b/xfa/fwl/lightwidget/cfwl_widgetdelegate.h
@@ -0,0 +1,29 @@
+// 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 XFA_FWL_LIGHTWIDGET_CFWL_WIDGETDELEGATE_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_WIDGETDELEGATE_H_
+
+#include "xfa/fwl/core/fwl_error.h"
+#include "xfa/fwl/core/ifwl_widgetdelegate.h"
+
+class CFWL_Event;
+class CFWL_Message;
+class CFX_Graphics;
+class CFX_Matrix;
+
+class CFWL_WidgetDelegate : public IFWL_WidgetDelegate {
+ public:
+  CFWL_WidgetDelegate();
+  virtual ~CFWL_WidgetDelegate();
+
+  int32_t OnProcessMessage(CFWL_Message* pMessage) override;
+  FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override;
+  FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
+                       const CFX_Matrix* pMatrix = nullptr) override;
+};
+
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_WIDGETDELEGATE_H_
diff --git a/xfa/fwl/lightwidget/cfwl_widgetproperties.cpp b/xfa/fwl/lightwidget/cfwl_widgetproperties.cpp
new file mode 100644
index 0000000..9afa1b6
--- /dev/null
+++ b/xfa/fwl/lightwidget/cfwl_widgetproperties.cpp
@@ -0,0 +1,25 @@
+// 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 "xfa/fwl/lightwidget/cfwl_widgetproperties.h"
+
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
+
+CFWL_WidgetImpProperties CFWL_WidgetProperties::MakeWidgetImpProperties(
+    IFWL_DataProvider* pDataProvider) const {
+  CFWL_WidgetImpProperties result;
+  result.m_ctmOnParent = m_ctmOnParent;
+  result.m_rtWidget = m_rtWidget;
+  result.m_dwStyles = m_dwStyles;
+  result.m_dwStyleExes = m_dwStyleExes;
+  result.m_dwStates = m_dwStates;
+  if (m_pParent)
+    result.m_pParent = m_pParent->GetWidget();
+  if (m_pOwner)
+    result.m_pOwner = m_pOwner->GetWidget();
+  result.m_pDataProvider = pDataProvider;
+  return result;
+}
diff --git a/xfa/fwl/lightwidget/cfwl_widgetproperties.h b/xfa/fwl/lightwidget/cfwl_widgetproperties.h
new file mode 100644
index 0000000..2a3e3ff
--- /dev/null
+++ b/xfa/fwl/lightwidget/cfwl_widgetproperties.h
@@ -0,0 +1,42 @@
+// 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 XFA_FWL_LIGHTWIDGET_CFWL_WIDGETPROPERTIES_H_
+#define XFA_FWL_LIGHTWIDGET_CFWL_WIDGETPROPERTIES_H_
+
+#include "core/fxcrt/include/fx_coordinates.h"
+#include "core/fxcrt/include/fx_string.h"
+#include "core/fxcrt/include/fx_system.h"
+#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+
+class CFWL_Widget;
+class IFWL_DataProvider;
+
+class CFWL_WidgetProperties {
+ public:
+  CFWL_WidgetProperties()
+      : m_dwStyles(FWL_WGTSTYLE_Child),
+        m_dwStyleExes(0),
+        m_dwStates(0),
+        m_pParent(nullptr),
+        m_pOwner(nullptr) {
+    m_rtWidget.Set(0, 0, 0, 0);
+  }
+
+  CFWL_WidgetImpProperties MakeWidgetImpProperties(
+      IFWL_DataProvider* pDataProvider) const;
+
+  CFX_WideString m_wsWindowclass;
+  CFX_Matrix m_ctmOnParent;
+  CFX_RectF m_rtWidget;
+  uint32_t m_dwStyles;
+  uint32_t m_dwStyleExes;
+  uint32_t m_dwStates;
+  CFWL_Widget* m_pParent;
+  CFWL_Widget* m_pOwner;
+};
+
+#endif  // XFA_FWL_LIGHTWIDGET_CFWL_WIDGETPROPERTIES_H_
diff --git a/xfa/fwl/theme/barcodetp.cpp b/xfa/fwl/theme/cfwl_barcodetp.cpp
similarity index 96%
rename from xfa/fwl/theme/barcodetp.cpp
rename to xfa/fwl/theme/cfwl_barcodetp.cpp
index da10d7a..0edc29b 100644
--- a/xfa/fwl/theme/barcodetp.cpp
+++ b/xfa/fwl/theme/cfwl_barcodetp.cpp
@@ -4,13 +4,14 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/barcodetp.h"
+#include "xfa/fwl/theme/cfwl_barcodetp.h"
 
 #include "xfa/fwl/basewidget/ifwl_barcode.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/ifwl_widget.h"
 
 CFWL_BarcodeTP::CFWL_BarcodeTP() {}
+
 CFWL_BarcodeTP::~CFWL_BarcodeTP() {}
 
 FX_BOOL CFWL_BarcodeTP::IsValidWidget(IFWL_Widget* pWidget) {
@@ -18,6 +19,7 @@
     return FALSE;
   return pWidget->GetClassID() == FWL_CLASSHASH_Barcode;
 }
+
 FX_BOOL CFWL_BarcodeTP::DrawBackground(CFWL_ThemeBackground* pParams) {
   if (!pParams)
     return FALSE;
diff --git a/xfa/include/fwl/theme/barcodetp.h b/xfa/fwl/theme/cfwl_barcodetp.h
similarity index 68%
rename from xfa/include/fwl/theme/barcodetp.h
rename to xfa/fwl/theme/cfwl_barcodetp.h
index 89c9a67..0a03f49 100644
--- a/xfa/include/fwl/theme/barcodetp.h
+++ b/xfa/fwl/theme/cfwl_barcodetp.h
@@ -4,11 +4,11 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_BARCODETP_H_
-#define XFA_INCLUDE_FWL_THEME_BARCODETP_H_
+#ifndef XFA_FWL_THEME_CFWL_BARCODETP_H_
+#define XFA_FWL_THEME_CFWL_BARCODETP_H_
 
-#include "xfa/include/fwl/theme/utils.h"
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_utils.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_BarcodeTP : public CFWL_WidgetTP {
  public:
@@ -18,4 +18,4 @@
   virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams);
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_BARCODETP_H_
+#endif  // XFA_FWL_THEME_CFWL_BARCODETP_H_
diff --git a/xfa/fwl/theme/carettp.cpp b/xfa/fwl/theme/cfwl_carettp.cpp
similarity index 97%
rename from xfa/fwl/theme/carettp.cpp
rename to xfa/fwl/theme/cfwl_carettp.cpp
index a5782f3..0ebc519 100644
--- a/xfa/fwl/theme/carettp.cpp
+++ b/xfa/fwl/theme/cfwl_carettp.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/carettp.h"
+#include "xfa/fwl/theme/cfwl_carettp.h"
 
 #include "xfa/fwl/basewidget/ifwl_caret.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
diff --git a/xfa/include/fwl/theme/carettp.h b/xfa/fwl/theme/cfwl_carettp.h
similarity index 79%
rename from xfa/include/fwl/theme/carettp.h
rename to xfa/fwl/theme/cfwl_carettp.h
index bd432dc..8c56d38 100644
--- a/xfa/include/fwl/theme/carettp.h
+++ b/xfa/fwl/theme/cfwl_carettp.h
@@ -4,10 +4,10 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_CARETTP_H_
-#define XFA_INCLUDE_FWL_THEME_CARETTP_H_
+#ifndef XFA_FWL_THEME_CFWL_CARETTP_H_
+#define XFA_FWL_THEME_CFWL_CARETTP_H_
 
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_CaretTP : public CFWL_WidgetTP {
  public:
@@ -24,4 +24,4 @@
                    CFX_Matrix* pMatrix = NULL);
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_CARETTP_H_
+#endif  // XFA_FWL_THEME_CFWL_CARETTP_H_
diff --git a/xfa/fwl/theme/checkboxtp.cpp b/xfa/fwl/theme/cfwl_checkboxtp.cpp
similarity index 99%
rename from xfa/fwl/theme/checkboxtp.cpp
rename to xfa/fwl/theme/cfwl_checkboxtp.cpp
index ee485fb..94f69a4 100644
--- a/xfa/fwl/theme/checkboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_checkboxtp.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/checkboxtp.h"
+#include "xfa/fwl/theme/cfwl_checkboxtp.h"
 
 #include "xfa/fde/tto/fde_textout.h"
 #include "xfa/fwl/basewidget/ifwl_checkbox.h"
diff --git a/xfa/include/fwl/theme/checkboxtp.h b/xfa/fwl/theme/cfwl_checkboxtp.h
similarity index 92%
rename from xfa/include/fwl/theme/checkboxtp.h
rename to xfa/fwl/theme/cfwl_checkboxtp.h
index fc666d7..bb2f14d 100644
--- a/xfa/include/fwl/theme/checkboxtp.h
+++ b/xfa/fwl/theme/cfwl_checkboxtp.h
@@ -4,11 +4,11 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_CHECKBOXTP_H_
-#define XFA_INCLUDE_FWL_THEME_CHECKBOXTP_H_
+#ifndef XFA_FWL_THEME_CFWL_CHECKBOXTP_H_
+#define XFA_FWL_THEME_CFWL_CHECKBOXTP_H_
 
-#include "xfa/include/fwl/theme/utils.h"
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_utils.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_CheckBoxTP : public CFWL_WidgetTP {
  public:
@@ -81,4 +81,4 @@
   CFX_Path* m_pCheckPath;
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_CHECKBOXTP_H_
+#endif  // XFA_FWL_THEME_CFWL_CHECKBOXTP_H_
diff --git a/xfa/fwl/theme/comboboxtp.cpp b/xfa/fwl/theme/cfwl_comboboxtp.cpp
similarity index 99%
rename from xfa/fwl/theme/comboboxtp.cpp
rename to xfa/fwl/theme/cfwl_comboboxtp.cpp
index 578793b..2c5a1c4 100644
--- a/xfa/fwl/theme/comboboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_comboboxtp.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/comboboxtp.h"
+#include "xfa/fwl/theme/cfwl_comboboxtp.h"
 
 #include "xfa/fwl/basewidget/ifwl_combobox.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
diff --git a/xfa/include/fwl/theme/comboboxtp.h b/xfa/fwl/theme/cfwl_comboboxtp.h
similarity index 82%
rename from xfa/include/fwl/theme/comboboxtp.h
rename to xfa/fwl/theme/cfwl_comboboxtp.h
index 74d49b4..fd65fa5 100644
--- a/xfa/include/fwl/theme/comboboxtp.h
+++ b/xfa/fwl/theme/cfwl_comboboxtp.h
@@ -4,10 +4,10 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_COMBOBOXTP_H_
-#define XFA_INCLUDE_FWL_THEME_COMBOBOXTP_H_
+#ifndef XFA_FWL_THEME_CFWL_COMBOBOXTP_H_
+#define XFA_FWL_THEME_CFWL_COMBOBOXTP_H_
 
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_ComboBoxTP : public CFWL_WidgetTP {
  public:
@@ -26,4 +26,4 @@
                          CFX_Matrix* pMatrix);
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_COMBOBOXTP_H_
+#endif  // XFA_FWL_THEME_CFWL_COMBOBOXTP_H_
diff --git a/xfa/fwl/theme/datetimepickertp.cpp b/xfa/fwl/theme/cfwl_datetimepickedtp.cpp
similarity index 97%
rename from xfa/fwl/theme/datetimepickertp.cpp
rename to xfa/fwl/theme/cfwl_datetimepickedtp.cpp
index 63fbc13..4e1d39a 100644
--- a/xfa/fwl/theme/datetimepickertp.cpp
+++ b/xfa/fwl/theme/cfwl_datetimepickedtp.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/datetimepickertp.h"
+#include "xfa/fwl/theme/cfwl_datetimepickertp.h"
 
 #include "xfa/fwl/basewidget/ifwl_datetimepicker.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
@@ -112,7 +112,9 @@
 #endif
 void CFWL_DateTimePickerTP::initThemeData() {
   uint32_t* pData = (uint32_t*)&m_pThemeData->BoxBkColor;
-  *pData++ = 0, *pData++ = 0, *pData++ = ArgbEncode(255, 220, 220, 215),
+  *pData++ = 0;
+  *pData++ = 0;
+  *pData++ = ArgbEncode(255, 220, 220, 215),
   *pData++ = ArgbEncode(255, 255, 255, 255),
   *pData++ = ArgbEncode(255, 255, 240, 207),
   *pData++ = ArgbEncode(255, 248, 179, 48),
diff --git a/xfa/include/fwl/theme/datetimepickertp.h b/xfa/fwl/theme/cfwl_datetimepickertp.h
similarity index 77%
rename from xfa/include/fwl/theme/datetimepickertp.h
rename to xfa/fwl/theme/cfwl_datetimepickertp.h
index de2f830..199551e 100644
--- a/xfa/include/fwl/theme/datetimepickertp.h
+++ b/xfa/fwl/theme/cfwl_datetimepickertp.h
@@ -4,10 +4,10 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_DATETIMEPICKERTP_H_
-#define XFA_INCLUDE_FWL_THEME_DATETIMEPICKERTP_H_
+#ifndef XFA_FWL_THEME_CFWL_DATETIMEPICKERTP_H_
+#define XFA_FWL_THEME_CFWL_DATETIMEPICKERTP_H_
 
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_DateTimePickerTP : public CFWL_WidgetTP {
  public:
@@ -24,4 +24,4 @@
   } * m_pThemeData;
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_DATETIMEPICKERTP_H_
+#endif  // XFA_FWL_THEME_CFWL_DATETIMEPICKERTP_H_
diff --git a/xfa/fwl/theme/edittp.cpp b/xfa/fwl/theme/cfwl_edittp.cpp
similarity index 98%
rename from xfa/fwl/theme/edittp.cpp
rename to xfa/fwl/theme/cfwl_edittp.cpp
index a99b214..92f32dc 100644
--- a/xfa/fwl/theme/edittp.cpp
+++ b/xfa/fwl/theme/cfwl_edittp.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/edittp.h"
+#include "xfa/fwl/theme/cfwl_edittp.h"
 
 #include "xfa/fwl/basewidget/ifwl_edit.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
diff --git a/xfa/include/fwl/theme/edittp.h b/xfa/fwl/theme/cfwl_edittp.h
similarity index 75%
rename from xfa/include/fwl/theme/edittp.h
rename to xfa/fwl/theme/cfwl_edittp.h
index d03fbe6..73c99da 100644
--- a/xfa/include/fwl/theme/edittp.h
+++ b/xfa/fwl/theme/cfwl_edittp.h
@@ -4,10 +4,10 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_EDITTP_H_
-#define XFA_INCLUDE_FWL_THEME_EDITTP_H_
+#ifndef XFA_FWL_THEME_CFWL_EDITTP_H_
+#define XFA_FWL_THEME_CFWL_EDITTP_H_
 
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_EditTP : public CFWL_WidgetTP {
  public:
@@ -19,4 +19,4 @@
   virtual FWL_ERR Finalize();
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_EDITTP_H_
+#endif  // XFA_FWL_THEME_CFWL_EDITTP_H_
diff --git a/xfa/fwl/theme/formtp.cpp b/xfa/fwl/theme/cfwl_formtp.cpp
similarity index 99%
rename from xfa/fwl/theme/formtp.cpp
rename to xfa/fwl/theme/cfwl_formtp.cpp
index 28a8805..e7cc122 100644
--- a/xfa/fwl/theme/formtp.cpp
+++ b/xfa/fwl/theme/cfwl_formtp.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/formtp.h"
+#include "xfa/fwl/theme/cfwl_formtp.h"
 
 #include "xfa/fde/tto/fde_textout.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
diff --git a/xfa/include/fwl/theme/formtp.h b/xfa/fwl/theme/cfwl_formtp.h
similarity index 94%
rename from xfa/include/fwl/theme/formtp.h
rename to xfa/fwl/theme/cfwl_formtp.h
index 90ec673..838f198 100644
--- a/xfa/include/fwl/theme/formtp.h
+++ b/xfa/fwl/theme/cfwl_formtp.h
@@ -4,11 +4,11 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_FORMTP_H_
-#define XFA_INCLUDE_FWL_THEME_FORMTP_H_
+#ifndef XFA_FWL_THEME_CFWL_FORMTP_H_
+#define XFA_FWL_THEME_CFWL_FORMTP_H_
 
-#include "xfa/include/fwl/theme/utils.h"
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_utils.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_FormTP : public CFWL_WidgetTP {
  public:
@@ -108,4 +108,4 @@
   } * m_pThemeData;
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_FORMTP_H_
+#endif  // XFA_FWL_THEME_CFWL_FORMTP_H_
diff --git a/xfa/fwl/theme/listboxtp.cpp b/xfa/fwl/theme/cfwl_listboxtp.cpp
similarity index 98%
rename from xfa/fwl/theme/listboxtp.cpp
rename to xfa/fwl/theme/cfwl_listboxtp.cpp
index 5c38166..210949a 100644
--- a/xfa/fwl/theme/listboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_listboxtp.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/listboxtp.h"
+#include "xfa/fwl/theme/cfwl_listboxtp.h"
 
 #include "xfa/fwl/basewidget/ifwl_listbox.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
diff --git a/xfa/include/fwl/theme/listboxtp.h b/xfa/fwl/theme/cfwl_listboxtp.h
similarity index 81%
rename from xfa/include/fwl/theme/listboxtp.h
rename to xfa/fwl/theme/cfwl_listboxtp.h
index 8f5720c..d4bd7ef 100644
--- a/xfa/include/fwl/theme/listboxtp.h
+++ b/xfa/fwl/theme/cfwl_listboxtp.h
@@ -4,10 +4,10 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_LISTBOXTP_H_
-#define XFA_INCLUDE_FWL_THEME_LISTBOXTP_H_
+#ifndef XFA_FWL_THEME_CFWL_LISTBOXTP_H_
+#define XFA_FWL_THEME_CFWL_LISTBOXTP_H_
 
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_ListBoxTP : public CFWL_WidgetTP {
  public:
@@ -26,4 +26,4 @@
                        CFX_Matrix* pMatrix = NULL);
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_LISTBOXTP_H_
+#endif  // XFA_FWL_THEME_CFWL_LISTBOXTP_H_
diff --git a/xfa/fwl/theme/monthcalendartp.cpp b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
similarity index 99%
rename from xfa/fwl/theme/monthcalendartp.cpp
rename to xfa/fwl/theme/cfwl_monthcalendartp.cpp
index 2ae1548..2d53080 100644
--- a/xfa/fwl/theme/monthcalendartp.cpp
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/monthcalendartp.h"
+#include "xfa/fwl/theme/cfwl_monthcalendartp.h"
 
 #include "xfa/fde/tto/fde_textout.h"
 #include "xfa/fwl/basewidget/ifwl_monthcalendar.h"
diff --git a/xfa/include/fwl/theme/monthcalendartp.h b/xfa/fwl/theme/cfwl_monthcalendartp.h
similarity index 90%
rename from xfa/include/fwl/theme/monthcalendartp.h
rename to xfa/fwl/theme/cfwl_monthcalendartp.h
index 8321965..3624ee1 100644
--- a/xfa/include/fwl/theme/monthcalendartp.h
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.h
@@ -4,10 +4,10 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_MONTHCALENDARTP_H_
-#define XFA_INCLUDE_FWL_THEME_MONTHCALENDARTP_H_
+#ifndef XFA_FWL_THEME_CFWL_MONTHCALENDARTP_H_
+#define XFA_FWL_THEME_CFWL_MONTHCALENDARTP_H_
 
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_MonthCalendarTP : public CFWL_WidgetTP {
  public:
@@ -48,4 +48,4 @@
   CFX_WideString wsResource;
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_MONTHCALENDARTP_H_
+#endif  // XFA_FWL_THEME_CFWL_MONTHCALENDARTP_H_
diff --git a/xfa/fwl/theme/pictureboxtp.cpp b/xfa/fwl/theme/cfwl_pictureboxtp.cpp
similarity index 95%
rename from xfa/fwl/theme/pictureboxtp.cpp
rename to xfa/fwl/theme/cfwl_pictureboxtp.cpp
index ab5cd02..ee83a7e 100644
--- a/xfa/fwl/theme/pictureboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_pictureboxtp.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/pictureboxtp.h"
+#include "xfa/fwl/theme/cfwl_pictureboxtp.h"
 
 #include "xfa/fwl/basewidget/ifwl_picturebox.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
diff --git a/xfa/include/fwl/theme/pictureboxtp.h b/xfa/fwl/theme/cfwl_pictureboxtp.h
similarity index 72%
rename from xfa/include/fwl/theme/pictureboxtp.h
rename to xfa/fwl/theme/cfwl_pictureboxtp.h
index 8879890..0216971 100644
--- a/xfa/include/fwl/theme/pictureboxtp.h
+++ b/xfa/fwl/theme/cfwl_pictureboxtp.h
@@ -4,10 +4,10 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_PICTUREBOXTP_H_
-#define XFA_INCLUDE_FWL_THEME_PICTUREBOXTP_H_
+#ifndef XFA_FWL_THEME_CFWL_PICTUREBOXTP_H_
+#define XFA_FWL_THEME_CFWL_PICTUREBOXTP_H_
 
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_PictureBoxTP : public CFWL_WidgetTP {
  public:
@@ -17,4 +17,4 @@
   virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams);
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_PICTUREBOXTP_H_
+#endif  // XFA_FWL_THEME_CFWL_PICTUREBOXTP_H_
diff --git a/xfa/fwl/theme/pushbuttontp.cpp b/xfa/fwl/theme/cfwl_pushbuttontp.cpp
similarity index 99%
rename from xfa/fwl/theme/pushbuttontp.cpp
rename to xfa/fwl/theme/cfwl_pushbuttontp.cpp
index 00ff3e9..5889f30 100644
--- a/xfa/fwl/theme/pushbuttontp.cpp
+++ b/xfa/fwl/theme/cfwl_pushbuttontp.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/pushbuttontp.h"
+#include "xfa/fwl/theme/cfwl_pushbuttontp.h"
 
 #include "xfa/fwl/basewidget/ifwl_pushbutton.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
diff --git a/xfa/include/fwl/theme/pushbuttontp.h b/xfa/fwl/theme/cfwl_pushbuttontp.h
similarity index 85%
rename from xfa/include/fwl/theme/pushbuttontp.h
rename to xfa/fwl/theme/cfwl_pushbuttontp.h
index b951de0..b72ac86 100644
--- a/xfa/include/fwl/theme/pushbuttontp.h
+++ b/xfa/fwl/theme/cfwl_pushbuttontp.h
@@ -4,10 +4,10 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_PUSHBUTTONTP_H_
-#define XFA_INCLUDE_FWL_THEME_PUSHBUTTONTP_H_
+#ifndef XFA_FWL_THEME_CFWL_PUSHBUTTONTP_H_
+#define XFA_FWL_THEME_CFWL_PUSHBUTTONTP_H_
 
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_PushButtonTP : public CFWL_WidgetTP {
  public:
@@ -23,6 +23,13 @@
   virtual FWL_ERR Finalize();
 
  protected:
+  struct PBThemeData {
+    FX_ARGB clrBorder[5];
+    FX_ARGB clrStart[5];
+    FX_ARGB clrEnd[5];
+    FX_ARGB clrFill[5];
+  };
+
   void SetThemeData(uint32_t dwID);
   void SetTopLineColor(uint32_t* pData);
   void SetLeftLineColor(uint32_t* pData);
@@ -33,12 +40,7 @@
   void SetCornerColor(uint32_t* pData);
   int32_t GetColorID(uint32_t dwStates);
 
-  struct PBThemeData {
-    FX_ARGB clrBorder[5];
-    FX_ARGB clrStart[5];
-    FX_ARGB clrEnd[5];
-    FX_ARGB clrFill[5];
-  } * m_pThemeData;
+  struct PBThemeData* m_pThemeData;
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_PUSHBUTTONTP_H_
+#endif  // XFA_FWL_THEME_CFWL_PUSHBUTTONTP_H_
diff --git a/xfa/fwl/theme/scrollbartp.cpp b/xfa/fwl/theme/cfwl_scrollbartp.cpp
similarity index 99%
rename from xfa/fwl/theme/scrollbartp.cpp
rename to xfa/fwl/theme/cfwl_scrollbartp.cpp
index 2df08d6..c6a14f8 100644
--- a/xfa/fwl/theme/scrollbartp.cpp
+++ b/xfa/fwl/theme/cfwl_scrollbartp.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/scrollbartp.h"
+#include "xfa/fwl/theme/cfwl_scrollbartp.h"
 
 #include "xfa/fwl/basewidget/ifwl_scrollbar.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
diff --git a/xfa/include/fwl/theme/scrollbartp.h b/xfa/fwl/theme/cfwl_scrollbartp.h
similarity index 89%
rename from xfa/include/fwl/theme/scrollbartp.h
rename to xfa/fwl/theme/cfwl_scrollbartp.h
index 5b7145c..0530393 100644
--- a/xfa/include/fwl/theme/scrollbartp.h
+++ b/xfa/fwl/theme/cfwl_scrollbartp.h
@@ -4,10 +4,10 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_SCROLLBARTP_H_
-#define XFA_INCLUDE_FWL_THEME_SCROLLBARTP_H_
+#ifndef XFA_FWL_THEME_CFWL_SCROLLBARTP_H_
+#define XFA_FWL_THEME_CFWL_SCROLLBARTP_H_
 
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_ScrollBarTP : public CFWL_WidgetTP {
  public:
@@ -21,6 +21,15 @@
   virtual void* GetCapacity(CFWL_ThemePart* pThemePart, uint32_t dwCapacity);
 
  protected:
+  struct SBThemeData {
+    FX_ARGB clrPawColorLight[4];
+    FX_ARGB clrPawColorDark[4];
+    FX_ARGB clrBtnBK[4][2];
+    FX_ARGB clrBtnBorder[4];
+    FX_ARGB clrTrackBKStart;
+    FX_ARGB clrTrackBKEnd;
+  };
+
   void DrawThumbBtn(CFX_Graphics* pGraphics,
                     const CFX_RectF* pRect,
                     FX_BOOL bVert,
@@ -44,14 +53,8 @@
                FWLTHEME_STATE eState,
                CFX_Matrix* pMatrix = NULL);
   void SetThemeData(uint32_t dwID);
-  struct SBThemeData {
-    FX_ARGB clrPawColorLight[4];
-    FX_ARGB clrPawColorDark[4];
-    FX_ARGB clrBtnBK[4][2];
-    FX_ARGB clrBtnBorder[4];
-    FX_ARGB clrTrackBKStart;
-    FX_ARGB clrTrackBKEnd;
-  } * m_pThemeData;
+
+  struct SBThemeData* m_pThemeData;
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_SCROLLBARTP_H_
+#endif  // XFA_FWL_THEME_CFWL_SCROLLBARTP_H_
diff --git a/xfa/include/fwl/theme/utils.h b/xfa/fwl/theme/cfwl_utils.h
similarity index 94%
rename from xfa/include/fwl/theme/utils.h
rename to xfa/fwl/theme/cfwl_utils.h
index 0a37d32..d530b76 100644
--- a/xfa/include/fwl/theme/utils.h
+++ b/xfa/fwl/theme/cfwl_utils.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_UTILS_H_
-#define XFA_INCLUDE_FWL_THEME_UTILS_H_
+#ifndef XFA_FWL_THEME_CFWL_UTILS_H_
+#define XFA_FWL_THEME_CFWL_UTILS_H_
 
 #include "core/fxcrt/include/fx_system.h"
 
@@ -72,4 +72,4 @@
 #define FWLTHEME_CAPACITY_CXBorder 1.0f
 #define FWLTHEME_CAPACITY_CYBorder 1.0f
 
-#endif  // XFA_INCLUDE_FWL_THEME_UTILS_H_
+#endif  // XFA_FWL_THEME_CFWL_UTILS_H_
diff --git a/xfa/fwl/theme/widgettp.cpp b/xfa/fwl/theme/cfwl_widgettp.cpp
similarity index 99%
rename from xfa/fwl/theme/widgettp.cpp
rename to xfa/fwl/theme/cfwl_widgettp.cpp
index c87c70c..7aaaf40 100644
--- a/xfa/fwl/theme/widgettp.cpp
+++ b/xfa/fwl/theme/cfwl_widgettp.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/include/fwl/theme/widgettp.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 
 #include <algorithm>
 
diff --git a/xfa/include/fwl/theme/widgettp.h b/xfa/fwl/theme/cfwl_widgettp.h
similarity index 97%
rename from xfa/include/fwl/theme/widgettp.h
rename to xfa/fwl/theme/cfwl_widgettp.h
index 344f4d3..03d575a 100644
--- a/xfa/include/fwl/theme/widgettp.h
+++ b/xfa/fwl/theme/cfwl_widgettp.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef XFA_INCLUDE_FWL_THEME_WIDGETTP_H_
-#define XFA_INCLUDE_FWL_THEME_WIDGETTP_H_
+#ifndef XFA_FWL_THEME_CFWL_WIDGETTP_H_
+#define XFA_FWL_THEME_CFWL_WIDGETTP_H_
 
 #include <memory>
 #include <vector>
@@ -14,7 +14,7 @@
 #include "core/fxcrt/include/fx_system.h"
 #include "xfa/fwl/core/fwl_error.h"
 #include "xfa/fxgraphics/include/cfx_graphics.h"
-#include "xfa/include/fwl/theme/utils.h"
+#include "xfa/fwl/theme/cfwl_utils.h"
 
 class IFWL_Widget;
 class IFDE_TextOut;
@@ -217,4 +217,4 @@
   std::vector<std::unique_ptr<CFWL_FontData>> m_FontsArray;
 };
 
-#endif  // XFA_INCLUDE_FWL_THEME_WIDGETTP_H_
+#endif  // XFA_FWL_THEME_CFWL_WIDGETTP_H_
diff --git a/xfa/fxfa/app/xfa_ffbarcode.cpp b/xfa/fxfa/app/xfa_ffbarcode.cpp
index 22ab7f7..daa9491 100644
--- a/xfa/fxfa/app/xfa_ffbarcode.cpp
+++ b/xfa/fxfa/app/xfa_ffbarcode.cpp
@@ -9,12 +9,12 @@
 #include "core/fxcrt/include/fx_ext.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_notedriver.h"
+#include "xfa/fwl/lightwidget/cfwl_barcode.h"
 #include "xfa/fxfa/app/xfa_fffield.h"
 #include "xfa/fxfa/app/xfa_ffpageview.h"
 #include "xfa/fxfa/app/xfa_fftextedit.h"
 #include "xfa/fxfa/app/xfa_ffwidget.h"
 #include "xfa/fxfa/app/xfa_fwladapter.h"
-#include "xfa/include/fwl/lightwidget/barcode.h"
 
 namespace {
 
diff --git a/xfa/fxfa/app/xfa_ffcheckbutton.cpp b/xfa/fxfa/app/xfa_ffcheckbutton.cpp
index c1b3099..fdf7d78 100644
--- a/xfa/fxfa/app/xfa_ffcheckbutton.cpp
+++ b/xfa/fxfa/app/xfa_ffcheckbutton.cpp
@@ -9,6 +9,7 @@
 #include "xfa/fwl/core/cfwl_message.h"
 #include "xfa/fwl/core/ifwl_notedriver.h"
 #include "xfa/fwl/core/ifwl_widgetmgrdelegate.h"
+#include "xfa/fwl/lightwidget/cfwl_checkbox.h"
 #include "xfa/fxfa/app/xfa_ffapp.h"
 #include "xfa/fxfa/app/xfa_ffdoc.h"
 #include "xfa/fxfa/app/xfa_ffdocview.h"
@@ -16,7 +17,6 @@
 #include "xfa/fxfa/app/xfa_fffield.h"
 #include "xfa/fxfa/app/xfa_ffpageview.h"
 #include "xfa/fxfa/app/xfa_ffwidget.h"
-#include "xfa/include/fwl/lightwidget/checkbox.h"
 
 CXFA_FFCheckButton::CXFA_FFCheckButton(CXFA_FFPageView* pPageView,
                                        CXFA_WidgetAcc* pDataAcc)
diff --git a/xfa/fxfa/app/xfa_ffchoicelist.cpp b/xfa/fxfa/app/xfa_ffchoicelist.cpp
index 1410ad4..9017f68 100644
--- a/xfa/fxfa/app/xfa_ffchoicelist.cpp
+++ b/xfa/fxfa/app/xfa_ffchoicelist.cpp
@@ -9,14 +9,14 @@
 #include "xfa/fwl/basewidget/ifwl_edit.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_notedriver.h"
+#include "xfa/fwl/lightwidget/cfwl_combobox.h"
+#include "xfa/fwl/lightwidget/cfwl_listbox.h"
 #include "xfa/fxfa/app/xfa_ffdoc.h"
 #include "xfa/fxfa/app/xfa_ffdocview.h"
 #include "xfa/fxfa/app/xfa_fffield.h"
 #include "xfa/fxfa/app/xfa_ffpageview.h"
 #include "xfa/fxfa/app/xfa_ffwidget.h"
 #include "xfa/fxfa/app/xfa_fwladapter.h"
-#include "xfa/include/fwl/lightwidget/combobox.h"
-#include "xfa/include/fwl/lightwidget/listbox.h"
 
 CXFA_FFListBox::CXFA_FFListBox(CXFA_FFPageView* pPageView,
                                CXFA_WidgetAcc* pDataAcc)
diff --git a/xfa/fxfa/app/xfa_fffield.cpp b/xfa/fxfa/app/xfa_fffield.cpp
index ed81953..7aac2ad 100644
--- a/xfa/fxfa/app/xfa_fffield.cpp
+++ b/xfa/fxfa/app/xfa_fffield.cpp
@@ -9,6 +9,8 @@
 #include "xfa/fwl/basewidget/ifwl_edit.h"
 #include "xfa/fwl/core/cfwl_message.h"
 #include "xfa/fwl/core/ifwl_widgetmgrdelegate.h"
+#include "xfa/fwl/lightwidget/cfwl_edit.h"
+#include "xfa/fwl/lightwidget/cfwl_picturebox.h"
 #include "xfa/fxfa/app/xfa_ffapp.h"
 #include "xfa/fxfa/app/xfa_ffdoc.h"
 #include "xfa/fxfa/app/xfa_ffdocview.h"
@@ -18,8 +20,6 @@
 #include "xfa/fxfa/app/xfa_textlayout.h"
 #include "xfa/fxgraphics/cfx_color.h"
 #include "xfa/fxgraphics/cfx_path.h"
-#include "xfa/include/fwl/lightwidget/edit.h"
-#include "xfa/include/fwl/lightwidget/picturebox.h"
 
 CXFA_FFField::CXFA_FFField(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
     : CXFA_FFWidget(pPageView, pDataAcc), m_pNormalWidget(NULL) {
diff --git a/xfa/fxfa/app/xfa_fffield.h b/xfa/fxfa/app/xfa_fffield.h
index a617415..64bdfa3 100644
--- a/xfa/fxfa/app/xfa_fffield.h
+++ b/xfa/fxfa/app/xfa_fffield.h
@@ -9,9 +9,9 @@
 
 #include "xfa/fwl/core/fwl_sdadapterimp.h"
 #include "xfa/fwl/core/ifwl_widgetdelegate.h"
+#include "xfa/fwl/lightwidget/cfwl_widget.h"
 #include "xfa/fxfa/app/xfa_ffpageview.h"
 #include "xfa/fxfa/app/xfa_ffwidget.h"
-#include "xfa/include/fwl/lightwidget/widget.h"
 
 #define XFA_MINUI_HEIGHT 4.32f
 #define XFA_DEFAULTUI_HEIGHT 2.0f
diff --git a/xfa/fxfa/app/xfa_ffimageedit.cpp b/xfa/fxfa/app/xfa_ffimageedit.cpp
index a90e25c..c0b371a 100644
--- a/xfa/fxfa/app/xfa_ffimageedit.cpp
+++ b/xfa/fxfa/app/xfa_ffimageedit.cpp
@@ -9,12 +9,12 @@
 #include "xfa/fwl/core/cfwl_message.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_notedriver.h"
+#include "xfa/fwl/lightwidget/cfwl_picturebox.h"
 #include "xfa/fxfa/app/xfa_ffdoc.h"
 #include "xfa/fxfa/app/xfa_ffdocview.h"
 #include "xfa/fxfa/app/xfa_fffield.h"
 #include "xfa/fxfa/app/xfa_ffpageview.h"
 #include "xfa/fxfa/app/xfa_ffwidget.h"
-#include "xfa/include/fwl/lightwidget/picturebox.h"
 
 CXFA_FFImageEdit::CXFA_FFImageEdit(CXFA_FFPageView* pPageView,
                                    CXFA_WidgetAcc* pDataAcc)
diff --git a/xfa/fxfa/app/xfa_ffpushbutton.cpp b/xfa/fxfa/app/xfa_ffpushbutton.cpp
index 0d70143..89d0bfd 100644
--- a/xfa/fxfa/app/xfa_ffpushbutton.cpp
+++ b/xfa/fxfa/app/xfa_ffpushbutton.cpp
@@ -8,6 +8,7 @@
 
 #include "xfa/fwl/core/ifwl_notedriver.h"
 #include "xfa/fwl/core/ifwl_widgetmgrdelegate.h"
+#include "xfa/fwl/lightwidget/cfwl_pushbutton.h"
 #include "xfa/fxfa/app/xfa_ffapp.h"
 #include "xfa/fxfa/app/xfa_fffield.h"
 #include "xfa/fxfa/app/xfa_ffpageview.h"
@@ -16,7 +17,6 @@
 #include "xfa/fxfa/app/xfa_textlayout.h"
 #include "xfa/fxgraphics/cfx_color.h"
 #include "xfa/fxgraphics/cfx_path.h"
-#include "xfa/include/fwl/lightwidget/pushbutton.h"
 
 CXFA_FFPushButton::CXFA_FFPushButton(CXFA_FFPageView* pPageView,
                                      CXFA_WidgetAcc* pDataAcc)
diff --git a/xfa/fxfa/app/xfa_fftextedit.cpp b/xfa/fxfa/app/xfa_fftextedit.cpp
index 01f23ab..d6d292b 100644
--- a/xfa/fxfa/app/xfa_fftextedit.cpp
+++ b/xfa/fxfa/app/xfa_fftextedit.cpp
@@ -12,6 +12,8 @@
 #include "xfa/fwl/basewidget/ifwl_edit.h"
 #include "xfa/fwl/core/cfwl_message.h"
 #include "xfa/fwl/core/ifwl_notedriver.h"
+#include "xfa/fwl/lightwidget/cfwl_datetimepicker.h"
+#include "xfa/fwl/lightwidget/cfwl_edit.h"
 #include "xfa/fxfa/app/xfa_ffapp.h"
 #include "xfa/fxfa/app/xfa_ffdoc.h"
 #include "xfa/fxfa/app/xfa_ffdocview.h"
@@ -21,8 +23,6 @@
 #include "xfa/fxfa/app/xfa_fwladapter.h"
 #include "xfa/fxfa/app/xfa_textlayout.h"
 #include "xfa/fxfa/parser/xfa_localevalue.h"
-#include "xfa/include/fwl/lightwidget/datetimepicker.h"
-#include "xfa/include/fwl/lightwidget/edit.h"
 
 CXFA_FFTextEdit::CXFA_FFTextEdit(CXFA_FFPageView* pPageView,
                                  CXFA_WidgetAcc* pDataAcc)
diff --git a/xfa/fxfa/app/xfa_fwltheme.h b/xfa/fxfa/app/xfa_fwltheme.h
index 0266b8c..33ceb47 100644
--- a/xfa/fxfa/app/xfa_fwltheme.h
+++ b/xfa/fxfa/app/xfa_fwltheme.h
@@ -9,19 +9,19 @@
 
 #include "xfa/fwl/core/ifwl_target.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
+#include "xfa/fwl/theme/cfwl_barcodetp.h"
+#include "xfa/fwl/theme/cfwl_carettp.h"
+#include "xfa/fwl/theme/cfwl_checkboxtp.h"
+#include "xfa/fwl/theme/cfwl_comboboxtp.h"
+#include "xfa/fwl/theme/cfwl_datetimepickertp.h"
+#include "xfa/fwl/theme/cfwl_edittp.h"
+#include "xfa/fwl/theme/cfwl_listboxtp.h"
+#include "xfa/fwl/theme/cfwl_monthcalendartp.h"
+#include "xfa/fwl/theme/cfwl_pictureboxtp.h"
+#include "xfa/fwl/theme/cfwl_pushbuttontp.h"
+#include "xfa/fwl/theme/cfwl_scrollbartp.h"
+#include "xfa/fwl/theme/cfwl_widgettp.h"
 #include "xfa/fxfa/app/xfa_ffapp.h"
-#include "xfa/include/fwl/theme/barcodetp.h"
-#include "xfa/include/fwl/theme/carettp.h"
-#include "xfa/include/fwl/theme/checkboxtp.h"
-#include "xfa/include/fwl/theme/comboboxtp.h"
-#include "xfa/include/fwl/theme/datetimepickertp.h"
-#include "xfa/include/fwl/theme/edittp.h"
-#include "xfa/include/fwl/theme/listboxtp.h"
-#include "xfa/include/fwl/theme/monthcalendartp.h"
-#include "xfa/include/fwl/theme/pictureboxtp.h"
-#include "xfa/include/fwl/theme/pushbuttontp.h"
-#include "xfa/include/fwl/theme/scrollbartp.h"
-#include "xfa/include/fwl/theme/widgettp.h"
 
 class CXFA_FWLTheme : public IFWL_ThemeProvider {
  public:
