diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
index f4cac98..cb2e9df 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -296,7 +296,7 @@
       continue;
 
     m_pContext->GetFormFillEnv()->RemovePageView(pPage.Get());
-    pPage->SetXFAPageView(pXFADocView->GetPageView(iPageIter));
+    pPage->SetXFAPageViewIndex(iPageIter);
   }
 
   int flag = (nNewCount < m_pContext->GetOriginalPageCount())
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
index 7a4befd..4770e1b 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
@@ -49,21 +49,9 @@
   return true;
 }
 
-bool CPDFXFA_Page::LoadXFAPageView() {
-  CXFA_FFDoc* pXFADoc = m_pContext->GetXFADoc();
-  if (!pXFADoc)
-    return false;
-
+CXFA_FFPageView* CPDFXFA_Page::GetXFAPageView() const {
   CXFA_FFDocView* pXFADocView = m_pContext->GetXFADocView();
-  if (!pXFADocView)
-    return false;
-
-  CXFA_FFPageView* pPageView = pXFADocView->GetPageView(m_iPageIndex);
-  if (!pPageView)
-    return false;
-
-  m_pXFAPageView = pPageView;
-  return true;
+  return pXFADocView ? pXFADocView->GetPageView(m_iPageIndex) : nullptr;
 }
 
 bool CPDFXFA_Page::LoadPage() {
@@ -73,7 +61,7 @@
     case FormType::kXFAForeground:
       return LoadPDFPage();
     case FormType::kXFAFull:
-      return LoadXFAPageView();
+      return !!GetXFAPageView();
   }
   NOTREACHED();
   return false;
@@ -90,7 +78,8 @@
 }
 
 float CPDFXFA_Page::GetPageWidth() const {
-  if (!m_pPDFPage && !m_pXFAPageView)
+  CXFA_FFPageView* pPageView = GetXFAPageView();
+  if (!m_pPDFPage && !pPageView)
     return 0.0f;
 
   switch (m_pContext->GetFormType()) {
@@ -101,8 +90,8 @@
         return m_pPDFPage->GetPageWidth();
       FALLTHROUGH;
     case FormType::kXFAFull:
-      if (m_pXFAPageView)
-        return m_pXFAPageView->GetPageViewRect().width;
+      if (pPageView)
+        return pPageView->GetPageViewRect().width;
       break;
   }
 
@@ -110,7 +99,8 @@
 }
 
 float CPDFXFA_Page::GetPageHeight() const {
-  if (!m_pPDFPage && !m_pXFAPageView)
+  CXFA_FFPageView* pPageView = GetXFAPageView();
+  if (!m_pPDFPage && !pPageView)
     return 0.0f;
 
   switch (m_pContext->GetFormType()) {
@@ -121,8 +111,8 @@
         return m_pPDFPage->GetPageHeight();
       FALLTHROUGH;
     case FormType::kXFAFull:
-      if (m_pXFAPageView)
-        return m_pXFAPageView->GetPageViewRect().height;
+      if (pPageView)
+        return pPageView->GetPageViewRect().height;
       break;
   }
 
@@ -133,7 +123,8 @@
     const FX_RECT& rect,
     int rotate,
     const CFX_PointF& device_point) const {
-  if (!m_pPDFPage && !m_pXFAPageView)
+  CXFA_FFPageView* pPageView = GetXFAPageView();
+  if (!m_pPDFPage && !pPageView)
     return {};
 
   CFX_PointF pos =
@@ -145,7 +136,8 @@
     const FX_RECT& rect,
     int rotate,
     const CFX_PointF& page_point) const {
-  if (!m_pPDFPage && !m_pXFAPageView)
+  CXFA_FFPageView* pPageView = GetXFAPageView();
+  if (!m_pPDFPage && !pPageView)
     return {};
 
   CFX_Matrix page2device = GetDisplayMatrix(rect, rotate);
@@ -154,7 +146,8 @@
 
 CFX_Matrix CPDFXFA_Page::GetDisplayMatrix(const FX_RECT& rect,
                                           int iRotate) const {
-  if (!m_pPDFPage && !m_pXFAPageView)
+  CXFA_FFPageView* pPageView = GetXFAPageView();
+  if (!m_pPDFPage && !pPageView)
     return CFX_Matrix();
 
   switch (m_pContext->GetFormType()) {
@@ -165,8 +158,8 @@
         return m_pPDFPage->GetDisplayMatrix(rect, iRotate);
       FALLTHROUGH;
     case FormType::kXFAFull:
-      if (m_pXFAPageView)
-        return m_pXFAPageView->GetDisplayMatrix(rect, iRotate);
+      if (pPageView)
+        return pPageView->GetDisplayMatrix(rect, iRotate);
       break;
   }
 
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.h b/fpdfsdk/fpdfxfa/cpdfxfa_page.h
index 3e2118d..8db5735 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.h
@@ -45,10 +45,8 @@
   void LoadPDFPageFromDict(CPDF_Dictionary* pPageDict);
   CPDF_Document::Extension* GetDocumentExtension() const;
   int GetPageIndex() const { return m_iPageIndex; }
-  CXFA_FFPageView* GetXFAPageView() const { return m_pXFAPageView; }
-  void SetXFAPageView(CXFA_FFPageView* pPageView) {
-    m_pXFAPageView = pPageView;
-  }
+  void SetXFAPageViewIndex(int index) { m_iPageIndex = index; }
+  CXFA_FFPageView* GetXFAPageView() const;
 
  private:
   // Refcounted class.
@@ -56,12 +54,10 @@
   ~CPDFXFA_Page() override;
 
   bool LoadPDFPage();
-  bool LoadXFAPageView();
 
   RetainPtr<CPDF_Page> m_pPDFPage;
-  CXFA_FFPageView* m_pXFAPageView = nullptr;
   UnownedPtr<CPDFXFA_Context> const m_pContext;
-  const int m_iPageIndex;
+  int m_iPageIndex;
 };
 
 #endif  // FPDFSDK_FPDFXFA_CPDFXFA_PAGE_H_
