diff --git a/core/fpdfapi/page/BUILD.gn b/core/fpdfapi/page/BUILD.gn
index e853773..1ed9094 100644
--- a/core/fpdfapi/page/BUILD.gn
+++ b/core/fpdfapi/page/BUILD.gn
@@ -10,6 +10,8 @@
   sources = [
     "cpdf_allstates.cpp",
     "cpdf_allstates.h",
+    "cpdf_annotcontext.cpp",
+    "cpdf_annotcontext.h",
     "cpdf_clippath.cpp",
     "cpdf_clippath.h",
     "cpdf_color.cpp",
diff --git a/fpdfsdk/cpdf_annotcontext.cpp b/core/fpdfapi/page/cpdf_annotcontext.cpp
similarity index 95%
rename from fpdfsdk/cpdf_annotcontext.cpp
rename to core/fpdfapi/page/cpdf_annotcontext.cpp
index f363ef2..1078e46 100644
--- a/fpdfsdk/cpdf_annotcontext.cpp
+++ b/core/fpdfapi/page/cpdf_annotcontext.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "fpdfsdk/cpdf_annotcontext.h"
+#include "core/fpdfapi/page/cpdf_annotcontext.h"
 
 #include "core/fpdfapi/page/cpdf_form.h"
 #include "core/fpdfapi/page/cpdf_page.h"
diff --git a/fpdfsdk/cpdf_annotcontext.h b/core/fpdfapi/page/cpdf_annotcontext.h
similarity index 87%
rename from fpdfsdk/cpdf_annotcontext.h
rename to core/fpdfapi/page/cpdf_annotcontext.h
index 0561357..ee9f3fc 100644
--- a/fpdfsdk/cpdf_annotcontext.h
+++ b/core/fpdfapi/page/cpdf_annotcontext.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef FPDFSDK_CPDF_ANNOTCONTEXT_H_
-#define FPDFSDK_CPDF_ANNOTCONTEXT_H_
+#ifndef CORE_FPDFAPI_PAGE_CPDF_ANNOTCONTEXT_H_
+#define CORE_FPDFAPI_PAGE_CPDF_ANNOTCONTEXT_H_
 
 #include <memory>
 
@@ -38,4 +38,4 @@
   UnownedPtr<CPDF_Page> const m_pPage;
 };
 
-#endif  // FPDFSDK_CPDF_ANNOTCONTEXT_H_
+#endif  // CORE_FPDFAPI_PAGE_CPDF_ANNOTCONTEXT_H_
diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn
index f5c4aa5..d2a36c4 100644
--- a/fpdfsdk/BUILD.gn
+++ b/fpdfsdk/BUILD.gn
@@ -8,8 +8,6 @@
 
 jumbo_source_set("fpdfsdk") {
   sources = [
-    "cpdf_annotcontext.cpp",
-    "cpdf_annotcontext.h",
     "cpdfsdk_actionhandler.cpp",
     "cpdfsdk_actionhandler.h",
     "cpdfsdk_annot.cpp",
@@ -97,11 +95,6 @@
   visibility = [ "../*" ]
 
   if (pdf_enable_xfa) {
-    sources += [
-      "cpdfsdk_xfawidget.cpp",
-      "cpdfsdk_xfawidget.h",
-    ]
-
     deps += [
       "../fxbarcode",
       "../xfa/fxfa",
diff --git a/fpdfsdk/cpdfsdk_interactiveform.cpp b/fpdfsdk/cpdfsdk_interactiveform.cpp
index 0686205..ae43435 100644
--- a/fpdfsdk/cpdfsdk_interactiveform.cpp
+++ b/fpdfsdk/cpdfsdk_interactiveform.cpp
@@ -39,7 +39,7 @@
 #include "third_party/base/ptr_util.h"
 
 #ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/cpdfsdk_xfawidget.h"
+#include "fpdfsdk/fpdfxfa/cpdfxfa_widget.h"
 #include "xfa/fxfa/cxfa_ffwidget.h"
 #endif  // PDF_ENABLE_XFA
 
@@ -225,7 +225,7 @@
 
 #ifdef PDF_ENABLE_XFA
 void CPDFSDK_InteractiveForm::AddXFAMap(CXFA_FFWidget* hWidget,
-                                        CPDFSDK_XFAWidget* pWidget) {
+                                        CPDFXFA_Widget* pWidget) {
   ASSERT(hWidget);
   m_XFAMap[hWidget] = pWidget;
 }
@@ -235,8 +235,7 @@
     m_XFAMap.erase(hWidget);
 }
 
-CPDFSDK_XFAWidget* CPDFSDK_InteractiveForm::GetXFAWidget(
-    CXFA_FFWidget* hWidget) {
+CPDFXFA_Widget* CPDFSDK_InteractiveForm::GetXFAWidget(CXFA_FFWidget* hWidget) {
   ASSERT(hWidget);
   auto it = m_XFAMap.find(hWidget);
   return it != m_XFAMap.end() ? it->second : nullptr;
diff --git a/fpdfsdk/cpdfsdk_interactiveform.h b/fpdfsdk/cpdfsdk_interactiveform.h
index 4e6deb8..17a350d 100644
--- a/fpdfsdk/cpdfsdk_interactiveform.h
+++ b/fpdfsdk/cpdfsdk_interactiveform.h
@@ -26,7 +26,7 @@
 class CPDFSDK_FormFillEnvironment;
 
 #ifdef PDF_ENABLE_XFA
-class CPDFSDK_XFAWidget;
+class CPDFXFA_Widget;
 class CXFA_FFWidget;
 #endif  // PDF_ENABLE_XFA
 
@@ -55,9 +55,9 @@
   bool IsCalculateEnabled() const;
 
 #ifdef PDF_ENABLE_XFA
-  void AddXFAMap(CXFA_FFWidget* hWidget, CPDFSDK_XFAWidget* pWidget);
+  void AddXFAMap(CXFA_FFWidget* hWidget, CPDFXFA_Widget* pWidget);
   void RemoveXFAMap(CXFA_FFWidget* hWidget);
-  CPDFSDK_XFAWidget* GetXFAWidget(CXFA_FFWidget* hWidget);
+  CPDFXFA_Widget* GetXFAWidget(CXFA_FFWidget* hWidget);
   void XfaEnableCalculate(bool bEnabled);
   bool IsXfaCalculateEnabled() const;
   bool IsXfaValidationsEnabled();
@@ -116,7 +116,7 @@
   std::unique_ptr<CPDF_InteractiveForm> const m_pInteractiveForm;
   std::map<CPDF_FormControl*, CPDFSDK_Widget*> m_Map;
 #ifdef PDF_ENABLE_XFA
-  std::map<CXFA_FFWidget*, CPDFSDK_XFAWidget*> m_XFAMap;
+  std::map<CXFA_FFWidget*, CPDFXFA_Widget*> m_XFAMap;
   bool m_bXfaCalculate = true;
   bool m_bXfaValidationsEnabled = true;
 #endif  // PDF_ENABLE_XFA
diff --git a/fpdfsdk/cpdfsdk_xfawidget.cpp b/fpdfsdk/cpdfsdk_xfawidget.cpp
deleted file mode 100644
index f529a72..0000000
--- a/fpdfsdk/cpdfsdk_xfawidget.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-// 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 "fpdfsdk/cpdfsdk_xfawidget.h"
-
-#include "fpdfsdk/ipdfsdk_annothandler.h"
-#include "xfa/fxfa/cxfa_ffwidget.h"
-
-CPDFSDK_XFAWidget::CPDFSDK_XFAWidget(CXFA_FFWidget* pAnnot,
-                                     CPDFSDK_PageView* pPageView,
-                                     CPDFSDK_InteractiveForm* pInteractiveForm)
-    : CPDFSDK_Annot(pPageView),
-      m_pInteractiveForm(pInteractiveForm),
-      m_pXFAWidget(pAnnot) {}
-
-CPDFSDK_XFAWidget::~CPDFSDK_XFAWidget() = default;
-
-bool CPDFSDK_XFAWidget::IsXFAField() const {
-  return true;
-}
-
-CXFA_FFWidget* CPDFSDK_XFAWidget::GetXFAWidget() const {
-  return m_pXFAWidget.Get();
-}
-
-CPDF_Annot::Subtype CPDFSDK_XFAWidget::GetAnnotSubtype() const {
-  return CPDF_Annot::Subtype::XFAWIDGET;
-}
-
-CFX_FloatRect CPDFSDK_XFAWidget::GetRect() const {
-  return GetXFAWidget()->GetLayoutItem()->GetRect(false).ToFloatRect();
-}
diff --git a/fpdfsdk/fpdf_annot.cpp b/fpdfsdk/fpdf_annot.cpp
index 7053459..211c102 100644
--- a/fpdfsdk/fpdf_annot.cpp
+++ b/fpdfsdk/fpdf_annot.cpp
@@ -9,6 +9,7 @@
 
 #include "constants/annotation_common.h"
 #include "core/fpdfapi/edit/cpdf_pagecontentgenerator.h"
+#include "core/fpdfapi/page/cpdf_annotcontext.h"
 #include "core/fpdfapi/page/cpdf_form.h"
 #include "core/fpdfapi/page/cpdf_page.h"
 #include "core/fpdfapi/page/cpdf_pageobject.h"
@@ -25,7 +26,6 @@
 #include "core/fpdfdoc/cpdf_interactiveform.h"
 #include "core/fpdfdoc/cpvt_generateap.h"
 #include "core/fxge/cfx_color.h"
-#include "fpdfsdk/cpdf_annotcontext.h"
 #include "fpdfsdk/cpdfsdk_helpers.h"
 #include "fpdfsdk/cpdfsdk_interactiveform.h"
 #include "third_party/base/ptr_util.h"
diff --git a/fpdfsdk/fpdfxfa/BUILD.gn b/fpdfsdk/fpdfxfa/BUILD.gn
index ef26c60..b3f821e 100644
--- a/fpdfsdk/fpdfxfa/BUILD.gn
+++ b/fpdfsdk/fpdfxfa/BUILD.gn
@@ -16,6 +16,8 @@
     "cpdfxfa_docenvironment.h",
     "cpdfxfa_page.cpp",
     "cpdfxfa_page.h",
+    "cpdfxfa_widget.cpp",
+    "cpdfxfa_widget.h",
     "cpdfxfa_widgethandler.cpp",
     "cpdfxfa_widgethandler.h",
   ]
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp
new file mode 100644
index 0000000..3505a3e
--- /dev/null
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp
@@ -0,0 +1,35 @@
+// 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 "fpdfsdk/fpdfxfa/cpdfxfa_widget.h"
+
+#include "fpdfsdk/ipdfsdk_annothandler.h"
+#include "xfa/fxfa/cxfa_ffwidget.h"
+
+CPDFXFA_Widget::CPDFXFA_Widget(CXFA_FFWidget* pAnnot,
+                               CPDFSDK_PageView* pPageView,
+                               CPDFSDK_InteractiveForm* pInteractiveForm)
+    : CPDFSDK_Annot(pPageView),
+      m_pInteractiveForm(pInteractiveForm),
+      m_pXFAWidget(pAnnot) {}
+
+CPDFXFA_Widget::~CPDFXFA_Widget() = default;
+
+bool CPDFXFA_Widget::IsXFAField() const {
+  return true;
+}
+
+CXFA_FFWidget* CPDFXFA_Widget::GetXFAWidget() const {
+  return m_pXFAWidget.Get();
+}
+
+CPDF_Annot::Subtype CPDFXFA_Widget::GetAnnotSubtype() const {
+  return CPDF_Annot::Subtype::XFAWIDGET;
+}
+
+CFX_FloatRect CPDFXFA_Widget::GetRect() const {
+  return GetXFAWidget()->GetLayoutItem()->GetRect(false).ToFloatRect();
+}
diff --git a/fpdfsdk/cpdfsdk_xfawidget.h b/fpdfsdk/fpdfxfa/cpdfxfa_widget.h
similarity index 67%
rename from fpdfsdk/cpdfsdk_xfawidget.h
rename to fpdfsdk/fpdfxfa/cpdfxfa_widget.h
index 3ee5cde..ba3b23d 100644
--- a/fpdfsdk/cpdfsdk_xfawidget.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widget.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef FPDFSDK_CPDFSDK_XFAWIDGET_H_
-#define FPDFSDK_CPDFSDK_XFAWIDGET_H_
+#ifndef FPDFSDK_FPDFXFA_CPDFXFA_WIDGET_H_
+#define FPDFSDK_FPDFXFA_CPDFXFA_WIDGET_H_
 
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_string.h"
@@ -17,12 +17,12 @@
 class CPDFSDK_PageView;
 class CXFA_FFWidget;
 
-class CPDFSDK_XFAWidget final : public CPDFSDK_Annot {
+class CPDFXFA_Widget final : public CPDFSDK_Annot {
  public:
-  CPDFSDK_XFAWidget(CXFA_FFWidget* pAnnot,
-                    CPDFSDK_PageView* pPageView,
-                    CPDFSDK_InteractiveForm* pInteractiveForm);
-  ~CPDFSDK_XFAWidget() override;
+  CPDFXFA_Widget(CXFA_FFWidget* pAnnot,
+                 CPDFSDK_PageView* pPageView,
+                 CPDFSDK_InteractiveForm* pInteractiveForm);
+  ~CPDFXFA_Widget() override;
 
   // CPDFSDK_Annot:
   bool IsXFAField() const override;
@@ -39,9 +39,10 @@
   ObservedPtr<CXFA_FFWidget> const m_pXFAWidget;
 };
 
-inline CPDFSDK_XFAWidget* ToXFAWidget(CPDFSDK_Annot* pAnnot) {
+inline CPDFXFA_Widget* ToXFAWidget(CPDFSDK_Annot* pAnnot) {
   return pAnnot && pAnnot->GetAnnotSubtype() == CPDF_Annot::Subtype::XFAWIDGET
-      ? static_cast<CPDFSDK_XFAWidget*>(pAnnot) : nullptr;
+             ? static_cast<CPDFXFA_Widget*>(pAnnot)
+             : nullptr;
 }
 
-#endif  // FPDFSDK_CPDFSDK_XFAWIDGET_H_
+#endif  // FPDFSDK_FPDFXFA_CPDFXFA_WIDGET_H_
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
index 4ad437e..4e6fa00 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
@@ -10,8 +10,8 @@
 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
 #include "fpdfsdk/cpdfsdk_interactiveform.h"
 #include "fpdfsdk/cpdfsdk_pageview.h"
-#include "fpdfsdk/cpdfsdk_xfawidget.h"
 #include "fpdfsdk/fpdfxfa/cpdfxfa_context.h"
+#include "fpdfsdk/fpdfxfa/cpdfxfa_widget.h"
 #include "public/fpdf_fwlevent.h"
 #include "xfa/fwl/cfwl_app.h"
 #include "xfa/fwl/fwl_widgetdef.h"
@@ -218,7 +218,7 @@
 CPDFSDK_Annot* CPDFXFA_WidgetHandler::NewAnnotForXFA(CXFA_FFWidget* pAnnot,
                                                      CPDFSDK_PageView* pPage) {
   CPDFSDK_InteractiveForm* pForm = m_pFormFillEnv->GetInteractiveForm();
-  CPDFSDK_XFAWidget* pWidget = new CPDFSDK_XFAWidget(pAnnot, pPage, pForm);
+  CPDFXFA_Widget* pWidget = new CPDFXFA_Widget(pAnnot, pPage, pForm);
   pForm->AddXFAMap(pAnnot, pWidget);
   return pWidget;
 }
@@ -247,7 +247,7 @@
 
 void CPDFXFA_WidgetHandler::ReleaseAnnot(
     std::unique_ptr<CPDFSDK_Annot> pAnnot) {
-  CPDFSDK_XFAWidget* pWidget = ToXFAWidget(pAnnot.get());
+  CPDFXFA_Widget* pWidget = ToXFAWidget(pAnnot.get());
   pWidget->GetInteractiveForm()->RemoveXFAMap(pWidget->GetXFAWidget());
 }
 
