diff --git a/BUILD.gn b/BUILD.gn
index 952575e..aa467d5 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1204,8 +1204,6 @@
       "xfa/fwl/core/cfwl_widgetimpproperties.h",
       "xfa/fwl/core/cfwl_widgetmgr.cpp",
       "xfa/fwl/core/cfwl_widgetmgr.h",
-      "xfa/fwl/core/fwl_appimp.cpp",
-      "xfa/fwl/core/fwl_appimp.h",
       "xfa/fwl/core/fwl_error.h",
       "xfa/fwl/core/fwl_formimp.cpp",
       "xfa/fwl/core/fwl_formimp.h",
@@ -1217,6 +1215,7 @@
       "xfa/fwl/core/fwl_widgetimp.cpp",
       "xfa/fwl/core/fwl_widgetimp.h",
       "xfa/fwl/core/ifwl_adaptertimermgr.h",
+      "xfa/fwl/core/ifwl_app.cpp",
       "xfa/fwl/core/ifwl_app.h",
       "xfa/fwl/core/ifwl_dataprovider.h",
       "xfa/fwl/core/ifwl_form.h",
diff --git a/xfa/fwl/basewidget/fwl_comboboximp.cpp b/xfa/fwl/basewidget/fwl_comboboximp.cpp
index 17c5bf8..e586055 100644
--- a/xfa/fwl/basewidget/fwl_comboboximp.cpp
+++ b/xfa/fwl/basewidget/fwl_comboboximp.cpp
@@ -17,7 +17,6 @@
 #include "xfa/fwl/core/cfwl_themepart.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_appimp.h"
 #include "xfa/fwl/core/fwl_formimp.h"
 #include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/fwl_widgetimp.h"
diff --git a/xfa/fwl/basewidget/fwl_editimp.cpp b/xfa/fwl/basewidget/fwl_editimp.cpp
index 8377daf..0f939f1 100644
--- a/xfa/fwl/basewidget/fwl_editimp.cpp
+++ b/xfa/fwl/basewidget/fwl_editimp.cpp
@@ -24,7 +24,6 @@
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_themepart.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_appimp.h"
 #include "xfa/fwl/core/fwl_widgetimp.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
diff --git a/xfa/fwl/core/cfwl_widgetmgr.cpp b/xfa/fwl/core/cfwl_widgetmgr.cpp
index db10350..30571c9 100644
--- a/xfa/fwl/core/cfwl_widgetmgr.cpp
+++ b/xfa/fwl/core/cfwl_widgetmgr.cpp
@@ -7,7 +7,6 @@
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
 
 #include "xfa/fwl/core/cfwl_message.h"
-#include "xfa/fwl/core/fwl_appimp.h"
 #include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/fwl_widgetimp.h"
 #include "xfa/fwl/core/ifwl_app.h"
diff --git a/xfa/fwl/core/fwl_appimp.cpp b/xfa/fwl/core/fwl_appimp.cpp
deleted file mode 100644
index 2df579c..0000000
--- a/xfa/fwl/core/fwl_appimp.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fwl/core/fwl_appimp.h"
-
-#include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_noteimp.h"
-#include "xfa/fwl/core/ifwl_app.h"
-#include "xfa/fwl/core/ifwl_widget.h"
-#include "xfa/fxfa/app/xfa_fwladapter.h"
-
-IFWL_App* IFWL_App::Create(CXFA_FFApp* pAdapter) {
-  IFWL_App* pApp = new IFWL_App;
-  pApp->SetImpl(new CFWL_AppImp(pApp, pAdapter));
-  return pApp;
-}
-
-IFWL_App::IFWL_App() {}
-
-IFWL_App::~IFWL_App() {}
-
-void IFWL_App::Release() {}
-
-FWL_Error IFWL_App::Initialize() {
-  return static_cast<CFWL_AppImp*>(GetImpl())->Initialize();
-}
-
-FWL_Error IFWL_App::Finalize() {
-  return static_cast<CFWL_AppImp*>(GetImpl())->Finalize();
-}
-
-CXFA_FFApp* IFWL_App::GetAdapterNative() {
-  return static_cast<CFWL_AppImp*>(GetImpl())->GetAdapterNative();
-}
-
-CFWL_WidgetMgr* IFWL_App::GetWidgetMgr() {
-  return static_cast<CFWL_AppImp*>(GetImpl())->GetWidgetMgr();
-}
-
-IFWL_ThemeProvider* IFWL_App::GetThemeProvider() {
-  return static_cast<CFWL_AppImp*>(GetImpl())->GetThemeProvider();
-}
-
-void IFWL_App::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) {
-  static_cast<CFWL_AppImp*>(GetImpl())->SetThemeProvider(pThemeProvider);
-}
-
-void IFWL_App::Exit(int32_t iExitCode) {
-  static_cast<CFWL_AppImp*>(GetImpl())->Exit(iExitCode);
-}
-
-CFWL_NoteDriver* IFWL_App::GetNoteDriver() const {
-  return static_cast<CFWL_AppImp*>(GetImpl())->GetNoteDriver();
-}
-
-CFWL_AppImp::CFWL_AppImp(IFWL_App* pIface, CXFA_FFApp* pAdapter)
-    : m_pAdapterNative(pAdapter),
-      m_pThemeProvider(nullptr),
-      m_pNoteDriver(new CFWL_NoteDriver),
-      m_pIface(pIface) {}
-
-CFWL_AppImp::~CFWL_AppImp() {
-  CFWL_ToolTipContainer::DeleteInstance();
-}
-
-FWL_Error CFWL_AppImp::Initialize() {
-  if (!m_pWidgetMgr) {
-    m_pWidgetMgr.reset(new CFWL_WidgetMgr(m_pAdapterNative));
-  }
-  return FWL_Error::Succeeded;
-}
-FWL_Error CFWL_AppImp::Finalize() {
-  m_pWidgetMgr.reset();
-  return FWL_Error::Succeeded;
-}
-CXFA_FFApp* CFWL_AppImp::GetAdapterNative() const {
-  return m_pAdapterNative;
-}
-CXFA_FWLAdapterWidgetMgr* FWL_GetAdapterWidgetMgr() {
-  return CFWL_WidgetMgr::GetInstance()->GetAdapterWidgetMgr();
-}
-CFWL_WidgetMgr* CFWL_AppImp::GetWidgetMgr() const {
-  return m_pWidgetMgr.get();
-}
-
-void CFWL_AppImp::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) {
-  m_pThemeProvider = pThemeProvider;
-}
-
-void CFWL_AppImp::Exit(int32_t iExitCode) {
-  while (m_pNoteDriver->PopNoteLoop()) {
-    continue;
-  }
-}
-
-IFWL_ThemeProvider* CFWL_AppImp::GetThemeProvider() const {
-  return m_pThemeProvider;
-}
-
-CXFA_FFApp* FWL_GetAdapterNative() {
-  IFWL_App* pApp = FWL_GetApp();
-  if (!pApp)
-    return nullptr;
-  return pApp->GetAdapterNative();
-}
-
-static IFWL_App* g_theApp = nullptr;
-IFWL_App* FWL_GetApp() {
-  return g_theApp;
-}
-
-void FWL_SetApp(IFWL_App* pApp) {
-  g_theApp = pApp;
-}
diff --git a/xfa/fwl/core/fwl_appimp.h b/xfa/fwl/core/fwl_appimp.h
deleted file mode 100644
index f337704..0000000
--- a/xfa/fwl/core/fwl_appimp.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FWL_CORE_FWL_APPIMP_H_
-#define XFA_FWL_CORE_FWL_APPIMP_H_
-
-#include <memory>
-
-#include "xfa/fwl/core/fwl_noteimp.h"
-
-class CFWL_WidgetMgr;
-class CXFA_FFApp;
-class IFWL_App;
-class IFWL_NoteThread;
-class IFWL_ThemeProvider;
-
-class CFWL_AppImp {
- public:
-  CFWL_AppImp(IFWL_App* pIface, CXFA_FFApp* pAdapter);
-  ~CFWL_AppImp();
-
-  IFWL_App* GetInterface() const { return m_pIface; }
-  CFWL_NoteDriver* GetNoteDriver() const { return m_pNoteDriver.get(); }
-
-  FWL_Error Initialize();
-  FWL_Error Finalize();
-  CXFA_FFApp* GetAdapterNative() const;
-  CFWL_WidgetMgr* GetWidgetMgr() const;
-  IFWL_ThemeProvider* GetThemeProvider() const;
-  void SetThemeProvider(IFWL_ThemeProvider* pThemeProvider);
-  void Exit(int32_t iExitCode);
-
- private:
-  CXFA_FFApp* const m_pAdapterNative;
-  std::unique_ptr<CFWL_WidgetMgr> m_pWidgetMgr;
-  IFWL_ThemeProvider* m_pThemeProvider;
-  std::unique_ptr<CFWL_NoteDriver> m_pNoteDriver;
-  IFWL_App* const m_pIface;
-};
-
-#endif  // XFA_FWL_CORE_FWL_APPIMP_H_
diff --git a/xfa/fwl/core/fwl_formimp.cpp b/xfa/fwl/core/fwl_formimp.cpp
index 4dcedf6..747e5e8 100644
--- a/xfa/fwl/core/fwl_formimp.cpp
+++ b/xfa/fwl/core/fwl_formimp.cpp
@@ -13,7 +13,6 @@
 #include "xfa/fwl/core/cfwl_themepart.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_appimp.h"
 #include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/fwl_widgetimp.h"
 #include "xfa/fwl/core/ifwl_app.h"
diff --git a/xfa/fwl/core/fwl_noteimp.cpp b/xfa/fwl/core/fwl_noteimp.cpp
index 3173f3e..848cb77 100644
--- a/xfa/fwl/core/fwl_noteimp.cpp
+++ b/xfa/fwl/core/fwl_noteimp.cpp
@@ -12,7 +12,6 @@
 #include "xfa/fwl/basewidget/ifwl_tooltip.h"
 #include "xfa/fwl/core/cfwl_message.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_appimp.h"
 #include "xfa/fwl/core/fwl_formimp.h"
 #include "xfa/fwl/core/fwl_widgetimp.h"
 #include "xfa/fwl/core/ifwl_app.h"
diff --git a/xfa/fwl/core/fwl_timerimp.cpp b/xfa/fwl/core/fwl_timerimp.cpp
index a464693..941113e 100644
--- a/xfa/fwl/core/fwl_timerimp.cpp
+++ b/xfa/fwl/core/fwl_timerimp.cpp
@@ -4,7 +4,6 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "xfa/fwl/core/fwl_appimp.h"
 #include "xfa/fwl/core/ifwl_adaptertimermgr.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_timer.h"
diff --git a/xfa/fwl/core/fwl_widgetimp.cpp b/xfa/fwl/core/fwl_widgetimp.cpp
index 6e8ec09..b59fd27 100644
--- a/xfa/fwl/core/fwl_widgetimp.cpp
+++ b/xfa/fwl/core/fwl_widgetimp.cpp
@@ -15,7 +15,6 @@
 #include "xfa/fwl/core/cfwl_themepart.h"
 #include "xfa/fwl/core/cfwl_themetext.h"
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
-#include "xfa/fwl/core/fwl_appimp.h"
 #include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_form.h"
@@ -179,7 +178,7 @@
   if (!pAdapter)
     return FWL_Error::Indefinite;
 
-  SetOwnerApp(static_cast<CFWL_AppImp*>(FWL_GetApp()->GetImpl()));
+  SetOwnerApp(FWL_GetApp());
 
   IFWL_Widget* pParent = m_pProperties->m_pParent;
   m_pWidgetMgr->InsertWidget(pParent, m_pInterface);
@@ -492,9 +491,9 @@
   return pOldDelegate;
 }
 IFWL_App* CFWL_WidgetImp::GetOwnerApp() const {
-  return static_cast<IFWL_App*>(m_pOwnerApp->GetInterface());
+  return m_pOwnerApp;
 }
-FWL_Error CFWL_WidgetImp::SetOwnerApp(CFWL_AppImp* pOwnerApp) {
+FWL_Error CFWL_WidgetImp::SetOwnerApp(IFWL_App* pOwnerApp) {
   m_pOwnerApp = pOwnerApp;
   return FWL_Error::Succeeded;
 }
@@ -642,7 +641,7 @@
         return pRet;
     }
   } while (pUp);
-  return FWL_GetApp()->GetThemeProvider();
+  return nullptr;
 }
 CFWL_WidgetImp* CFWL_WidgetImp::GetRootOuter() {
   IFWL_Widget* pRet = m_pOuter;
diff --git a/xfa/fwl/core/fwl_widgetimp.h b/xfa/fwl/core/fwl_widgetimp.h
index 57970a8..dfbfc5b 100644
--- a/xfa/fwl/core/fwl_widgetimp.h
+++ b/xfa/fwl/core/fwl_widgetimp.h
@@ -72,7 +72,7 @@
   virtual IFWL_WidgetDelegate* SetDelegate(IFWL_WidgetDelegate* pDelegate);
   virtual IFWL_App* GetOwnerApp() const;
 
-  FWL_Error SetOwnerApp(CFWL_AppImp* pOwnerApp);
+  FWL_Error SetOwnerApp(IFWL_App* pOwnerApp);
   IFWL_Widget* GetInterface() const;
   void SetInterface(IFWL_Widget* pInterface);
   CFX_SizeF GetOffsetFromParent(IFWL_Widget* pParent);
@@ -157,7 +157,7 @@
   FX_BOOL IsParent(IFWL_Widget* pParent);
 
   CFWL_WidgetMgr* const m_pWidgetMgr;
-  CFWL_AppImp* m_pOwnerApp;
+  IFWL_App* m_pOwnerApp;
   std::unique_ptr<CFWL_WidgetImpProperties> m_pProperties;
   IFWL_WidgetDelegate* m_pDelegate;
   IFWL_WidgetDelegate* m_pCurDelegate;
diff --git a/xfa/fwl/core/ifwl_app.cpp b/xfa/fwl/core/ifwl_app.cpp
new file mode 100644
index 0000000..a47a76e
--- /dev/null
+++ b/xfa/fwl/core/ifwl_app.cpp
@@ -0,0 +1,50 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fwl/core/ifwl_app.h"
+
+#include "third_party/base/ptr_util.h"
+#include "xfa/fwl/core/cfwl_widgetmgr.h"
+#include "xfa/fwl/core/fwl_noteimp.h"
+#include "xfa/fwl/core/ifwl_widget.h"
+#include "xfa/fxfa/app/xfa_fwladapter.h"
+
+CXFA_FWLAdapterWidgetMgr* FWL_GetAdapterWidgetMgr() {
+  return CFWL_WidgetMgr::GetInstance()->GetAdapterWidgetMgr();
+}
+
+CXFA_FFApp* FWL_GetAdapterNative() {
+  IFWL_App* pApp = FWL_GetApp();
+  if (!pApp)
+    return nullptr;
+  return pApp->GetAdapterNative();
+}
+
+static IFWL_App* g_theApp = nullptr;
+IFWL_App* FWL_GetApp() {
+  return g_theApp;
+}
+
+void FWL_SetApp(IFWL_App* pApp) {
+  g_theApp = pApp;
+}
+
+IFWL_App::IFWL_App(CXFA_FFApp* pAdapter)
+    : m_pAdapterNative(pAdapter),
+      m_pWidgetMgr(pdfium::MakeUnique<CFWL_WidgetMgr>(pAdapter)),
+      m_pNoteDriver(pdfium::MakeUnique<CFWL_NoteDriver>()) {}
+
+IFWL_App::~IFWL_App() {
+  CFWL_ToolTipContainer::DeleteInstance();
+}
+
+CXFA_FFApp* IFWL_App::GetAdapterNative() {
+  return m_pAdapterNative;
+}
+
+CFWL_WidgetMgr* IFWL_App::GetWidgetMgr() {
+  return m_pWidgetMgr.get();
+}
diff --git a/xfa/fwl/core/ifwl_app.h b/xfa/fwl/core/ifwl_app.h
index c030e26..35cbbe2 100644
--- a/xfa/fwl/core/ifwl_app.h
+++ b/xfa/fwl/core/ifwl_app.h
@@ -7,25 +7,14 @@
 #ifndef XFA_FWL_CORE_IFWL_APP_H_
 #define XFA_FWL_CORE_IFWL_APP_H_
 
-// The FWL app code contains three parallel classes, which reference each
-// other via pointers as follows:
-//
-//                    m_pIface               m_pImpl
-//      CXFA_FFApp ------------> IFWL_App -----------> CFWL_AppImp
-//                                        <-----------
-//                                           m_pIface
-
 #include <memory>
 
 #include "core/fxcrt/fx_string.h"
-#include "xfa/fwl/core/fwl_appimp.h"
-#include "xfa/fwl/core/fwl_error.h"
 
 class CFWL_NoteDriver;
 class CFWL_WidgetMgr;
 class CXFA_FFApp;
 class CXFA_FWLAdapterWidgetMgr;
-class IFWL_ThemeProvider;
 class IFWL_Widget;
 
 enum FWL_KeyFlag {
@@ -40,32 +29,17 @@
 
 class IFWL_App {
  public:
-  static IFWL_App* Create(CXFA_FFApp* pAdapter);
+  explicit IFWL_App(CXFA_FFApp* pAdapter);
+  ~IFWL_App();
 
-  virtual ~IFWL_App();
-
-  FWL_Error Initialize();
-  FWL_Error Finalize();
   CXFA_FFApp* GetAdapterNative();
   CFWL_WidgetMgr* GetWidgetMgr();
-  IFWL_ThemeProvider* GetThemeProvider();
-  void SetThemeProvider(IFWL_ThemeProvider* pThemeProvider);
-  void Exit(int32_t iExitCode);
-
-  // These call into polymorphic methods in the impl; no need to override.
-  void Release();
-
-  CFWL_AppImp* GetImpl() const { return m_pImpl.get(); }
-
-  // Takes ownership of |pImpl|.
-  void SetImpl(CFWL_AppImp* pImpl) { m_pImpl.reset(pImpl); }
-
-  CFWL_NoteDriver* GetNoteDriver() const;
+  CFWL_NoteDriver* GetNoteDriver() const { return m_pNoteDriver.get(); }
 
  private:
-  IFWL_App();
-
-  std::unique_ptr<CFWL_AppImp> m_pImpl;
+  CXFA_FFApp* const m_pAdapterNative;
+  std::unique_ptr<CFWL_WidgetMgr> m_pWidgetMgr;
+  std::unique_ptr<CFWL_NoteDriver> m_pNoteDriver;
 };
 
 IFWL_App* FWL_GetApp();
diff --git a/xfa/fxfa/app/xfa_ffapp.cpp b/xfa/fxfa/app/xfa_ffapp.cpp
index 6bedcd4..642ee56 100644
--- a/xfa/fxfa/app/xfa_ffapp.cpp
+++ b/xfa/fxfa/app/xfa_ffapp.cpp
@@ -74,18 +74,12 @@
 CXFA_FFApp::CXFA_FFApp(IXFA_AppProvider* pProvider)
     : m_pProvider(pProvider),
       m_pWidgetMgrDelegate(nullptr),
-      m_pFWLApp(IFWL_App::Create(this)) {
+      m_pFWLApp(pdfium::MakeUnique<IFWL_App>(this)) {
   FWL_SetApp(m_pFWLApp.get());
-  m_pFWLApp->Initialize();
   CXFA_TimeZoneProvider::Create();
 }
 
 CXFA_FFApp::~CXFA_FFApp() {
-  if (m_pFWLApp) {
-    m_pFWLApp->Finalize();
-    m_pFWLApp->Release();
-  }
-
   CXFA_TimeZoneProvider::Destroy();
 }
 
diff --git a/xfa/fxfa/app/xfa_fftext.cpp b/xfa/fxfa/app/xfa_fftext.cpp
index 9fa6baf..b8ad671 100644
--- a/xfa/fxfa/app/xfa_fftext.cpp
+++ b/xfa/fxfa/app/xfa_fftext.cpp
@@ -7,6 +7,7 @@
 #include "xfa/fxfa/app/xfa_fftext.h"
 
 #include "xfa/fwl/core/fwl_widgetdef.h"
+#include "xfa/fwl/core/fwl_widgethit.h"
 #include "xfa/fxfa/app/xfa_ffdraw.h"
 #include "xfa/fxfa/app/xfa_textlayout.h"
 #include "xfa/fxfa/xfa_ffapp.h"
diff --git a/xfa/fxfa/app/xfa_ffwidget.cpp b/xfa/fxfa/app/xfa_ffwidget.cpp
index cac9ccf..0e84ad6 100644
--- a/xfa/fxfa/app/xfa_ffwidget.cpp
+++ b/xfa/fxfa/app/xfa_ffwidget.cpp
@@ -15,6 +15,7 @@
 #include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
+#include "xfa/fwl/core/fwl_widgethit.h"
 #include "xfa/fxfa/app/xfa_textlayout.h"
 #include "xfa/fxfa/cxfa_eventparam.h"
 #include "xfa/fxfa/fxfa_widget.h"
