diff --git a/xfa/include/fwl/adapter/fwl_adapterthreadmgr.h b/xfa/include/fwl/adapter/fwl_adapterthreadmgr.h
index 12b155d..570e533 100644
--- a/xfa/include/fwl/adapter/fwl_adapterthreadmgr.h
+++ b/xfa/include/fwl/adapter/fwl_adapterthreadmgr.h
@@ -4,11 +4,10 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef _FWL_ADAPTER_THREAD_H
-#define _FWL_ADAPTER_THREAD_H
+#ifndef FWL_ADAPTERTHREADMGR_H_
+#define FWL_ADAPTERTHREADMGR_H_
+
 class IFWL_Thread;
-class IFWL_AdapterMutex;
-class IFWL_AdapterSemaphore;
 
 class IFWL_AdapterThreadMgr {
  public:
@@ -22,14 +21,4 @@
   virtual FWL_ERR Stop(FWL_HTHREAD hThread, int32_t iExitCode) = 0;
   virtual IFWL_Thread* GetCurrentThread() = 0;
 };
-class IFWL_AdapterSemaphore {
- public:
-  virtual ~IFWL_AdapterSemaphore() {}
-  static IFWL_AdapterSemaphore* Create();
-  virtual FWL_ERR Destroy() = 0;
-  virtual FWL_ERR Wait() const = 0;
-  virtual FWL_ERR Post() = 0;
-  virtual FWL_ERR Value(FX_DWORD& val) const = 0;
-  virtual FWL_ERR Reset(int32_t init) = 0;
-};
-#endif
+#endif  // FWL_ADAPTERTHREADMGR_H_
diff --git a/xfa/include/fwl/core/fwl_app.h b/xfa/include/fwl/core/fwl_app.h
index 8959726..1817b72 100644
--- a/xfa/include/fwl/core/fwl_app.h
+++ b/xfa/include/fwl/core/fwl_app.h
@@ -12,16 +12,21 @@
 class IFWL_WidgetMgr;
 class IFWL_ThemeProvider;
 class IFWL_AdapterWidgetMgr;
-class IFWL_App;
+
 class IFWL_App : public IFWL_NoteThread {
  public:
   static IFWL_App* Create(IFWL_AdapterNative* pAdapter);
-  virtual FWL_ERR Initialize() = 0;
-  virtual FWL_ERR Finalize() = 0;
-  virtual IFWL_AdapterNative* GetAdapterNative() = 0;
-  virtual IFWL_WidgetMgr* GetWidgetMgr() = 0;
-  virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) = 0;
-  virtual FWL_ERR Exit(int32_t iExitCode = 0) = 0;
+
+  FWL_ERR Initialize();
+  FWL_ERR Finalize();
+  IFWL_AdapterNative* GetAdapterNative();
+  IFWL_WidgetMgr* GetWidgetMgr();
+  IFWL_ThemeProvider* GetThemeProvider();
+  FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider);
+  FWL_ERR Exit(int32_t iExitCode);
+
+ private:
+  IFWL_App() {}
 };
 IFWL_App* FWL_GetApp();
 void FWL_SetApp(IFWL_App* pApp);
diff --git a/xfa/include/fwl/core/fwl_thread.h b/xfa/include/fwl/core/fwl_thread.h
index 3bc5c3c..ed1fd9f 100644
--- a/xfa/include/fwl/core/fwl_thread.h
+++ b/xfa/include/fwl/core/fwl_thread.h
@@ -4,47 +4,48 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef _FWL_THREAD_H
-#define _FWL_THREAD_H
+#ifndef FWL_THREAD_H_
+#define FWL_THREAD_H_
+
+// The FWL thread/app code contains three parallel inheritance hierarchies,
+// which reference each other via pointers as follows:
+//
+//                                           m_pImpl
+//      (nonesuch)              IFWL_Thread ----------> CFWL_ThreadImp
+//                                   |      <----------      |
+//                                   A       m_pIface        A
+//                                   |                       |
+//      (nonesuch)              IFWL_NoteThread         CFWL_NoteThreadImp
+//                                   |                       |
+//                                   A                       A
+//                m_pIface           |                       |
+//      CFWL_App --------------> IFWL_App                CFWL_AppImp
+//
+
+class CFWL_ThreadImp;
 class IFWL_NoteDriver;
-class IFWL_Thread;
-class IFWL_NoteThread;
+
 typedef struct _FWL_HTHREAD { void* pData; } * FWL_HTHREAD;
+
 class IFWL_Thread {
  public:
-  static IFWL_Thread* Create();
+  // These call into polymorphic methods in the impl; no need to override.
+  void Release();
+  FWL_ERR Run(FWL_HTHREAD hThread);
+
+  CFWL_ThreadImp* GetImpl() const { return m_pImpl; }
+  void SetImpl(CFWL_ThreadImp* pImpl) { m_pImpl = pImpl; }
 
  protected:
   virtual ~IFWL_Thread() {}
 
- public:
-  virtual void Release() = 0;
-  virtual FWL_ERR Run(FWL_HTHREAD hThread) = 0;
+ private:
+  CFWL_ThreadImp* m_pImpl;
 };
-FWL_HTHREAD FWL_StartThread(IFWL_Thread* pThread, FX_BOOL bSuspended = FALSE);
-FWL_ERR FWL_ResumeThread(FWL_HTHREAD hThread);
-FWL_ERR FWL_SuspendThread(FWL_HTHREAD hThread);
-FWL_ERR FWL_KillThread(FWL_HTHREAD hThread, int32_t iExitCode);
-FWL_ERR FWL_StopThread(FWL_HTHREAD hThread, int32_t iExitCode);
-FWL_ERR FWL_Sleep(FX_DWORD dwMilliseconds);
+
 class IFWL_NoteThread : public IFWL_Thread {
  public:
-  static IFWL_NoteThread* Create();
-  virtual FWL_ERR Run(FWL_HTHREAD hThread) = 0;
-  virtual IFWL_NoteDriver* GetNoteDriver() = 0;
+  IFWL_NoteDriver* GetNoteDriver();
 };
-typedef struct _FWL_HMUTEX { void* pData; } * FWL_HMUTEX;
-FWL_HMUTEX FWL_CreateMutex();
-FWL_ERR FWL_DestroyMutex(FWL_HMUTEX hMutex);
-FWL_ERR FWL_LockMutex(FWL_HMUTEX hMutex);
-FWL_ERR FWL_TryLockMutex(FWL_HMUTEX hMutex);
-FWL_ERR FWL_UnlockMutex(FWL_HMUTEX hMutex);
-FWL_ERR FWL_IsLockedMutex(FWL_HMUTEX hMutex, FX_BOOL& bLocked);
-typedef struct _FWL_HSEMAPHORE { void* pData; } * FWL_HSEMAPHORE;
-FWL_HSEMAPHORE FWL_CreateSemaphore();
-FWL_ERR FWL_DestroySemaphore(FWL_HSEMAPHORE hSemaphore);
-FWL_ERR FWL_WaitSemaphore(FWL_HSEMAPHORE hSemaphore);
-FWL_ERR FWL_PostSemaphore(FWL_HSEMAPHORE hSemaphore, int32_t down = 1);
-FWL_ERR FWL_GetSemaphoreValue(FWL_HSEMAPHORE hSemaphore, int32_t& value);
-FWL_ERR FWL_ResetSemaphore(FWL_HSEMAPHORE hSemaphore, int32_t init);
-#endif
+
+#endif  // FWL_THREAD_H_
diff --git a/xfa/include/fwl/lightwidget/app.h b/xfa/include/fwl/lightwidget/app.h
index 367e732..053bc61 100644
--- a/xfa/include/fwl/lightwidget/app.h
+++ b/xfa/include/fwl/lightwidget/app.h
@@ -4,22 +4,25 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef _FWL_APP_LIGHT_H
-#define _FWL_APP_LIGHT_H
+#ifndef FWL_LIGHTWIDGET_APP_H_
+#define FWL_LIGHTWIDGET_APP_H_
+
 class CFWL_Theme;
 class IFWL_App;
-class CFWL_App;
+
 class CFWL_App {
  public:
   CFWL_App();
   virtual ~CFWL_App();
-  FWL_ERR Initialize();
-  CFWL_Theme* GetTheme();
-  FWL_ERR Exit(int32_t iExitCode = 0);
-  IFWL_App* GetApp();
 
- protected:
-  IFWL_App* m_pAppImp;
-  CFWL_Theme* m_pThemeProvider;
+  FWL_ERR Initialize();
+  FWL_ERR Exit(int32_t iExitCode);
+
+  CFWL_Theme* GetTheme() const { return m_pTheme; }
+  IFWL_App* GetInterface() const { return m_pIface; }
+
+ private:
+  IFWL_App* m_pIface;
+  CFWL_Theme* m_pTheme;
 };
-#endif
+#endif  // FWL_LIGHTWIDGET_APP_H_
diff --git a/xfa/include/fwl/lightwidget/theme.h b/xfa/include/fwl/lightwidget/theme.h
index f5945f3..c58f043 100644
--- a/xfa/include/fwl/lightwidget/theme.h
+++ b/xfa/include/fwl/lightwidget/theme.h
@@ -6,35 +6,38 @@
 
 #ifndef _FWL_THEME_LIGHT_H
 #define _FWL_THEME_LIGHT_H
-class CFWL_ThemeBackground;
-class CFWL_ThemeText;
-class CFWL_ThemePart;
+
+#include "xfa/include/fwl/core/fwl_theme.h"
+
 class CFWL_WidgetTP;
 class IFWL_Widget;
-class CFWL_Theme;
-class CFWL_Theme {
+
+class CFWL_Theme : public IFWL_ThemeProvider {
  public:
-  virtual FX_BOOL IsValidWidget(IFWL_Widget* pWidget);
-  virtual FX_DWORD GetThemeID(IFWL_Widget* pWidget);
-  virtual FX_DWORD SetThemeID(IFWL_Widget* pWidget,
-                              FX_DWORD dwThemeID,
-                              FX_BOOL bChildren = TRUE);
-  virtual FWL_ERR GetThemeMatrix(IFWL_Widget* pWidget, CFX_Matrix& matrix);
-  virtual FWL_ERR SetThemeMatrix(IFWL_Widget* pWidget,
-                                 const CFX_Matrix& matrix);
-  virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams);
-  virtual FX_BOOL DrawText(CFWL_ThemeText* pParams);
-  virtual void* GetCapacity(CFWL_ThemePart* pThemePart, FX_DWORD dwCapacity);
-  virtual FX_BOOL IsCustomizedLayout(IFWL_Widget* pWidget);
-  virtual FWL_ERR GetPartRect(CFWL_ThemePart* pThemePart, CFX_RectF& rtPart);
-  virtual FX_BOOL IsInPart(CFWL_ThemePart* pThemePart,
-                           FX_FLOAT fx,
-                           FX_FLOAT fy);
-  virtual FX_BOOL CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect);
-  virtual FWL_ERR Initialize();
-  virtual FWL_ERR Finalize();
   CFWL_Theme();
-  virtual ~CFWL_Theme();
+  ~CFWL_Theme() override;
+
+  // IFWL_ThemeProvider:
+  FX_BOOL IsValidWidget(IFWL_Widget* pWidget) override;
+  FX_DWORD GetThemeID(IFWL_Widget* pWidget) override;
+  FX_DWORD SetThemeID(IFWL_Widget* pWidget,
+                      FX_DWORD dwThemeID,
+                      FX_BOOL bChildren = TRUE) override;
+  FWL_ERR GetThemeMatrix(IFWL_Widget* pWidget, CFX_Matrix& matrix) override;
+  FWL_ERR SetThemeMatrix(IFWL_Widget* pWidget,
+                         const CFX_Matrix& matrix) override;
+  FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams) override;
+  FX_BOOL DrawText(CFWL_ThemeText* pParams) override;
+  void* GetCapacity(CFWL_ThemePart* pThemePart, FX_DWORD dwCapacity) override;
+  FX_BOOL IsCustomizedLayout(IFWL_Widget* pWidget) override;
+  FWL_ERR GetPartRect(CFWL_ThemePart* pThemePart, CFX_RectF& rtPart) override;
+  FX_BOOL IsInPart(CFWL_ThemePart* pThemePart,
+                   FX_FLOAT fx,
+                   FX_FLOAT fy) override;
+  FX_BOOL CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect) override;
+
+  FWL_ERR Initialize();
+  FWL_ERR Finalize();
   FWL_ERR SetFont(IFWL_Widget* pWidget,
                   const FX_WCHAR* strFont,
                   FX_FLOAT fFontSize,
diff --git a/xfa/src/fwl/src/core/fwl_appimp.cpp b/xfa/src/fwl/src/core/fwl_appimp.cpp
index 5df995c..983219a 100644
--- a/xfa/src/fwl/src/core/fwl_appimp.cpp
+++ b/xfa/src/fwl/src/core/fwl_appimp.cpp
@@ -10,11 +10,36 @@
 #include "include/fwl_noteimp.h"
 #include "include/fwl_widgetmgrimp.h"
 #include "include/fwl_appimp.h"
+
 IFWL_App* IFWL_App::Create(IFWL_AdapterNative* pAdapter) {
-  return (IFWL_App*)new CFWL_AppImp(pAdapter);
+  IFWL_App* pApp = new IFWL_App;
+  pApp->SetImpl(new CFWL_AppImp(pApp, pAdapter));
+  return pApp;
 }
-CFWL_AppImp::CFWL_AppImp(IFWL_AdapterNative* pAdapter)
-    : m_pWidgetMgr(NULL), m_pThemeProvider(NULL) {
+FWL_ERR IFWL_App::Initialize() {
+  return static_cast<CFWL_AppImp*>(GetImpl())->Initialize();
+}
+FWL_ERR IFWL_App::Finalize() {
+  return static_cast<CFWL_AppImp*>(GetImpl())->Finalize();
+}
+IFWL_AdapterNative* IFWL_App::GetAdapterNative() {
+  return static_cast<CFWL_AppImp*>(GetImpl())->GetAdapterNative();
+}
+IFWL_WidgetMgr* IFWL_App::GetWidgetMgr() {
+  return static_cast<CFWL_AppImp*>(GetImpl())->GetWidgetMgr();
+}
+IFWL_ThemeProvider* IFWL_App::GetThemeProvider() {
+  return static_cast<CFWL_AppImp*>(GetImpl())->GetThemeProvider();
+}
+FWL_ERR IFWL_App::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) {
+  return static_cast<CFWL_AppImp*>(GetImpl())->SetThemeProvider(pThemeProvider);
+}
+FWL_ERR IFWL_App::Exit(int32_t iExitCode) {
+  return static_cast<CFWL_AppImp*>(GetImpl())->Exit(iExitCode);
+}
+
+CFWL_AppImp::CFWL_AppImp(IFWL_App* pIface, IFWL_AdapterNative* pAdapter)
+    : CFWL_NoteThreadImp(pIface), m_pWidgetMgr(NULL), m_pThemeProvider(NULL) {
   if (!pAdapter) {
     pAdapter = FWL_CreateFuelAdapterNative();
     m_bFuelAdapter = TRUE;
diff --git a/xfa/src/fwl/src/core/fwl_noteimp.cpp b/xfa/src/fwl/src/core/fwl_noteimp.cpp
index 4bc28b8..fbd90ec 100644
--- a/xfa/src/fwl/src/core/fwl_noteimp.cpp
+++ b/xfa/src/fwl/src/core/fwl_noteimp.cpp
@@ -203,7 +203,7 @@
   return FWL_ERR_Succeeded;
 }
 IFWL_NoteThread* CFWL_NoteDriver::GetOwnerThread() const {
-  return (IFWL_NoteThread*)FWL_GetApp();
+  return FWL_GetApp();
 }
 FWL_ERR CFWL_NoteDriver::PushNoteLoop(IFWL_NoteLoop* pNoteLoop) {
   m_noteLoopQueue.Add(pNoteLoop);
diff --git a/xfa/src/fwl/src/core/fwl_threadimp.cpp b/xfa/src/fwl/src/core/fwl_threadimp.cpp
index 546f14a..6d39952 100644
--- a/xfa/src/fwl/src/core/fwl_threadimp.cpp
+++ b/xfa/src/fwl/src/core/fwl_threadimp.cpp
@@ -9,119 +9,30 @@
 #include "include/fwl_noteimp.h"
 #include "include/fwl_threadimp.h"
 #include "include/fwl_appimp.h"
-IFWL_Thread* IFWL_Thread::Create() {
-  return (IFWL_Thread*)new CFWL_Thread;
+
+void IFWL_Thread::Release() {
+  delete m_pImpl;
 }
-CFWL_Thread::CFWL_Thread() {}
-CFWL_Thread::~CFWL_Thread() {}
-FWL_ERR CFWL_Thread::Run(FWL_HTHREAD hThread) {
+FWL_ERR IFWL_Thread::Run(FWL_HTHREAD hThread) {
+  return m_pImpl->Run(hThread);
+}
+IFWL_NoteDriver* IFWL_NoteThread::GetNoteDriver() {
+  return static_cast<CFWL_NoteThreadImp*>(GetImpl())->GetNoteDriver();
+}
+
+FWL_ERR CFWL_ThreadImp::Run(FWL_HTHREAD hThread) {
   return FWL_ERR_Succeeded;
 }
-IFWL_NoteThread* IFWL_NoteThread::Create() {
-  return (IFWL_NoteThread*)new CFWL_NoteThread;
+CFWL_NoteThreadImp::CFWL_NoteThreadImp(IFWL_NoteThread* pIface)
+    : CFWL_ThreadImp(pIface), m_pNoteDriver(new CFWL_NoteDriver) {}
+CFWL_NoteThreadImp::~CFWL_NoteThreadImp() {
+  delete m_pNoteDriver;
 }
-CFWL_NoteThread::CFWL_NoteThread() : m_hThread(NULL) {
-  m_pNoteDriver = new CFWL_NoteDriver;
-}
-CFWL_NoteThread::~CFWL_NoteThread() {
-  if (m_hThread) {
-    FWL_StopThread(m_hThread, 0);
-  }
-  if (m_pNoteDriver) {
-    delete m_pNoteDriver;
-    m_pNoteDriver = NULL;
-  }
-}
-FWL_ERR CFWL_NoteThread::Run(FWL_HTHREAD hThread) {
+FWL_ERR CFWL_NoteThreadImp::Run(FWL_HTHREAD hThread) {
   if (!m_pNoteDriver)
     return FWL_ERR_Indefinite;
-  FWL_ERR result = m_pNoteDriver->Run();
-  return result;
+  return m_pNoteDriver->Run();
 }
-IFWL_NoteDriver* CFWL_NoteThread::GetNoteDriver() {
-  return (IFWL_NoteDriver*)m_pNoteDriver;
-}
-extern IFWL_AdapterNative* FWL_GetAdapterNative();
-FWL_HTHREAD FWL_StartThread(IFWL_Thread* pThread, FX_BOOL bSuspended) {
-  IFWL_AdapterNative* pNative = FWL_GetAdapterNative();
-  if (!pNative)
-    return NULL;
-  IFWL_AdapterThreadMgr* pThreadMgr = pNative->GetThreadMgr();
-  if (!pThreadMgr)
-    return NULL;
-  FWL_HTHREAD hThread = NULL;
-  pThreadMgr->Start(pThread, hThread, bSuspended);
-  return hThread;
-}
-FWL_ERR FWL_ResumeThread(FWL_HTHREAD hThread) {
-  IFWL_AdapterNative* Native = FWL_GetAdapterNative();
-  if (!Native)
-    return FWL_ERR_Indefinite;
-  IFWL_AdapterThreadMgr* ThreadMgr = Native->GetThreadMgr();
-  if (!ThreadMgr)
-    return FWL_ERR_Indefinite;
-  return ThreadMgr->Resume(hThread);
-}
-FWL_ERR FWL_SuspendThread(FWL_HTHREAD hThread) {
-  IFWL_AdapterNative* Native = FWL_GetAdapterNative();
-  if (!Native)
-    return FWL_ERR_Indefinite;
-  IFWL_AdapterThreadMgr* ThreadMgr = Native->GetThreadMgr();
-  if (!ThreadMgr)
-    return FWL_ERR_Indefinite;
-  return ThreadMgr->Suspend(hThread);
-}
-FWL_ERR FWL_KillThread(FWL_HTHREAD hThread, int32_t iExitCode) {
-  IFWL_AdapterNative* Native = FWL_GetAdapterNative();
-  if (!Native)
-    return FWL_ERR_Indefinite;
-  IFWL_AdapterThreadMgr* ThreadMgr = Native->GetThreadMgr();
-  if (!ThreadMgr)
-    return FWL_ERR_Indefinite;
-  return ThreadMgr->Kill(hThread, iExitCode);
-}
-FWL_ERR FWL_StopThread(FWL_HTHREAD hThread, int32_t iExitCode) {
-  IFWL_AdapterNative* Native = FWL_GetAdapterNative();
-  if (!Native)
-    return FWL_ERR_Indefinite;
-  IFWL_AdapterThreadMgr* ThreadMgr = Native->GetThreadMgr();
-  if (!ThreadMgr)
-    return FWL_ERR_Indefinite;
-  return ThreadMgr->Stop(hThread, iExitCode);
-}
-FWL_HMUTEX FWL_CreateMutex() {
-  return NULL;
-}
-FWL_ERR FWL_DestroyMutex(FWL_HMUTEX hMutex) {
-  return FWL_ERR_Succeeded;
-}
-FWL_ERR FWL_LockMutex(FWL_HMUTEX hMutex) {
-  return FWL_ERR_Succeeded;
-}
-FWL_ERR FWL_TryLockMutex(FWL_HMUTEX hMutex) {
-  return FWL_ERR_Succeeded;
-}
-FWL_ERR FWL_UnlockMutex(FWL_HMUTEX hMutex) {
-  return FWL_ERR_Succeeded;
-}
-FWL_ERR FWL_IsLockedMutex(FWL_HMUTEX hMutex, FX_BOOL& bLocked) {
-  return FWL_ERR_Succeeded;
-}
-FWL_HSEMAPHORE FWL_CreateSemaphore() {
-  return (FWL_HSEMAPHORE)IFWL_AdapterSemaphore::Create();
-}
-FWL_ERR FWL_DestroySemaphore(FWL_HSEMAPHORE hSemaphore) {
-  return ((IFWL_AdapterSemaphore*)hSemaphore)->Destroy();
-}
-FWL_ERR FWL_WaitSemaphore(FWL_HSEMAPHORE hSemaphore) {
-  return ((IFWL_AdapterSemaphore*)hSemaphore)->Wait();
-}
-FWL_ERR FWL_PostSemaphore(FWL_HSEMAPHORE hSemaphore, int32_t down) {
-  return ((IFWL_AdapterSemaphore*)hSemaphore)->Post();
-}
-FWL_ERR FWL_GetSemaphoreValue(FWL_HSEMAPHORE hSemaphore, int32_t& value) {
-  return ((IFWL_AdapterSemaphore*)hSemaphore)->Value((FX_DWORD&)value);
-}
-FWL_ERR FWL_ResetSemaphore(FWL_HSEMAPHORE hSemaphore, int32_t init) {
-  return ((IFWL_AdapterSemaphore*)hSemaphore)->Reset(init);
+IFWL_NoteDriver* CFWL_NoteThreadImp::GetNoteDriver() {
+  return m_pNoteDriver;
 }
diff --git a/xfa/src/fwl/src/core/fwl_widgetimp.cpp b/xfa/src/fwl/src/core/fwl_widgetimp.cpp
index 92725ae..4cba92a 100644
--- a/xfa/src/fwl/src/core/fwl_widgetimp.cpp
+++ b/xfa/src/fwl/src/core/fwl_widgetimp.cpp
@@ -131,7 +131,8 @@
   IFWL_AdapterThreadMgr* pAdapterThread = pAdapter->GetThreadMgr();
   if (!pAdapterThread)
     return FWL_ERR_Indefinite;
-  SetOwnerThread((CFWL_NoteThread*)pAdapterThread->GetCurrentThread());
+  SetOwnerThread(static_cast<CFWL_NoteThreadImp*>(
+      pAdapterThread->GetCurrentThread()->GetImpl()));
   IFWL_Widget* pParent = m_pProperties->m_pParent;
   m_pWidgetMgr->InsertWidget(pParent, m_pInterface);
   if (!IsChild()) {
@@ -486,9 +487,9 @@
   return pOldDelegate;
 }
 IFWL_NoteThread* CFWL_WidgetImp::GetOwnerThread() const {
-  return (IFWL_NoteThread*)m_pOwnerThread;
+  return static_cast<IFWL_NoteThread*>(m_pOwnerThread->GetInterface());
 }
-FWL_ERR CFWL_WidgetImp::SetOwnerThread(CFWL_NoteThread* pOwnerThread) {
+FWL_ERR CFWL_WidgetImp::SetOwnerThread(CFWL_NoteThreadImp* pOwnerThread) {
   m_pOwnerThread = pOwnerThread;
   return FWL_ERR_Succeeded;
 }
@@ -636,7 +637,7 @@
       }
     }
   } while (pUp);
-  return ((CFWL_AppImp*)FWL_GetApp())->GetThemeProvider();
+  return FWL_GetApp()->GetThemeProvider();
 }
 CFWL_WidgetImp* CFWL_WidgetImp::GetRootOuter() {
   IFWL_Widget* pRet = m_pOuter;
diff --git a/xfa/src/fwl/src/core/include/fwl_appimp.h b/xfa/src/fwl/src/core/include/fwl_appimp.h
index ec23feb..53f0d3f 100644
--- a/xfa/src/fwl/src/core/include/fwl_appimp.h
+++ b/xfa/src/fwl/src/core/include/fwl_appimp.h
@@ -4,26 +4,28 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef _FWL_APP_IMP_H
-#define _FWL_APP_IMP_H
-class CFWL_NoteThread;
+#ifndef FWL_APPIMP_H_
+#define FWL_APPIMP_H_
+
+#include "xfa/src/fwl/src/core/include/fwl_threadimp.h"
+
 class CFWL_WidgetMgr;
 class IFWL_AdapterNative;
 class IFWL_WidgetMgr;
 class IFWL_ThemeProvider;
 class IFWL_App;
-class CFWL_AppImp;
-class CFWL_AppImp : public CFWL_NoteThread {
+
+class CFWL_AppImp : public CFWL_NoteThreadImp {
  public:
-  CFWL_AppImp(IFWL_AdapterNative* pAdapter);
+  CFWL_AppImp(IFWL_App* pIface, IFWL_AdapterNative* pAdapter);
   virtual ~CFWL_AppImp();
   virtual FWL_ERR Initialize();
   virtual FWL_ERR Finalize();
   virtual IFWL_AdapterNative* GetAdapterNative();
   virtual IFWL_WidgetMgr* GetWidgetMgr();
+  virtual IFWL_ThemeProvider* GetThemeProvider();
   virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider);
   virtual FWL_ERR Exit(int32_t iExitCode = 0);
-  IFWL_ThemeProvider* GetThemeProvider();
 
  protected:
   CFWL_WidgetMgr* m_pWidgetMgr;
@@ -31,4 +33,5 @@
   IFWL_ThemeProvider* m_pThemeProvider;
   FX_BOOL m_bFuelAdapter;
 };
-#endif
+
+#endif  // FWL_APPIMP_H_
diff --git a/xfa/src/fwl/src/core/include/fwl_noteimp.h b/xfa/src/fwl/src/core/include/fwl_noteimp.h
index 413b0fd..b846d20 100644
--- a/xfa/src/fwl/src/core/include/fwl_noteimp.h
+++ b/xfa/src/fwl/src/core/include/fwl_noteimp.h
@@ -8,7 +8,7 @@
 #define _FWL_NOTE_IMP_H
 class CFWL_TargetImp;
 class CFWL_WidgetImp;
-class CFWL_NoteThread;
+class CFWL_NoteThreadImp;
 class CFWL_ToolTipImp;
 class IFWL_ToolTipTarget;
 class CFWL_CoreToopTipDP;
diff --git a/xfa/src/fwl/src/core/include/fwl_threadimp.h b/xfa/src/fwl/src/core/include/fwl_threadimp.h
index eb3331f..aa95877 100644
--- a/xfa/src/fwl/src/core/include/fwl_threadimp.h
+++ b/xfa/src/fwl/src/core/include/fwl_threadimp.h
@@ -4,31 +4,37 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef _FWL_THREAD_IMP_H
-#define _FWL_THREAD_IMP_H
+#ifndef FWL_THREADIMP_H_
+#define FWL_THREADIMP_H_
 
 #include "xfa/include/fwl/core/fwl_thread.h"  // For FWL_HTHREAD.
 
 class CFWL_NoteDriver;
 class IFWL_NoteDriver;
 
-class CFWL_Thread {
+class CFWL_ThreadImp {
  public:
-  CFWL_Thread();
-  virtual ~CFWL_Thread();
-  virtual void Release() { delete this; }
+  virtual ~CFWL_ThreadImp() {}
+  IFWL_Thread* GetInterface() const { return m_pIface; }
   virtual FWL_ERR Run(FWL_HTHREAD hThread);
+
+ protected:
+  CFWL_ThreadImp(IFWL_Thread* pIface) : m_pIface(pIface) {}
+
+ private:
+  IFWL_Thread* const m_pIface;
 };
 
-class CFWL_NoteThread : public CFWL_Thread {
+class CFWL_NoteThreadImp : public CFWL_ThreadImp {
  public:
-  CFWL_NoteThread();
-  virtual ~CFWL_NoteThread();
-  virtual FWL_ERR Run(FWL_HTHREAD hThread);
+  CFWL_NoteThreadImp(IFWL_NoteThread* pIface);
+  virtual ~CFWL_NoteThreadImp();
+
+  FWL_ERR Run(FWL_HTHREAD hThread) override;
   virtual IFWL_NoteDriver* GetNoteDriver();
 
  protected:
-  CFWL_NoteDriver* m_pNoteDriver;
-  FWL_HTHREAD m_hThread;
+  CFWL_NoteDriver* const m_pNoteDriver;
 };
-#endif
+
+#endif  // FWL_THREADIMP_H_
diff --git a/xfa/src/fwl/src/core/include/fwl_widgetimp.h b/xfa/src/fwl/src/core/include/fwl_widgetimp.h
index 949738d..109e575 100644
--- a/xfa/src/fwl/src/core/include/fwl_widgetimp.h
+++ b/xfa/src/fwl/src/core/include/fwl_widgetimp.h
@@ -11,7 +11,7 @@
 #include "xfa/src/fwl/src/core/include/fwl_targetimp.h"
 
 class CFWL_NoteTarget;
-class CFWL_NoteThread;
+class CFWL_NoteThreadImp;
 class CFWL_WidgetImpProperties;
 class CFWL_WidgetMgr;
 class IFWL_DataProvider;
@@ -60,7 +60,7 @@
   virtual FWL_ERR SetDataProvider(IFWL_DataProvider* pDataProvider);
   virtual IFWL_WidgetDelegate* SetDelegate(IFWL_WidgetDelegate* pDelegate);
   virtual IFWL_NoteThread* GetOwnerThread() const;
-  FWL_ERR SetOwnerThread(CFWL_NoteThread* pOwnerThread);
+  FWL_ERR SetOwnerThread(CFWL_NoteThreadImp* pOwnerThread);
   IFWL_Widget* GetInterface() const;
   void SetInterface(IFWL_Widget* pInterface);
   CFX_SizeF GetOffsetFromParent(IFWL_Widget* pParent);
@@ -137,7 +137,7 @@
 
   FX_BOOL IsParent(IFWL_Widget* pParent);
   CFWL_WidgetMgr* m_pWidgetMgr;
-  CFWL_NoteThread* m_pOwnerThread;
+  CFWL_NoteThreadImp* m_pOwnerThread;
   CFWL_WidgetImpProperties* m_pProperties;
   CFX_PrivateData* m_pPrivateData;
   IFWL_WidgetDelegate* m_pDelegate;
diff --git a/xfa/src/fwl/src/lightwidget/app.cpp b/xfa/src/fwl/src/lightwidget/app.cpp
index 3d49fab..293a258 100644
--- a/xfa/src/fwl/src/lightwidget/app.cpp
+++ b/xfa/src/fwl/src/lightwidget/app.cpp
@@ -5,31 +5,23 @@
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
 #include "../../../foxitlib.h"
-CFWL_App::CFWL_App() : m_pAppImp(NULL), m_pThemeProvider(NULL) {
-  m_pAppImp = IFWL_App::Create(NULL);
-}
+CFWL_App::CFWL_App() : m_pIface(IFWL_App::Create(nullptr)), m_pTheme(nullptr) {}
 CFWL_App::~CFWL_App() {
-  if (m_pThemeProvider) {
-    m_pThemeProvider->Finalize();
-    delete m_pThemeProvider;
-    m_pThemeProvider = NULL;
+  if (m_pTheme) {
+    m_pTheme->Finalize();
+    delete m_pTheme;
+    m_pTheme = NULL;
   }
-  m_pAppImp->Release();
+  m_pIface->Release();
 }
 FWL_ERR CFWL_App::Initialize() {
-  m_pThemeProvider = new CFWL_Theme;
-  m_pThemeProvider->Initialize();
-  m_pAppImp->SetThemeProvider((IFWL_ThemeProvider*)m_pThemeProvider);
-  return m_pAppImp->Initialize();
-}
-CFWL_Theme* CFWL_App::GetTheme() {
-  return m_pThemeProvider;
+  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_pAppImp)
+  if (!m_pIface)
     return FWL_ERR_Indefinite;
-  return m_pAppImp->Exit(iExitCode);
-}
-IFWL_App* CFWL_App::GetApp() {
-  return m_pAppImp;
+  return m_pIface->Exit(iExitCode);
 }
diff --git a/xfa/src/fxfa/src/app/xfa_fwladapter.cpp b/xfa/src/fxfa/src/app/xfa_fwladapter.cpp
index 3c9f1a1..077fa64 100644
--- a/xfa/src/fxfa/src/app/xfa_fwladapter.cpp
+++ b/xfa/src/fxfa/src/app/xfa_fwladapter.cpp
@@ -15,9 +15,6 @@
 }
 void FWL_ReleaseFuelAdapterNative(IFWL_AdapterNative* native) {}
 void FWL_PostMessageToMainRoop(CFWL_Message* pMessage) {}
-IFWL_AdapterSemaphore* IFWL_AdapterSemaphore::Create() {
-  return NULL;
-}
 FX_BOOL FWL_ShowCaret(IFWL_Widget* pWidget,
                       FX_BOOL bVisible,
                       const CFX_RectF* pRtAnchor) {
