diff --git a/src/html/m_layout.cpp b/src/html/m_layout.cpp
index 2451f2fb53..9b9b8d25de 100644
--- a/src/html/m_layout.cpp
+++ b/src/html/m_layout.cpp
@@ -108,7 +108,12 @@ bool wxHtmlPageBreakCell::AdjustPagebreak(int* pagebreak, wxArrayInt& known_page
// m_PosY is only the vertical offset from the parent. The pagebreak
// required here is the total page offset, so m_PosY must be added
// to the parent's offset and height.
- int total_height = m_PosY + GetParent()->GetPosY() + GetParent()->GetHeight();
+ int total_height = m_PosY;
+ for ( wxHtmlCell *parent = GetParent(); parent; parent = parent->GetParent() )
+ {
+ total_height += parent->GetPosY();
+ }
+
// Search the array of pagebreaks to see whether we've already set
// a pagebreak here. The standard bsearch() function is appropriate