diff --git a/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp b/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
index 5a8c3af..56c193b 100644
--- a/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
@@ -1698,7 +1698,7 @@
           if (!bUseBreakControl || !m_pPageMgr ||
               !m_pPageMgr->ProcessBreakBeforeOrAfter(m_pCurChildNode, true,
                                                      pLeaderNode, pTrailerNode,
-                                                     bCreatePage) ||
+                                                     &bCreatePage) ||
               GetFormNode()->GetElementType() == XFA_Element::Form ||
               !bCreatePage) {
             break;
@@ -1737,7 +1737,7 @@
           if (!bUseBreakControl || !m_pPageMgr ||
               !m_pPageMgr->ProcessBreakBeforeOrAfter(m_pCurChildNode, false,
                                                      pLeaderNode, pTrailerNode,
-                                                     bCreatePage) ||
+                                                     &bCreatePage) ||
               GetFormNode()->GetElementType() == XFA_Element::Form) {
             break;
           }
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
index 8188544..eb7fe70 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
@@ -282,10 +282,10 @@
            pPageSetLayoutItem->GetFirstChild();
        pPageAreaLayoutItem;
        pPageAreaLayoutItem = pPageAreaLayoutItem->GetNextSibling()) {
-    if (pPageAreaLayoutItem->GetFormNode()->GetElementType() !=
-        XFA_Element::PageArea) {
+    XFA_Element type = pPageAreaLayoutItem->GetFormNode()->GetElementType();
+    if (type != XFA_Element::PageArea)
       continue;
-    }
+
     ++nCount;
     pLast = pPageAreaLayoutItem;
   }
@@ -383,11 +383,13 @@
   int32_t iCount = 0;
   for (pPageArea = m_pTemplatePageSetRoot->GetFirstChild(); pPageArea;
        pPageArea = pPageArea->GetNextSibling()) {
-    if (pPageArea->GetElementType() == XFA_Element::PageArea) {
-      iCount++;
-      if (pPageArea->GetFirstChildByClass<CXFA_ContentArea>(
-              XFA_Element::ContentArea))
-        return true;
+    if (pPageArea->GetElementType() != XFA_Element::PageArea)
+      continue;
+
+    iCount++;
+    if (pPageArea->GetFirstChildByClass<CXFA_ContentArea>(
+            XFA_Element::ContentArea)) {
+      return true;
     }
   }
   if (iCount > 0)
@@ -835,15 +837,15 @@
     bool bBefore,
     CXFA_Node*& pBreakLeaderNode,
     CXFA_Node*& pBreakTrailerNode,
-    bool& bCreatePage) {
+    bool* pCreatePage) {
   CXFA_Node* pLeaderTemplate = nullptr;
   CXFA_Node* pTrailerTemplate = nullptr;
   CXFA_Node* pFormNode = pBreakNode->GetContainerParent();
   if (!pFormNode->PresenceRequiresSpace())
     return false;
 
-  bCreatePage = ExecuteBreakBeforeOrAfter(pBreakNode, bBefore, pLeaderTemplate,
-                                          pTrailerTemplate);
+  *pCreatePage = ExecuteBreakBeforeOrAfter(pBreakNode, bBefore, pLeaderTemplate,
+                                           pTrailerTemplate);
   CXFA_Document* pDocument = pBreakNode->GetDocument();
   CXFA_Node* pDataScope = nullptr;
   pFormNode = pFormNode->GetContainerParent();
@@ -1053,20 +1055,20 @@
   if (pBookendNode->GetElementType() == XFA_Element::Break) {
     WideString leader = pBookendNode->JSObject()->GetCData(
         bLeader ? XFA_Attribute::BookendLeader : XFA_Attribute::BookendTrailer);
-    if (!leader.IsEmpty()) {
-      pBookendAppendTemplate = ResolveBreakTarget(pContainer, false, leader);
-      return true;
-    }
-    return false;
-  }
+    if (leader.IsEmpty())
+      return false;
 
-  if (pBookendNode->GetElementType() == XFA_Element::Bookend) {
-    WideString leader = pBookendNode->JSObject()->GetCData(
-        bLeader ? XFA_Attribute::Leader : XFA_Attribute::Trailer);
-    pBookendAppendTemplate = ResolveBreakTarget(pContainer, true, leader);
+    pBookendAppendTemplate = ResolveBreakTarget(pContainer, false, leader);
     return true;
   }
-  return false;
+
+  if (pBookendNode->GetElementType() != XFA_Element::Bookend)
+    return false;
+
+  WideString leader = pBookendNode->JSObject()->GetCData(
+      bLeader ? XFA_Attribute::Leader : XFA_Attribute::Trailer);
+  pBookendAppendTemplate = ResolveBreakTarget(pContainer, true, leader);
+  return true;
 }
 
 bool CXFA_LayoutPageMgr::FindPageAreaFromPageSet(CXFA_Node* pPageSet,
@@ -1380,13 +1382,12 @@
       return false;
     }
     if (pContentAreaLayout) {
-      if (pContentAreaLayout->GetFormNode() != pCurContentNode) {
-        CXFA_ContainerRecord* pNewRecord =
-            CreateContainerRecord(nullptr, false);
-        pNewRecord->pCurContentArea = pContentAreaLayout;
-        return true;
-      }
-      return false;
+      if (pContentAreaLayout->GetFormNode() == pCurContentNode)
+        return false;
+
+      CXFA_ContainerRecord* pNewRecord = CreateContainerRecord(nullptr, false);
+      pNewRecord->pCurContentArea = pContentAreaLayout;
+      return true;
     }
   }
 
@@ -1573,11 +1574,8 @@
 
   float fNextContentHeight = pContentArea->JSObject()->GetMeasureInUnit(
       XFA_Attribute::H, XFA_Unit::Pt);
-  if (fNextContentHeight < kXFALayoutPrecision)
-    return true;
-  if (fNextContentHeight > fChildHeight)
-    return true;
-  return false;
+  return fNextContentHeight < kXFALayoutPrecision ||
+         fNextContentHeight > fChildHeight;
 }
 
 void CXFA_LayoutPageMgr::ClearData() {
@@ -1867,15 +1865,12 @@
         iterator(pRootLayoutItem);
     for (CXFA_ContainerLayoutItem* pContainerItem = iterator.GetCurrent();
          pContainerItem; pContainerItem = iterator.MoveToNext()) {
-      CXFA_Node* pNode = pContainerItem->GetFormNode();
-      switch (pNode->GetElementType()) {
-        case XFA_Element::PageArea:
-          m_pLayoutProcessor->GetRootRootItemLayoutProcessor()
-              ->DoLayoutPageArea(pContainerItem);
-          break;
-        default:
-          break;
-      }
+      XFA_Element type = pContainerItem->GetFormNode()->GetElementType();
+      if (type != XFA_Element::PageArea)
+        continue;
+
+      m_pLayoutProcessor->GetRootRootItemLayoutProcessor()->DoLayoutPageArea(
+          pContainerItem);
     }
   }
 }
@@ -1894,39 +1889,36 @@
         iteratorParent(pRootLayoutItem);
     for (CXFA_ContainerLayoutItem* pContainerItem = iteratorParent.GetCurrent();
          pContainerItem; pContainerItem = iteratorParent.MoveToNext()) {
-      switch (pContainerItem->GetFormNode()->GetElementType()) {
-        case XFA_Element::PageArea: {
-          nPageIdx++;
-          uint32_t dwRelevant =
-              XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable;
-          CXFA_NodeIteratorTemplate<CXFA_LayoutItem,
-                                    CXFA_TraverseStrategy_LayoutItem>
-              iterator(pContainerItem);
-          CXFA_LayoutItem* pChildLayoutItem = iterator.GetCurrent();
-          while (pChildLayoutItem) {
-            CXFA_ContentLayoutItem* pContentItem =
-                pChildLayoutItem->AsContentLayoutItem();
-            if (!pContentItem) {
-              pChildLayoutItem = iterator.MoveToNext();
-              continue;
-            }
+      XFA_Element type = pContainerItem->GetFormNode()->GetElementType();
+      if (type != XFA_Element::PageArea)
+        continue;
 
-            XFA_AttributeValue presence =
-                pContentItem->GetFormNode()
-                    ->JSObject()
-                    ->TryEnum(XFA_Attribute::Presence, true)
-                    .value_or(XFA_AttributeValue::Visible);
-            bool bVisible = presence == XFA_AttributeValue::Visible;
-            uint32_t dwRelevantChild =
-                GetRelevant(pContentItem->GetFormNode(), dwRelevant);
-            SyncContainer(pNotify, m_pLayoutProcessor, pContentItem,
-                          dwRelevantChild, bVisible, nPageIdx);
-            pChildLayoutItem = iterator.SkipChildrenAndMoveToNext();
-          }
-          break;
+      nPageIdx++;
+      uint32_t dwRelevant =
+          XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable;
+      CXFA_NodeIteratorTemplate<CXFA_LayoutItem,
+                                CXFA_TraverseStrategy_LayoutItem>
+          iterator(pContainerItem);
+      CXFA_LayoutItem* pChildLayoutItem = iterator.GetCurrent();
+      while (pChildLayoutItem) {
+        CXFA_ContentLayoutItem* pContentItem =
+            pChildLayoutItem->AsContentLayoutItem();
+        if (!pContentItem) {
+          pChildLayoutItem = iterator.MoveToNext();
+          continue;
         }
-        default:
-          break;
+
+        XFA_AttributeValue presence =
+            pContentItem->GetFormNode()
+                ->JSObject()
+                ->TryEnum(XFA_Attribute::Presence, true)
+                .value_or(XFA_AttributeValue::Visible);
+        bool bVisible = presence == XFA_AttributeValue::Visible;
+        uint32_t dwRelevantChild =
+            GetRelevant(pContentItem->GetFormNode(), dwRelevant);
+        SyncContainer(pNotify, m_pLayoutProcessor, pContentItem,
+                      dwRelevantChild, bVisible, nPageIdx);
+        pChildLayoutItem = iterator.SkipChildrenAndMoveToNext();
       }
     }
   }
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.h b/xfa/fxfa/layout/cxfa_layoutpagemgr.h
index 90ac7d9..e41f73a 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.h
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.h
@@ -41,7 +41,7 @@
                                  bool bBefore,
                                  CXFA_Node*& pBreakLeaderNode,
                                  CXFA_Node*& pBreakTrailerNode,
-                                 bool& bCreatePage);
+                                 bool* pCreatePage);
   bool ProcessOverflow(CXFA_Node* pFormNode,
                        CXFA_Node*& pLeaderNode,
                        CXFA_Node*& pTrailerNode,
