diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
index e2f4a74..e953840 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
@@ -591,48 +591,7 @@
                                                       bool bCreateNew) {
   ASSERT(pPageNode);
   CXFA_ViewRecord* pNewRecord = new CXFA_ViewRecord();
-  if (HasCurrentViewRecord()) {
-    if (!IsPageSetRootOrderedOccurrence()) {
-      *pNewRecord = *GetCurrentViewRecord();
-      m_ProposedViewRecords.push_back(pNewRecord);
-      return pNewRecord;
-    }
-    CXFA_Node* pPageSet = pPageNode->GetParent();
-    if (!bCreateNew) {
-      if (pPageSet == m_pTemplatePageSetRoot) {
-        pNewRecord->pCurPageSet = m_pPageSetCurRoot;
-      } else {
-        CXFA_ViewLayoutItem* pParentLayoutItem =
-            ToViewLayoutItem(pPageSet->JSObject()->GetLayoutItem());
-        if (!pParentLayoutItem)
-          pParentLayoutItem = m_pPageSetCurRoot;
-
-        pNewRecord->pCurPageSet = pParentLayoutItem;
-      }
-    } else {
-      CXFA_ViewLayoutItem* pParentPageSetLayout = nullptr;
-      if (pPageSet == GetCurrentViewRecord()->pCurPageSet->GetFormNode()) {
-        pParentPageSetLayout =
-            ToViewLayoutItem(GetCurrentViewRecord()->pCurPageSet->GetParent());
-      } else {
-        pParentPageSetLayout = ToViewLayoutItem(
-            pPageSet->GetParent()->JSObject()->GetLayoutItem());
-      }
-      auto* pPageSetLayoutItem = new CXFA_ViewLayoutItem(pPageSet);
-      pPageSet->JSObject()->SetLayoutItem(pPageSetLayoutItem);
-      if (!pParentPageSetLayout) {
-        CXFA_ViewLayoutItem* pPrePageSet = m_pPageSetLayoutItemRoot;
-        while (pPrePageSet->GetNextSibling()) {
-          pPrePageSet = pPrePageSet->GetNextSibling()->AsViewLayoutItem();
-        }
-        pPrePageSet->SetNextSibling(pPageSetLayoutItem);
-        m_pPageSetCurRoot = pPageSetLayoutItem;
-      } else {
-        pParentPageSetLayout->AddChild(pPageSetLayoutItem);
-      }
-      pNewRecord->pCurPageSet = pPageSetLayoutItem;
-    }
-  } else {
+  if (!HasCurrentViewRecord()) {
     CXFA_Node* pPageSet = pPageNode->GetParent();
     if (pPageSet == m_pTemplatePageSetRoot) {
       pNewRecord->pCurPageSet = m_pPageSetLayoutItemRoot;
@@ -643,9 +602,51 @@
       m_pPageSetLayoutItemRoot->AddChild(pPageSetLayoutItem);
       pNewRecord->pCurPageSet = pPageSetLayoutItem;
     }
+    return AppendNewRecord(pNewRecord);
   }
-  m_ProposedViewRecords.push_back(pNewRecord);
-  return pNewRecord;
+
+  if (!IsPageSetRootOrderedOccurrence()) {
+    *pNewRecord = *GetCurrentViewRecord();
+    return AppendNewRecord(pNewRecord);
+  }
+
+  CXFA_Node* pPageSet = pPageNode->GetParent();
+  if (!bCreateNew) {
+    if (pPageSet == m_pTemplatePageSetRoot) {
+      pNewRecord->pCurPageSet = m_pPageSetCurRoot;
+    } else {
+      CXFA_ViewLayoutItem* pParentLayoutItem =
+          ToViewLayoutItem(pPageSet->JSObject()->GetLayoutItem());
+      if (!pParentLayoutItem)
+        pParentLayoutItem = m_pPageSetCurRoot;
+
+      pNewRecord->pCurPageSet = pParentLayoutItem;
+    }
+    return AppendNewRecord(pNewRecord);
+  }
+
+  CXFA_ViewLayoutItem* pParentPageSetLayout = nullptr;
+  if (pPageSet == GetCurrentViewRecord()->pCurPageSet->GetFormNode()) {
+    pParentPageSetLayout =
+        ToViewLayoutItem(GetCurrentViewRecord()->pCurPageSet->GetParent());
+  } else {
+    pParentPageSetLayout =
+        ToViewLayoutItem(pPageSet->GetParent()->JSObject()->GetLayoutItem());
+  }
+  auto* pPageSetLayoutItem = new CXFA_ViewLayoutItem(pPageSet);
+  pPageSet->JSObject()->SetLayoutItem(pPageSetLayoutItem);
+  if (!pParentPageSetLayout) {
+    CXFA_ViewLayoutItem* pPrePageSet = m_pPageSetLayoutItemRoot;
+    while (pPrePageSet->GetNextSibling()) {
+      pPrePageSet = pPrePageSet->GetNextSibling()->AsViewLayoutItem();
+    }
+    pPrePageSet->SetNextSibling(pPageSetLayoutItem);
+    m_pPageSetCurRoot = pPageSetLayoutItem;
+  } else {
+    pParentPageSetLayout->AddChild(pPageSetLayoutItem);
+  }
+  pNewRecord->pCurPageSet = pPageSetLayoutItem;
+  return AppendNewRecord(pNewRecord);
 }
 
 CXFA_ViewRecord* CXFA_LayoutPageMgr::CreateViewRecordSimple() {
@@ -654,8 +655,7 @@
     *pNewRecord = *GetCurrentViewRecord();
   else
     pNewRecord->pCurPageSet = m_pPageSetLayoutItemRoot;
-  m_ProposedViewRecords.push_back(pNewRecord);
-  return pNewRecord;
+  return AppendNewRecord(pNewRecord);
 }
 
 void CXFA_LayoutPageMgr::AddPageAreaLayoutItem(CXFA_ViewRecord* pNewRecord,
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.h b/xfa/fxfa/layout/cxfa_layoutpagemgr.h
index 55aeb91..d91816a 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.h
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.h
@@ -77,6 +77,10 @@
     auto iter = m_ProposedViewRecords.end();
     return !m_ProposedViewRecords.empty() ? std::prev(iter) : iter;
   }
+  CXFA_ViewRecord* AppendNewRecord(CXFA_ViewRecord* pNewRecord) {
+    m_ProposedViewRecords.push_back(pNewRecord);
+    return pNewRecord;
+  }
   CXFA_ViewRecord* CreateViewRecord(CXFA_Node* pPageNode, bool bCreateNew);
   CXFA_ViewRecord* CreateViewRecordSimple();
   void AddPageAreaLayoutItem(CXFA_ViewRecord* pNewRecord,
