diff --git a/xfa/fxfa/layout/cxfa_layoutitem.cpp b/xfa/fxfa/layout/cxfa_layoutitem.cpp
index 927d83b..8711e1a 100644
--- a/xfa/fxfa/layout/cxfa_layoutitem.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutitem.cpp
@@ -44,11 +44,23 @@
                                  : nullptr;
 }
 
+const CXFA_ContainerLayoutItem* CXFA_LayoutItem::AsContainerLayoutItem() const {
+  return IsContainerLayoutItem()
+             ? static_cast<const CXFA_ContainerLayoutItem*>(this)
+             : nullptr;
+}
+
 CXFA_ContentLayoutItem* CXFA_LayoutItem::AsContentLayoutItem() {
   return IsContentLayoutItem() ? static_cast<CXFA_ContentLayoutItem*>(this)
                                : nullptr;
 }
 
+const CXFA_ContentLayoutItem* CXFA_LayoutItem::AsContentLayoutItem() const {
+  return IsContentLayoutItem()
+             ? static_cast<const CXFA_ContentLayoutItem*>(this)
+             : nullptr;
+}
+
 CXFA_ContainerLayoutItem* CXFA_LayoutItem::GetPage() const {
   for (CXFA_LayoutItem* pCurNode = const_cast<CXFA_LayoutItem*>(this); pCurNode;
        pCurNode = pCurNode->m_pParent) {
diff --git a/xfa/fxfa/layout/cxfa_layoutitem.h b/xfa/fxfa/layout/cxfa_layoutitem.h
index 9d00526..46b9b04 100644
--- a/xfa/fxfa/layout/cxfa_layoutitem.h
+++ b/xfa/fxfa/layout/cxfa_layoutitem.h
@@ -21,7 +21,9 @@
   bool IsContainerLayoutItem() const { return m_ItemType == kContainerItem; }
   bool IsContentLayoutItem() const { return m_ItemType == kContentItem; }
   CXFA_ContainerLayoutItem* AsContainerLayoutItem();
+  const CXFA_ContainerLayoutItem* AsContainerLayoutItem() const;
   CXFA_ContentLayoutItem* AsContentLayoutItem();
+  const CXFA_ContentLayoutItem* AsContentLayoutItem() const;
 
   CXFA_ContainerLayoutItem* GetPage() const;
   CXFA_LayoutItem* GetParent() const { return m_pParent; }
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
index 56cb8aa..79c889c 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
@@ -251,6 +251,27 @@
       pTestScript, pTestScript->GetContainerParent());
 }
 
+float CalculateLayoutItemHeight(const CXFA_LayoutItem* pItem) {
+  float fHeight = 0;
+  for (const CXFA_LayoutItem* pChild = pItem->GetFirstChild(); pChild;
+       pChild = pChild->GetNextSibling()) {
+    const CXFA_ContentLayoutItem* pContent = pChild->AsContentLayoutItem();
+    if (pContent)
+      fHeight += pContent->m_sSize.height;
+  }
+  return fHeight;
+}
+
+std::vector<float> GetHeightsForContentAreas(const CXFA_LayoutItem* pItem) {
+  std::vector<float> heights;
+  for (const CXFA_LayoutItem* pChild = pItem->GetFirstChild(); pChild;
+       pChild = pChild->GetNextSibling()) {
+    if (pChild->GetFormNode()->GetElementType() == XFA_Element::ContentArea)
+      heights.push_back(CalculateLayoutItemHeight(pChild));
+  }
+  return heights;
+}
+
 }  // namespace
 
 class CXFA_ContainerRecord {
@@ -669,28 +690,8 @@
             }
           }
           bool bUsable = true;
-          std::vector<float> rgUsedHeights;
-          for (CXFA_LayoutItem* pChildLayoutItem =
-                   pLastPageAreaLayoutItem->GetFirstChild();
-               pChildLayoutItem;
-               pChildLayoutItem = pChildLayoutItem->GetNextSibling()) {
-            if (pChildLayoutItem->GetFormNode()->GetElementType() !=
-                XFA_Element::ContentArea) {
-              continue;
-            }
-            float fUsedHeight = 0;
-            for (CXFA_LayoutItem* pContentChildLayoutItem =
-                     pChildLayoutItem->GetFirstChild();
-                 pContentChildLayoutItem;
-                 pContentChildLayoutItem =
-                     pContentChildLayoutItem->GetNextSibling()) {
-              if (CXFA_ContentLayoutItem* pContent =
-                      pContentChildLayoutItem->AsContentLayoutItem()) {
-                fUsedHeight += pContent->m_sSize.height;
-              }
-            }
-            rgUsedHeights.push_back(fUsedHeight);
-          }
+          std::vector<float> rgUsedHeights =
+              GetHeightsForContentAreas(pLastPageAreaLayoutItem);
           int32_t iCurContentAreaIndex = -1;
           for (CXFA_Node* pContentAreaNode = pNode->GetFirstChild();
                pContentAreaNode;
