[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

hyatt at apple.com hyatt at apple.com
Wed Dec 22 13:29:04 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit cc1737c85cb6222b5b1fee972e91ca090ffdd4f8
Author: hyatt at apple.com <hyatt at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Sep 16 20:20:02 2010 +0000

    https://bugs.webkit.org/show_bug.cgi?id=38402, paginate columns at layout time rather than at paint time.
    
    Reviewed by Darin Adler.
    
    WebCore:
    
    This patch adds support for column breaking at layout time rather than at paint time.  New variables have been
    added to LayoutState and to ColumnInfo to track column information while laying out.
    
    The basic idea behind this patch is to retain the columns' paint-time hackery of transforming one long vertical strip
    into multiple columns.  Now, however, layout is aware of the columns and will move objects up and down vertically in order
    to ensure they don't intersect a break.
    
    Many new tests added in fast/multicol and new results added for existing fast/multicol tests.
    
    * rendering/ColumnInfo.h:
    (WebCore::ColumnInfo::ColumnInfo):
    (WebCore::ColumnInfo::columnCount):
    (WebCore::ColumnInfo::columnHeight):
    (WebCore::ColumnInfo::setColumnCountAndHeight):
    (WebCore::ColumnInfo::setColumnHeight):
    (WebCore::ColumnInfo::updateMinimumColumnHeight):
    (WebCore::ColumnInfo::minimumColumnHeight):
    (WebCore::ColumnInfo::forcedBreaks):
    (WebCore::ColumnInfo::forcedBreakOffset):
    (WebCore::ColumnInfo::maximumDistanceBetweenForcedBreaks):
    (WebCore::ColumnInfo::clearForcedBreaks):
    (WebCore::ColumnInfo::addForcedBreak):
    * rendering/LayoutState.cpp:
    (WebCore::LayoutState::LayoutState):
    (WebCore::LayoutState::clearPaginationInformation):
    (WebCore::LayoutState::pageY):
    (WebCore::LayoutState::addForcedColumnBreak):
    * rendering/LayoutState.h:
    (WebCore::LayoutState::LayoutState):
    (WebCore::LayoutState::paginatingColumns):
    (WebCore::LayoutState::paginated):
    * rendering/RenderBlock.cpp:
    (WebCore::RenderBlock::RenderBlock):
    (WebCore::RenderBlock::~RenderBlock):
    (WebCore::RenderBlock::layoutBlock):
    (WebCore::RenderBlock::collapseMargins):
    (WebCore::RenderBlock::estimateVerticalPosition):
    (WebCore::RenderBlock::layoutBlockChild):
    (WebCore::RenderBlock::layoutPositionedObjects):
    (WebCore::RenderBlock::paintColumnRules):
    (WebCore::RenderBlock::paintColumnContents):
    (WebCore::RenderBlock::paintChildren):
    (WebCore::RenderBlock::insertFloatingObject):
    (WebCore::RenderBlock::removeFloatingObjects):
    (WebCore::RenderBlock::positionNewFloats):
    (WebCore::RenderBlock::positionNewFloatOnLine):
    (WebCore::RenderBlock::lowestPosition):
    (WebCore::RenderBlock::rightmostPosition):
    (WebCore::RenderBlock::leftmostPosition):
    (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):
    (WebCore::RenderBlock::markDescendantBlocksAndLinesForLayout):
    (WebCore::RenderBlock::hitTestColumns):
    (WebCore::RenderBlock::setDesiredColumnCountAndWidth):
    (WebCore::RenderBlock::columnCount):
    (WebCore::RenderBlock::columnRectAt):
    (WebCore::RenderBlock::layoutColumns):
    (WebCore::RenderBlock::adjustPointToColumnContents):
    (WebCore::RenderBlock::adjustRectForColumns):
    (WebCore::RenderBlock::adjustForColumns):
    (WebCore::RenderBlock::setMaxTopMargins):
    (WebCore::RenderBlock::setMaxBottomMargins):
    (WebCore::RenderBlock::setPaginationStrut):
    (WebCore::RenderBlock::setPageY):
    (WebCore::RenderBlock::nextPageTop):
    (WebCore::inNormalFlow):
    (WebCore::RenderBlock::applyBeforeBreak):
    (WebCore::RenderBlock::applyAfterBreak):
    (WebCore::RenderBlock::adjustForUnsplittableChild):
    (WebCore::RenderBlock::adjustLinePositionForPagination):
    * rendering/RenderBlock.h:
    (WebCore::RenderBlock::paginationStrut):
    (WebCore::RenderBlock::pageY):
    (WebCore::RenderBlock::maxTopPosMargin):
    (WebCore::RenderBlock::maxTopNegMargin):
    (WebCore::RenderBlock::maxBottomPosMargin):
    (WebCore::RenderBlock::maxBottomNegMargin):
    (WebCore::RenderBlock::initMaxMarginValues):
    (WebCore::RenderBlock::FloatingObject::FloatingObject):
    (WebCore::RenderBlock::FloatingObject::type):
    (WebCore::RenderBlock::RenderBlockRareData::RenderBlockRareData):
    * rendering/RenderBlockLineLayout.cpp:
    (WebCore::RenderBlock::layoutInlineChildren):
    (WebCore::RenderBlock::determineStartPosition):
    (WebCore::RenderBlock::skipLeadingWhitespace):
    (WebCore::RenderBlock::findNextLineBreak):
    * rendering/RenderBox.cpp:
    (WebCore::RenderBox::mapLocalToContainer):
    (WebCore::RenderBox::computeRectForRepaint):
    (WebCore::RenderBox::markDescendantBlocksAndLinesForLayout):
    * rendering/RenderBox.h:
    * rendering/RenderFlexibleBox.cpp:
    (WebCore::RenderFlexibleBox::layoutBlock):
    (WebCore::RenderFlexibleBox::layoutHorizontalBox):
    (WebCore::RenderFlexibleBox::layoutVerticalBox):
    * rendering/RenderFlexibleBox.h:
    * rendering/RenderInline.cpp:
    (WebCore::RenderInline::computeRectForRepaint):
    (WebCore::RenderInline::mapLocalToContainer):
    * rendering/RenderLayer.cpp:
    (WebCore::RenderLayer::updatePagination):
    (WebCore::RenderLayer::paintChildLayerIntoColumns):
    (WebCore::RenderLayer::hitTestChildLayerColumns):
    * rendering/RenderLineBoxList.cpp:
    (WebCore::RenderLineBoxList::paint):
    * rendering/RenderTable.cpp:
    (WebCore::RenderTable::RenderTable):
    (WebCore::RenderTable::layout):
    * rendering/RenderTable.h:
    * rendering/RenderTableRow.cpp:
    (WebCore::RenderTableRow::layout):
    * rendering/RenderTableSection.cpp:
    (WebCore::RenderTableSection::layoutRows):
    * rendering/RenderView.cpp:
    (WebCore::RenderView::RenderView):
    (WebCore::RenderView::pushLayoutState):
    * rendering/RenderView.h:
    (WebCore::RenderView::setTruncatedAt):
    (WebCore::RenderView::pushLayoutState):
    (WebCore::RenderView::popLayoutState):
    (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
    (WebCore::LayoutStateMaintainer::push):
    * rendering/RootInlineBox.h:
    (WebCore::RootInlineBox::RootInlineBox):
    (WebCore::RootInlineBox::paginationStrut):
    (WebCore::RootInlineBox::setPaginationStrut):
    
    LayoutTests:
    
    Add many new multicol layout tests that demonstrate new pagination features.
    
    * fast/multicol/border-padding-pagination.html: Added.
    * fast/multicol/client-rects-expected.checksum:
    * fast/multicol/client-rects-expected.png:
    * fast/multicol/client-rects-expected.txt:
    * fast/multicol/column-break-with-balancing.html: Added.
    * fast/multicol/float-paginate-complex.html: Added.
    * fast/multicol/float-paginate.html:
    * fast/multicol/float-truncation.html:
    * fast/multicol/margin-collapse.html: Added.
    * fast/multicol/max-height-columns-block.html: Added.
    * fast/multicol/positioned-split.html: Added.
    * fast/multicol/shadow-breaking.html: Added.
    * fast/multicol/single-line-expected.checksum:
    * fast/multicol/single-line-expected.png:
    * fast/multicol/table-margin-collapse.html: Added.
    * fast/multicol/table-vertical-align.html: Added.
    * fast/multicol/unsplittable-inline-block.html: Added.
    * platform/mac/fast/multicol/border-padding-pagination-expected.checksum: Added.
    * platform/mac/fast/multicol/border-padding-pagination-expected.png: Added.
    * platform/mac/fast/multicol/border-padding-pagination-expected.txt: Added.
    * platform/mac/fast/multicol/column-break-with-balancing-expected.checksum: Added.
    * platform/mac/fast/multicol/column-break-with-balancing-expected.png: Added.
    * platform/mac/fast/multicol/column-break-with-balancing-expected.txt: Added.
    * platform/mac/fast/multicol/column-count-with-rules-expected.checksum: Added.
    * platform/mac/fast/multicol/column-count-with-rules-expected.png: Added.
    * platform/mac/fast/multicol/column-count-with-rules-expected.txt:
    * platform/mac/fast/multicol/column-rules-expected.checksum:
    * platform/mac/fast/multicol/column-rules-expected.png:
    * platform/mac/fast/multicol/column-rules-expected.txt:
    * platform/mac/fast/multicol/column-rules-stacking-expected.checksum:
    * platform/mac/fast/multicol/column-rules-stacking-expected.png:
    * platform/mac/fast/multicol/columns-shorthand-parsing-expected.checksum:
    * platform/mac/fast/multicol/columns-shorthand-parsing-expected.png:
    * platform/mac/fast/multicol/float-avoidance-expected.checksum:
    * platform/mac/fast/multicol/float-avoidance-expected.png:
    * platform/mac/fast/multicol/float-avoidance-expected.txt:
    * platform/mac/fast/multicol/float-multicol-expected.checksum:
    * platform/mac/fast/multicol/float-multicol-expected.png:
    * platform/mac/fast/multicol/float-multicol-expected.txt:
    * platform/mac/fast/multicol/float-paginate-complex-expected.checksum: Added.
    * platform/mac/fast/multicol/float-paginate-complex-expected.png: Added.
    * platform/mac/fast/multicol/float-paginate-complex-expected.txt: Added.
    * platform/mac/fast/multicol/float-paginate-expected.txt:
    * platform/mac/fast/multicol/layers-in-multicol-expected.checksum:
    * platform/mac/fast/multicol/layers-in-multicol-expected.png:
    * platform/mac/fast/multicol/layers-in-multicol-expected.txt:
    * platform/mac/fast/multicol/margin-collapse-expected.checksum: Added.
    * platform/mac/fast/multicol/margin-collapse-expected.png: Added.
    * platform/mac/fast/multicol/margin-collapse-expected.txt: Added.
    * platform/mac/fast/multicol/max-height-columns-block-expected.checksum: Added.
    * platform/mac/fast/multicol/max-height-columns-block-expected.png: Added.
    * platform/mac/fast/multicol/max-height-columns-block-expected.txt: Added.
    * platform/mac/fast/multicol/nested-columns-expected.checksum:
    * platform/mac/fast/multicol/nested-columns-expected.png:
    * platform/mac/fast/multicol/nested-columns-expected.txt:
    * platform/mac/fast/multicol/paginate-block-replaced-expected.txt:
    * platform/mac/fast/multicol/positioned-split-expected.checksum: Added.
    * platform/mac/fast/multicol/positioned-split-expected.png: Added.
    * platform/mac/fast/multicol/positioned-split-expected.txt: Added.
    * platform/mac/fast/multicol/positioned-with-constrained-height-expected.checksum:
    * platform/mac/fast/multicol/positioned-with-constrained-height-expected.png:
    * platform/mac/fast/multicol/positioned-with-constrained-height-expected.txt:
    * platform/mac/fast/multicol/shadow-breaking-expected.checksum: Added.
    * platform/mac/fast/multicol/shadow-breaking-expected.png: Added.
    * platform/mac/fast/multicol/shadow-breaking-expected.txt: Added.
    * platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.checksum:
    * platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.png:
    * platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.txt:
    * platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.checksum:
    * platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.png:
    * platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.txt:
    * platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.checksum:
    * platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.png:
    * platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.txt:
    * platform/mac/fast/multicol/span/span-as-immediate-columns-child-expected.txt:
    * platform/mac/fast/multicol/span/span-as-immediate-columns-child-removal-expected.txt:
    * platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.checksum:
    * platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.png:
    * platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.txt:
    * platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.checksum:
    * platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.png:
    * platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.txt:
    * platform/mac/fast/multicol/table-margin-collapse-expected.checksum: Added.
    * platform/mac/fast/multicol/table-margin-collapse-expected.png: Added.
    * platform/mac/fast/multicol/table-margin-collapse-expected.txt: Added.
    * platform/mac/fast/multicol/table-vertical-align-expected.checksum: Added.
    * platform/mac/fast/multicol/table-vertical-align-expected.png: Added.
    * platform/mac/fast/multicol/table-vertical-align-expected.txt: Added.
    * platform/mac/fast/multicol/unsplittable-inline-block-expected.checksum: Added.
    * platform/mac/fast/multicol/unsplittable-inline-block-expected.png: Added.
    * platform/mac/fast/multicol/unsplittable-inline-block-expected.txt: Added.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@67660 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index a72bd8a..b83d83d 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,103 @@
+2010-09-15  David Hyatt  <hyatt at apple.com>
+
+        Reviewed by Darin Adler.
+
+        https://bugs.webkit.org/show_bug.cgi?id=38402, paginate columns at layout time rather than at paint time.
+
+        Add many new multicol layout tests that demonstrate new pagination features.
+
+        * fast/multicol/border-padding-pagination.html: Added.
+        * fast/multicol/client-rects-expected.checksum:
+        * fast/multicol/client-rects-expected.png:
+        * fast/multicol/client-rects-expected.txt:
+        * fast/multicol/column-break-with-balancing.html: Added.
+        * fast/multicol/float-paginate-complex.html: Added.
+        * fast/multicol/float-paginate.html:
+        * fast/multicol/float-truncation.html:
+        * fast/multicol/margin-collapse.html: Added.
+        * fast/multicol/max-height-columns-block.html: Added.
+        * fast/multicol/positioned-split.html: Added.
+        * fast/multicol/shadow-breaking.html: Added.
+        * fast/multicol/single-line-expected.checksum:
+        * fast/multicol/single-line-expected.png:
+        * fast/multicol/table-margin-collapse.html: Added.
+        * fast/multicol/table-vertical-align.html: Added.
+        * fast/multicol/unsplittable-inline-block.html: Added.
+        * platform/mac/fast/multicol/border-padding-pagination-expected.checksum: Added.
+        * platform/mac/fast/multicol/border-padding-pagination-expected.png: Added.
+        * platform/mac/fast/multicol/border-padding-pagination-expected.txt: Added.
+        * platform/mac/fast/multicol/column-break-with-balancing-expected.checksum: Added.
+        * platform/mac/fast/multicol/column-break-with-balancing-expected.png: Added.
+        * platform/mac/fast/multicol/column-break-with-balancing-expected.txt: Added.
+        * platform/mac/fast/multicol/column-count-with-rules-expected.checksum: Added.
+        * platform/mac/fast/multicol/column-count-with-rules-expected.png: Added.
+        * platform/mac/fast/multicol/column-count-with-rules-expected.txt:
+        * platform/mac/fast/multicol/column-rules-expected.checksum:
+        * platform/mac/fast/multicol/column-rules-expected.png:
+        * platform/mac/fast/multicol/column-rules-expected.txt:
+        * platform/mac/fast/multicol/column-rules-stacking-expected.checksum:
+        * platform/mac/fast/multicol/column-rules-stacking-expected.png:
+        * platform/mac/fast/multicol/columns-shorthand-parsing-expected.checksum:
+        * platform/mac/fast/multicol/columns-shorthand-parsing-expected.png:
+        * platform/mac/fast/multicol/float-avoidance-expected.checksum:
+        * platform/mac/fast/multicol/float-avoidance-expected.png:
+        * platform/mac/fast/multicol/float-avoidance-expected.txt:
+        * platform/mac/fast/multicol/float-multicol-expected.checksum:
+        * platform/mac/fast/multicol/float-multicol-expected.png:
+        * platform/mac/fast/multicol/float-multicol-expected.txt:
+        * platform/mac/fast/multicol/float-paginate-complex-expected.checksum: Added.
+        * platform/mac/fast/multicol/float-paginate-complex-expected.png: Added.
+        * platform/mac/fast/multicol/float-paginate-complex-expected.txt: Added.
+        * platform/mac/fast/multicol/float-paginate-expected.txt:
+        * platform/mac/fast/multicol/layers-in-multicol-expected.checksum:
+        * platform/mac/fast/multicol/layers-in-multicol-expected.png:
+        * platform/mac/fast/multicol/layers-in-multicol-expected.txt:
+        * platform/mac/fast/multicol/margin-collapse-expected.checksum: Added.
+        * platform/mac/fast/multicol/margin-collapse-expected.png: Added.
+        * platform/mac/fast/multicol/margin-collapse-expected.txt: Added.
+        * platform/mac/fast/multicol/max-height-columns-block-expected.checksum: Added.
+        * platform/mac/fast/multicol/max-height-columns-block-expected.png: Added.
+        * platform/mac/fast/multicol/max-height-columns-block-expected.txt: Added.
+        * platform/mac/fast/multicol/nested-columns-expected.checksum:
+        * platform/mac/fast/multicol/nested-columns-expected.png:
+        * platform/mac/fast/multicol/nested-columns-expected.txt:
+        * platform/mac/fast/multicol/paginate-block-replaced-expected.txt:
+        * platform/mac/fast/multicol/positioned-split-expected.checksum: Added.
+        * platform/mac/fast/multicol/positioned-split-expected.png: Added.
+        * platform/mac/fast/multicol/positioned-split-expected.txt: Added.
+        * platform/mac/fast/multicol/positioned-with-constrained-height-expected.checksum:
+        * platform/mac/fast/multicol/positioned-with-constrained-height-expected.png:
+        * platform/mac/fast/multicol/positioned-with-constrained-height-expected.txt:
+        * platform/mac/fast/multicol/shadow-breaking-expected.checksum: Added.
+        * platform/mac/fast/multicol/shadow-breaking-expected.png: Added.
+        * platform/mac/fast/multicol/shadow-breaking-expected.txt: Added.
+        * platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.checksum:
+        * platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.png:
+        * platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.txt:
+        * platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.checksum:
+        * platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.png:
+        * platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.txt:
+        * platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.checksum:
+        * platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.png:
+        * platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.txt:
+        * platform/mac/fast/multicol/span/span-as-immediate-columns-child-expected.txt:
+        * platform/mac/fast/multicol/span/span-as-immediate-columns-child-removal-expected.txt:
+        * platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.checksum:
+        * platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.png:
+        * platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.txt:
+        * platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.checksum:
+        * platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.png:
+        * platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.txt:
+        * platform/mac/fast/multicol/table-margin-collapse-expected.checksum: Added.
+        * platform/mac/fast/multicol/table-margin-collapse-expected.png: Added.
+        * platform/mac/fast/multicol/table-margin-collapse-expected.txt: Added.
+        * platform/mac/fast/multicol/table-vertical-align-expected.checksum: Added.
+        * platform/mac/fast/multicol/table-vertical-align-expected.png: Added.
+        * platform/mac/fast/multicol/table-vertical-align-expected.txt: Added.
+        * platform/mac/fast/multicol/unsplittable-inline-block-expected.checksum: Added.
+        * platform/mac/fast/multicol/unsplittable-inline-block-expected.png: Added.
+        * platform/mac/fast/multicol/unsplittable-inline-block-expected.txt: Added.
+
 2010-09-16  Darin Adler  <darin at apple.com>
 
         Mac results for recently-added test.
diff --git a/LayoutTests/fast/dom/Element/getBoundingClientRect-expected.txt b/LayoutTests/fast/dom/Element/getBoundingClientRect-expected.txt
index 2e370b0..a6c80a6 100644
--- a/LayoutTests/fast/dom/Element/getBoundingClientRect-expected.txt
+++ b/LayoutTests/fast/dom/Element/getBoundingClientRect-expected.txt
@@ -62,14 +62,14 @@ Client bounding rect for #5
 testRect.top 662
 testRect.left 8
 testRect.width 300
-testRect.height 234
-testRect.bottom 896
+testRect.height 240
+testRect.bottom 902
 testRect.right 308
 
 PASS testRect.top is 662
 PASS testRect.left is 8
 PASS testRect.width is 300
-PASS testRect.height is 234
+PASS testRect.height is 240
 PASS testRect.bottom is testRect.top + testRect.height
 PASS testRect.right is testRect.left + testRect.width
 
@@ -77,14 +77,14 @@ Client bounding rect for #6
 Known failure. Skipping.
 
 Client bounding rect for #7
-testRect.top 1230
+testRect.top 1236
 testRect.left 8
 testRect.width 299
 testRect.height 180
-testRect.bottom 1410
+testRect.bottom 1416
 testRect.right 307
 
-PASS testRect.top is 1230
+PASS testRect.top is 1236
 PASS testRect.left is 8
 PASS testRect.width is 299
 PASS testRect.height is 180
@@ -92,14 +92,14 @@ PASS testRect.bottom is testRect.top + testRect.height
 PASS testRect.right is testRect.left + testRect.width
 
 Client bounding rect for #8
-testRect.top 1460
+testRect.top 1466
 testRect.left 8
 testRect.width 300
 testRect.height 46
-testRect.bottom 1506
+testRect.bottom 1512
 testRect.right 308
 
-PASS testRect.top is 1460
+PASS testRect.top is 1466
 PASS testRect.left is 8
 PASS testRect.width is 300
 PASS testRect.height is 46
@@ -107,14 +107,14 @@ PASS testRect.bottom is testRect.top + testRect.height
 PASS testRect.right is testRect.left + testRect.width
 
 Client bounding rect for #9
-testRect.top 1556
+testRect.top 1562
 testRect.left 8
 testRect.width 300
 testRect.height 64
-testRect.bottom 1620
+testRect.bottom 1626
 testRect.right 308
 
-PASS testRect.top is 1556
+PASS testRect.top is 1562
 PASS testRect.left is 8
 PASS testRect.width is 300
 PASS testRect.height is 64
@@ -122,14 +122,14 @@ PASS testRect.bottom is testRect.top + testRect.height
 PASS testRect.right is testRect.left + testRect.width
 
 Client bounding rect for #10
-testRect.top 1672
+testRect.top 1678
 testRect.left 8
 testRect.width 300
 testRect.height 20
-testRect.bottom 1692
+testRect.bottom 1698
 testRect.right 308
 
-PASS testRect.top is 1672
+PASS testRect.top is 1678
 PASS testRect.left is 8
 PASS testRect.width is 300
 PASS testRect.height is 20
@@ -137,14 +137,14 @@ PASS testRect.bottom is testRect.top + testRect.height
 PASS testRect.right is testRect.left + testRect.width
 
 Client bounding rect for #11
-testRect.top 1768
+testRect.top 1774
 testRect.left 10
 testRect.width 147
 testRect.height 20
-testRect.bottom 1788
+testRect.bottom 1794
 testRect.right 157
 
-PASS testRect.top is 1768
+PASS testRect.top is 1774
 PASS testRect.left is 10
 PASS testRect.width is 147
 PASS testRect.height is 20
@@ -152,14 +152,14 @@ PASS testRect.bottom is testRect.top + testRect.height
 PASS testRect.right is testRect.left + testRect.width
 
 Client bounding rect for #12
-testRect.top 1862
+testRect.top 1868
 testRect.left 8
 testRect.width 100
 testRect.height 100
-testRect.bottom 1962
+testRect.bottom 1968
 testRect.right 108
 
-PASS testRect.top is 1862
+PASS testRect.top is 1868
 PASS testRect.left is 8
 PASS testRect.width is 100
 PASS testRect.height is 100
@@ -167,14 +167,14 @@ PASS testRect.bottom is testRect.top + testRect.height
 PASS testRect.right is testRect.left + testRect.width
 
 Client bounding rect for #13
-testRect.top 2098
+testRect.top 2104
 testRect.left 8
 testRect.width 180
 testRect.height 18
-testRect.bottom 2116
+testRect.bottom 2122
 testRect.right 188
 
-PASS testRect.top is 2098
+PASS testRect.top is 2104
 PASS testRect.left is 8
 PASS testRect.width is 180
 PASS testRect.height is 18
@@ -182,14 +182,14 @@ PASS testRect.bottom is testRect.top + testRect.height
 PASS testRect.right is testRect.left + testRect.width
 
 Client bounding rect for #14
-testRect.top 2166
+testRect.top 2172
 testRect.left 8
 testRect.width 300
 testRect.height 236
-testRect.bottom 2402
+testRect.bottom 2408
 testRect.right 308
 
-PASS testRect.top is 2166
+PASS testRect.top is 2172
 PASS testRect.left is 8
 FAIL testRect.width should be 200. Was 300.
 PASS testRect.height is 236
@@ -197,14 +197,14 @@ PASS testRect.bottom is testRect.top + testRect.height
 PASS testRect.right is testRect.left + testRect.width
 
 Client bounding rect for #15
-testRect.top 2452
+testRect.top 2458
 testRect.left 8
 testRect.width 0
 testRect.height 0
-testRect.bottom 2452
+testRect.bottom 2458
 testRect.right 8
 
-PASS testRect.top is 2452
+PASS testRect.top is 2458
 PASS testRect.left is 8
 PASS testRect.width is 0
 PASS testRect.height is 0
diff --git a/LayoutTests/fast/dom/Element/getBoundingClientRect.html b/LayoutTests/fast/dom/Element/getBoundingClientRect.html
index 98da9cc..d5ee008 100644
--- a/LayoutTests/fast/dom/Element/getBoundingClientRect.html
+++ b/LayoutTests/fast/dom/Element/getBoundingClientRect.html
@@ -138,17 +138,17 @@
         /*2*/  { top: 192, left: 8, width: 320, height: 120 },
         /*3*/  { top: 362, left: 18, width: 300, height: 100 },
         /*4*/  { top: 491, left: 37, width: 142, height: 142 },
-        /*5*/  { top: 662, left: 8, width: 300, height: 234 },
+        /*5*/  { top: 662, left: 8, width: 300, height: 240 },
         /*6*/  { top: fail, left: fail, width: fail, height: fail },
-        /*7*/  { top: 1230, left: 8, width: 299, height: 180 },
-        /*8*/  { top: 1460, left: 8, width: 300, height: 46 },
-        /*9*/  { top: 1556, left: 8, width: 300, height: 64 },
-        /*10*/ { top: 1672, left: 8, width: 300, height: 20 },
-        /*11*/ { top: 1768, left: 10, width: 147, height: 20 },
-        /*12*/ { top: 1862, left: 8, width: 100, height: 100 },
-        /*13*/ { top: 2098, left: 8, width: 180, height: 18 },
-        /*14*/ { top: 2166, left: 8, width: 200, height: 236 },
-        /*15*/ { top: 2452, left: 8, width: 0, height: 0 }
+        /*7*/  { top: 1236, left: 8, width: 299, height: 180 },
+        /*8*/  { top: 1466, left: 8, width: 300, height: 46 },
+        /*9*/  { top: 1562, left: 8, width: 300, height: 64 },
+        /*10*/ { top: 1678, left: 8, width: 300, height: 20 },
+        /*11*/ { top: 1774, left: 10, width: 147, height: 20 },
+        /*12*/ { top: 1868, left: 8, width: 100, height: 100 },
+        /*13*/ { top: 2104, left: 8, width: 180, height: 18 },
+        /*14*/ { top: 2172, left: 8, width: 200, height: 236 },
+        /*15*/ { top: 2458, left: 8, width: 0, height: 0 }
     ];
 
     function test(number, element)
diff --git a/LayoutTests/fast/multicol/border-padding-pagination.html b/LayoutTests/fast/multicol/border-padding-pagination.html
new file mode 100644
index 0000000..55ea64b
--- /dev/null
+++ b/LayoutTests/fast/multicol/border-padding-pagination.html
@@ -0,0 +1,9 @@
+<html>
+<body>
+<div style="-webkit-column-count:2;-moz-column-count:2; border:2px solid maroon">
+<div style="height:110px"></div>
+<div style="background-color:lime; border:2px solid black; width:375px; ">
+<div style="margin: 0 10px; background-color:green; border: 2px solid blue">
+<span style="font-size:64px">In 2nd column</span>
+</div>
+</div>
diff --git a/LayoutTests/fast/multicol/client-rects-expected.checksum b/LayoutTests/fast/multicol/client-rects-expected.checksum
index 38cb508..8e5f700 100644
--- a/LayoutTests/fast/multicol/client-rects-expected.checksum
+++ b/LayoutTests/fast/multicol/client-rects-expected.checksum
@@ -1 +1 @@
-a51624ee892bd6b400383f47dc5723f5
\ No newline at end of file
+bbfd4cc305b510accdd1452284d8347d
\ No newline at end of file
diff --git a/LayoutTests/fast/multicol/client-rects-expected.png b/LayoutTests/fast/multicol/client-rects-expected.png
index 324d62e..afc106d 100644
Binary files a/LayoutTests/fast/multicol/client-rects-expected.png and b/LayoutTests/fast/multicol/client-rects-expected.png differ
diff --git a/LayoutTests/fast/multicol/client-rects-expected.txt b/LayoutTests/fast/multicol/client-rects-expected.txt
index 675858e..1633754 100644
--- a/LayoutTests/fast/multicol/client-rects-expected.txt
+++ b/LayoutTests/fast/multicol/client-rects-expected.txt
@@ -71,7 +71,7 @@ layer at (8,483) size 136x76
       RenderImage {IMG} at (0,25) size 25x25 [bgcolor=#ADD8E6]
 layer at (8,609) size 136x76
   RenderBlock {DIV} at (0,601) size 136x76 [color=#ADD8E6] [border: (3px solid #000000)]
-    RenderBlock {DIV} at (13,53) size 25x25 [bgcolor=#ADD8E6]
+    RenderBlock {DIV} at (13,13) size 25x25 [bgcolor=#ADD8E6]
 layer at (21,91) size 25x25
   RenderBlock (positioned) {DIV} at (21,91) size 25x25 [border: (3px solid #0000FF7F)]
 layer at (81,66) size 25x25
@@ -96,7 +96,7 @@ layer at (81,349) size 25x25
   RenderBlock (positioned) {DIV} at (81,349) size 25x25 [border: (3px solid #0000FF7F)]
 layer at (83,412) size 25x25
   RenderBlock (positioned) {DIV} at (83,412) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (81,521) size 25x25
-  RenderBlock (positioned) {DIV} at (81,521) size 25x25 [border: (3px solid #0000FF7F)]
-layer at (81,612) size 25x25
-  RenderBlock (positioned) {DIV} at (81,612) size 25x25 [border: (3px solid #0000FF7F)]
+layer at (81,496) size 25x25
+  RenderBlock (positioned) {DIV} at (81,496) size 25x25 [border: (3px solid #0000FF7F)]
+layer at (21,622) size 25x25
+  RenderBlock (positioned) {DIV} at (21,622) size 25x25 [border: (3px solid #0000FF7F)]
diff --git a/LayoutTests/fast/multicol/column-break-with-balancing.html b/LayoutTests/fast/multicol/column-break-with-balancing.html
new file mode 100644
index 0000000..bdf722b
--- /dev/null
+++ b/LayoutTests/fast/multicol/column-break-with-balancing.html
@@ -0,0 +1,66 @@
+<html>
+<div style="-webkit-column-count:2; border:5px solid blue">
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+<div style="-webkit-column-break-before: always">
+This text should be in the second column.<br>
+This text should be in the second column.<br>
+This text should be in the second column.<br>
+This text should be in the second column.<br>
+</div>
+</div>
+
+<div style="margin-top:1em; -webkit-column-count:2; border:5px solid blue">
+
+This text should be in the first column.<br>
+This text should be in the first column.<br>
+This text should be in the first column.<br>
+This text should be in the first column.<br>
+
+<div style="-webkit-column-break-before: always">
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+</div>
diff --git a/LayoutTests/fast/multicol/float-paginate-complex.html b/LayoutTests/fast/multicol/float-paginate-complex.html
new file mode 100644
index 0000000..02b024c
--- /dev/null
+++ b/LayoutTests/fast/multicol/float-paginate-complex.html
@@ -0,0 +1,48 @@
+<div style="-webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; height:400px">
+This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>
+<p><span style="float:left;font-size:128px;">T</span>
+his is some text.<br>
+This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br></p>
+</div>
+
+<div style="margin-top:1em; -webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; height:400px">
+This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>
+<p><img style="float:left;width:100px;height:100px;background-color:green"><img style="float:right;width:100px;height:200px;background-color:green">
+This is some text<br>
+This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br></p>
+</div>
+
+<div style="margin-top:1em; -webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; height:400px">
+<img style="float:left;background-color:green; width:300px;height:390px">
+Longer text designed to test float and wrapping behavior. Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+</div>
+
+<div style="margin-top:1em; -webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; height:400px">
+<img style="float:left;background-color:blue; width:100%;height:380px">
+<span style="font-size:24px"><img style="float:left;background-color:green;height:20px;width:100px">
+
+Longer text designed <img style="float:right;background-color:green;height:20px;width:100px">to test float and wrapping behavior. Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+</span>
+</div>
diff --git a/LayoutTests/fast/multicol/float-paginate.html b/LayoutTests/fast/multicol/float-paginate.html
index bf49323..17bb36b 100644
--- a/LayoutTests/fast/multicol/float-paginate.html
+++ b/LayoutTests/fast/multicol/float-paginate.html
@@ -1,4 +1,4 @@
-<div style="-webkit-column-width:300px;border:2px solid black; height:400px">
+<div style="-webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; height:400px">
 This is some text.<br>
 This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
 This is some text.<br>This is some text.<br>This is some text.<br>
diff --git a/LayoutTests/fast/multicol/float-truncation.html b/LayoutTests/fast/multicol/float-truncation.html
index db06140..c75a7b7 100644
--- a/LayoutTests/fast/multicol/float-truncation.html
+++ b/LayoutTests/fast/multicol/float-truncation.html
@@ -34,7 +34,7 @@
         </div>
         text runs here next to the float
     </div>
-    <!-- In this case, the float forces an early column break. -->
+    <!-- In this case, the float paginates after its second line. -->
     <div class="columns" style="height: 70px;">
         one line two lines three lines
         <div class="float" id="f3">
@@ -42,7 +42,7 @@
         </div>
         text runs here next to the float
     </div>
-    <!-- In this case, the float forces an early column break. -->
+    <!-- In this case, the float paginates after its first line. -->
     <div class="columns" style="height: 70px;">
         one line two lines three lines and some more
         <div class="float" id="f4">
@@ -50,8 +50,7 @@
         </div>
         text runs here next to the float
     </div>
-    <!-- In this case, the float is too tall to fit anyway, so it doesn't
-         affect column breaks. -->
+    <!-- In this case, the float paginates after its third line. -->
     <div class="columns" style="height: 45px;">
         one line
         <div class="float" id="f5">
@@ -76,8 +75,8 @@
     var tests = [
         ["f1", 0, 45],
         ["f2", 0, 45],
-        ["f3", 100, 5],
-        ["f4", 100, 5],
+        ["f3", 0, 45],
+        ["f4", 0, 55],
         ["f5", 0, 15]
     ];
 
diff --git a/LayoutTests/fast/multicol/margin-collapse.html b/LayoutTests/fast/multicol/margin-collapse.html
new file mode 100644
index 0000000..94f4515
--- /dev/null
+++ b/LayoutTests/fast/multicol/margin-collapse.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<style>
+.columns { -webkit-column-count:2; -moz-column-count: 2; column-count: 2; border:2px solid black; height:300px }
+.block { height:200px; background-color:purple; }
+</style>
+</head>
+<body>
+The two purple rectangles below should both be at the top of their columns.  If one is lower than the other, than the test has failed.
+<div class="columns">
+<div class="block" style="margin-bottom:200px"></div>
+<div class="block"></div>
+</div>
diff --git a/LayoutTests/fast/multicol/max-height-columns-block.html b/LayoutTests/fast/multicol/max-height-columns-block.html
new file mode 100644
index 0000000..856a915
--- /dev/null
+++ b/LayoutTests/fast/multicol/max-height-columns-block.html
@@ -0,0 +1,9 @@
+<html>
+<body>
+This is capturing current behavior, but it's not clear that it is correct.  It's not clear if max-height on a columns block constitutes a
+constraint on the columns or not.  You obviously begin trying to balance, but only run into the constraint once the balanced columns exceed
+the max-height.  It's not clear that you should suddenly shift to a fill.  Our current behavior (which matches Firefox) is to just overflow
+without changing from balance to fill.
+
+<div style="-webkit-column-count:5; -moz-column-count:5; max-height:60px;border:2px solid black; font-size:24px; width:400px">
+This is some text<br>This is some text<br>This is some text<br>This is some text<br>This is some text<br>
\ No newline at end of file
diff --git a/LayoutTests/fast/multicol/positioned-split.html b/LayoutTests/fast/multicol/positioned-split.html
new file mode 100644
index 0000000..36e86de
--- /dev/null
+++ b/LayoutTests/fast/multicol/positioned-split.html
@@ -0,0 +1,13 @@
+<div style="-webkit-column-count:2; border:2px solid black; height:300px">
+<div style="height:250px"></div>
+<div style="position:relative">
+<div style="position:absolute;height:200px;width:300px;background-color:lightgray">
+This text should paginate across the columns.<br>
+This text should paginate across the columns.<br>
+This text should paginate across the columns.<br>
+This text should paginate across the columns.<br>
+This text should paginate across the columns.<br>
+</div>
+</div>
+<div style="height:250px"></div>
+</div>
diff --git a/LayoutTests/fast/multicol/shadow-breaking.html b/LayoutTests/fast/multicol/shadow-breaking.html
new file mode 100644
index 0000000..befec9e
--- /dev/null
+++ b/LayoutTests/fast/multicol/shadow-breaking.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<style>
+                        p {
+				position:absolute;
+                                border:2px solid black;
+				max-width:420px;
+				-webkit-column-gap:20px;
+				-webkit-column-width:200px;
+				-webkit-column-rule:1px dotted white;
+				font-size:16px;
+				top:20px;
+				left:20px;
+				text-align:justify;
+                                font-weight:bold;
+				text-shadow:1px 1px 10px black;
+			}
+			
+			p:first-letter {
+				font-size:36px;
+				margin-right:4px;
+				margin-bottom:-6px;
+				float:left;
+			}
+			
+			
+			
+		</style>
+	</head>
+	
+	<body>
+		<div class="mag">
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras pharetra mollis pharetra. Suspendisse lacinia orci et felis tristique sit amet semper massa tempus. Suspendisse consectetur tempor pulvinar. Proin dui eros, ultricies vel malesuada vel, tempor at ante. Nam eget nisl dui. Donec molestie lectus a nunc scelerisque blandit. Nam non ligula massa, sed suscipit turpis. Etiam eget ligula sit amet turpis venenatis dictum in eleifend augue. Duis tellus lectus, volutpat et adipiscing a, pellentesque eu metus. Aenean suscipit congue mauris at gravida. Integer lectus ligula, consectetur sit amet venenatis id, scelerisque eget nisl. Nunc dapibus posuere risus, vitae tempor nibh iaculis et.</p>
+		</div>
+	</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/multicol/single-line-expected.checksum b/LayoutTests/fast/multicol/single-line-expected.checksum
index 268a722..1f1e192 100644
--- a/LayoutTests/fast/multicol/single-line-expected.checksum
+++ b/LayoutTests/fast/multicol/single-line-expected.checksum
@@ -1 +1 @@
-0f84ceccbd6cc6e8ebba290abfedc025
\ No newline at end of file
+dcad2bed488890caee2d78257a4b9f8c
\ No newline at end of file
diff --git a/LayoutTests/fast/multicol/single-line-expected.png b/LayoutTests/fast/multicol/single-line-expected.png
index 9780683..4b1b9d2 100644
Binary files a/LayoutTests/fast/multicol/single-line-expected.png and b/LayoutTests/fast/multicol/single-line-expected.png differ
diff --git a/LayoutTests/fast/multicol/table-margin-collapse.html b/LayoutTests/fast/multicol/table-margin-collapse.html
new file mode 100644
index 0000000..73a79f3
--- /dev/null
+++ b/LayoutTests/fast/multicol/table-margin-collapse.html
@@ -0,0 +1,22 @@
+<html>
+<head>
+<style>
+.columns { -webkit-column-count:2; -moz-column-count: 2; column-count: 2; border:2px solid black; height:300px }
+.block { height:200px; background-color:purple; }
+</style>
+</head>
+<body>
+The four rectangles below should both be at the top of their columns.  If one is lower than the other, than the test has failed.  The pattern in each
+column should be the same (orange/yellow).
+<div class="columns">
+<table cellpadding=0 cellspacing=0 border=0 width=100%>
+<tr><td width=50%>
+<div class="block" style="margin-bottom:200px; background-color:orange"></div>
+<div class="block" style="background-color:orange"></div>
+</td>
+<td width=50%>
+<div class="block" style="margin-bottom:200px; background-color:yellow"></div>
+<div class="block" style="background-color:yellow"></div>
+</td></tr>
+</table>
+</div>
diff --git a/LayoutTests/fast/multicol/table-vertical-align.html b/LayoutTests/fast/multicol/table-vertical-align.html
new file mode 100644
index 0000000..b410b99
--- /dev/null
+++ b/LayoutTests/fast/multicol/table-vertical-align.html
@@ -0,0 +1,123 @@
+<div style="-webkit-column-count:2; height:350px">
+<table border=1 cellpadding=10 cellspacing=0">
+<tr style="vertical-align:baseline"><td>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+
+
+<td><span style="font-size:64px">Other cell.</span></td>
+</tr>
+</table>
+</div>
+
+<hr>
+
+<div style="-webkit-column-count:2; height:300px">
+<table border=1 cellpadding=10 cellspacing=0">
+<tr style="vertical-align:middle"><td>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+
+
+<td><span style="font-size:64px">Other cell.</span></td>
+</tr>
+</table>
+</div>
+
+<hr>
+
+<div style="margin-top:1em; -webkit-column-count:2; height:300px">
+<table border=1 cellpadding=10 cellspacing=0">
+<tr style="vertical-align:bottom"><td>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+This cell has lots of text.<br>
+
+
+<td><span style="font-size:64px">Other cell.</span></td>
+</tr>
+</table>
+</div>
diff --git a/LayoutTests/fast/multicol/unsplittable-inline-block.html b/LayoutTests/fast/multicol/unsplittable-inline-block.html
new file mode 100644
index 0000000..5150220
--- /dev/null
+++ b/LayoutTests/fast/multicol/unsplittable-inline-block.html
@@ -0,0 +1,19 @@
+<div style="width:750px; -webkit-column-count:2; border:5px solid black; padding:5px;height:300px; -webkit-column-rule: 2px solid grey">
+<div style="height:250px"></div>
+<div style="display:inline-block; border:2px solid green">
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+</div>
+
+</div>
+
+
diff --git a/LayoutTests/platform/mac/fast/multicol/border-padding-pagination-expected.checksum b/LayoutTests/platform/mac/fast/multicol/border-padding-pagination-expected.checksum
new file mode 100644
index 0000000..2fbbafc
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/border-padding-pagination-expected.checksum
@@ -0,0 +1 @@
+26180699b5c4ef2ed813b57446aa3380
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/border-padding-pagination-expected.png b/LayoutTests/platform/mac/fast/multicol/border-padding-pagination-expected.png
new file mode 100644
index 0000000..db9517f
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/border-padding-pagination-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/border-padding-pagination-expected.txt b/LayoutTests/platform/mac/fast/multicol/border-padding-pagination-expected.txt
new file mode 100644
index 0000000..4f3eef4
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/border-padding-pagination-expected.txt
@@ -0,0 +1,15 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (8,8) size 784x176
+  RenderBlock {DIV} at (0,0) size 784x176 [border: (2px solid #800000)]
+    RenderBlock {DIV} at (2,2) size 382x110
+    RenderBlock {DIV} at (2,174) size 379x156 [bgcolor=#00FF00] [border: (2px solid #000000)]
+      RenderBlock {DIV} at (12,2) size 355x152 [bgcolor=#008000] [border: (2px solid #0000FF)]
+        RenderInline {SPAN} at (0,0) size 192x148
+          RenderText {#text} at (2,2) size 192x148
+            text run at (2,2) width 165: "In 2nd"
+            text run at (2,76) width 192: "column"
+        RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/column-break-with-balancing-expected.checksum b/LayoutTests/platform/mac/fast/multicol/column-break-with-balancing-expected.checksum
new file mode 100644
index 0000000..3a66ad3
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/column-break-with-balancing-expected.checksum
@@ -0,0 +1 @@
+e69b661a8b1df00cd65b099849244e65
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/column-break-with-balancing-expected.png b/LayoutTests/platform/mac/fast/multicol/column-break-with-balancing-expected.png
new file mode 100644
index 0000000..e29b27c
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/column-break-with-balancing-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/column-break-with-balancing-expected.txt b/LayoutTests/platform/mac/fast/multicol/column-break-with-balancing-expected.txt
new file mode 100644
index 0000000..c7b1c9a
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/column-break-with-balancing-expected.txt
@@ -0,0 +1,163 @@
+layer at (0,0) size 785x808
+  RenderView at (0,0) size 785x600
+layer at (0,0) size 785x808
+  RenderBlock {HTML} at (0,0) size 785x808
+    RenderBody {BODY} at (8,8) size 769x792
+layer at (8,8) size 769x388
+  RenderBlock {DIV} at (0,0) size 769x388 [border: (5px solid #0000FF)]
+    RenderBlock (anonymous) at (5,5) size 371x378
+      RenderText {#text} at (0,0) size 110x18
+        text run at (0,0) width 110: "This is some text."
+      RenderBR {BR} at (110,14) size 0x0
+      RenderText {#text} at (0,18) size 110x18
+        text run at (0,18) width 110: "This is some text."
+      RenderBR {BR} at (110,32) size 0x0
+      RenderText {#text} at (0,36) size 110x18
+        text run at (0,36) width 110: "This is some text."
+      RenderBR {BR} at (110,50) size 0x0
+      RenderText {#text} at (0,54) size 110x18
+        text run at (0,54) width 110: "This is some text."
+      RenderBR {BR} at (110,68) size 0x0
+      RenderText {#text} at (0,72) size 110x18
+        text run at (0,72) width 110: "This is some text."
+      RenderBR {BR} at (110,86) size 0x0
+      RenderText {#text} at (0,90) size 110x18
+        text run at (0,90) width 110: "This is some text."
+      RenderBR {BR} at (110,104) size 0x0
+      RenderText {#text} at (0,108) size 110x18
+        text run at (0,108) width 110: "This is some text."
+      RenderBR {BR} at (110,122) size 0x0
+      RenderText {#text} at (0,126) size 110x18
+        text run at (0,126) width 110: "This is some text."
+      RenderBR {BR} at (110,140) size 0x0
+      RenderText {#text} at (0,144) size 110x18
+        text run at (0,144) width 110: "This is some text."
+      RenderBR {BR} at (110,158) size 0x0
+      RenderText {#text} at (0,162) size 110x18
+        text run at (0,162) width 110: "This is some text."
+      RenderBR {BR} at (110,176) size 0x0
+      RenderText {#text} at (0,180) size 110x18
+        text run at (0,180) width 110: "This is some text."
+      RenderBR {BR} at (110,194) size 0x0
+      RenderText {#text} at (0,198) size 110x18
+        text run at (0,198) width 110: "This is some text."
+      RenderBR {BR} at (110,212) size 0x0
+      RenderText {#text} at (0,216) size 110x18
+        text run at (0,216) width 110: "This is some text."
+      RenderBR {BR} at (110,230) size 0x0
+      RenderText {#text} at (0,234) size 110x18
+        text run at (0,234) width 110: "This is some text."
+      RenderBR {BR} at (110,248) size 0x0
+      RenderText {#text} at (0,252) size 110x18
+        text run at (0,252) width 110: "This is some text."
+      RenderBR {BR} at (110,266) size 0x0
+      RenderText {#text} at (0,270) size 110x18
+        text run at (0,270) width 110: "This is some text."
+      RenderBR {BR} at (110,284) size 0x0
+      RenderText {#text} at (0,288) size 110x18
+        text run at (0,288) width 110: "This is some text."
+      RenderBR {BR} at (110,302) size 0x0
+      RenderText {#text} at (0,306) size 110x18
+        text run at (0,306) width 110: "This is some text."
+      RenderBR {BR} at (110,320) size 0x0
+      RenderText {#text} at (0,324) size 110x18
+        text run at (0,324) width 110: "This is some text."
+      RenderBR {BR} at (110,338) size 0x0
+      RenderText {#text} at (0,342) size 110x18
+        text run at (0,342) width 110: "This is some text."
+      RenderBR {BR} at (110,356) size 0x0
+      RenderText {#text} at (0,360) size 110x18
+        text run at (0,360) width 110: "This is some text."
+      RenderBR {BR} at (110,374) size 0x0
+    RenderBlock {DIV} at (5,383) size 371x72
+      RenderText {#text} at (0,0) size 262x18
+        text run at (0,0) width 262: "This text should be in the second column."
+      RenderBR {BR} at (262,14) size 0x0
+      RenderText {#text} at (0,18) size 262x18
+        text run at (0,18) width 262: "This text should be in the second column."
+      RenderBR {BR} at (262,32) size 0x0
+      RenderText {#text} at (0,36) size 262x18
+        text run at (0,36) width 262: "This text should be in the second column."
+      RenderBR {BR} at (262,50) size 0x0
+      RenderText {#text} at (0,54) size 262x18
+        text run at (0,54) width 262: "This text should be in the second column."
+      RenderBR {BR} at (262,68) size 0x0
+layer at (8,412) size 769x388
+  RenderBlock {DIV} at (0,404) size 769x388 [border: (5px solid #0000FF)]
+    RenderBlock (anonymous) at (5,5) size 371x72
+      RenderText {#text} at (0,0) size 242x18
+        text run at (0,0) width 242: "This text should be in the first column."
+      RenderBR {BR} at (242,14) size 0x0
+      RenderText {#text} at (0,18) size 242x18
+        text run at (0,18) width 242: "This text should be in the first column."
+      RenderBR {BR} at (242,32) size 0x0
+      RenderText {#text} at (0,36) size 242x18
+        text run at (0,36) width 242: "This text should be in the first column."
+      RenderBR {BR} at (242,50) size 0x0
+      RenderText {#text} at (0,54) size 242x18
+        text run at (0,54) width 242: "This text should be in the first column."
+      RenderBR {BR} at (242,68) size 0x0
+    RenderBlock {DIV} at (5,383) size 371x378
+      RenderText {#text} at (0,0) size 110x18
+        text run at (0,0) width 110: "This is some text."
+      RenderBR {BR} at (110,14) size 0x0
+      RenderText {#text} at (0,18) size 110x18
+        text run at (0,18) width 110: "This is some text."
+      RenderBR {BR} at (110,32) size 0x0
+      RenderText {#text} at (0,36) size 110x18
+        text run at (0,36) width 110: "This is some text."
+      RenderBR {BR} at (110,50) size 0x0
+      RenderText {#text} at (0,54) size 110x18
+        text run at (0,54) width 110: "This is some text."
+      RenderBR {BR} at (110,68) size 0x0
+      RenderText {#text} at (0,72) size 110x18
+        text run at (0,72) width 110: "This is some text."
+      RenderBR {BR} at (110,86) size 0x0
+      RenderText {#text} at (0,90) size 110x18
+        text run at (0,90) width 110: "This is some text."
+      RenderBR {BR} at (110,104) size 0x0
+      RenderText {#text} at (0,108) size 110x18
+        text run at (0,108) width 110: "This is some text."
+      RenderBR {BR} at (110,122) size 0x0
+      RenderText {#text} at (0,126) size 110x18
+        text run at (0,126) width 110: "This is some text."
+      RenderBR {BR} at (110,140) size 0x0
+      RenderText {#text} at (0,144) size 110x18
+        text run at (0,144) width 110: "This is some text."
+      RenderBR {BR} at (110,158) size 0x0
+      RenderText {#text} at (0,162) size 110x18
+        text run at (0,162) width 110: "This is some text."
+      RenderBR {BR} at (110,176) size 0x0
+      RenderText {#text} at (0,180) size 110x18
+        text run at (0,180) width 110: "This is some text."
+      RenderBR {BR} at (110,194) size 0x0
+      RenderText {#text} at (0,198) size 110x18
+        text run at (0,198) width 110: "This is some text."
+      RenderBR {BR} at (110,212) size 0x0
+      RenderText {#text} at (0,216) size 110x18
+        text run at (0,216) width 110: "This is some text."
+      RenderBR {BR} at (110,230) size 0x0
+      RenderText {#text} at (0,234) size 110x18
+        text run at (0,234) width 110: "This is some text."
+      RenderBR {BR} at (110,248) size 0x0
+      RenderText {#text} at (0,252) size 110x18
+        text run at (0,252) width 110: "This is some text."
+      RenderBR {BR} at (110,266) size 0x0
+      RenderText {#text} at (0,270) size 110x18
+        text run at (0,270) width 110: "This is some text."
+      RenderBR {BR} at (110,284) size 0x0
+      RenderText {#text} at (0,288) size 110x18
+        text run at (0,288) width 110: "This is some text."
+      RenderBR {BR} at (110,302) size 0x0
+      RenderText {#text} at (0,306) size 110x18
+        text run at (0,306) width 110: "This is some text."
+      RenderBR {BR} at (110,320) size 0x0
+      RenderText {#text} at (0,324) size 110x18
+        text run at (0,324) width 110: "This is some text."
+      RenderBR {BR} at (110,338) size 0x0
+      RenderText {#text} at (0,342) size 110x18
+        text run at (0,342) width 110: "This is some text."
+      RenderBR {BR} at (110,356) size 0x0
+      RenderText {#text} at (0,360) size 110x18
+        text run at (0,360) width 110: "This is some text."
+      RenderBR {BR} at (110,374) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/column-count-with-rules-expected.checksum b/LayoutTests/platform/mac/fast/multicol/column-count-with-rules-expected.checksum
new file mode 100644
index 0000000..a638860
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/column-count-with-rules-expected.checksum
@@ -0,0 +1 @@
+871e06e8ed9a69290eb5e89d7f788a3e
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/column-count-with-rules-expected.png b/LayoutTests/platform/mac/fast/multicol/column-count-with-rules-expected.png
new file mode 100644
index 0000000..1f56163
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/column-count-with-rules-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/column-count-with-rules-expected.txt b/LayoutTests/platform/mac/fast/multicol/column-count-with-rules-expected.txt
index 0823d15..d8194a7 100644
--- a/LayoutTests/platform/mac/fast/multicol/column-count-with-rules-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/column-count-with-rules-expected.txt
@@ -20,30 +20,30 @@ layer at (8,8) size 784x160
     RenderText {#text} at (30,102) size 161x18
       text run at (30,102) width 161: "This is some column text."
     RenderBR {BR} at (191,116) size 0x0
-    RenderText {#text} at (30,120) size 161x18
-      text run at (30,120) width 161: "This is some column text."
-    RenderBR {BR} at (191,134) size 0x0
-    RenderText {#text} at (30,138) size 161x18
-      text run at (30,138) width 161: "This is some column text."
-    RenderBR {BR} at (191,152) size 0x0
-    RenderText {#text} at (30,156) size 161x18
-      text run at (30,156) width 161: "This is some column text."
-    RenderBR {BR} at (191,170) size 0x0
-    RenderText {#text} at (30,174) size 161x18
-      text run at (30,174) width 161: "This is some column text."
-    RenderBR {BR} at (191,188) size 0x0
-    RenderText {#text} at (30,192) size 161x18
-      text run at (30,192) width 161: "This is some column text."
-    RenderBR {BR} at (191,206) size 0x0
-    RenderText {#text} at (30,210) size 161x18
-      text run at (30,210) width 161: "This is some column text."
-    RenderBR {BR} at (191,224) size 0x0
-    RenderText {#text} at (30,228) size 161x18
-      text run at (30,228) width 161: "This is some column text."
-    RenderBR {BR} at (191,242) size 0x0
-    RenderText {#text} at (30,246) size 161x18
-      text run at (30,246) width 161: "This is some column text."
-    RenderBR {BR} at (191,260) size 0x0
+    RenderText {#text} at (30,130) size 161x18
+      text run at (30,130) width 161: "This is some column text."
+    RenderBR {BR} at (191,144) size 0x0
+    RenderText {#text} at (30,148) size 161x18
+      text run at (30,148) width 161: "This is some column text."
+    RenderBR {BR} at (191,162) size 0x0
+    RenderText {#text} at (30,166) size 161x18
+      text run at (30,166) width 161: "This is some column text."
+    RenderBR {BR} at (191,180) size 0x0
+    RenderText {#text} at (30,184) size 161x18
+      text run at (30,184) width 161: "This is some column text."
+    RenderBR {BR} at (191,198) size 0x0
+    RenderText {#text} at (30,202) size 161x18
+      text run at (30,202) width 161: "This is some column text."
+    RenderBR {BR} at (191,216) size 0x0
+    RenderText {#text} at (30,230) size 161x18
+      text run at (30,230) width 161: "This is some column text."
+    RenderBR {BR} at (191,244) size 0x0
+    RenderText {#text} at (30,248) size 161x18
+      text run at (30,248) width 161: "This is some column text."
+    RenderBR {BR} at (191,262) size 0x0
+    RenderText {#text} at (30,266) size 161x18
+      text run at (30,266) width 161: "This is some column text."
+    RenderBR {BR} at (191,280) size 0x0
 layer at (8,184) size 784x160
   RenderBlock {P} at (0,176) size 784x160 [border: (10px solid #800000)]
     RenderText {#text} at (99,30) size 161x18
@@ -66,35 +66,35 @@ layer at (8,184) size 784x160
       text run at (99,102) width 4 RTL: "."
       text run at (103,102) width 157: "This is some column text"
     RenderBR {BR} at (99,116) size 0x0
-    RenderText {#text} at (99,120) size 161x18
-      text run at (99,120) width 4 RTL: "."
-      text run at (103,120) width 157: "This is some column text"
-    RenderBR {BR} at (99,134) size 0x0
-    RenderText {#text} at (99,138) size 161x18
-      text run at (99,138) width 4 RTL: "."
-      text run at (103,138) width 157: "This is some column text"
-    RenderBR {BR} at (99,152) size 0x0
-    RenderText {#text} at (99,156) size 161x18
-      text run at (99,156) width 4 RTL: "."
-      text run at (103,156) width 157: "This is some column text"
-    RenderBR {BR} at (99,170) size 0x0
-    RenderText {#text} at (99,174) size 161x18
-      text run at (99,174) width 4 RTL: "."
-      text run at (103,174) width 157: "This is some column text"
-    RenderBR {BR} at (99,188) size 0x0
-    RenderText {#text} at (99,192) size 161x18
-      text run at (99,192) width 4 RTL: "."
-      text run at (103,192) width 157: "This is some column text"
-    RenderBR {BR} at (99,206) size 0x0
-    RenderText {#text} at (99,210) size 161x18
-      text run at (99,210) width 4 RTL: "."
-      text run at (103,210) width 157: "This is some column text"
-    RenderBR {BR} at (99,224) size 0x0
-    RenderText {#text} at (99,228) size 161x18
-      text run at (99,228) width 4 RTL: "."
-      text run at (103,228) width 157: "This is some column text"
-    RenderBR {BR} at (99,242) size 0x0
-    RenderText {#text} at (99,246) size 161x18
-      text run at (99,246) width 4 RTL: "."
-      text run at (103,246) width 157: "This is some column text"
-    RenderBR {BR} at (99,260) size 0x0
+    RenderText {#text} at (99,130) size 161x18
+      text run at (99,130) width 4 RTL: "."
+      text run at (103,130) width 157: "This is some column text"
+    RenderBR {BR} at (99,144) size 0x0
+    RenderText {#text} at (99,148) size 161x18
+      text run at (99,148) width 4 RTL: "."
+      text run at (103,148) width 157: "This is some column text"
+    RenderBR {BR} at (99,162) size 0x0
+    RenderText {#text} at (99,166) size 161x18
+      text run at (99,166) width 4 RTL: "."
+      text run at (103,166) width 157: "This is some column text"
+    RenderBR {BR} at (99,180) size 0x0
+    RenderText {#text} at (99,184) size 161x18
+      text run at (99,184) width 4 RTL: "."
+      text run at (103,184) width 157: "This is some column text"
+    RenderBR {BR} at (99,198) size 0x0
+    RenderText {#text} at (99,202) size 161x18
+      text run at (99,202) width 4 RTL: "."
+      text run at (103,202) width 157: "This is some column text"
+    RenderBR {BR} at (99,216) size 0x0
+    RenderText {#text} at (99,230) size 161x18
+      text run at (99,230) width 4 RTL: "."
+      text run at (103,230) width 157: "This is some column text"
+    RenderBR {BR} at (99,244) size 0x0
+    RenderText {#text} at (99,248) size 161x18
+      text run at (99,248) width 4 RTL: "."
+      text run at (103,248) width 157: "This is some column text"
+    RenderBR {BR} at (99,262) size 0x0
+    RenderText {#text} at (99,266) size 161x18
+      text run at (99,266) width 4 RTL: "."
+      text run at (103,266) width 157: "This is some column text"
+    RenderBR {BR} at (99,280) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/column-rules-expected.checksum b/LayoutTests/platform/mac/fast/multicol/column-rules-expected.checksum
index 8bc0c68..534a0a4 100644
--- a/LayoutTests/platform/mac/fast/multicol/column-rules-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/column-rules-expected.checksum
@@ -1 +1 @@
-ed9b3df8b1e28f5b31333ac303c7c2aa
\ No newline at end of file
+fcdaa44b1b089b04b11c995e1b4d3c5b
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/column-rules-expected.png b/LayoutTests/platform/mac/fast/multicol/column-rules-expected.png
index a46b239..3aafb45 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/column-rules-expected.png and b/LayoutTests/platform/mac/fast/multicol/column-rules-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/column-rules-expected.txt b/LayoutTests/platform/mac/fast/multicol/column-rules-expected.txt
index 1acf11d..6606ecb 100644
--- a/LayoutTests/platform/mac/fast/multicol/column-rules-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/column-rules-expected.txt
@@ -3,9 +3,9 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
-layer at (8,8) size 784x532
-  RenderBlock {DIV} at (0,0) size 784x532 [border: (5px solid #000000)]
-    RenderText {#text} at (15,5) size 240x1548
+layer at (8,8) size 784x538
+  RenderBlock {DIV} at (0,0) size 784x538 [border: (5px solid #000000)]
+    RenderText {#text} at (15,5) size 240x1560
       text run at (15,5) width 177: "Lorem ipsum dolor sit amet,"
       text run at (15,23) width 212: "consectetuer adipiscing elit. Nulla"
       text run at (15,41) width 179: "varius enim ac mi. Curabitur"
@@ -35,60 +35,60 @@ layer at (8,8) size 784x532
       text run at (15,473) width 227: "Quisque orci lectus, ullamcorper eu,"
       text run at (15,491) width 216: "imperdiet sed, accumsan et, ligula."
       text run at (15,509) width 204: "Duis diam nisl, sagittis a, blandit"
-      text run at (15,527) width 179: "volutpat, interdum sed, velit."
-      text run at (15,545) width 209: "Vestibulum quam. Nulla a purus."
-      text run at (15,563) width 240: "Phasellus semper semper lectus. Nulla"
-      text run at (15,581) width 211: "porttitor, dolor dictum scelerisque"
-      text run at (15,599) width 233: "luctus, velit ipsum lobortis mauris, ac"
-      text run at (15,617) width 216: "pretium enim nunc vel risus. Proin"
-      text run at (15,635) width 201: "gravida mi ut sem cursus mattis."
-      text run at (15,653) width 184: "Fusce laoreet, nisi quis luctus"
-      text run at (15,671) width 218: "volutpat, arcu pede tincidunt enim,"
-      text run at (15,689) width 208: "nec malesuada urna nisl eu enim."
-      text run at (15,707) width 202: "Vivamus varius augue ac purus."
-      text run at (15,725) width 228: "Vestibulum vestibulum. Phasellus et"
-      text run at (15,743) width 205: "est vitae ante accumsan rhoncus."
-      text run at (15,761) width 209: "Morbi convallis, arcu at hendrerit"
-      text run at (15,779) width 216: "gravida, sem diam dignissim risus,"
-      text run at (15,797) width 237: "sed aliquet erat mi ut mi. Nunc cursus"
-      text run at (15,815) width 240: "lacinia elit. Nunc nisi. Quisque at erat."
-      text run at (15,833) width 229: "Vestibulum dictum quam vitae nibh."
-      text run at (15,851) width 219: "Nunc vitae ante non odio interdum"
-      text run at (15,869) width 177: "blandit. Curabitur leo quam,"
-      text run at (15,887) width 164: "fermentum sed, feugiat in,"
-      text run at (15,905) width 230: "ullamcorper id, nibh. Suspendisse ac"
-      text run at (15,923) width 201: "turpis. In iaculis sollicitudin dui."
-      text run at (15,941) width 192: "Aenean vitae lectus vitae nulla"
-      text run at (15,959) width 194: "pellentesque sollicitudin. Nunc"
-      text run at (15,977) width 223: "gravida pharetra lectus. Etiam lacus"
-      text run at (15,995) width 197: "ligula, placerat ut, dictum vitae,"
-      text run at (15,1013) width 200: "tempus vel, risus. Cras rhoncus."
-      text run at (15,1031) width 226: "Praesent varius ultricies orci. Donec"
-      text run at (15,1049) width 230: "mattis, neque ut ornare fringilla, ante"
-      text run at (15,1067) width 231: "urna placerat eros, vel commodo nisi"
-      text run at (15,1085) width 217: "tortor ut mauris. Morbi magna dui,"
-      text run at (15,1103) width 177: "sagittis sit amet, tincidunt et,"
-      text run at (15,1121) width 187: "elementum eget, quam. Fusce"
-      text run at (15,1139) width 230: "molestie nisl vitae nisi. Vestibulum a"
-      text run at (15,1157) width 234: "sapien. Phasellus ante lacus, vehicula"
-      text run at (15,1175) width 205: "non, cursus a, tempor ut, magna."
-      text run at (15,1193) width 219: "Suspendisse potenti. Fusce aliquet,"
-      text run at (15,1211) width 224: "odio viverra vulputate dictum, enim"
-      text run at (15,1229) width 240: "odio luctus purus, ut scelerisque quam"
-      text run at (15,1247) width 200: "nulla non est. Donec eros lacus,"
-      text run at (15,1265) width 210: "egestas vitae, lacinia quis, tempor"
-      text run at (15,1283) width 234: "quis, pede. Morbi orci erat, iaculis id,"
-      text run at (15,1301) width 226: "ornare ac, elementum at, sem. Nunc"
-      text run at (15,1319) width 223: "ornare sodales nisi. Morbi interdum"
-      text run at (15,1337) width 222: "commodo nisl. Fusce eget eros non"
-      text run at (15,1355) width 227: "nisi ornare facilisis. Sed placerat, est"
-      text run at (15,1373) width 202: "non posuere posuere, purus sem"
-      text run at (15,1391) width 237: "dignissim libero, a viverra tellus dolor"
-      text run at (15,1409) width 236: "vel lorem. Cras augue. Etiam ultricies"
-      text run at (15,1427) width 209: "consequat odio. Mauris ac libero."
-      text run at (15,1445) width 225: "Etiam posuere, libero vitae euismod"
-      text run at (15,1463) width 219: "gravida, urna elit imperdiet magna,"
-      text run at (15,1481) width 240: "vel cursus elit felis non mauris. Donec"
-      text run at (15,1499) width 195: "orci erat, porta id, dignissim ut,"
-      text run at (15,1517) width 208: "posuere dictum, leo. Suspendisse"
-      text run at (15,1535) width 157: "scelerisque egestas nulla."
+      text run at (15,533) width 179: "volutpat, interdum sed, velit."
+      text run at (15,551) width 209: "Vestibulum quam. Nulla a purus."
+      text run at (15,569) width 240: "Phasellus semper semper lectus. Nulla"
+      text run at (15,587) width 211: "porttitor, dolor dictum scelerisque"
+      text run at (15,605) width 233: "luctus, velit ipsum lobortis mauris, ac"
+      text run at (15,623) width 216: "pretium enim nunc vel risus. Proin"
+      text run at (15,641) width 201: "gravida mi ut sem cursus mattis."
+      text run at (15,659) width 184: "Fusce laoreet, nisi quis luctus"
+      text run at (15,677) width 218: "volutpat, arcu pede tincidunt enim,"
+      text run at (15,695) width 208: "nec malesuada urna nisl eu enim."
+      text run at (15,713) width 202: "Vivamus varius augue ac purus."
+      text run at (15,731) width 228: "Vestibulum vestibulum. Phasellus et"
+      text run at (15,749) width 205: "est vitae ante accumsan rhoncus."
+      text run at (15,767) width 209: "Morbi convallis, arcu at hendrerit"
+      text run at (15,785) width 216: "gravida, sem diam dignissim risus,"
+      text run at (15,803) width 237: "sed aliquet erat mi ut mi. Nunc cursus"
+      text run at (15,821) width 240: "lacinia elit. Nunc nisi. Quisque at erat."
+      text run at (15,839) width 229: "Vestibulum dictum quam vitae nibh."
+      text run at (15,857) width 219: "Nunc vitae ante non odio interdum"
+      text run at (15,875) width 177: "blandit. Curabitur leo quam,"
+      text run at (15,893) width 164: "fermentum sed, feugiat in,"
+      text run at (15,911) width 230: "ullamcorper id, nibh. Suspendisse ac"
+      text run at (15,929) width 201: "turpis. In iaculis sollicitudin dui."
+      text run at (15,947) width 192: "Aenean vitae lectus vitae nulla"
+      text run at (15,965) width 194: "pellentesque sollicitudin. Nunc"
+      text run at (15,983) width 223: "gravida pharetra lectus. Etiam lacus"
+      text run at (15,1001) width 197: "ligula, placerat ut, dictum vitae,"
+      text run at (15,1019) width 200: "tempus vel, risus. Cras rhoncus."
+      text run at (15,1037) width 226: "Praesent varius ultricies orci. Donec"
+      text run at (15,1061) width 230: "mattis, neque ut ornare fringilla, ante"
+      text run at (15,1079) width 231: "urna placerat eros, vel commodo nisi"
+      text run at (15,1097) width 217: "tortor ut mauris. Morbi magna dui,"
+      text run at (15,1115) width 177: "sagittis sit amet, tincidunt et,"
+      text run at (15,1133) width 187: "elementum eget, quam. Fusce"
+      text run at (15,1151) width 230: "molestie nisl vitae nisi. Vestibulum a"
+      text run at (15,1169) width 234: "sapien. Phasellus ante lacus, vehicula"
+      text run at (15,1187) width 205: "non, cursus a, tempor ut, magna."
+      text run at (15,1205) width 219: "Suspendisse potenti. Fusce aliquet,"
+      text run at (15,1223) width 224: "odio viverra vulputate dictum, enim"
+      text run at (15,1241) width 240: "odio luctus purus, ut scelerisque quam"
+      text run at (15,1259) width 200: "nulla non est. Donec eros lacus,"
+      text run at (15,1277) width 210: "egestas vitae, lacinia quis, tempor"
+      text run at (15,1295) width 234: "quis, pede. Morbi orci erat, iaculis id,"
+      text run at (15,1313) width 226: "ornare ac, elementum at, sem. Nunc"
+      text run at (15,1331) width 223: "ornare sodales nisi. Morbi interdum"
+      text run at (15,1349) width 222: "commodo nisl. Fusce eget eros non"
+      text run at (15,1367) width 227: "nisi ornare facilisis. Sed placerat, est"
+      text run at (15,1385) width 202: "non posuere posuere, purus sem"
+      text run at (15,1403) width 237: "dignissim libero, a viverra tellus dolor"
+      text run at (15,1421) width 236: "vel lorem. Cras augue. Etiam ultricies"
+      text run at (15,1439) width 209: "consequat odio. Mauris ac libero."
+      text run at (15,1457) width 225: "Etiam posuere, libero vitae euismod"
+      text run at (15,1475) width 219: "gravida, urna elit imperdiet magna,"
+      text run at (15,1493) width 240: "vel cursus elit felis non mauris. Donec"
+      text run at (15,1511) width 195: "orci erat, porta id, dignissim ut,"
+      text run at (15,1529) width 208: "posuere dictum, leo. Suspendisse"
+      text run at (15,1547) width 157: "scelerisque egestas nulla."
diff --git a/LayoutTests/platform/mac/fast/multicol/column-rules-stacking-expected.checksum b/LayoutTests/platform/mac/fast/multicol/column-rules-stacking-expected.checksum
index f520146..07b1350 100644
--- a/LayoutTests/platform/mac/fast/multicol/column-rules-stacking-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/column-rules-stacking-expected.checksum
@@ -1 +1 @@
-73a0f26cd457bd180c21f7f32c08a976
\ No newline at end of file
+1a4aa1e76fd001b9d0fa4897fa2a6b71
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/column-rules-stacking-expected.png b/LayoutTests/platform/mac/fast/multicol/column-rules-stacking-expected.png
index da136ff..e8a1ed7 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/column-rules-stacking-expected.png and b/LayoutTests/platform/mac/fast/multicol/column-rules-stacking-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/columns-shorthand-parsing-expected.checksum b/LayoutTests/platform/mac/fast/multicol/columns-shorthand-parsing-expected.checksum
index 77116ea..6b8b2de 100644
--- a/LayoutTests/platform/mac/fast/multicol/columns-shorthand-parsing-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/columns-shorthand-parsing-expected.checksum
@@ -1 +1 @@
-adf447271fd934a43ae85475c7594ec8
\ No newline at end of file
+91f14afe8ac00c595d19505cf7e2fed3
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/columns-shorthand-parsing-expected.png b/LayoutTests/platform/mac/fast/multicol/columns-shorthand-parsing-expected.png
index 75273bd..82660de 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/columns-shorthand-parsing-expected.png and b/LayoutTests/platform/mac/fast/multicol/columns-shorthand-parsing-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/float-avoidance-expected.checksum b/LayoutTests/platform/mac/fast/multicol/float-avoidance-expected.checksum
index 45c32b5..443241d 100644
--- a/LayoutTests/platform/mac/fast/multicol/float-avoidance-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/float-avoidance-expected.checksum
@@ -1 +1 @@
-4f9e61fc2c6d3b0a1f75e2c47674f60f
\ No newline at end of file
+6548d1039487b05016e1bb67f0fb36cc
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/float-avoidance-expected.png b/LayoutTests/platform/mac/fast/multicol/float-avoidance-expected.png
index 4b63ecb..f0d24f9 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/float-avoidance-expected.png and b/LayoutTests/platform/mac/fast/multicol/float-avoidance-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/float-avoidance-expected.txt b/LayoutTests/platform/mac/fast/multicol/float-avoidance-expected.txt
index d77b741..a4aece9 100644
--- a/LayoutTests/platform/mac/fast/multicol/float-avoidance-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/float-avoidance-expected.txt
@@ -4,9 +4,9 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock (floating) {DIV} at (0,0) size 200x100 [bgcolor=#00FF00]
-layer at (208,8) size 435x142
-  RenderBlock {DIV} at (200,0) size 435x142 [border: (10px solid #000000)]
-    RenderBlock {P} at (10,26) size 415x90
+layer at (208,8) size 435x126
+  RenderBlock {DIV} at (200,0) size 435x126 [border: (10px solid #000000)]
+    RenderBlock {P} at (10,10) size 415x90
       RenderText {#text} at (0,0) size 415x90
         text run at (0,0) width 415: "This technology preview of our award winning next generation"
         text run at (0,18) width 56: "browser "
diff --git a/LayoutTests/platform/mac/fast/multicol/float-multicol-expected.checksum b/LayoutTests/platform/mac/fast/multicol/float-multicol-expected.checksum
index 5de8e3d..894fe7c 100644
--- a/LayoutTests/platform/mac/fast/multicol/float-multicol-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/float-multicol-expected.checksum
@@ -1 +1 @@
-a94a23062be30c7945dc3550820478c6
\ No newline at end of file
+231f806155bb5fec7025be3229965bff
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/float-multicol-expected.png b/LayoutTests/platform/mac/fast/multicol/float-multicol-expected.png
index 26f0129..1fdc0f2 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/float-multicol-expected.png and b/LayoutTests/platform/mac/fast/multicol/float-multicol-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/float-multicol-expected.txt b/LayoutTests/platform/mac/fast/multicol/float-multicol-expected.txt
index 29bec8d..6e21ce9 100644
--- a/LayoutTests/platform/mac/fast/multicol/float-multicol-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/float-multicol-expected.txt
@@ -1,19 +1,19 @@
-layer at (0,0) size 785x810
-  RenderView at (0,0) size 785x600
-layer at (0,0) size 785x810
-  RenderBlock {HTML} at (0,0) size 785x810
-layer at (8,19) size 769x775
-  RenderBody {BODY} at (8,19) size 769x775
-    RenderBlock {DIV} at (0,0) size 769x28 [bgcolor=#00FFFF]
-      RenderBlock (floating) {DIV} at (4,4) size 384x462 [bgcolor=#FFFF00]
+layer at (0,0) size 1608x585
+  RenderView at (0,0) size 800x585
+layer at (0,0) size 1608x545
+  RenderBlock {HTML} at (0,0) size 800x545
+layer at (8,19) size 1600x510
+  RenderBody {BODY} at (8,19) size 784x510
+    RenderBlock {DIV} at (0,0) size 784x28 [bgcolor=#00FFFF]
+      RenderBlock (floating) {DIV} at (4,4) size 392x462 [bgcolor=#FFFF00]
         RenderImage {IMG} at (0,0) size 133x70
-        RenderText {#text} at (133,0) size 379x90
-          text run at (133,0) width 229: "You've already downloaded a build."
-          text run at (133,18) width 219: "All you have to do is use it as your"
-          text run at (133,36) width 208: "everyday browser and mail/news"
-          text run at (133,54) width 246: "reader. If you downloaded a build with"
-          text run at (0,72) width 253: "Talkback, please turn it on when it asks."
-        RenderBlock (floating) {DIV} at (302,72) size 82x390 [bgcolor=#FF0000]
+        RenderText {#text} at (133,0) size 390x90
+          text run at (133,0) width 253: "You've already downloaded a build. All"
+          text run at (133,18) width 257: "you have to do is use it as your everyday"
+          text run at (133,36) width 235: "browser and mail/news reader. If you"
+          text run at (133,54) width 224: "downloaded a build with Talkback,"
+          text run at (0,72) width 190: "please turn it on when it asks. "
+        RenderBlock (floating) {DIV} at (310,72) size 82x390 [bgcolor=#FF0000]
           RenderBlock {P} at (0,16) size 82x18
             RenderText {#text} at (0,0) size 74x18
               text run at (0,0) width 74: "Hola hola 1"
@@ -47,42 +47,43 @@ layer at (8,19) size 769x775
           RenderBlock {P} at (0,356) size 82x18
             RenderText {#text} at (0,0) size 82x18
               text run at (0,0) width 82: "Hola hola 11"
-        RenderText {#text} at (0,90) size 301x54
-          text run at (0,90) width 301: "Talkback reports give us really valuable data on"
-          text run at (0,108) width 280: "which crashes are the most serious, and how"
-          text run at (0,126) width 226: "often people are encountering them."
-      RenderBlock (floating) {DIV} at (686,0) size 83x322 [bgcolor=#FF00FF]
-        RenderBlock {P} at (0,16) size 83x18
+        RenderText {#text} at (190,72) size 307x72
+          text run at (190,72) width 106: "Talkback reports"
+          text run at (0,90) width 307: "give us really valuable data on which crashes are"
+          text run at (0,108) width 269: "the most serious, and how often people are"
+          text run at (0,126) width 121: "encountering them."
+      RenderBlock (floating) {DIV} at (701,0) size 83x306 [bgcolor=#FF00FF]
+        RenderBlock {P} at (0,0) size 83x18
           RenderText {#text} at (0,0) size 83x18
             text run at (0,0) width 83: "Hello Kitty 1"
-        RenderBlock {P} at (0,50) size 83x18
+        RenderBlock {P} at (0,34) size 83x18
           RenderText {#text} at (0,0) size 83x18
             text run at (0,0) width 83: "Hello Kitty 2"
-        RenderBlock {P} at (0,84) size 83x18
+        RenderBlock {P} at (0,68) size 83x18
           RenderText {#text} at (0,0) size 83x18
             text run at (0,0) width 83: "Hello Kitty 3"
-        RenderBlock {P} at (0,118) size 83x18
+        RenderBlock {P} at (0,102) size 83x18
           RenderText {#text} at (0,0) size 83x18
             text run at (0,0) width 83: "Hello Kitty 4"
-        RenderBlock {P} at (0,152) size 83x18
+        RenderBlock {P} at (0,136) size 83x18
           RenderText {#text} at (0,0) size 83x18
             text run at (0,0) width 83: "Hello Kitty 5"
-        RenderBlock {P} at (0,186) size 83x18
+        RenderBlock {P} at (0,170) size 83x18
           RenderText {#text} at (0,0) size 83x18
             text run at (0,0) width 83: "Hello Kitty 6"
-        RenderBlock {P} at (0,220) size 83x18
+        RenderBlock {P} at (0,204) size 83x18
           RenderText {#text} at (0,0) size 83x18
             text run at (0,0) width 83: "Hello Kitty 7"
-        RenderBlock {P} at (0,254) size 83x18
+        RenderBlock {P} at (0,238) size 83x18
           RenderText {#text} at (0,0) size 83x18
             text run at (0,0) width 83: "Hello Kitty 8"
-        RenderBlock {P} at (0,288) size 83x18
+        RenderBlock {P} at (0,272) size 83x18
           RenderText {#text} at (0,0) size 83x18
             text run at (0,0) width 83: "Hello Kitty 9"
-      RenderBlock {H2} at (0,0) size 769x28
-        RenderText {#text} at (392,0) size 262x28
-          text run at (392,0) width 262: "What Needs To Be Done?"
-    RenderBlock (floating) {DIV} at (392,47) size 82x390 [bgcolor=#808080]
+      RenderBlock {H2} at (0,0) size 784x28
+        RenderText {#text} at (400,0) size 262x28
+          text run at (400,0) width 262: "What Needs To Be Done?"
+    RenderBlock (floating) {DIV} at (400,47) size 82x390 [bgcolor=#808080]
       RenderBlock {P} at (0,16) size 82x18
         RenderText {#text} at (0,0) size 74x18
           text run at (0,0) width 74: "Hola hola 1"
@@ -116,53 +117,52 @@ layer at (8,19) size 769x775
       RenderBlock {P} at (0,356) size 82x18
         RenderText {#text} at (0,0) size 82x18
           text run at (0,0) width 82: "Hola hola 11"
-    RenderBlock {DL} at (0,47) size 769x588
-      RenderBlock {DT} at (0,0) size 769x18
-        RenderText {#text} at (474,0) size 80x18
-          text run at (474,0) width 80: "Report Bugs"
-      RenderBlock {DD} at (40,34) size 729x288
-        RenderBlock {P} at (0,0) size 729x288
-          RenderText {#text} at (434,0) size 209x108
-            text run at (434,0) width 189: "You've already downloaded a"
-            text run at (434,18) width 209: "build. All you have to do is use it"
-            text run at (434,36) width 17: "as "
-            text run at (451,36) width 173: "your everyday browser and"
-            text run at (434,54) width 153: "mail/news reader. If you"
-            text run at (434,72) width 157: "downloaded a build with"
-            text run at (434,90) width 67: "Talkback, "
+    RenderBlock {DL} at (0,47) size 784x553
+      RenderBlock {DT} at (0,0) size 784x18
+        RenderText {#text} at (482,0) size 80x18
+          text run at (482,0) width 80: "Report Bugs"
+      RenderBlock {DD} at (40,34) size 744x270
+        RenderBlock {P} at (0,0) size 744x270
+          RenderText {#text} at (360,0) size 296x90
+            text run at (360,0) width 281: "You've already downloaded a build. All you"
+            text run at (442,18) width 121: "have to do is use it "
+            text run at (563,18) width 17: "as "
+            text run at (580,18) width 29: "your"
+            text run at (442,36) width 208: "everyday browser and mail/news"
+            text run at (442,54) width 214: "reader. If you downloaded a build"
+            text run at (442,72) width 32: "with "
+            text run at (474,72) width 67: "Talkback, "
           RenderInline {EM} at (0,0) size 102x18
-            RenderText {#text} at (501,90) size 102x18
-              text run at (501,90) width 44: "please "
-              text run at (545,90) width 58: "turn it on"
-          RenderText {#text} at (603,90) size 208x180
-            text run at (603,90) width 39: " when"
-            text run at (434,108) width 188: "it asks. Talkback reports give "
-            text run at (622,108) width 14: "us"
-            text run at (434,126) width 126: "really valuable data "
-            text run at (560,126) width 59: "on which"
-            text run at (434,144) width 205: "crashes are the most serious, and"
-            text run at (434,162) width 32: "how "
-            text run at (466,162) width 101: "often people are"
-            text run at (434,180) width 86: "encountering "
-            text run at (520,180) width 114: "them. And all you"
-            text run at (434,198) width 164: "have to do is click \"OK\". "
-            text run at (598,198) width 38: "If you"
-            text run at (434,216) width 183: "find something you think is a"
-            text run at (434,234) width 167: "bug, check to see if it's not"
-            text run at (434,252) width 50: "already "
+            RenderText {#text} at (541,72) size 102x18
+              text run at (541,72) width 44: "please "
+              text run at (585,72) width 58: "turn it on"
+          RenderText {#text} at (442,90) size 215x144
+            text run at (442,90) width 192: "when it asks. Talkback reports"
+            text run at (442,108) width 31: "give "
+            text run at (473,108) width 144: "us really valuable data "
+            text run at (617,108) width 16: "on"
+            text run at (442,126) width 169: "which crashes are the most"
+            text run at (442,144) width 111: "serious, and how "
+            text run at (553,144) width 101: "often people are"
+            text run at (442,162) width 86: "encountering "
+            text run at (528,162) width 114: "them. And all you"
+            text run at (442,180) width 164: "have to do is click \"OK\". "
+            text run at (606,180) width 38: "If you"
+            text run at (442,198) width 215: "find something you think is a bug,"
+            text run at (442,216) width 185: "check to see if it's not already"
           RenderInline {A} at (0,0) size 83x18 [color=#0000EE]
-            RenderText {#text} at (484,252) size 83x18
-              text run at (484,252) width 83: "known about"
-          RenderText {#text} at (567,252) size 283x36
-            text run at (567,252) width 109: ", and then please "
-            text run at (676,252) width 41: "follow"
-            text run at (434,270) width 23: "the "
-          RenderInline {A} at (0,0) size 165x18 [color=#0000EE]
-            RenderText {#text} at (457,270) size 165x18
-              text run at (457,270) width 165: "bug submission procedure"
-          RenderText {#text} at (622,270) size 4x18
-            text run at (622,270) width 4: "."
-      RenderBlock (floating) {DIV} at (474,338) size 82x390 [bgcolor=#008000]
+            RenderText {#text} at (442,234) size 83x18
+              text run at (442,234) width 83: "known about"
+          RenderText {#text} at (525,234) size 177x18
+            text run at (525,234) width 109: ", and then please "
+            text run at (634,234) width 68: "follow the "
+          RenderInline {A} at (0,0) size 284x36 [color=#0000EE]
+            RenderText {#text} at (702,234) size 284x36
+              text run at (702,234) width 24: "bug"
+              text run at (442,252) width 137: "submission procedure"
+          RenderText {#text} at (579,252) size 4x18
+            text run at (579,252) width 4: "."
+      RenderBlock (floating) {DIV} at (482,320) size 82x381 [bgcolor=#008000]
         RenderBlock {P} at (0,16) size 82x18
           RenderText {#text} at (0,0) size 74x18
             text run at (0,0) width 74: "Hola hola 1"
@@ -175,60 +175,60 @@ layer at (8,19) size 769x775
         RenderBlock {P} at (0,118) size 82x18
           RenderText {#text} at (0,0) size 74x18
             text run at (0,0) width 74: "Hola hola 4"
-        RenderBlock {P} at (0,152) size 82x18
+        RenderBlock {P} at (0,143) size 82x18
           RenderText {#text} at (0,0) size 74x18
             text run at (0,0) width 74: "Hola hola 5"
-        RenderBlock {P} at (0,186) size 82x18
+        RenderBlock {P} at (0,177) size 82x18
           RenderText {#text} at (0,0) size 74x18
             text run at (0,0) width 74: "Hola hola 6"
-        RenderBlock {P} at (0,220) size 82x18
+        RenderBlock {P} at (0,211) size 82x18
           RenderText {#text} at (0,0) size 74x18
             text run at (0,0) width 74: "Hola hola 7"
-        RenderBlock {P} at (0,254) size 82x18
+        RenderBlock {P} at (0,245) size 82x18
           RenderText {#text} at (0,0) size 74x18
             text run at (0,0) width 74: "Hola hola 8"
-        RenderBlock {P} at (0,288) size 82x18
+        RenderBlock {P} at (0,279) size 82x18
           RenderText {#text} at (0,0) size 74x18
             text run at (0,0) width 74: "Hola hola 9"
-        RenderBlock {P} at (0,322) size 82x18
+        RenderBlock {P} at (0,313) size 82x18
           RenderText {#text} at (0,0) size 82x18
             text run at (0,0) width 82: "Hola hola 10"
-        RenderBlock {P} at (0,356) size 82x18
+        RenderBlock {P} at (0,347) size 82x18
           RenderText {#text} at (0,0) size 82x18
             text run at (0,0) width 82: "Hola hola 11"
-      RenderBlock {DT} at (0,338) size 769x18
-        RenderText {#text} at (556,0) size 117x18
-          text run at (556,0) width 117: "Quality Assurance"
-      RenderBlock {DD} at (40,372) size 729x216
-        RenderBlock {P} at (0,0) size 729x216
+      RenderBlock {DT} at (0,320) size 784x18
+        RenderText {#text} at (564,0) size 117x18
+          text run at (564,0) width 117: "Quality Assurance"
+      RenderBlock {DD} at (40,354) size 744x199
+        RenderBlock {P} at (0,0) size 744x199
           RenderInline {A} at (0,0) size 76x18 [color=#0000EE]
-            RenderText {#text} at (516,0) size 76x18
-              text run at (516,0) width 76: "Mozilla QA"
-          RenderText {#text} at (592,0) size 40x18
-            text run at (592,0) width 4: " "
-            text run at (596,0) width 36: "has a "
+            RenderText {#text} at (524,0) size 76x18
+              text run at (524,0) width 76: "Mozilla QA"
+          RenderText {#text} at (600,0) size 40x18
+            text run at (600,0) width 4: " "
+            text run at (604,0) width 36: "has a "
           RenderInline {A} at (0,0) size 30x18 [color=#0000EE]
-            RenderText {#text} at (632,0) size 30x18
-              text run at (632,0) width 30: "page"
-          RenderText {#text} at (662,0) size 212x198
-            text run at (662,0) width 4: " "
-            text run at (666,0) width 60: "dedicated"
-            text run at (516,18) width 179: "to ways to get involved with"
-            text run at (516,36) width 182: "helping. This doesn't involve"
-            text run at (516,54) width 212: "knowing how to code, although a"
-            text run at (516,72) width 182: "little knowledge of HTML is"
-            text run at (516,90) width 94: "helpful. Being "
-            text run at (610,90) width 115: "involved with QA"
-            text run at (516,108) width 14: "is "
-            text run at (530,108) width 194: "good for people wanting to get"
-            text run at (516,126) width 120: "more familiar with "
-            text run at (636,126) width 79: "Mozilla, and"
-            text run at (516,144) width 189: "there's a strong community. A"
-            text run at (516,162) width 177: "particularly good way to get"
-            text run at (516,180) width 59: "involved "
-            text run at (575,180) width 77: "is to join the"
+            RenderText {#text} at (640,0) size 30x18
+              text run at (640,0) width 30: "page"
+          RenderText {#text} at (670,0) size 212x199
+            text run at (670,0) width 4: " "
+            text run at (674,0) width 60: "dedicated"
+            text run at (524,18) width 179: "to ways to get involved with"
+            text run at (524,36) width 182: "helping. This doesn't involve"
+            text run at (524,54) width 212: "knowing how to code, although a"
+            text run at (524,72) width 182: "little knowledge of HTML is"
+            text run at (524,90) width 94: "helpful. Being "
+            text run at (618,90) width 115: "involved with QA"
+            text run at (524,109) width 14: "is "
+            text run at (538,109) width 194: "good for people wanting to get"
+            text run at (524,127) width 120: "more familiar with "
+            text run at (644,127) width 79: "Mozilla, and"
+            text run at (524,145) width 189: "there's a strong community. A"
+            text run at (524,163) width 177: "particularly good way to get"
+            text run at (524,181) width 59: "involved "
+            text run at (583,181) width 81: "is to join the "
           RenderInline {A} at (0,0) size 73x18 [color=#0000EE]
-            RenderText {#text} at (516,198) size 73x18
-              text run at (516,198) width 73: "BugAThon"
-          RenderText {#text} at (589,198) size 4x18
-            text run at (589,198) width 4: "."
+            RenderText {#text} at (664,181) size 73x18
+              text run at (664,181) width 73: "BugAThon"
+          RenderText {#text} at (737,181) size 4x18
+            text run at (737,181) width 4: "."
diff --git a/LayoutTests/platform/mac/fast/multicol/float-paginate-complex-expected.checksum b/LayoutTests/platform/mac/fast/multicol/float-paginate-complex-expected.checksum
new file mode 100644
index 0000000..7dbdb64
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/float-paginate-complex-expected.checksum
@@ -0,0 +1 @@
+9f7d3d29d572660fbf500b432c0de5d2
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/float-paginate-complex-expected.png b/LayoutTests/platform/mac/fast/multicol/float-paginate-complex-expected.png
new file mode 100644
index 0000000..ed4c8be
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/float-paginate-complex-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/float-paginate-complex-expected.txt b/LayoutTests/platform/mac/fast/multicol/float-paginate-complex-expected.txt
new file mode 100644
index 0000000..c5446d5
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/float-paginate-complex-expected.txt
@@ -0,0 +1,305 @@
+layer at (0,0) size 1164x1680
+  RenderView at (0,0) size 785x585
+layer at (0,0) size 1164x1680
+  RenderBlock {HTML} at (0,0) size 785x1680
+    RenderBody {BODY} at (8,8) size 769x1664
+layer at (8,8) size 1156x404
+  RenderBlock {DIV} at (0,0) size 769x404 [border: (2px solid #000000)]
+    RenderBlock (anonymous) at (2,2) size 374x252
+      RenderText {#text} at (0,0) size 110x18
+        text run at (0,0) width 110: "This is some text."
+      RenderBR {BR} at (110,14) size 0x0
+      RenderText {#text} at (0,18) size 110x18
+        text run at (0,18) width 110: "This is some text."
+      RenderBR {BR} at (110,32) size 0x0
+      RenderText {#text} at (0,36) size 110x18
+        text run at (0,36) width 110: "This is some text."
+      RenderBR {BR} at (110,50) size 0x0
+      RenderText {#text} at (0,54) size 110x18
+        text run at (0,54) width 110: "This is some text."
+      RenderBR {BR} at (110,68) size 0x0
+      RenderText {#text} at (0,72) size 110x18
+        text run at (0,72) width 110: "This is some text."
+      RenderBR {BR} at (110,86) size 0x0
+      RenderText {#text} at (0,90) size 110x18
+        text run at (0,90) width 110: "This is some text."
+      RenderBR {BR} at (110,104) size 0x0
+      RenderText {#text} at (0,108) size 110x18
+        text run at (0,108) width 110: "This is some text."
+      RenderBR {BR} at (110,122) size 0x0
+      RenderText {#text} at (0,126) size 110x18
+        text run at (0,126) width 110: "This is some text."
+      RenderBR {BR} at (110,140) size 0x0
+      RenderText {#text} at (0,144) size 110x18
+        text run at (0,144) width 110: "This is some text."
+      RenderBR {BR} at (110,158) size 0x0
+      RenderText {#text} at (0,162) size 110x18
+        text run at (0,162) width 110: "This is some text."
+      RenderBR {BR} at (110,176) size 0x0
+      RenderText {#text} at (0,180) size 110x18
+        text run at (0,180) width 110: "This is some text."
+      RenderBR {BR} at (110,194) size 0x0
+      RenderText {#text} at (0,198) size 110x18
+        text run at (0,198) width 110: "This is some text."
+      RenderBR {BR} at (110,212) size 0x0
+      RenderText {#text} at (0,216) size 110x18
+        text run at (0,216) width 110: "This is some text."
+      RenderBR {BR} at (110,230) size 0x0
+      RenderText {#text} at (0,234) size 110x18
+        text run at (0,234) width 110: "This is some text."
+      RenderBR {BR} at (110,248) size 0x0
+    RenderBlock {P} at (2,270) size 374x604
+      RenderBlock (floating) {SPAN} at (0,132) size 78x147
+        RenderText {#text} at (0,0) size 78x147
+          text run at (0,0) width 78: "T"
+      RenderText {#text} at (78,132) size 100x18
+        text run at (78,132) width 100: "his is some text."
+      RenderBR {BR} at (178,146) size 0x0
+      RenderText {#text} at (78,150) size 110x18
+        text run at (78,150) width 110: "This is some text."
+      RenderBR {BR} at (188,164) size 0x0
+      RenderText {#text} at (78,168) size 110x18
+        text run at (78,168) width 110: "This is some text."
+      RenderBR {BR} at (188,182) size 0x0
+      RenderText {#text} at (78,186) size 110x18
+        text run at (78,186) width 110: "This is some text."
+      RenderBR {BR} at (188,200) size 0x0
+      RenderText {#text} at (78,204) size 110x18
+        text run at (78,204) width 110: "This is some text."
+      RenderBR {BR} at (188,218) size 0x0
+      RenderText {#text} at (78,222) size 110x18
+        text run at (78,222) width 110: "This is some text."
+      RenderBR {BR} at (188,236) size 0x0
+      RenderText {#text} at (78,240) size 110x18
+        text run at (78,240) width 110: "This is some text."
+      RenderBR {BR} at (188,254) size 0x0
+      RenderText {#text} at (78,258) size 110x18
+        text run at (78,258) width 110: "This is some text."
+      RenderBR {BR} at (188,272) size 0x0
+      RenderText {#text} at (78,276) size 110x18
+        text run at (78,276) width 110: "This is some text."
+      RenderBR {BR} at (188,290) size 0x0
+      RenderText {#text} at (0,294) size 110x18
+        text run at (0,294) width 110: "This is some text."
+      RenderBR {BR} at (110,308) size 0x0
+      RenderText {#text} at (0,312) size 110x18
+        text run at (0,312) width 110: "This is some text."
+      RenderBR {BR} at (110,326) size 0x0
+      RenderText {#text} at (0,330) size 110x18
+        text run at (0,330) width 110: "This is some text."
+      RenderBR {BR} at (110,344) size 0x0
+      RenderText {#text} at (0,348) size 110x18
+        text run at (0,348) width 110: "This is some text."
+      RenderBR {BR} at (110,362) size 0x0
+      RenderText {#text} at (0,366) size 110x18
+        text run at (0,366) width 110: "This is some text."
+      RenderBR {BR} at (110,380) size 0x0
+      RenderText {#text} at (0,384) size 110x18
+        text run at (0,384) width 110: "This is some text."
+      RenderBR {BR} at (110,398) size 0x0
+      RenderText {#text} at (0,402) size 110x18
+        text run at (0,402) width 110: "This is some text."
+      RenderBR {BR} at (110,416) size 0x0
+      RenderText {#text} at (0,420) size 110x18
+        text run at (0,420) width 110: "This is some text."
+      RenderBR {BR} at (110,434) size 0x0
+      RenderText {#text} at (0,438) size 110x18
+        text run at (0,438) width 110: "This is some text."
+      RenderBR {BR} at (110,452) size 0x0
+      RenderText {#text} at (0,456) size 110x18
+        text run at (0,456) width 110: "This is some text."
+      RenderBR {BR} at (110,470) size 0x0
+      RenderText {#text} at (0,474) size 110x18
+        text run at (0,474) width 110: "This is some text."
+      RenderBR {BR} at (110,488) size 0x0
+      RenderText {#text} at (0,492) size 110x18
+        text run at (0,492) width 110: "This is some text."
+      RenderBR {BR} at (110,506) size 0x0
+      RenderText {#text} at (0,510) size 110x18
+        text run at (0,510) width 110: "This is some text."
+      RenderBR {BR} at (110,524) size 0x0
+      RenderText {#text} at (0,532) size 110x18
+        text run at (0,532) width 110: "This is some text."
+      RenderBR {BR} at (110,546) size 0x0
+      RenderText {#text} at (0,550) size 110x18
+        text run at (0,550) width 110: "This is some text."
+      RenderBR {BR} at (110,564) size 0x0
+      RenderText {#text} at (0,568) size 110x18
+        text run at (0,568) width 110: "This is some text."
+      RenderBR {BR} at (110,582) size 0x0
+      RenderText {#text} at (0,586) size 110x18
+        text run at (0,586) width 110: "This is some text."
+      RenderBR {BR} at (110,600) size 0x0
+layer at (8,428) size 1156x404
+  RenderBlock {DIV} at (0,420) size 769x404 [border: (2px solid #000000)]
+    RenderBlock (anonymous) at (2,2) size 374x252
+      RenderText {#text} at (0,0) size 110x18
+        text run at (0,0) width 110: "This is some text."
+      RenderBR {BR} at (110,14) size 0x0
+      RenderText {#text} at (0,18) size 110x18
+        text run at (0,18) width 110: "This is some text."
+      RenderBR {BR} at (110,32) size 0x0
+      RenderText {#text} at (0,36) size 110x18
+        text run at (0,36) width 110: "This is some text."
+      RenderBR {BR} at (110,50) size 0x0
+      RenderText {#text} at (0,54) size 110x18
+        text run at (0,54) width 110: "This is some text."
+      RenderBR {BR} at (110,68) size 0x0
+      RenderText {#text} at (0,72) size 110x18
+        text run at (0,72) width 110: "This is some text."
+      RenderBR {BR} at (110,86) size 0x0
+      RenderText {#text} at (0,90) size 110x18
+        text run at (0,90) width 110: "This is some text."
+      RenderBR {BR} at (110,104) size 0x0
+      RenderText {#text} at (0,108) size 110x18
+        text run at (0,108) width 110: "This is some text."
+      RenderBR {BR} at (110,122) size 0x0
+      RenderText {#text} at (0,126) size 110x18
+        text run at (0,126) width 110: "This is some text."
+      RenderBR {BR} at (110,140) size 0x0
+      RenderText {#text} at (0,144) size 110x18
+        text run at (0,144) width 110: "This is some text."
+      RenderBR {BR} at (110,158) size 0x0
+      RenderText {#text} at (0,162) size 110x18
+        text run at (0,162) width 110: "This is some text."
+      RenderBR {BR} at (110,176) size 0x0
+      RenderText {#text} at (0,180) size 110x18
+        text run at (0,180) width 110: "This is some text."
+      RenderBR {BR} at (110,194) size 0x0
+      RenderText {#text} at (0,198) size 110x18
+        text run at (0,198) width 110: "This is some text."
+      RenderBR {BR} at (110,212) size 0x0
+      RenderText {#text} at (0,216) size 110x18
+        text run at (0,216) width 110: "This is some text."
+      RenderBR {BR} at (110,230) size 0x0
+      RenderText {#text} at (0,234) size 110x18
+        text run at (0,234) width 110: "This is some text."
+      RenderBR {BR} at (110,248) size 0x0
+    RenderBlock {P} at (2,270) size 374x604
+      RenderImage {IMG} at (0,132) size 100x100 [bgcolor=#008000]
+      RenderImage {IMG} at (274,132) size 100x200 [bgcolor=#008000]
+      RenderText {#text} at (100,132) size 106x18
+        text run at (100,132) width 106: "This is some text"
+      RenderBR {BR} at (206,146) size 0x0
+      RenderText {#text} at (100,150) size 110x18
+        text run at (100,150) width 110: "This is some text."
+      RenderBR {BR} at (210,164) size 0x0
+      RenderText {#text} at (100,168) size 110x18
+        text run at (100,168) width 110: "This is some text."
+      RenderBR {BR} at (210,182) size 0x0
+      RenderText {#text} at (100,186) size 110x18
+        text run at (100,186) width 110: "This is some text."
+      RenderBR {BR} at (210,200) size 0x0
+      RenderText {#text} at (100,204) size 110x18
+        text run at (100,204) width 110: "This is some text."
+      RenderBR {BR} at (210,218) size 0x0
+      RenderText {#text} at (100,222) size 110x18
+        text run at (100,222) width 110: "This is some text."
+      RenderBR {BR} at (210,236) size 0x0
+      RenderText {#text} at (0,240) size 110x18
+        text run at (0,240) width 110: "This is some text."
+      RenderBR {BR} at (110,254) size 0x0
+      RenderText {#text} at (0,258) size 110x18
+        text run at (0,258) width 110: "This is some text."
+      RenderBR {BR} at (110,272) size 0x0
+      RenderText {#text} at (0,276) size 110x18
+        text run at (0,276) width 110: "This is some text."
+      RenderBR {BR} at (110,290) size 0x0
+      RenderText {#text} at (0,294) size 110x18
+        text run at (0,294) width 110: "This is some text."
+      RenderBR {BR} at (110,308) size 0x0
+      RenderText {#text} at (0,312) size 110x18
+        text run at (0,312) width 110: "This is some text."
+      RenderBR {BR} at (110,326) size 0x0
+      RenderText {#text} at (0,330) size 110x18
+        text run at (0,330) width 110: "This is some text."
+      RenderBR {BR} at (110,344) size 0x0
+      RenderText {#text} at (0,348) size 110x18
+        text run at (0,348) width 110: "This is some text."
+      RenderBR {BR} at (110,362) size 0x0
+      RenderText {#text} at (0,366) size 110x18
+        text run at (0,366) width 110: "This is some text."
+      RenderBR {BR} at (110,380) size 0x0
+      RenderText {#text} at (0,384) size 110x18
+        text run at (0,384) width 110: "This is some text."
+      RenderBR {BR} at (110,398) size 0x0
+      RenderText {#text} at (0,402) size 110x18
+        text run at (0,402) width 110: "This is some text."
+      RenderBR {BR} at (110,416) size 0x0
+      RenderText {#text} at (0,420) size 110x18
+        text run at (0,420) width 110: "This is some text."
+      RenderBR {BR} at (110,434) size 0x0
+      RenderText {#text} at (0,438) size 110x18
+        text run at (0,438) width 110: "This is some text."
+      RenderBR {BR} at (110,452) size 0x0
+      RenderText {#text} at (0,456) size 110x18
+        text run at (0,456) width 110: "This is some text."
+      RenderBR {BR} at (110,470) size 0x0
+      RenderText {#text} at (0,474) size 110x18
+        text run at (0,474) width 110: "This is some text."
+      RenderBR {BR} at (110,488) size 0x0
+      RenderText {#text} at (0,492) size 110x18
+        text run at (0,492) width 110: "This is some text."
+      RenderBR {BR} at (110,506) size 0x0
+      RenderText {#text} at (0,510) size 110x18
+        text run at (0,510) width 110: "This is some text."
+      RenderBR {BR} at (110,524) size 0x0
+      RenderText {#text} at (0,532) size 110x18
+        text run at (0,532) width 110: "This is some text."
+      RenderBR {BR} at (110,546) size 0x0
+      RenderText {#text} at (0,550) size 110x18
+        text run at (0,550) width 110: "This is some text."
+      RenderBR {BR} at (110,564) size 0x0
+      RenderText {#text} at (0,568) size 110x18
+        text run at (0,568) width 110: "This is some text."
+      RenderBR {BR} at (110,582) size 0x0
+      RenderText {#text} at (0,586) size 110x18
+        text run at (0,586) width 110: "This is some text."
+      RenderBR {BR} at (110,600) size 0x0
+layer at (8,848) size 769x404
+  RenderBlock {DIV} at (0,840) size 769x404 [border: (2px solid #000000)]
+    RenderImage {IMG} at (2,2) size 300x390 [bgcolor=#008000]
+    RenderText {#text} at (302,2) size 373x436
+      text run at (302,2) width 73: "Longer text"
+      text run at (302,20) width 72: "designed to"
+      text run at (302,38) width 53: "test float"
+      text run at (302,56) width 23: "and"
+      text run at (302,74) width 60: "wrapping"
+      text run at (302,92) width 59: "behavior."
+      text run at (302,110) width 73: "Longer text"
+      text run at (302,128) width 72: "designed to"
+      text run at (302,146) width 53: "test float"
+      text run at (302,164) width 23: "and"
+      text run at (302,182) width 60: "wrapping"
+      text run at (302,200) width 59: "behavior."
+      text run at (302,218) width 73: "Longer text"
+      text run at (302,236) width 72: "designed to"
+      text run at (302,254) width 53: "test float"
+      text run at (302,272) width 23: "and"
+      text run at (302,290) width 60: "wrapping"
+      text run at (302,308) width 59: "behavior."
+      text run at (302,326) width 73: "Longer text"
+      text run at (302,344) width 72: "designed to"
+      text run at (302,362) width 53: "test float"
+      text run at (302,380) width 23: "and"
+      text run at (2,402) width 360: "wrapping behavior. Longer text designed to test float and"
+      text run at (2,420) width 123: "wrapping behavior."
+layer at (8,1268) size 769x404
+  RenderBlock {DIV} at (0,1260) size 769x404 [border: (2px solid #000000)]
+    RenderImage {IMG} at (2,2) size 374x380 [bgcolor=#0000FF]
+    RenderInline {SPAN} at (0,0) size 370x252
+      RenderImage {IMG} at (2,402) size 100x20 [bgcolor=#008000]
+      RenderText {#text} at (102,402) size 211x28
+        text run at (102,402) width 211: "Longer text designed "
+      RenderImage {IMG} at (276,430) size 100x20 [bgcolor=#008000]
+      RenderText {#text} at (313,402) size 370x252
+        text run at (313,402) width 59: "to test"
+        text run at (2,430) width 183: "float and wrapping"
+        text run at (2,458) width 367: "behavior. Longer text designed to test"
+        text run at (2,486) width 356: "float and wrapping behavior. Longer"
+        text run at (2,514) width 286: "text designed to test float and"
+        text run at (2,542) width 307: "wrapping behavior. Longer text"
+        text run at (2,570) width 340: "designed to test float and wrapping"
+        text run at (2,598) width 367: "behavior. Longer text designed to test"
+        text run at (2,626) width 280: "float and wrapping behavior."
+    RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/float-paginate-expected.txt b/LayoutTests/platform/mac/fast/multicol/float-paginate-expected.txt
index 7808c66..4855232 100644
--- a/LayoutTests/platform/mac/fast/multicol/float-paginate-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/float-paginate-expected.txt
@@ -3,7 +3,7 @@ layer at (0,0) size 1188x585
 layer at (0,0) size 1188x585
   RenderBlock {HTML} at (0,0) size 800x585
     RenderBody {BODY} at (8,8) size 784x569
-layer at (8,8) size 1180x482
+layer at (8,8) size 1180x404
   RenderBlock {DIV} at (0,0) size 784x404 [border: (2px solid #000000)]
     RenderText {#text} at (2,2) size 110x18
       text run at (2,2) width 110: "This is some text."
@@ -35,94 +35,94 @@ layer at (8,8) size 1180x482
     RenderText {#text} at (2,164) size 110x18
       text run at (2,164) width 110: "This is some text."
     RenderBR {BR} at (112,178) size 0x0
-    RenderImage {IMG} at (2,182) size 250x300 [bgcolor=#008000]
-    RenderText {#text} at (252,182) size 110x18
-      text run at (252,182) width 110: "This is some text."
-    RenderBR {BR} at (362,196) size 0x0
-    RenderText {#text} at (252,200) size 110x18
-      text run at (252,200) width 110: "This is some text."
-    RenderBR {BR} at (362,214) size 0x0
-    RenderText {#text} at (252,218) size 110x18
-      text run at (252,218) width 110: "This is some text."
-    RenderBR {BR} at (362,232) size 0x0
-    RenderText {#text} at (252,236) size 110x18
-      text run at (252,236) width 110: "This is some text."
-    RenderBR {BR} at (362,250) size 0x0
-    RenderText {#text} at (252,254) size 110x18
-      text run at (252,254) width 110: "This is some text."
-    RenderBR {BR} at (362,268) size 0x0
-    RenderText {#text} at (252,272) size 110x18
-      text run at (252,272) width 110: "This is some text."
-    RenderBR {BR} at (362,286) size 0x0
-    RenderText {#text} at (252,290) size 110x18
-      text run at (252,290) width 110: "This is some text."
-    RenderBR {BR} at (362,304) size 0x0
-    RenderText {#text} at (252,308) size 110x18
-      text run at (252,308) width 110: "This is some text."
-    RenderBR {BR} at (362,322) size 0x0
-    RenderText {#text} at (252,326) size 110x18
-      text run at (252,326) width 110: "This is some text."
-    RenderBR {BR} at (362,340) size 0x0
-    RenderText {#text} at (252,344) size 110x18
-      text run at (252,344) width 110: "This is some text."
-    RenderBR {BR} at (362,358) size 0x0
-    RenderText {#text} at (252,362) size 110x18
-      text run at (252,362) width 110: "This is some text."
-    RenderBR {BR} at (362,376) size 0x0
-    RenderText {#text} at (252,380) size 110x18
-      text run at (252,380) width 110: "This is some text."
-    RenderBR {BR} at (362,394) size 0x0
-    RenderText {#text} at (252,398) size 110x18
-      text run at (252,398) width 110: "This is some text."
-    RenderBR {BR} at (362,412) size 0x0
-    RenderText {#text} at (252,416) size 110x18
-      text run at (252,416) width 110: "This is some text."
-    RenderBR {BR} at (362,430) size 0x0
-    RenderText {#text} at (252,434) size 110x18
-      text run at (252,434) width 110: "This is some text."
-    RenderBR {BR} at (362,448) size 0x0
-    RenderText {#text} at (252,452) size 110x18
-      text run at (252,452) width 110: "This is some text."
-    RenderBR {BR} at (362,466) size 0x0
-    RenderText {#text} at (252,470) size 110x18
-      text run at (252,470) width 110: "This is some text."
-    RenderBR {BR} at (362,484) size 0x0
-    RenderText {#text} at (2,488) size 110x18
-      text run at (2,488) width 110: "This is some text."
-    RenderBR {BR} at (112,502) size 0x0
-    RenderText {#text} at (2,506) size 110x18
-      text run at (2,506) width 110: "This is some text."
-    RenderBR {BR} at (112,520) size 0x0
-    RenderText {#text} at (2,524) size 110x18
-      text run at (2,524) width 110: "This is some text."
-    RenderBR {BR} at (112,538) size 0x0
-    RenderText {#text} at (2,542) size 110x18
-      text run at (2,542) width 110: "This is some text."
-    RenderBR {BR} at (112,556) size 0x0
-    RenderText {#text} at (2,560) size 110x18
-      text run at (2,560) width 110: "This is some text."
-    RenderBR {BR} at (112,574) size 0x0
-    RenderText {#text} at (2,578) size 110x18
-      text run at (2,578) width 110: "This is some text."
-    RenderBR {BR} at (112,592) size 0x0
-    RenderText {#text} at (2,596) size 110x18
-      text run at (2,596) width 110: "This is some text."
-    RenderBR {BR} at (112,610) size 0x0
-    RenderText {#text} at (2,614) size 110x18
-      text run at (2,614) width 110: "This is some text."
-    RenderBR {BR} at (112,628) size 0x0
-    RenderText {#text} at (2,632) size 110x18
-      text run at (2,632) width 110: "This is some text."
-    RenderBR {BR} at (112,646) size 0x0
-    RenderText {#text} at (2,650) size 110x18
-      text run at (2,650) width 110: "This is some text."
-    RenderBR {BR} at (112,664) size 0x0
-    RenderText {#text} at (2,668) size 110x18
-      text run at (2,668) width 110: "This is some text."
-    RenderBR {BR} at (112,682) size 0x0
-    RenderText {#text} at (2,686) size 110x18
-      text run at (2,686) width 110: "This is some text."
-    RenderBR {BR} at (112,700) size 0x0
-    RenderText {#text} at (2,704) size 110x18
-      text run at (2,704) width 110: "This is some text."
-    RenderBR {BR} at (112,718) size 0x0
+    RenderImage {IMG} at (2,402) size 250x300 [bgcolor=#008000]
+    RenderText {#text} at (252,402) size 110x18
+      text run at (252,402) width 110: "This is some text."
+    RenderBR {BR} at (362,416) size 0x0
+    RenderText {#text} at (252,420) size 110x18
+      text run at (252,420) width 110: "This is some text."
+    RenderBR {BR} at (362,434) size 0x0
+    RenderText {#text} at (252,438) size 110x18
+      text run at (252,438) width 110: "This is some text."
+    RenderBR {BR} at (362,452) size 0x0
+    RenderText {#text} at (252,456) size 110x18
+      text run at (252,456) width 110: "This is some text."
+    RenderBR {BR} at (362,470) size 0x0
+    RenderText {#text} at (252,474) size 110x18
+      text run at (252,474) width 110: "This is some text."
+    RenderBR {BR} at (362,488) size 0x0
+    RenderText {#text} at (252,492) size 110x18
+      text run at (252,492) width 110: "This is some text."
+    RenderBR {BR} at (362,506) size 0x0
+    RenderText {#text} at (252,510) size 110x18
+      text run at (252,510) width 110: "This is some text."
+    RenderBR {BR} at (362,524) size 0x0
+    RenderText {#text} at (252,528) size 110x18
+      text run at (252,528) width 110: "This is some text."
+    RenderBR {BR} at (362,542) size 0x0
+    RenderText {#text} at (252,546) size 110x18
+      text run at (252,546) width 110: "This is some text."
+    RenderBR {BR} at (362,560) size 0x0
+    RenderText {#text} at (252,564) size 110x18
+      text run at (252,564) width 110: "This is some text."
+    RenderBR {BR} at (362,578) size 0x0
+    RenderText {#text} at (252,582) size 110x18
+      text run at (252,582) width 110: "This is some text."
+    RenderBR {BR} at (362,596) size 0x0
+    RenderText {#text} at (252,600) size 110x18
+      text run at (252,600) width 110: "This is some text."
+    RenderBR {BR} at (362,614) size 0x0
+    RenderText {#text} at (252,618) size 110x18
+      text run at (252,618) width 110: "This is some text."
+    RenderBR {BR} at (362,632) size 0x0
+    RenderText {#text} at (252,636) size 110x18
+      text run at (252,636) width 110: "This is some text."
+    RenderBR {BR} at (362,650) size 0x0
+    RenderText {#text} at (252,654) size 110x18
+      text run at (252,654) width 110: "This is some text."
+    RenderBR {BR} at (362,668) size 0x0
+    RenderText {#text} at (252,672) size 110x18
+      text run at (252,672) width 110: "This is some text."
+    RenderBR {BR} at (362,686) size 0x0
+    RenderText {#text} at (252,690) size 110x18
+      text run at (252,690) width 110: "This is some text."
+    RenderBR {BR} at (362,704) size 0x0
+    RenderText {#text} at (2,708) size 110x18
+      text run at (2,708) width 110: "This is some text."
+    RenderBR {BR} at (112,722) size 0x0
+    RenderText {#text} at (2,726) size 110x18
+      text run at (2,726) width 110: "This is some text."
+    RenderBR {BR} at (112,740) size 0x0
+    RenderText {#text} at (2,744) size 110x18
+      text run at (2,744) width 110: "This is some text."
+    RenderBR {BR} at (112,758) size 0x0
+    RenderText {#text} at (2,762) size 110x18
+      text run at (2,762) width 110: "This is some text."
+    RenderBR {BR} at (112,776) size 0x0
+    RenderText {#text} at (2,780) size 110x18
+      text run at (2,780) width 110: "This is some text."
+    RenderBR {BR} at (112,794) size 0x0
+    RenderText {#text} at (2,802) size 110x18
+      text run at (2,802) width 110: "This is some text."
+    RenderBR {BR} at (112,816) size 0x0
+    RenderText {#text} at (2,820) size 110x18
+      text run at (2,820) width 110: "This is some text."
+    RenderBR {BR} at (112,834) size 0x0
+    RenderText {#text} at (2,838) size 110x18
+      text run at (2,838) width 110: "This is some text."
+    RenderBR {BR} at (112,852) size 0x0
+    RenderText {#text} at (2,856) size 110x18
+      text run at (2,856) width 110: "This is some text."
+    RenderBR {BR} at (112,870) size 0x0
+    RenderText {#text} at (2,874) size 110x18
+      text run at (2,874) width 110: "This is some text."
+    RenderBR {BR} at (112,888) size 0x0
+    RenderText {#text} at (2,892) size 110x18
+      text run at (2,892) width 110: "This is some text."
+    RenderBR {BR} at (112,906) size 0x0
+    RenderText {#text} at (2,910) size 110x18
+      text run at (2,910) width 110: "This is some text."
+    RenderBR {BR} at (112,924) size 0x0
+    RenderText {#text} at (2,928) size 110x18
+      text run at (2,928) width 110: "This is some text."
+    RenderBR {BR} at (112,942) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/layers-in-multicol-expected.checksum b/LayoutTests/platform/mac/fast/multicol/layers-in-multicol-expected.checksum
index 2abd00b..9f23071 100644
--- a/LayoutTests/platform/mac/fast/multicol/layers-in-multicol-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/layers-in-multicol-expected.checksum
@@ -1 +1 @@
-50fe1116e561aa5ef451d024bb6910e2
\ No newline at end of file
+a7db97e150e4a1dab6ad597bc4c7c96e
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/layers-in-multicol-expected.png b/LayoutTests/platform/mac/fast/multicol/layers-in-multicol-expected.png
index 54337c4..126c25a 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/layers-in-multicol-expected.png and b/LayoutTests/platform/mac/fast/multicol/layers-in-multicol-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/layers-in-multicol-expected.txt b/LayoutTests/platform/mac/fast/multicol/layers-in-multicol-expected.txt
index ae3322f..9f95400 100644
--- a/LayoutTests/platform/mac/fast/multicol/layers-in-multicol-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/layers-in-multicol-expected.txt
@@ -53,7 +53,7 @@ layer at (8,26) size 1279x310
       RenderBR {BR} at (106,230) size 0x0
     RenderBlock {DIV} at (5,239) size 242x270
       RenderText {#text} at (0,0) size 0x0
-    RenderBlock (anonymous) at (5,509) size 242x504
+    RenderBlock (anonymous) at (5,509) size 242x522
       RenderText {#text} at (0,0) size 106x18
         text run at (0,0) width 106: "This is some text"
       RenderBR {BR} at (106,14) size 0x0
@@ -69,57 +69,54 @@ layer at (8,26) size 1279x310
       RenderText {#text} at (0,72) size 106x18
         text run at (0,72) width 106: "This is some text"
       RenderBR {BR} at (106,86) size 0x0
-      RenderText {#text} at (0,90) size 106x18
-        text run at (0,90) width 106: "This is some text"
-      RenderBR {BR} at (106,104) size 0x0
-      RenderText {#text} at (0,108) size 106x18
-        text run at (0,108) width 106: "This is some text"
-      RenderBR {BR} at (106,122) size 0x0
-      RenderText {#text} at (0,126) size 106x18
-        text run at (0,126) width 106: "This is some text"
-      RenderBR {BR} at (106,140) size 0x0
-      RenderText {#text} at (0,144) size 106x18
-        text run at (0,144) width 106: "This is some text"
-      RenderBR {BR} at (106,158) size 0x0
-      RenderText {#text} at (0,162) size 106x18
-        text run at (0,162) width 106: "This is some text"
-      RenderBR {BR} at (106,176) size 0x0
-      RenderText {#text} at (0,180) size 106x18
-        text run at (0,180) width 106: "This is some text"
-      RenderBR {BR} at (106,194) size 0x0
-      RenderText {#text} at (0,198) size 106x18
-        text run at (0,198) width 106: "This is some text"
-      RenderBR {BR} at (106,212) size 0x0
-      RenderText {#text} at (0,216) size 106x18
-        text run at (0,216) width 106: "This is some text"
-      RenderBR {BR} at (106,230) size 0x0
-      RenderText {#text} at (0,234) size 106x18
-        text run at (0,234) width 106: "This is some text"
-      RenderBR {BR} at (106,248) size 0x0
-      RenderText {#text} at (0,252) size 106x18
-        text run at (0,252) width 106: "This is some text"
-      RenderBR {BR} at (106,266) size 0x0
-      RenderText {#text} at (0,270) size 106x18
-        text run at (0,270) width 106: "This is some text"
-      RenderBR {BR} at (106,284) size 0x0
-      RenderText {#text} at (0,288) size 106x18
-        text run at (0,288) width 106: "This is some text"
-      RenderBR {BR} at (106,302) size 0x0
-      RenderText {#text} at (0,306) size 106x18
-        text run at (0,306) width 106: "This is some text"
-      RenderBR {BR} at (106,320) size 0x0
-      RenderText {#text} at (0,324) size 106x18
-        text run at (0,324) width 106: "This is some text"
-      RenderBR {BR} at (106,338) size 0x0
-      RenderText {#text} at (0,342) size 106x18
-        text run at (0,342) width 106: "This is some text"
-      RenderBR {BR} at (106,356) size 0x0
-      RenderText {#text} at (0,360) size 106x18
-        text run at (0,360) width 106: "This is some text"
-      RenderBR {BR} at (106,374) size 0x0
-      RenderText {#text} at (0,378) size 106x18
-        text run at (0,378) width 106: "This is some text"
-      RenderBR {BR} at (106,392) size 0x0
+      RenderText {#text} at (0,96) size 106x18
+        text run at (0,96) width 106: "This is some text"
+      RenderBR {BR} at (106,110) size 0x0
+      RenderText {#text} at (0,114) size 106x18
+        text run at (0,114) width 106: "This is some text"
+      RenderBR {BR} at (106,128) size 0x0
+      RenderText {#text} at (0,132) size 106x18
+        text run at (0,132) width 106: "This is some text"
+      RenderBR {BR} at (106,146) size 0x0
+      RenderText {#text} at (0,150) size 106x18
+        text run at (0,150) width 106: "This is some text"
+      RenderBR {BR} at (106,164) size 0x0
+      RenderText {#text} at (0,168) size 106x18
+        text run at (0,168) width 106: "This is some text"
+      RenderBR {BR} at (106,182) size 0x0
+      RenderText {#text} at (0,186) size 106x18
+        text run at (0,186) width 106: "This is some text"
+      RenderBR {BR} at (106,200) size 0x0
+      RenderText {#text} at (0,204) size 106x18
+        text run at (0,204) width 106: "This is some text"
+      RenderBR {BR} at (106,218) size 0x0
+      RenderText {#text} at (0,222) size 106x18
+        text run at (0,222) width 106: "This is some text"
+      RenderBR {BR} at (106,236) size 0x0
+      RenderText {#text} at (0,240) size 106x18
+        text run at (0,240) width 106: "This is some text"
+      RenderBR {BR} at (106,254) size 0x0
+      RenderText {#text} at (0,258) size 106x18
+        text run at (0,258) width 106: "This is some text"
+      RenderBR {BR} at (106,272) size 0x0
+      RenderText {#text} at (0,276) size 106x18
+        text run at (0,276) width 106: "This is some text"
+      RenderBR {BR} at (106,290) size 0x0
+      RenderText {#text} at (0,294) size 106x18
+        text run at (0,294) width 106: "This is some text"
+      RenderBR {BR} at (106,308) size 0x0
+      RenderText {#text} at (0,312) size 106x18
+        text run at (0,312) width 106: "This is some text"
+      RenderBR {BR} at (106,326) size 0x0
+      RenderText {#text} at (0,330) size 106x18
+        text run at (0,330) width 106: "This is some text"
+      RenderBR {BR} at (106,344) size 0x0
+      RenderText {#text} at (0,348) size 106x18
+        text run at (0,348) width 106: "This is some text"
+      RenderBR {BR} at (106,362) size 0x0
+      RenderText {#text} at (0,366) size 106x18
+        text run at (0,366) width 106: "This is some text"
+      RenderBR {BR} at (106,380) size 0x0
       RenderText {#text} at (0,396) size 106x18
         text run at (0,396) width 106: "This is some text"
       RenderBR {BR} at (106,410) size 0x0
@@ -135,8 +132,11 @@ layer at (8,26) size 1279x310
       RenderText {#text} at (0,468) size 106x18
         text run at (0,468) width 106: "This is some text"
       RenderBR {BR} at (106,482) size 0x0
+      RenderText {#text} at (0,486) size 106x18
+        text run at (0,486) width 106: "This is some text"
+      RenderBR {BR} at (106,500) size 0x0
       RenderText {#text} at (0,0) size 0x0
-    RenderBlock (anonymous) at (5,1031) size 242x252
+    RenderBlock (anonymous) at (5,1049) size 242x264
       RenderText {#text} at (0,0) size 106x18
         text run at (0,0) width 106: "This is some text"
       RenderBR {BR} at (106,14) size 0x0
@@ -161,24 +161,24 @@ layer at (8,26) size 1279x310
       RenderText {#text} at (0,126) size 106x18
         text run at (0,126) width 106: "This is some text"
       RenderBR {BR} at (106,140) size 0x0
-      RenderText {#text} at (0,144) size 106x18
-        text run at (0,144) width 106: "This is some text"
-      RenderBR {BR} at (106,158) size 0x0
-      RenderText {#text} at (0,162) size 106x18
-        text run at (0,162) width 106: "This is some text"
-      RenderBR {BR} at (106,176) size 0x0
-      RenderText {#text} at (0,180) size 106x18
-        text run at (0,180) width 106: "This is some text"
-      RenderBR {BR} at (106,194) size 0x0
-      RenderText {#text} at (0,198) size 106x18
-        text run at (0,198) width 106: "This is some text"
-      RenderBR {BR} at (106,212) size 0x0
-      RenderText {#text} at (0,216) size 106x18
-        text run at (0,216) width 106: "This is some text"
-      RenderBR {BR} at (106,230) size 0x0
-      RenderText {#text} at (0,234) size 106x18
-        text run at (0,234) width 106: "This is some text"
-      RenderBR {BR} at (106,248) size 0x0
+      RenderText {#text} at (0,156) size 106x18
+        text run at (0,156) width 106: "This is some text"
+      RenderBR {BR} at (106,170) size 0x0
+      RenderText {#text} at (0,174) size 106x18
+        text run at (0,174) width 106: "This is some text"
+      RenderBR {BR} at (106,188) size 0x0
+      RenderText {#text} at (0,192) size 106x18
+        text run at (0,192) width 106: "This is some text"
+      RenderBR {BR} at (106,206) size 0x0
+      RenderText {#text} at (0,210) size 106x18
+        text run at (0,210) width 106: "This is some text"
+      RenderBR {BR} at (106,224) size 0x0
+      RenderText {#text} at (0,228) size 106x18
+        text run at (0,228) width 106: "This is some text"
+      RenderBR {BR} at (106,242) size 0x0
+      RenderText {#text} at (0,246) size 106x18
+        text run at (0,246) width 106: "This is some text"
+      RenderBR {BR} at (106,260) size 0x0
 layer at (8,354) size 769x310
   RenderBlock {DIV} at (0,346) size 769x310 [border: (5px solid #800000)]
     RenderBlock (anonymous) at (5,5) size 242x234
@@ -223,7 +223,7 @@ layer at (8,354) size 769x310
       RenderBR {BR} at (136,230) size 0x0
     RenderBlock {DIV} at (5,239) size 242x270
       RenderText {#text} at (0,0) size 0x0
-    RenderBlock (anonymous) at (5,509) size 242x504
+    RenderBlock (anonymous) at (5,509) size 242x522
       RenderText {#text} at (136,0) size 106x18
         text run at (136,0) width 106: "This is some text"
       RenderBR {BR} at (136,14) size 0x0
@@ -239,57 +239,54 @@ layer at (8,354) size 769x310
       RenderText {#text} at (136,72) size 106x18
         text run at (136,72) width 106: "This is some text"
       RenderBR {BR} at (136,86) size 0x0
-      RenderText {#text} at (136,90) size 106x18
-        text run at (136,90) width 106: "This is some text"
-      RenderBR {BR} at (136,104) size 0x0
-      RenderText {#text} at (136,108) size 106x18
-        text run at (136,108) width 106: "This is some text"
-      RenderBR {BR} at (136,122) size 0x0
-      RenderText {#text} at (136,126) size 106x18
-        text run at (136,126) width 106: "This is some text"
-      RenderBR {BR} at (136,140) size 0x0
-      RenderText {#text} at (136,144) size 106x18
-        text run at (136,144) width 106: "This is some text"
-      RenderBR {BR} at (136,158) size 0x0
-      RenderText {#text} at (136,162) size 106x18
-        text run at (136,162) width 106: "This is some text"
-      RenderBR {BR} at (136,176) size 0x0
-      RenderText {#text} at (136,180) size 106x18
-        text run at (136,180) width 106: "This is some text"
-      RenderBR {BR} at (136,194) size 0x0
-      RenderText {#text} at (136,198) size 106x18
-        text run at (136,198) width 106: "This is some text"
-      RenderBR {BR} at (136,212) size 0x0
-      RenderText {#text} at (136,216) size 106x18
-        text run at (136,216) width 106: "This is some text"
-      RenderBR {BR} at (136,230) size 0x0
-      RenderText {#text} at (136,234) size 106x18
-        text run at (136,234) width 106: "This is some text"
-      RenderBR {BR} at (136,248) size 0x0
-      RenderText {#text} at (136,252) size 106x18
-        text run at (136,252) width 106: "This is some text"
-      RenderBR {BR} at (136,266) size 0x0
-      RenderText {#text} at (136,270) size 106x18
-        text run at (136,270) width 106: "This is some text"
-      RenderBR {BR} at (136,284) size 0x0
-      RenderText {#text} at (136,288) size 106x18
-        text run at (136,288) width 106: "This is some text"
-      RenderBR {BR} at (136,302) size 0x0
-      RenderText {#text} at (136,306) size 106x18
-        text run at (136,306) width 106: "This is some text"
-      RenderBR {BR} at (136,320) size 0x0
-      RenderText {#text} at (136,324) size 106x18
-        text run at (136,324) width 106: "This is some text"
-      RenderBR {BR} at (136,338) size 0x0
-      RenderText {#text} at (136,342) size 106x18
-        text run at (136,342) width 106: "This is some text"
-      RenderBR {BR} at (136,356) size 0x0
-      RenderText {#text} at (136,360) size 106x18
-        text run at (136,360) width 106: "This is some text"
-      RenderBR {BR} at (136,374) size 0x0
-      RenderText {#text} at (136,378) size 106x18
-        text run at (136,378) width 106: "This is some text"
-      RenderBR {BR} at (136,392) size 0x0
+      RenderText {#text} at (136,96) size 106x18
+        text run at (136,96) width 106: "This is some text"
+      RenderBR {BR} at (136,110) size 0x0
+      RenderText {#text} at (136,114) size 106x18
+        text run at (136,114) width 106: "This is some text"
+      RenderBR {BR} at (136,128) size 0x0
+      RenderText {#text} at (136,132) size 106x18
+        text run at (136,132) width 106: "This is some text"
+      RenderBR {BR} at (136,146) size 0x0
+      RenderText {#text} at (136,150) size 106x18
+        text run at (136,150) width 106: "This is some text"
+      RenderBR {BR} at (136,164) size 0x0
+      RenderText {#text} at (136,168) size 106x18
+        text run at (136,168) width 106: "This is some text"
+      RenderBR {BR} at (136,182) size 0x0
+      RenderText {#text} at (136,186) size 106x18
+        text run at (136,186) width 106: "This is some text"
+      RenderBR {BR} at (136,200) size 0x0
+      RenderText {#text} at (136,204) size 106x18
+        text run at (136,204) width 106: "This is some text"
+      RenderBR {BR} at (136,218) size 0x0
+      RenderText {#text} at (136,222) size 106x18
+        text run at (136,222) width 106: "This is some text"
+      RenderBR {BR} at (136,236) size 0x0
+      RenderText {#text} at (136,240) size 106x18
+        text run at (136,240) width 106: "This is some text"
+      RenderBR {BR} at (136,254) size 0x0
+      RenderText {#text} at (136,258) size 106x18
+        text run at (136,258) width 106: "This is some text"
+      RenderBR {BR} at (136,272) size 0x0
+      RenderText {#text} at (136,276) size 106x18
+        text run at (136,276) width 106: "This is some text"
+      RenderBR {BR} at (136,290) size 0x0
+      RenderText {#text} at (136,294) size 106x18
+        text run at (136,294) width 106: "This is some text"
+      RenderBR {BR} at (136,308) size 0x0
+      RenderText {#text} at (136,312) size 106x18
+        text run at (136,312) width 106: "This is some text"
+      RenderBR {BR} at (136,326) size 0x0
+      RenderText {#text} at (136,330) size 106x18
+        text run at (136,330) width 106: "This is some text"
+      RenderBR {BR} at (136,344) size 0x0
+      RenderText {#text} at (136,348) size 106x18
+        text run at (136,348) width 106: "This is some text"
+      RenderBR {BR} at (136,362) size 0x0
+      RenderText {#text} at (136,366) size 106x18
+        text run at (136,366) width 106: "This is some text"
+      RenderBR {BR} at (136,380) size 0x0
       RenderText {#text} at (136,396) size 106x18
         text run at (136,396) width 106: "This is some text"
       RenderBR {BR} at (136,410) size 0x0
@@ -305,8 +302,11 @@ layer at (8,354) size 769x310
       RenderText {#text} at (136,468) size 106x18
         text run at (136,468) width 106: "This is some text"
       RenderBR {BR} at (136,482) size 0x0
+      RenderText {#text} at (136,486) size 106x18
+        text run at (136,486) width 106: "This is some text"
+      RenderBR {BR} at (136,500) size 0x0
       RenderText {#text} at (0,0) size 0x0
-    RenderBlock (anonymous) at (5,1031) size 242x252
+    RenderBlock (anonymous) at (5,1049) size 242x264
       RenderText {#text} at (136,0) size 106x18
         text run at (136,0) width 106: "This is some text"
       RenderBR {BR} at (136,14) size 0x0
@@ -331,24 +331,24 @@ layer at (8,354) size 769x310
       RenderText {#text} at (136,126) size 106x18
         text run at (136,126) width 106: "This is some text"
       RenderBR {BR} at (136,140) size 0x0
-      RenderText {#text} at (136,144) size 106x18
-        text run at (136,144) width 106: "This is some text"
-      RenderBR {BR} at (136,158) size 0x0
-      RenderText {#text} at (136,162) size 106x18
-        text run at (136,162) width 106: "This is some text"
-      RenderBR {BR} at (136,176) size 0x0
-      RenderText {#text} at (136,180) size 106x18
-        text run at (136,180) width 106: "This is some text"
-      RenderBR {BR} at (136,194) size 0x0
-      RenderText {#text} at (136,198) size 106x18
-        text run at (136,198) width 106: "This is some text"
-      RenderBR {BR} at (136,212) size 0x0
-      RenderText {#text} at (136,216) size 106x18
-        text run at (136,216) width 106: "This is some text"
-      RenderBR {BR} at (136,230) size 0x0
-      RenderText {#text} at (136,234) size 106x18
-        text run at (136,234) width 106: "This is some text"
-      RenderBR {BR} at (136,248) size 0x0
+      RenderText {#text} at (136,156) size 106x18
+        text run at (136,156) width 106: "This is some text"
+      RenderBR {BR} at (136,170) size 0x0
+      RenderText {#text} at (136,174) size 106x18
+        text run at (136,174) width 106: "This is some text"
+      RenderBR {BR} at (136,188) size 0x0
+      RenderText {#text} at (136,192) size 106x18
+        text run at (136,192) width 106: "This is some text"
+      RenderBR {BR} at (136,206) size 0x0
+      RenderText {#text} at (136,210) size 106x18
+        text run at (136,210) width 106: "This is some text"
+      RenderBR {BR} at (136,224) size 0x0
+      RenderText {#text} at (136,228) size 106x18
+        text run at (136,228) width 106: "This is some text"
+      RenderBR {BR} at (136,242) size 0x0
+      RenderText {#text} at (136,246) size 106x18
+        text run at (136,246) width 106: "This is some text"
+      RenderBR {BR} at (136,260) size 0x0
 layer at (13,265) size 100x270
   RenderBlock (relative positioned) {DIV} at (0,0) size 100x270 [bgcolor=#008000]
 layer at (155,593) size 100x270 backgroundClip at (0,0) size 1287x672 clip at (0,0) size 1287x672 outlineClip at (0,0) size 1287x672
diff --git a/LayoutTests/platform/mac/fast/multicol/margin-collapse-expected.checksum b/LayoutTests/platform/mac/fast/multicol/margin-collapse-expected.checksum
new file mode 100644
index 0000000..253e008
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/margin-collapse-expected.checksum
@@ -0,0 +1 @@
+88f386a19a2a4d708e49cadaec8c39d0
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/margin-collapse-expected.png b/LayoutTests/platform/mac/fast/multicol/margin-collapse-expected.png
new file mode 100644
index 0000000..58e3e24
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/margin-collapse-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/margin-collapse-expected.txt b/LayoutTests/platform/mac/fast/multicol/margin-collapse-expected.txt
new file mode 100644
index 0000000..f90f5a2
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/margin-collapse-expected.txt
@@ -0,0 +1,14 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderBlock (anonymous) at (0,0) size 784x36
+        RenderText {#text} at (0,0) size 769x36
+          text run at (0,0) width 480: "The two purple rectangles below should both be at the top of their columns. "
+          text run at (480,0) width 289: "If one is lower than the other, than the test has"
+          text run at (0,18) width 39: "failed."
+layer at (8,44) size 784x304
+  RenderBlock {DIV} at (0,36) size 784x304 [border: (2px solid #000000)]
+    RenderBlock {DIV} at (2,2) size 382x200 [bgcolor=#800080]
+    RenderBlock {DIV} at (2,302) size 382x200 [bgcolor=#800080]
diff --git a/LayoutTests/platform/mac/fast/multicol/max-height-columns-block-expected.checksum b/LayoutTests/platform/mac/fast/multicol/max-height-columns-block-expected.checksum
new file mode 100644
index 0000000..e3ed08d
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/max-height-columns-block-expected.checksum
@@ -0,0 +1 @@
+16c112ebfd11dec47a001ff11315f512
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/max-height-columns-block-expected.png b/LayoutTests/platform/mac/fast/multicol/max-height-columns-block-expected.png
new file mode 100644
index 0000000..dee109d
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/max-height-columns-block-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/max-height-columns-block-expected.txt b/LayoutTests/platform/mac/fast/multicol/max-height-columns-block-expected.txt
new file mode 100644
index 0000000..f558dbb
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/max-height-columns-block-expected.txt
@@ -0,0 +1,47 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderBlock (anonymous) at (0,0) size 784x72
+        RenderText {#text} at (0,0) size 768x72
+          text run at (0,0) width 427: "This is capturing current behavior, but it's not clear that it is correct. "
+          text run at (427,0) width 291: "It's not clear if max-height on a columns block"
+          text run at (0,18) width 291: "constitutes a constraint on the columns or not. "
+          text run at (291,18) width 477: "You obviously begin trying to balance, but only run into the constraint once"
+          text run at (0,36) width 290: "the balanced columns exceed the max-height. "
+          text run at (290,36) width 325: "It's not clear that you should suddenly shift to a fill. "
+          text run at (615,36) width 132: "Our current behavior"
+          text run at (0,54) width 512: "(which matches Firefox) is to just overflow without changing from balance to fill."
+layer at (8,80) size 404x64
+  RenderBlock {DIV} at (0,72) size 404x64 [border: (2px solid #000000)]
+    RenderText {#text} at (2,2) size 51x112
+      text run at (2,2) width 43: "This"
+      text run at (2,30) width 16: "is"
+      text run at (2,58) width 51: "some"
+      text run at (2,86) width 37: "text"
+    RenderBR {BR} at (39,108) size 0x0
+    RenderText {#text} at (2,114) size 51x112
+      text run at (2,114) width 43: "This"
+      text run at (2,142) width 16: "is"
+      text run at (2,170) width 51: "some"
+      text run at (2,198) width 37: "text"
+    RenderBR {BR} at (39,220) size 0x0
+    RenderText {#text} at (2,226) size 51x112
+      text run at (2,226) width 43: "This"
+      text run at (2,254) width 16: "is"
+      text run at (2,282) width 51: "some"
+      text run at (2,310) width 37: "text"
+    RenderBR {BR} at (39,332) size 0x0
+    RenderText {#text} at (2,338) size 51x112
+      text run at (2,338) width 43: "This"
+      text run at (2,366) width 16: "is"
+      text run at (2,394) width 51: "some"
+      text run at (2,422) width 37: "text"
+    RenderBR {BR} at (39,444) size 0x0
+    RenderText {#text} at (2,450) size 51x112
+      text run at (2,450) width 43: "This"
+      text run at (2,478) width 16: "is"
+      text run at (2,506) width 51: "some"
+      text run at (2,534) width 37: "text"
+    RenderBR {BR} at (39,556) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/nested-columns-expected.checksum b/LayoutTests/platform/mac/fast/multicol/nested-columns-expected.checksum
index 152aeab..9b0bd77 100644
--- a/LayoutTests/platform/mac/fast/multicol/nested-columns-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/nested-columns-expected.checksum
@@ -1 +1 @@
-542a0b8459662240ba99655a769981e3
\ No newline at end of file
+34799773c794fa8208d3140d54031eec
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/nested-columns-expected.png b/LayoutTests/platform/mac/fast/multicol/nested-columns-expected.png
index 24c5ff0..be5090d 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/nested-columns-expected.png and b/LayoutTests/platform/mac/fast/multicol/nested-columns-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/nested-columns-expected.txt b/LayoutTests/platform/mac/fast/multicol/nested-columns-expected.txt
index f740c7f..8da4f69 100644
--- a/LayoutTests/platform/mac/fast/multicol/nested-columns-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/nested-columns-expected.txt
@@ -23,8 +23,8 @@ layer at (8,8) size 750x500
     RenderBlock {H1} at (0,277) size 367x37
       RenderText {#text} at (0,0) size 169x37
         text run at (0,0) width 169: "Header Two"
-    RenderBlock (anonymous) at (0,335) size 367x198
-      RenderText {#text} at (0,0) size 362x198
+    RenderBlock (anonymous) at (0,335) size 367x201
+      RenderText {#text} at (0,0) size 362x201
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
@@ -34,15 +34,15 @@ layer at (8,8) size 750x500
         text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
         text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {H1} at (0,554) size 367x37
+        text run at (0,165) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,183) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock {H1} at (0,557) size 367x37
       RenderText {#text} at (0,0) size 190x37
         text run at (0,0) width 190: "Header Three"
-    RenderBlock {H1} at (0,849) size 367x37
+    RenderBlock {H1} at (0,852) size 367x37
       RenderText {#text} at (0,0) size 177x37
         text run at (0,0) width 177: "Header Four"
-    RenderBlock (anonymous) at (0,907) size 367x36
+    RenderBlock (anonymous) at (0,910) size 367x36
       RenderText {#text} at (0,0) size 354x36
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 154: "Nulla varius enim ac mi."
diff --git a/LayoutTests/platform/mac/fast/multicol/paginate-block-replaced-expected.txt b/LayoutTests/platform/mac/fast/multicol/paginate-block-replaced-expected.txt
index ebc8f06..ed43337 100644
--- a/LayoutTests/platform/mac/fast/multicol/paginate-block-replaced-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/paginate-block-replaced-expected.txt
@@ -36,8 +36,8 @@ layer at (8,8) size 1578x404
       RenderText {#text} at (0,162) size 110x18
         text run at (0,162) width 110: "This is some text."
       RenderBR {BR} at (110,176) size 0x0
-    RenderImage {IMG} at (2,182) size 250x300 [bgcolor=#008000]
-    RenderBlock (anonymous) at (2,482) size 382x540
+    RenderImage {IMG} at (2,402) size 250x300 [bgcolor=#008000]
+    RenderBlock (anonymous) at (2,702) size 382x554
       RenderText {#text} at (0,0) size 110x18
         text run at (0,0) width 110: "This is some text."
       RenderBR {BR} at (110,14) size 0x0
@@ -53,78 +53,78 @@ layer at (8,8) size 1578x404
       RenderText {#text} at (0,72) size 110x18
         text run at (0,72) width 110: "This is some text."
       RenderBR {BR} at (110,86) size 0x0
-      RenderText {#text} at (0,90) size 110x18
-        text run at (0,90) width 110: "This is some text."
-      RenderBR {BR} at (110,104) size 0x0
-      RenderText {#text} at (0,108) size 110x18
-        text run at (0,108) width 110: "This is some text."
-      RenderBR {BR} at (110,122) size 0x0
-      RenderText {#text} at (0,126) size 110x18
-        text run at (0,126) width 110: "This is some text."
-      RenderBR {BR} at (110,140) size 0x0
-      RenderText {#text} at (0,144) size 110x18
-        text run at (0,144) width 110: "This is some text."
-      RenderBR {BR} at (110,158) size 0x0
-      RenderText {#text} at (0,162) size 110x18
-        text run at (0,162) width 110: "This is some text."
-      RenderBR {BR} at (110,176) size 0x0
-      RenderText {#text} at (0,180) size 110x18
-        text run at (0,180) width 110: "This is some text."
-      RenderBR {BR} at (110,194) size 0x0
-      RenderText {#text} at (0,198) size 110x18
-        text run at (0,198) width 110: "This is some text."
-      RenderBR {BR} at (110,212) size 0x0
-      RenderText {#text} at (0,216) size 110x18
-        text run at (0,216) width 110: "This is some text."
-      RenderBR {BR} at (110,230) size 0x0
-      RenderText {#text} at (0,234) size 110x18
-        text run at (0,234) width 110: "This is some text."
-      RenderBR {BR} at (110,248) size 0x0
-      RenderText {#text} at (0,252) size 110x18
-        text run at (0,252) width 110: "This is some text."
-      RenderBR {BR} at (110,266) size 0x0
-      RenderText {#text} at (0,270) size 110x18
-        text run at (0,270) width 110: "This is some text."
-      RenderBR {BR} at (110,284) size 0x0
-      RenderText {#text} at (0,288) size 110x18
-        text run at (0,288) width 110: "This is some text."
-      RenderBR {BR} at (110,302) size 0x0
-      RenderText {#text} at (0,306) size 110x18
-        text run at (0,306) width 110: "This is some text."
-      RenderBR {BR} at (110,320) size 0x0
-      RenderText {#text} at (0,324) size 110x18
-        text run at (0,324) width 110: "This is some text."
-      RenderBR {BR} at (110,338) size 0x0
-      RenderText {#text} at (0,342) size 110x18
-        text run at (0,342) width 110: "This is some text."
-      RenderBR {BR} at (110,356) size 0x0
-      RenderText {#text} at (0,360) size 110x18
-        text run at (0,360) width 110: "This is some text."
-      RenderBR {BR} at (110,374) size 0x0
-      RenderText {#text} at (0,378) size 110x18
-        text run at (0,378) width 110: "This is some text."
-      RenderBR {BR} at (110,392) size 0x0
-      RenderText {#text} at (0,396) size 110x18
-        text run at (0,396) width 110: "This is some text."
-      RenderBR {BR} at (110,410) size 0x0
-      RenderText {#text} at (0,414) size 110x18
-        text run at (0,414) width 110: "This is some text."
-      RenderBR {BR} at (110,428) size 0x0
-      RenderText {#text} at (0,432) size 110x18
-        text run at (0,432) width 110: "This is some text."
-      RenderBR {BR} at (110,446) size 0x0
-      RenderText {#text} at (0,450) size 110x18
-        text run at (0,450) width 110: "This is some text."
-      RenderBR {BR} at (110,464) size 0x0
-      RenderText {#text} at (0,468) size 110x18
-        text run at (0,468) width 110: "This is some text."
-      RenderBR {BR} at (110,482) size 0x0
-      RenderText {#text} at (0,486) size 110x18
-        text run at (0,486) width 110: "This is some text."
-      RenderBR {BR} at (110,500) size 0x0
-      RenderText {#text} at (0,504) size 110x18
-        text run at (0,504) width 110: "This is some text."
-      RenderBR {BR} at (110,518) size 0x0
-      RenderText {#text} at (0,522) size 110x18
-        text run at (0,522) width 110: "This is some text."
-      RenderBR {BR} at (110,536) size 0x0
+      RenderText {#text} at (0,100) size 110x18
+        text run at (0,100) width 110: "This is some text."
+      RenderBR {BR} at (110,114) size 0x0
+      RenderText {#text} at (0,118) size 110x18
+        text run at (0,118) width 110: "This is some text."
+      RenderBR {BR} at (110,132) size 0x0
+      RenderText {#text} at (0,136) size 110x18
+        text run at (0,136) width 110: "This is some text."
+      RenderBR {BR} at (110,150) size 0x0
+      RenderText {#text} at (0,154) size 110x18
+        text run at (0,154) width 110: "This is some text."
+      RenderBR {BR} at (110,168) size 0x0
+      RenderText {#text} at (0,172) size 110x18
+        text run at (0,172) width 110: "This is some text."
+      RenderBR {BR} at (110,186) size 0x0
+      RenderText {#text} at (0,190) size 110x18
+        text run at (0,190) width 110: "This is some text."
+      RenderBR {BR} at (110,204) size 0x0
+      RenderText {#text} at (0,208) size 110x18
+        text run at (0,208) width 110: "This is some text."
+      RenderBR {BR} at (110,222) size 0x0
+      RenderText {#text} at (0,226) size 110x18
+        text run at (0,226) width 110: "This is some text."
+      RenderBR {BR} at (110,240) size 0x0
+      RenderText {#text} at (0,244) size 110x18
+        text run at (0,244) width 110: "This is some text."
+      RenderBR {BR} at (110,258) size 0x0
+      RenderText {#text} at (0,262) size 110x18
+        text run at (0,262) width 110: "This is some text."
+      RenderBR {BR} at (110,276) size 0x0
+      RenderText {#text} at (0,280) size 110x18
+        text run at (0,280) width 110: "This is some text."
+      RenderBR {BR} at (110,294) size 0x0
+      RenderText {#text} at (0,298) size 110x18
+        text run at (0,298) width 110: "This is some text."
+      RenderBR {BR} at (110,312) size 0x0
+      RenderText {#text} at (0,316) size 110x18
+        text run at (0,316) width 110: "This is some text."
+      RenderBR {BR} at (110,330) size 0x0
+      RenderText {#text} at (0,334) size 110x18
+        text run at (0,334) width 110: "This is some text."
+      RenderBR {BR} at (110,348) size 0x0
+      RenderText {#text} at (0,352) size 110x18
+        text run at (0,352) width 110: "This is some text."
+      RenderBR {BR} at (110,366) size 0x0
+      RenderText {#text} at (0,370) size 110x18
+        text run at (0,370) width 110: "This is some text."
+      RenderBR {BR} at (110,384) size 0x0
+      RenderText {#text} at (0,388) size 110x18
+        text run at (0,388) width 110: "This is some text."
+      RenderBR {BR} at (110,402) size 0x0
+      RenderText {#text} at (0,406) size 110x18
+        text run at (0,406) width 110: "This is some text."
+      RenderBR {BR} at (110,420) size 0x0
+      RenderText {#text} at (0,424) size 110x18
+        text run at (0,424) width 110: "This is some text."
+      RenderBR {BR} at (110,438) size 0x0
+      RenderText {#text} at (0,442) size 110x18
+        text run at (0,442) width 110: "This is some text."
+      RenderBR {BR} at (110,456) size 0x0
+      RenderText {#text} at (0,460) size 110x18
+        text run at (0,460) width 110: "This is some text."
+      RenderBR {BR} at (110,474) size 0x0
+      RenderText {#text} at (0,478) size 110x18
+        text run at (0,478) width 110: "This is some text."
+      RenderBR {BR} at (110,492) size 0x0
+      RenderText {#text} at (0,500) size 110x18
+        text run at (0,500) width 110: "This is some text."
+      RenderBR {BR} at (110,514) size 0x0
+      RenderText {#text} at (0,518) size 110x18
+        text run at (0,518) width 110: "This is some text."
+      RenderBR {BR} at (110,532) size 0x0
+      RenderText {#text} at (0,536) size 110x18
+        text run at (0,536) width 110: "This is some text."
+      RenderBR {BR} at (110,550) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/positioned-split-expected.checksum b/LayoutTests/platform/mac/fast/multicol/positioned-split-expected.checksum
new file mode 100644
index 0000000..72fd578
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/positioned-split-expected.checksum
@@ -0,0 +1 @@
+b83991f98f74d8f07cff9839da6c8482
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/positioned-split-expected.png b/LayoutTests/platform/mac/fast/multicol/positioned-split-expected.png
new file mode 100644
index 0000000..82b6268
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/positioned-split-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/positioned-split-expected.txt b/LayoutTests/platform/mac/fast/multicol/positioned-split-expected.txt
new file mode 100644
index 0000000..7fe9183
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/positioned-split-expected.txt
@@ -0,0 +1,26 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (8,8) size 784x304
+  RenderBlock {DIV} at (0,0) size 784x304 [border: (2px solid #000000)]
+    RenderBlock {DIV} at (2,2) size 382x250
+    RenderBlock {DIV} at (2,252) size 382x250
+layer at (10,260) size 300x200
+  RenderBlock (positioned) {DIV} at (0,0) size 300x200 [bgcolor=#D3D3D3]
+    RenderText {#text} at (0,0) size 285x18
+      text run at (0,0) width 285: "This text should paginate across the columns."
+    RenderBR {BR} at (285,14) size 0x0
+    RenderText {#text} at (0,18) size 285x18
+      text run at (0,18) width 285: "This text should paginate across the columns."
+    RenderBR {BR} at (285,32) size 0x0
+    RenderText {#text} at (0,50) size 285x18
+      text run at (0,50) width 285: "This text should paginate across the columns."
+    RenderBR {BR} at (285,64) size 0x0
+    RenderText {#text} at (0,68) size 285x18
+      text run at (0,68) width 285: "This text should paginate across the columns."
+    RenderBR {BR} at (285,82) size 0x0
+    RenderText {#text} at (0,86) size 285x18
+      text run at (0,86) width 285: "This text should paginate across the columns."
+    RenderBR {BR} at (285,100) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/positioned-with-constrained-height-expected.checksum b/LayoutTests/platform/mac/fast/multicol/positioned-with-constrained-height-expected.checksum
index 2ea4e02..0b8c7f3 100644
--- a/LayoutTests/platform/mac/fast/multicol/positioned-with-constrained-height-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/positioned-with-constrained-height-expected.checksum
@@ -1 +1 @@
-733dd38f037db369a784a06b1750e251
\ No newline at end of file
+8ac036af8a28872732051b857def89f2
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/positioned-with-constrained-height-expected.png b/LayoutTests/platform/mac/fast/multicol/positioned-with-constrained-height-expected.png
index be02443..080d55a 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/positioned-with-constrained-height-expected.png and b/LayoutTests/platform/mac/fast/multicol/positioned-with-constrained-height-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/positioned-with-constrained-height-expected.txt b/LayoutTests/platform/mac/fast/multicol/positioned-with-constrained-height-expected.txt
index 6ad7d8e..02b694c 100644
--- a/LayoutTests/platform/mac/fast/multicol/positioned-with-constrained-height-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/positioned-with-constrained-height-expected.txt
@@ -53,108 +53,102 @@ layer at (8,8) size 1082x300
     RenderText {#text} at (0,270) size 106x18
       text run at (0,270) width 106: "This is some text"
     RenderBR {BR} at (106,284) size 0x0
-    RenderText {#text} at (0,288) size 106x18
-      text run at (0,288) width 106: "This is some text"
-    RenderBR {BR} at (106,302) size 0x0
-    RenderText {#text} at (0,306) size 106x18
-      text run at (0,306) width 106: "This is some text"
-    RenderBR {BR} at (106,320) size 0x0
-    RenderText {#text} at (0,324) size 106x18
-      text run at (0,324) width 106: "This is some text"
-    RenderBR {BR} at (106,338) size 0x0
-    RenderText {#text} at (0,342) size 106x18
-      text run at (0,342) width 106: "This is some text"
-    RenderBR {BR} at (106,356) size 0x0
-    RenderText {#text} at (0,360) size 106x18
-      text run at (0,360) width 106: "This is some text"
-    RenderBR {BR} at (106,374) size 0x0
-    RenderText {#text} at (0,378) size 106x18
-      text run at (0,378) width 106: "This is some text"
-    RenderBR {BR} at (106,392) size 0x0
-    RenderText {#text} at (0,396) size 106x18
-      text run at (0,396) width 106: "This is some text"
-    RenderBR {BR} at (106,410) size 0x0
-    RenderText {#text} at (0,414) size 106x18
-      text run at (0,414) width 106: "This is some text"
-    RenderBR {BR} at (106,428) size 0x0
-    RenderText {#text} at (0,432) size 106x18
-      text run at (0,432) width 106: "This is some text"
-    RenderBR {BR} at (106,446) size 0x0
-    RenderText {#text} at (0,450) size 106x18
-      text run at (0,450) width 106: "This is some text"
-    RenderBR {BR} at (106,464) size 0x0
-    RenderText {#text} at (0,468) size 106x18
-      text run at (0,468) width 106: "This is some text"
-    RenderBR {BR} at (106,482) size 0x0
-    RenderText {#text} at (0,486) size 106x18
-      text run at (0,486) width 106: "This is some text"
-    RenderBR {BR} at (106,500) size 0x0
-    RenderText {#text} at (0,504) size 106x18
-      text run at (0,504) width 106: "This is some text"
-    RenderBR {BR} at (106,518) size 0x0
-    RenderText {#text} at (0,522) size 106x18
-      text run at (0,522) width 106: "This is some text"
-    RenderBR {BR} at (106,536) size 0x0
-    RenderText {#text} at (0,540) size 106x18
-      text run at (0,540) width 106: "This is some text"
-    RenderBR {BR} at (106,554) size 0x0
-    RenderText {#text} at (0,558) size 106x18
-      text run at (0,558) width 106: "This is some text"
-    RenderBR {BR} at (106,572) size 0x0
-    RenderText {#text} at (0,576) size 106x18
-      text run at (0,576) width 106: "This is some text"
-    RenderBR {BR} at (106,590) size 0x0
-    RenderText {#text} at (0,594) size 106x18
-      text run at (0,594) width 106: "This is some text"
-    RenderBR {BR} at (106,608) size 0x0
-    RenderText {#text} at (0,612) size 106x18
-      text run at (0,612) width 106: "This is some text"
-    RenderBR {BR} at (106,626) size 0x0
-    RenderText {#text} at (0,630) size 106x18
-      text run at (0,630) width 106: "This is some text"
-    RenderBR {BR} at (106,644) size 0x0
-    RenderText {#text} at (0,648) size 106x18
-      text run at (0,648) width 106: "This is some text"
-    RenderBR {BR} at (106,662) size 0x0
-    RenderText {#text} at (0,666) size 106x18
-      text run at (0,666) width 106: "This is some text"
-    RenderBR {BR} at (106,680) size 0x0
-    RenderText {#text} at (0,684) size 106x18
-      text run at (0,684) width 106: "This is some text"
-    RenderBR {BR} at (106,698) size 0x0
-    RenderText {#text} at (0,702) size 106x18
-      text run at (0,702) width 106: "This is some text"
-    RenderBR {BR} at (106,716) size 0x0
-    RenderText {#text} at (0,720) size 106x18
-      text run at (0,720) width 106: "This is some text"
-    RenderBR {BR} at (106,734) size 0x0
-    RenderText {#text} at (0,738) size 106x18
-      text run at (0,738) width 106: "This is some text"
-    RenderBR {BR} at (106,752) size 0x0
-    RenderText {#text} at (0,756) size 106x18
-      text run at (0,756) width 106: "This is some text"
-    RenderBR {BR} at (106,770) size 0x0
-    RenderText {#text} at (0,774) size 106x18
-      text run at (0,774) width 106: "This is some text"
-    RenderBR {BR} at (106,788) size 0x0
-    RenderText {#text} at (0,792) size 106x18
-      text run at (0,792) width 106: "This is some text"
-    RenderBR {BR} at (106,806) size 0x0
-    RenderText {#text} at (0,810) size 106x18
-      text run at (0,810) width 106: "This is some text"
-    RenderBR {BR} at (106,824) size 0x0
-    RenderText {#text} at (0,828) size 106x18
-      text run at (0,828) width 106: "This is some text"
-    RenderBR {BR} at (106,842) size 0x0
-    RenderText {#text} at (0,846) size 106x18
-      text run at (0,846) width 106: "This is some text"
-    RenderBR {BR} at (106,860) size 0x0
-    RenderText {#text} at (0,864) size 106x18
-      text run at (0,864) width 106: "This is some text"
-    RenderBR {BR} at (106,878) size 0x0
-    RenderText {#text} at (0,882) size 106x18
-      text run at (0,882) width 106: "This is some text"
-    RenderBR {BR} at (106,896) size 0x0
+    RenderText {#text} at (0,300) size 106x18
+      text run at (0,300) width 106: "This is some text"
+    RenderBR {BR} at (106,314) size 0x0
+    RenderText {#text} at (0,318) size 106x18
+      text run at (0,318) width 106: "This is some text"
+    RenderBR {BR} at (106,332) size 0x0
+    RenderText {#text} at (0,336) size 106x18
+      text run at (0,336) width 106: "This is some text"
+    RenderBR {BR} at (106,350) size 0x0
+    RenderText {#text} at (0,354) size 106x18
+      text run at (0,354) width 106: "This is some text"
+    RenderBR {BR} at (106,368) size 0x0
+    RenderText {#text} at (0,372) size 106x18
+      text run at (0,372) width 106: "This is some text"
+    RenderBR {BR} at (106,386) size 0x0
+    RenderText {#text} at (0,390) size 106x18
+      text run at (0,390) width 106: "This is some text"
+    RenderBR {BR} at (106,404) size 0x0
+    RenderText {#text} at (0,408) size 106x18
+      text run at (0,408) width 106: "This is some text"
+    RenderBR {BR} at (106,422) size 0x0
+    RenderText {#text} at (0,426) size 106x18
+      text run at (0,426) width 106: "This is some text"
+    RenderBR {BR} at (106,440) size 0x0
+    RenderText {#text} at (0,444) size 106x18
+      text run at (0,444) width 106: "This is some text"
+    RenderBR {BR} at (106,458) size 0x0
+    RenderText {#text} at (0,462) size 106x18
+      text run at (0,462) width 106: "This is some text"
+    RenderBR {BR} at (106,476) size 0x0
+    RenderText {#text} at (0,480) size 106x18
+      text run at (0,480) width 106: "This is some text"
+    RenderBR {BR} at (106,494) size 0x0
+    RenderText {#text} at (0,498) size 106x18
+      text run at (0,498) width 106: "This is some text"
+    RenderBR {BR} at (106,512) size 0x0
+    RenderText {#text} at (0,516) size 106x18
+      text run at (0,516) width 106: "This is some text"
+    RenderBR {BR} at (106,530) size 0x0
+    RenderText {#text} at (0,534) size 106x18
+      text run at (0,534) width 106: "This is some text"
+    RenderBR {BR} at (106,548) size 0x0
+    RenderText {#text} at (0,552) size 106x18
+      text run at (0,552) width 106: "This is some text"
+    RenderBR {BR} at (106,566) size 0x0
+    RenderText {#text} at (0,570) size 106x18
+      text run at (0,570) width 106: "This is some text"
+    RenderBR {BR} at (106,584) size 0x0
+    RenderText {#text} at (0,600) size 106x18
+      text run at (0,600) width 106: "This is some text"
+    RenderBR {BR} at (106,614) size 0x0
+    RenderText {#text} at (0,618) size 106x18
+      text run at (0,618) width 106: "This is some text"
+    RenderBR {BR} at (106,632) size 0x0
+    RenderText {#text} at (0,636) size 106x18
+      text run at (0,636) width 106: "This is some text"
+    RenderBR {BR} at (106,650) size 0x0
+    RenderText {#text} at (0,654) size 106x18
+      text run at (0,654) width 106: "This is some text"
+    RenderBR {BR} at (106,668) size 0x0
+    RenderText {#text} at (0,672) size 106x18
+      text run at (0,672) width 106: "This is some text"
+    RenderBR {BR} at (106,686) size 0x0
+    RenderText {#text} at (0,690) size 106x18
+      text run at (0,690) width 106: "This is some text"
+    RenderBR {BR} at (106,704) size 0x0
+    RenderText {#text} at (0,708) size 106x18
+      text run at (0,708) width 106: "This is some text"
+    RenderBR {BR} at (106,722) size 0x0
+    RenderText {#text} at (0,726) size 106x18
+      text run at (0,726) width 106: "This is some text"
+    RenderBR {BR} at (106,740) size 0x0
+    RenderText {#text} at (0,744) size 106x18
+      text run at (0,744) width 106: "This is some text"
+    RenderBR {BR} at (106,758) size 0x0
+    RenderText {#text} at (0,762) size 106x18
+      text run at (0,762) width 106: "This is some text"
+    RenderBR {BR} at (106,776) size 0x0
+    RenderText {#text} at (0,780) size 106x18
+      text run at (0,780) width 106: "This is some text"
+    RenderBR {BR} at (106,794) size 0x0
+    RenderText {#text} at (0,798) size 106x18
+      text run at (0,798) width 106: "This is some text"
+    RenderBR {BR} at (106,812) size 0x0
+    RenderText {#text} at (0,816) size 106x18
+      text run at (0,816) width 106: "This is some text"
+    RenderBR {BR} at (106,830) size 0x0
+    RenderText {#text} at (0,834) size 106x18
+      text run at (0,834) width 106: "This is some text"
+    RenderBR {BR} at (106,848) size 0x0
+    RenderText {#text} at (0,852) size 106x18
+      text run at (0,852) width 106: "This is some text"
+    RenderBR {BR} at (106,866) size 0x0
+    RenderText {#text} at (0,870) size 106x18
+      text run at (0,870) width 106: "This is some text"
+    RenderBR {BR} at (106,884) size 0x0
     RenderText {#text} at (0,900) size 106x18
       text run at (0,900) width 106: "This is some text"
     RenderBR {BR} at (106,914) size 0x0
@@ -203,108 +197,102 @@ layer at (8,8) size 1082x300
     RenderText {#text} at (0,1170) size 106x18
       text run at (0,1170) width 106: "This is some text"
     RenderBR {BR} at (106,1184) size 0x0
-    RenderText {#text} at (0,1188) size 106x18
-      text run at (0,1188) width 106: "This is some text"
-    RenderBR {BR} at (106,1202) size 0x0
-    RenderText {#text} at (0,1206) size 106x18
-      text run at (0,1206) width 106: "This is some text"
-    RenderBR {BR} at (106,1220) size 0x0
-    RenderText {#text} at (0,1224) size 106x18
-      text run at (0,1224) width 106: "This is some text"
-    RenderBR {BR} at (106,1238) size 0x0
-    RenderText {#text} at (0,1242) size 106x18
-      text run at (0,1242) width 106: "This is some text"
-    RenderBR {BR} at (106,1256) size 0x0
-    RenderText {#text} at (0,1260) size 106x18
-      text run at (0,1260) width 106: "This is some text"
-    RenderBR {BR} at (106,1274) size 0x0
-    RenderText {#text} at (0,1278) size 106x18
-      text run at (0,1278) width 106: "This is some text"
-    RenderBR {BR} at (106,1292) size 0x0
-    RenderText {#text} at (0,1296) size 106x18
-      text run at (0,1296) width 106: "This is some text"
-    RenderBR {BR} at (106,1310) size 0x0
-    RenderText {#text} at (0,1314) size 106x18
-      text run at (0,1314) width 106: "This is some text"
-    RenderBR {BR} at (106,1328) size 0x0
-    RenderText {#text} at (0,1332) size 106x18
-      text run at (0,1332) width 106: "This is some text"
-    RenderBR {BR} at (106,1346) size 0x0
-    RenderText {#text} at (0,1350) size 106x18
-      text run at (0,1350) width 106: "This is some text"
-    RenderBR {BR} at (106,1364) size 0x0
-    RenderText {#text} at (0,1368) size 106x18
-      text run at (0,1368) width 106: "This is some text"
-    RenderBR {BR} at (106,1382) size 0x0
-    RenderText {#text} at (0,1386) size 106x18
-      text run at (0,1386) width 106: "This is some text"
-    RenderBR {BR} at (106,1400) size 0x0
-    RenderText {#text} at (0,1404) size 106x18
-      text run at (0,1404) width 106: "This is some text"
-    RenderBR {BR} at (106,1418) size 0x0
-    RenderText {#text} at (0,1422) size 106x18
-      text run at (0,1422) width 106: "This is some text"
-    RenderBR {BR} at (106,1436) size 0x0
-    RenderText {#text} at (0,1440) size 106x18
-      text run at (0,1440) width 106: "This is some text"
-    RenderBR {BR} at (106,1454) size 0x0
-    RenderText {#text} at (0,1458) size 106x18
-      text run at (0,1458) width 106: "This is some text"
-    RenderBR {BR} at (106,1472) size 0x0
-    RenderText {#text} at (0,1476) size 106x18
-      text run at (0,1476) width 106: "This is some text"
-    RenderBR {BR} at (106,1490) size 0x0
-    RenderText {#text} at (0,1494) size 106x18
-      text run at (0,1494) width 106: "This is some text"
-    RenderBR {BR} at (106,1508) size 0x0
-    RenderText {#text} at (0,1512) size 106x18
-      text run at (0,1512) width 106: "This is some text"
-    RenderBR {BR} at (106,1526) size 0x0
-    RenderText {#text} at (0,1530) size 106x18
-      text run at (0,1530) width 106: "This is some text"
-    RenderBR {BR} at (106,1544) size 0x0
-    RenderText {#text} at (0,1548) size 106x18
-      text run at (0,1548) width 106: "This is some text"
-    RenderBR {BR} at (106,1562) size 0x0
-    RenderText {#text} at (0,1566) size 106x18
-      text run at (0,1566) width 106: "This is some text"
-    RenderBR {BR} at (106,1580) size 0x0
-    RenderText {#text} at (0,1584) size 106x18
-      text run at (0,1584) width 106: "This is some text"
-    RenderBR {BR} at (106,1598) size 0x0
-    RenderText {#text} at (0,1602) size 106x18
-      text run at (0,1602) width 106: "This is some text"
-    RenderBR {BR} at (106,1616) size 0x0
-    RenderText {#text} at (0,1620) size 106x18
-      text run at (0,1620) width 106: "This is some text"
-    RenderBR {BR} at (106,1634) size 0x0
-    RenderText {#text} at (0,1638) size 106x18
-      text run at (0,1638) width 106: "This is some text"
-    RenderBR {BR} at (106,1652) size 0x0
-    RenderText {#text} at (0,1656) size 106x18
-      text run at (0,1656) width 106: "This is some text"
-    RenderBR {BR} at (106,1670) size 0x0
-    RenderText {#text} at (0,1674) size 106x18
-      text run at (0,1674) width 106: "This is some text"
-    RenderBR {BR} at (106,1688) size 0x0
-    RenderText {#text} at (0,1692) size 106x18
-      text run at (0,1692) width 106: "This is some text"
-    RenderBR {BR} at (106,1706) size 0x0
-    RenderText {#text} at (0,1710) size 106x18
-      text run at (0,1710) width 106: "This is some text"
-    RenderBR {BR} at (106,1724) size 0x0
-    RenderText {#text} at (0,1728) size 106x18
-      text run at (0,1728) width 106: "This is some text"
-    RenderBR {BR} at (106,1742) size 0x0
-    RenderText {#text} at (0,1746) size 106x18
-      text run at (0,1746) width 106: "This is some text"
-    RenderBR {BR} at (106,1760) size 0x0
-    RenderText {#text} at (0,1764) size 106x18
-      text run at (0,1764) width 106: "This is some text"
-    RenderBR {BR} at (106,1778) size 0x0
-    RenderText {#text} at (0,1782) size 106x18
-      text run at (0,1782) width 106: "This is some text"
-    RenderBR {BR} at (106,1796) size 0x0
+    RenderText {#text} at (0,1200) size 106x18
+      text run at (0,1200) width 106: "This is some text"
+    RenderBR {BR} at (106,1214) size 0x0
+    RenderText {#text} at (0,1218) size 106x18
+      text run at (0,1218) width 106: "This is some text"
+    RenderBR {BR} at (106,1232) size 0x0
+    RenderText {#text} at (0,1236) size 106x18
+      text run at (0,1236) width 106: "This is some text"
+    RenderBR {BR} at (106,1250) size 0x0
+    RenderText {#text} at (0,1254) size 106x18
+      text run at (0,1254) width 106: "This is some text"
+    RenderBR {BR} at (106,1268) size 0x0
+    RenderText {#text} at (0,1272) size 106x18
+      text run at (0,1272) width 106: "This is some text"
+    RenderBR {BR} at (106,1286) size 0x0
+    RenderText {#text} at (0,1290) size 106x18
+      text run at (0,1290) width 106: "This is some text"
+    RenderBR {BR} at (106,1304) size 0x0
+    RenderText {#text} at (0,1308) size 106x18
+      text run at (0,1308) width 106: "This is some text"
+    RenderBR {BR} at (106,1322) size 0x0
+    RenderText {#text} at (0,1326) size 106x18
+      text run at (0,1326) width 106: "This is some text"
+    RenderBR {BR} at (106,1340) size 0x0
+    RenderText {#text} at (0,1344) size 106x18
+      text run at (0,1344) width 106: "This is some text"
+    RenderBR {BR} at (106,1358) size 0x0
+    RenderText {#text} at (0,1362) size 106x18
+      text run at (0,1362) width 106: "This is some text"
+    RenderBR {BR} at (106,1376) size 0x0
+    RenderText {#text} at (0,1380) size 106x18
+      text run at (0,1380) width 106: "This is some text"
+    RenderBR {BR} at (106,1394) size 0x0
+    RenderText {#text} at (0,1398) size 106x18
+      text run at (0,1398) width 106: "This is some text"
+    RenderBR {BR} at (106,1412) size 0x0
+    RenderText {#text} at (0,1416) size 106x18
+      text run at (0,1416) width 106: "This is some text"
+    RenderBR {BR} at (106,1430) size 0x0
+    RenderText {#text} at (0,1434) size 106x18
+      text run at (0,1434) width 106: "This is some text"
+    RenderBR {BR} at (106,1448) size 0x0
+    RenderText {#text} at (0,1452) size 106x18
+      text run at (0,1452) width 106: "This is some text"
+    RenderBR {BR} at (106,1466) size 0x0
+    RenderText {#text} at (0,1470) size 106x18
+      text run at (0,1470) width 106: "This is some text"
+    RenderBR {BR} at (106,1484) size 0x0
+    RenderText {#text} at (0,1500) size 106x18
+      text run at (0,1500) width 106: "This is some text"
+    RenderBR {BR} at (106,1514) size 0x0
+    RenderText {#text} at (0,1518) size 106x18
+      text run at (0,1518) width 106: "This is some text"
+    RenderBR {BR} at (106,1532) size 0x0
+    RenderText {#text} at (0,1536) size 106x18
+      text run at (0,1536) width 106: "This is some text"
+    RenderBR {BR} at (106,1550) size 0x0
+    RenderText {#text} at (0,1554) size 106x18
+      text run at (0,1554) width 106: "This is some text"
+    RenderBR {BR} at (106,1568) size 0x0
+    RenderText {#text} at (0,1572) size 106x18
+      text run at (0,1572) width 106: "This is some text"
+    RenderBR {BR} at (106,1586) size 0x0
+    RenderText {#text} at (0,1590) size 106x18
+      text run at (0,1590) width 106: "This is some text"
+    RenderBR {BR} at (106,1604) size 0x0
+    RenderText {#text} at (0,1608) size 106x18
+      text run at (0,1608) width 106: "This is some text"
+    RenderBR {BR} at (106,1622) size 0x0
+    RenderText {#text} at (0,1626) size 106x18
+      text run at (0,1626) width 106: "This is some text"
+    RenderBR {BR} at (106,1640) size 0x0
+    RenderText {#text} at (0,1644) size 106x18
+      text run at (0,1644) width 106: "This is some text"
+    RenderBR {BR} at (106,1658) size 0x0
+    RenderText {#text} at (0,1662) size 106x18
+      text run at (0,1662) width 106: "This is some text"
+    RenderBR {BR} at (106,1676) size 0x0
+    RenderText {#text} at (0,1680) size 106x18
+      text run at (0,1680) width 106: "This is some text"
+    RenderBR {BR} at (106,1694) size 0x0
+    RenderText {#text} at (0,1698) size 106x18
+      text run at (0,1698) width 106: "This is some text"
+    RenderBR {BR} at (106,1712) size 0x0
+    RenderText {#text} at (0,1716) size 106x18
+      text run at (0,1716) width 106: "This is some text"
+    RenderBR {BR} at (106,1730) size 0x0
+    RenderText {#text} at (0,1734) size 106x18
+      text run at (0,1734) width 106: "This is some text"
+    RenderBR {BR} at (106,1748) size 0x0
+    RenderText {#text} at (0,1752) size 106x18
+      text run at (0,1752) width 106: "This is some text"
+    RenderBR {BR} at (106,1766) size 0x0
+    RenderText {#text} at (0,1770) size 106x18
+      text run at (0,1770) width 106: "This is some text"
+    RenderBR {BR} at (106,1784) size 0x0
     RenderText {#text} at (0,1800) size 106x18
       text run at (0,1800) width 106: "This is some text"
     RenderBR {BR} at (106,1814) size 0x0
@@ -353,60 +341,72 @@ layer at (8,8) size 1082x300
     RenderText {#text} at (0,2070) size 106x18
       text run at (0,2070) width 106: "This is some text"
     RenderBR {BR} at (106,2084) size 0x0
-    RenderText {#text} at (0,2088) size 106x18
-      text run at (0,2088) width 106: "This is some text"
-    RenderBR {BR} at (106,2102) size 0x0
-    RenderText {#text} at (0,2106) size 106x18
-      text run at (0,2106) width 106: "This is some text"
-    RenderBR {BR} at (106,2120) size 0x0
-    RenderText {#text} at (0,2124) size 106x18
-      text run at (0,2124) width 106: "This is some text"
-    RenderBR {BR} at (106,2138) size 0x0
-    RenderText {#text} at (0,2142) size 106x18
-      text run at (0,2142) width 106: "This is some text"
-    RenderBR {BR} at (106,2156) size 0x0
-    RenderText {#text} at (0,2160) size 106x18
-      text run at (0,2160) width 106: "This is some text"
-    RenderBR {BR} at (106,2174) size 0x0
-    RenderText {#text} at (0,2178) size 106x18
-      text run at (0,2178) width 106: "This is some text"
-    RenderBR {BR} at (106,2192) size 0x0
-    RenderText {#text} at (0,2196) size 106x18
-      text run at (0,2196) width 106: "This is some text"
-    RenderBR {BR} at (106,2210) size 0x0
-    RenderText {#text} at (0,2214) size 106x18
-      text run at (0,2214) width 106: "This is some text"
-    RenderBR {BR} at (106,2228) size 0x0
-    RenderText {#text} at (0,2232) size 106x18
-      text run at (0,2232) width 106: "This is some text"
-    RenderBR {BR} at (106,2246) size 0x0
-    RenderText {#text} at (0,2250) size 106x18
-      text run at (0,2250) width 106: "This is some text"
-    RenderBR {BR} at (106,2264) size 0x0
-    RenderText {#text} at (0,2268) size 106x18
-      text run at (0,2268) width 106: "This is some text"
-    RenderBR {BR} at (106,2282) size 0x0
-    RenderText {#text} at (0,2286) size 106x18
-      text run at (0,2286) width 106: "This is some text"
-    RenderBR {BR} at (106,2300) size 0x0
-    RenderText {#text} at (0,2304) size 106x18
-      text run at (0,2304) width 106: "This is some text"
-    RenderBR {BR} at (106,2318) size 0x0
-    RenderText {#text} at (0,2322) size 106x18
-      text run at (0,2322) width 106: "This is some text"
-    RenderBR {BR} at (106,2336) size 0x0
-    RenderText {#text} at (0,2340) size 106x18
-      text run at (0,2340) width 106: "This is some text"
-    RenderBR {BR} at (106,2354) size 0x0
-    RenderText {#text} at (0,2358) size 106x18
-      text run at (0,2358) width 106: "This is some text"
-    RenderBR {BR} at (106,2372) size 0x0
-    RenderText {#text} at (0,2376) size 106x18
-      text run at (0,2376) width 106: "This is some text"
-    RenderBR {BR} at (106,2390) size 0x0
-    RenderText {#text} at (0,2394) size 106x18
-      text run at (0,2394) width 106: "This is some text"
-    RenderBR {BR} at (106,2408) size 0x0
-    RenderText {#text} at (0,2412) size 106x18
-      text run at (0,2412) width 106: "This is some text"
-    RenderBR {BR} at (106,2426) size 0x0
+    RenderText {#text} at (0,2100) size 106x18
+      text run at (0,2100) width 106: "This is some text"
+    RenderBR {BR} at (106,2114) size 0x0
+    RenderText {#text} at (0,2118) size 106x18
+      text run at (0,2118) width 106: "This is some text"
+    RenderBR {BR} at (106,2132) size 0x0
+    RenderText {#text} at (0,2136) size 106x18
+      text run at (0,2136) width 106: "This is some text"
+    RenderBR {BR} at (106,2150) size 0x0
+    RenderText {#text} at (0,2154) size 106x18
+      text run at (0,2154) width 106: "This is some text"
+    RenderBR {BR} at (106,2168) size 0x0
+    RenderText {#text} at (0,2172) size 106x18
+      text run at (0,2172) width 106: "This is some text"
+    RenderBR {BR} at (106,2186) size 0x0
+    RenderText {#text} at (0,2190) size 106x18
+      text run at (0,2190) width 106: "This is some text"
+    RenderBR {BR} at (106,2204) size 0x0
+    RenderText {#text} at (0,2208) size 106x18
+      text run at (0,2208) width 106: "This is some text"
+    RenderBR {BR} at (106,2222) size 0x0
+    RenderText {#text} at (0,2226) size 106x18
+      text run at (0,2226) width 106: "This is some text"
+    RenderBR {BR} at (106,2240) size 0x0
+    RenderText {#text} at (0,2244) size 106x18
+      text run at (0,2244) width 106: "This is some text"
+    RenderBR {BR} at (106,2258) size 0x0
+    RenderText {#text} at (0,2262) size 106x18
+      text run at (0,2262) width 106: "This is some text"
+    RenderBR {BR} at (106,2276) size 0x0
+    RenderText {#text} at (0,2280) size 106x18
+      text run at (0,2280) width 106: "This is some text"
+    RenderBR {BR} at (106,2294) size 0x0
+    RenderText {#text} at (0,2298) size 106x18
+      text run at (0,2298) width 106: "This is some text"
+    RenderBR {BR} at (106,2312) size 0x0
+    RenderText {#text} at (0,2316) size 106x18
+      text run at (0,2316) width 106: "This is some text"
+    RenderBR {BR} at (106,2330) size 0x0
+    RenderText {#text} at (0,2334) size 106x18
+      text run at (0,2334) width 106: "This is some text"
+    RenderBR {BR} at (106,2348) size 0x0
+    RenderText {#text} at (0,2352) size 106x18
+      text run at (0,2352) width 106: "This is some text"
+    RenderBR {BR} at (106,2366) size 0x0
+    RenderText {#text} at (0,2370) size 106x18
+      text run at (0,2370) width 106: "This is some text"
+    RenderBR {BR} at (106,2384) size 0x0
+    RenderText {#text} at (0,2400) size 106x18
+      text run at (0,2400) width 106: "This is some text"
+    RenderBR {BR} at (106,2414) size 0x0
+    RenderText {#text} at (0,2418) size 106x18
+      text run at (0,2418) width 106: "This is some text"
+    RenderBR {BR} at (106,2432) size 0x0
+    RenderText {#text} at (0,2436) size 106x18
+      text run at (0,2436) width 106: "This is some text"
+    RenderBR {BR} at (106,2450) size 0x0
+    RenderText {#text} at (0,2454) size 106x18
+      text run at (0,2454) width 106: "This is some text"
+    RenderBR {BR} at (106,2468) size 0x0
+    RenderText {#text} at (0,2472) size 106x18
+      text run at (0,2472) width 106: "This is some text"
+    RenderBR {BR} at (106,2486) size 0x0
+    RenderText {#text} at (0,2490) size 106x18
+      text run at (0,2490) width 106: "This is some text"
+    RenderBR {BR} at (106,2504) size 0x0
+    RenderText {#text} at (0,2508) size 106x18
+      text run at (0,2508) width 106: "This is some text"
+    RenderBR {BR} at (106,2522) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/shadow-breaking-expected.checksum b/LayoutTests/platform/mac/fast/multicol/shadow-breaking-expected.checksum
new file mode 100644
index 0000000..69c1f47
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/shadow-breaking-expected.checksum
@@ -0,0 +1 @@
+4fb1fdf2e494e281007c5e8b5323b6d4
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/shadow-breaking-expected.png b/LayoutTests/platform/mac/fast/multicol/shadow-breaking-expected.png
new file mode 100644
index 0000000..7593a34
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/shadow-breaking-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/shadow-breaking-expected.txt b/LayoutTests/platform/mac/fast/multicol/shadow-breaking-expected.txt
new file mode 100644
index 0000000..a3ec324
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/shadow-breaking-expected.txt
@@ -0,0 +1,38 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x8
+  RenderBlock {HTML} at (0,0) size 800x8
+    RenderBody {BODY} at (8,8) size 784x0
+      RenderBlock {DIV} at (0,0) size 784x0
+layer at (20,36) size 424x270
+  RenderBlock (positioned) {P} at (20,36) size 424x270 [border: (2px solid #000000)]
+    RenderBlock (floating) at (2,2) size 24x41
+      RenderText {#text} at (0,0) size 24x41
+        text run at (0,0) width 24: "L"
+    RenderText {#text} at (30,2) size 200x491
+      text run at (30,2) width 172: "orem ipsum dolor sit"
+      text run at (30,20) width 172: "amet, consectetur"
+      text run at (2,38) width 200: "adipiscing elit. Cras pharetra"
+      text run at (2,56) width 200: "mollis pharetra. Suspendisse"
+      text run at (2,74) width 200: "lacinia orci et felis tristique sit"
+      text run at (2,92) width 200: "amet semper massa tempus."
+      text run at (2,110) width 200: "Suspendisse consectetur"
+      text run at (2,128) width 200: "tempor pulvinar. Proin dui"
+      text run at (2,146) width 200: "eros, ultricies vel malesuada"
+      text run at (2,164) width 200: "vel, tempor at ante. Nam eget"
+      text run at (2,182) width 200: "nisl dui. Donec molestie lectus"
+      text run at (2,200) width 200: "a nunc scelerisque blandit."
+      text run at (2,218) width 200: "Nam non ligula massa, sed"
+      text run at (2,236) width 200: "suscipit turpis. Etiam eget"
+      text run at (2,277) width 200: "ligula sit amet turpis"
+      text run at (2,295) width 200: "venenatis dictum in eleifend"
+      text run at (2,313) width 200: "augue. Duis tellus lectus,"
+      text run at (2,331) width 200: "volutpat et adipiscing a,"
+      text run at (2,349) width 200: "pellentesque eu metus."
+      text run at (2,367) width 200: "Aenean suscipit congue"
+      text run at (2,385) width 200: "mauris at gravida. Integer"
+      text run at (2,403) width 200: "lectus ligula, consectetur sit"
+      text run at (2,421) width 200: "amet venenatis id, scelerisque"
+      text run at (2,439) width 200: "eget nisl. Nunc dapibus"
+      text run at (2,457) width 200: "posuere risus, vitae tempor"
+      text run at (2,475) width 97: "nibh iaculis et."
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.checksum b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.checksum
index 1b94153..55ec8e8 100644
--- a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.checksum
@@ -1 +1 @@
-de65a70363d17c7f635b2e54094f9efb
\ No newline at end of file
+74b6c84320550cabed11741fc930cee0
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.png b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.png
index f4cfe45..32224d6 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.png and b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.txt b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.txt
index 58869d4..51294f7 100644
--- a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-generated-content-expected.txt
@@ -1,10 +1,10 @@
-layer at (0,0) size 785x2705
+layer at (0,0) size 785x2732
   RenderView at (0,0) size 785x600
-layer at (0,0) size 785x2705
-  RenderBlock {HTML} at (0,0) size 785x2705
-    RenderBody {BODY} at (8,16) size 769x2673
-layer at (8,16) size 760x418
-  RenderBlock {DIV} at (0,0) size 760x418 [border: (5px solid #800000)]
+layer at (0,0) size 785x2732
+  RenderBlock {HTML} at (0,0) size 785x2732
+    RenderBody {BODY} at (8,16) size 769x2700
+layer at (8,16) size 760x420
+  RenderBlock {DIV} at (0,0) size 760x420 [border: (5px solid #800000)]
     RenderBlock (anonymous multi-column span) at (5,42) size 750x28
       RenderBlock {H2} at (0,0) size 750x28 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 276x28
@@ -14,10 +14,10 @@ layer at (13,21) size 750x18
     RenderBlock (generated) at (0,0) size 367x18 [bgcolor=#FFFF00]
       RenderText at (0,0) size 166x18
         text run at (0,0) width 166: "Before Generated Content"
-layer at (13,105) size 750x324
-  RenderBlock (anonymous multi-column) at (5,89) size 750x324
-    RenderBlock (anonymous) at (0,0) size 367x612
-      RenderText {#text} at (0,0) size 363x612
+layer at (13,105) size 750x326
+  RenderBlock (anonymous multi-column) at (5,89) size 750x326
+    RenderBlock (anonymous) at (0,0) size 367x614
+      RenderText {#text} at (0,0) size 363x614
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
@@ -37,33 +37,33 @@ layer at (13,105) size 750x324
         text run at (0,270) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
         text run at (0,288) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
         text run at (0,306) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
-        text run at (0,324) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
-        text run at (0,342) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
-        text run at (0,360) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,378) width 95: "adipiscing elit. "
-        text run at (95,378) width 259: "Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,396) width 313: "adipiscing elit. Nulla varius enim ac mi. Curabitur"
-        text run at (0,414) width 352: "sollicitudin felis quis lectus. Quisque adipiscing rhoncus"
-        text run at (0,432) width 353: "sem. Proin nulla purus, vulputate vel, varius ut, euismod"
-        text run at (0,450) width 326: "et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras"
-        text run at (0,468) width 350: "convallis adipiscing sem. Nam nonummy enim. Nullam"
-        text run at (0,486) width 349: "bibendum lobortis neque. Vestibulum velit orci, tempus"
-        text run at (0,504) width 343: "euismod, pretium quis, interdum vitae, nulla. Phasellus"
-        text run at (0,522) width 357: "eget ante et tortor condimentum vestibulum. Suspendisse"
-        text run at (0,540) width 336: "hendrerit quam nec felis. Sed varius turpis vitae pede."
-        text run at (0,558) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
-        text run at (0,576) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
-        text run at (0,594) width 154: "Nulla varius enim ac mi."
-    RenderBlock (generated) at (0,612) size 367x20 [bgcolor=#FFFF00]
+        text run at (0,326) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
+        text run at (0,344) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
+        text run at (0,362) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,380) width 95: "adipiscing elit. "
+        text run at (95,380) width 259: "Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,398) width 313: "adipiscing elit. Nulla varius enim ac mi. Curabitur"
+        text run at (0,416) width 352: "sollicitudin felis quis lectus. Quisque adipiscing rhoncus"
+        text run at (0,434) width 353: "sem. Proin nulla purus, vulputate vel, varius ut, euismod"
+        text run at (0,452) width 326: "et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras"
+        text run at (0,470) width 350: "convallis adipiscing sem. Nam nonummy enim. Nullam"
+        text run at (0,488) width 349: "bibendum lobortis neque. Vestibulum velit orci, tempus"
+        text run at (0,506) width 343: "euismod, pretium quis, interdum vitae, nulla. Phasellus"
+        text run at (0,524) width 357: "eget ante et tortor condimentum vestibulum. Suspendisse"
+        text run at (0,542) width 336: "hendrerit quam nec felis. Sed varius turpis vitae pede."
+        text run at (0,560) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+        text run at (0,578) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+        text run at (0,596) width 154: "Nulla varius enim ac mi."
+    RenderBlock (generated) at (0,614) size 367x20 [bgcolor=#FFFF00]
       RenderText at (0,0) size 156x18
         text run at (0,0) width 156: "After Generated Content"
-layer at (8,450) size 760x419
-  RenderBlock {DIV} at (0,434) size 760x419 [border: (5px solid #800000)]
+layer at (8,452) size 760x418
+  RenderBlock {DIV} at (0,436) size 760x418 [border: (5px solid #800000)]
     RenderBlock (anonymous multi-column span) at (5,348) size 750x28
       RenderBlock {H2} at (0,0) size 750x28 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 276x28
           text run at (0,0) width 276: "This is a spanning element."
-layer at (13,455) size 750x324
+layer at (13,457) size 750x324
   RenderBlock (anonymous multi-column) at (5,5) size 750x324
     RenderBlock (generated) at (0,0) size 367x18 [bgcolor=#FFFF00]
       RenderText at (0,0) size 166x18
@@ -106,42 +106,42 @@ layer at (13,455) size 750x324
         text run at (0,558) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,576) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,594) width 154: "Nulla varius enim ac mi."
-layer at (13,845) size 750x19
-  RenderBlock (anonymous multi-column) at (5,395) size 750x19
+layer at (13,847) size 750x18
+  RenderBlock (anonymous multi-column) at (5,395) size 750x18
     RenderBlock (generated) at (0,0) size 367x20 [bgcolor=#FFFF00]
       RenderText at (0,0) size 156x18
         text run at (0,0) width 156: "After Generated Content"
-layer at (8,885) size 760x434
-  RenderBlock {DIV} at (0,869) size 760x434 [border: (5px solid #800000)]
-    RenderBlock (anonymous multi-column span) at (5,166) size 750x28
+layer at (8,886) size 760x438
+  RenderBlock {DIV} at (0,870) size 760x438 [border: (5px solid #800000)]
+    RenderBlock (anonymous multi-column span) at (5,168) size 750x28
       RenderBlock {H2} at (0,0) size 750x28 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 276x28
           text run at (0,0) width 276: "This is a spanning element."
-layer at (13,890) size 750x142
-  RenderBlock (anonymous multi-column) at (5,5) size 750x142
+layer at (13,891) size 750x144
+  RenderBlock (anonymous multi-column) at (5,5) size 750x144
     RenderBlock (generated) at (0,0) size 367x18 [bgcolor=#FFFF00]
       RenderText at (0,0) size 166x18
         text run at (0,0) width 166: "Before Generated Content"
-    RenderBlock {P} at (0,34) size 367x234
-      RenderText {#text} at (0,0) size 363x234
+    RenderBlock {P} at (0,34) size 367x236
+      RenderText {#text} at (0,0) size 363x236
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
         text run at (0,54) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
         text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
         text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
-        text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 233: "sit amet, consectetuer adipiscing elit. "
-        text run at (233,180) width 121: "Lorem ipsum dolor"
-        text run at (0,198) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
-        text run at (0,216) width 20: "mi."
-layer at (13,1098) size 750x216
-  RenderBlock (anonymous multi-column) at (5,213) size 750x216
-    RenderBlock {P} at (0,0) size 367x396
-      RenderText {#text} at (0,0) size 363x396
+        text run at (0,110) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (0,128) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,146) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,164) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,182) width 233: "sit amet, consectetuer adipiscing elit. "
+        text run at (233,182) width 121: "Lorem ipsum dolor"
+        text run at (0,200) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
+        text run at (0,218) width 20: "mi."
+layer at (13,1101) size 750x218
+  RenderBlock (anonymous multi-column) at (5,215) size 750x218
+    RenderBlock {P} at (0,0) size 367x398
+      RenderText {#text} at (0,0) size 363x398
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
@@ -155,26 +155,26 @@ layer at (13,1098) size 750x216
         text run at (0,180) width 233: "sit amet, consectetuer adipiscing elit. "
         text run at (233,180) width 121: "Lorem ipsum dolor"
         text run at (0,198) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
-        text run at (0,216) width 318: "mi. Curabitur sollicitudin felis quis lectus. Quisque"
-        text run at (0,234) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
-        text run at (0,252) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
-        text run at (0,270) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
-        text run at (0,288) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
-        text run at (0,306) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
-        text run at (0,324) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
-        text run at (0,342) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
-        text run at (0,360) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,378) width 91: "adipiscing elit."
-    RenderBlock (generated) at (0,412) size 367x20 [bgcolor=#FFFF00]
+        text run at (0,218) width 318: "mi. Curabitur sollicitudin felis quis lectus. Quisque"
+        text run at (0,236) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
+        text run at (0,254) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
+        text run at (0,272) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
+        text run at (0,290) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
+        text run at (0,308) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
+        text run at (0,326) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
+        text run at (0,344) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
+        text run at (0,362) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,380) width 91: "adipiscing elit."
+    RenderBlock (generated) at (0,414) size 367x20 [bgcolor=#FFFF00]
       RenderText at (0,0) size 156x18
         text run at (0,0) width 156: "After Generated Content"
-layer at (8,1335) size 760x434
-  RenderBlock {DIV} at (0,1319) size 760x434 [border: (5px solid #800000)]
+layer at (8,1340) size 760x440
+  RenderBlock {DIV} at (0,1324) size 760x440 [border: (5px solid #800000)]
     RenderBlock (anonymous multi-column span) at (5,150) size 750x28
       RenderBlock {H2} at (0,0) size 750x28 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 276x28
           text run at (0,0) width 276: "This is a spanning element."
-layer at (13,1340) size 750x126
+layer at (13,1345) size 750x126
   RenderBlock (anonymous multi-column) at (5,5) size 750x126
     RenderBlock (generated) at (0,0) size 367x18 [bgcolor=#FFFF00]
       RenderText at (0,0) size 166x18
@@ -195,8 +195,8 @@ layer at (13,1340) size 750x126
         text run at (233,180) width 121: "Lorem ipsum dolor"
         text run at (0,198) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
         text run at (0,216) width 20: "mi."
-layer at (13,1532) size 750x232
-  RenderBlock (anonymous multi-column) at (5,197) size 750x232
+layer at (13,1537) size 750x238
+  RenderBlock (anonymous multi-column) at (5,197) size 750x238
     RenderBlock (anonymous) at (0,0) size 367x198
       RenderInline {SPAN} at (0,0) size 42x18
         RenderText {#text} at (0,0) size 42x18
@@ -213,29 +213,29 @@ layer at (13,1532) size 750x232
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (0,214) size 367x198
-      RenderText {#text} at (0,0) size 362x198
+    RenderBlock {P} at (0,214) size 367x204
+      RenderText {#text} at (0,0) size 362x204
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
-        text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
-        text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
-        text run at (0,54) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
-        text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
-        text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
-        text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock (generated) at (0,428) size 367x20 [bgcolor=#FFFF00]
+        text run at (0,24) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
+        text run at (0,42) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
+        text run at (0,60) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
+        text run at (0,78) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
+        text run at (0,96) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
+        text run at (0,114) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (0,132) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,150) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,168) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,186) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock (generated) at (0,434) size 367x20 [bgcolor=#FFFF00]
       RenderText at (0,0) size 156x18
         text run at (0,0) width 156: "After Generated Content"
-layer at (8,1785) size 760x436
-  RenderBlock {DIV} at (0,1769) size 760x436 [border: (5px solid #800000)]
+layer at (8,1796) size 760x439
+  RenderBlock {DIV} at (0,1780) size 760x439 [border: (5px solid #800000)]
     RenderBlock (anonymous multi-column span) at (5,258) size 750x28
       RenderBlock {H2} at (0,0) size 750x28 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 276x28
           text run at (0,0) width 276: "This is a spanning element."
-layer at (13,1790) size 750x234
+layer at (13,1801) size 750x234
   RenderBlock (anonymous multi-column) at (5,5) size 750x234
     RenderBlock (generated) at (0,0) size 367x18 [bgcolor=#FFFF00]
       RenderText at (0,0) size 166x18
@@ -275,10 +275,10 @@ layer at (13,1790) size 750x234
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (13,2090) size 750x126
-  RenderBlock (anonymous multi-column) at (5,305) size 750x126
-    RenderBlock {P} at (0,0) size 367x198
-      RenderText {#text} at (0,0) size 362x198
+layer at (13,2101) size 750x129
+  RenderBlock (anonymous multi-column) at (5,305) size 750x129
+    RenderBlock {P} at (0,0) size 367x201
+      RenderText {#text} at (0,0) size 362x201
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
@@ -286,21 +286,21 @@ layer at (13,2090) size 750x126
         text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
         text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
         text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock (generated) at (0,214) size 367x20 [bgcolor=#FFFF00]
+        text run at (0,129) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,147) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,165) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,183) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock (generated) at (0,217) size 367x20 [bgcolor=#FFFF00]
       RenderText at (0,0) size 156x18
         text run at (0,0) width 156: "After Generated Content"
-layer at (8,2237) size 760x452
-  RenderBlock {DIV} at (0,2221) size 760x452 [border: (5px solid #800000)]
-    RenderBlock (anonymous multi-column span) at (5,274) size 750x28
+layer at (8,2251) size 760x465
+  RenderBlock {DIV} at (0,2235) size 760x465 [border: (5px solid #800000)]
+    RenderBlock (anonymous multi-column span) at (5,285) size 750x28
       RenderBlock {H2} at (0,0) size 750x28 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 276x28
           text run at (0,0) width 276: "This is a spanning element."
-layer at (13,2242) size 750x250
-  RenderBlock (anonymous multi-column) at (5,5) size 750x250
+layer at (13,2256) size 750x261
+  RenderBlock (anonymous multi-column) at (5,5) size 750x261
     RenderBlock (generated) at (0,0) size 367x18 [bgcolor=#FFFF00]
       RenderText at (0,0) size 166x18
         text run at (0,0) width 166: "Before Generated Content"
@@ -317,11 +317,11 @@ layer at (13,2242) size 750x250
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (0,248) size 367x36
+    RenderBlock {P} at (0,261) size 367x36
       RenderText {#text} at (0,0) size 354x36
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 154: "Nulla varius enim ac mi."
-    RenderBlock {P} at (0,300) size 367x198
+    RenderBlock {P} at (0,313) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -334,8 +334,8 @@ layer at (13,2242) size 750x250
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (13,2558) size 750x126
-  RenderBlock (anonymous multi-column) at (5,321) size 750x126
+layer at (13,2583) size 750x128
+  RenderBlock (anonymous multi-column) at (5,332) size 750x128
     RenderBlock (anonymous) at (0,0) size 367x18
       RenderInline {SPAN} at (0,0) size 354x18
         RenderText {#text} at (0,0) size 354x18
@@ -344,20 +344,20 @@ layer at (13,2558) size 750x126
       RenderBlock {SPAN} at (0,0) size 367x18
         RenderText {#text} at (0,0) size 154x18
           text run at (0,0) width 154: "Nulla varius enim ac mi."
-    RenderBlock (anonymous) at (0,36) size 367x180
-      RenderInline {SPAN} at (0,0) size 362x180
-        RenderText {#text} at (0,0) size 362x180
+    RenderBlock (anonymous) at (0,36) size 367x182
+      RenderInline {SPAN} at (0,0) size 362x182
+        RenderText {#text} at (0,0) size 362x182
           text run at (0,0) width 362: "Curabitur sollicitudin felis quis lectus. Quisque adipiscing"
           text run at (0,18) width 350: "rhoncus sem. Proin nulla purus, vulputate vel, varius ut,"
           text run at (0,36) width 350: "euismod et, nisi. Sed vitae felis vel orci sagittis aliquam."
           text run at (0,54) width 332: "Cras convallis adipiscing sem. Nam nonummy enim."
           text run at (0,72) width 351: "Nullam bibendum lobortis neque. Vestibulum velit orci,"
-          text run at (0,90) width 329: "tempus euismod, pretium quis, interdum vitae, nulla."
-          text run at (0,108) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
-          text run at (0,126) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
-          text run at (0,144) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
-          text run at (0,162) width 91: "adipiscing elit."
+          text run at (0,92) width 329: "tempus euismod, pretium quis, interdum vitae, nulla."
+          text run at (0,110) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
+          text run at (0,128) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
+          text run at (0,146) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
+          text run at (0,164) width 91: "adipiscing elit."
       RenderText {#text} at (0,0) size 0x0
-    RenderBlock (generated) at (0,216) size 367x20 [bgcolor=#FFFF00]
+    RenderBlock (generated) at (0,218) size 367x20 [bgcolor=#FFFF00]
       RenderText at (0,0) size 156x18
         text run at (0,0) width 156: "After Generated Content"
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.checksum b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.checksum
index 2995616..907541a 100644
--- a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.checksum
@@ -1 +1 @@
-874bca26e58f92016321df4ef420a686
\ No newline at end of file
+a8f1f5c8bab19f5ff7981cac57c8a7cc
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.png b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.png
index 47b2a33..f57629b 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.png and b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.txt b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.txt
index 3b98be6..d98f48c 100644
--- a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-child-property-removal-expected.txt
@@ -1,20 +1,20 @@
-layer at (0,0) size 785x2392
+layer at (0,0) size 785x2380
   RenderView at (0,0) size 785x600
-layer at (0,0) size 785x2392
-  RenderBlock {HTML} at (0,0) size 785x2392
-    RenderBody {BODY} at (8,8) size 769x2368
+layer at (0,0) size 785x2380
+  RenderBlock {HTML} at (0,0) size 785x2380
+    RenderBody {BODY} at (8,8) size 769x2356
       RenderBlock (anonymous) at (0,0) size 769x36
         RenderText {#text} at (0,0) size 760x36
           text run at (0,0) width 760: "In this test, all of the spanning elements have their spans turned off dynamically, and so they should just be in the column"
           text run at (0,18) width 33: "flow."
         RenderText {#text} at (0,0) size 0x0
-layer at (8,60) size 760x352
-  RenderBlock {DIV} at (0,52) size 760x352 [border: (5px solid #800000)]
-    RenderBlock {H2} at (5,24) size 367x28 [bgcolor=#EEEEEE]
+layer at (8,60) size 760x348
+  RenderBlock {DIV} at (0,52) size 760x348 [border: (5px solid #800000)]
+    RenderBlock {H2} at (5,5) size 367x28 [bgcolor=#EEEEEE]
       RenderText {#text} at (0,0) size 276x28
         text run at (0,0) width 276: "This is a spanning element."
-    RenderBlock (anonymous) at (5,71) size 367x612
-      RenderText {#text} at (0,0) size 363x612
+    RenderBlock (anonymous) at (5,52) size 367x615
+      RenderText {#text} at (0,0) size 363x615
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
@@ -32,29 +32,29 @@ layer at (8,60) size 760x352
         text run at (0,234) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
         text run at (0,252) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
         text run at (0,270) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
-        text run at (0,288) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
-        text run at (0,306) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
-        text run at (0,324) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
-        text run at (0,342) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
-        text run at (0,360) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,378) width 95: "adipiscing elit. "
-        text run at (95,378) width 259: "Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,396) width 313: "adipiscing elit. Nulla varius enim ac mi. Curabitur"
-        text run at (0,414) width 352: "sollicitudin felis quis lectus. Quisque adipiscing rhoncus"
-        text run at (0,432) width 353: "sem. Proin nulla purus, vulputate vel, varius ut, euismod"
-        text run at (0,450) width 326: "et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras"
-        text run at (0,468) width 350: "convallis adipiscing sem. Nam nonummy enim. Nullam"
-        text run at (0,486) width 349: "bibendum lobortis neque. Vestibulum velit orci, tempus"
-        text run at (0,504) width 343: "euismod, pretium quis, interdum vitae, nulla. Phasellus"
-        text run at (0,522) width 357: "eget ante et tortor condimentum vestibulum. Suspendisse"
-        text run at (0,540) width 336: "hendrerit quam nec felis. Sed varius turpis vitae pede."
-        text run at (0,558) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
-        text run at (0,576) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
-        text run at (0,594) width 154: "Nulla varius enim ac mi."
-layer at (8,428) size 760x352
-  RenderBlock {DIV} at (0,420) size 760x352 [border: (5px solid #800000)]
-    RenderBlock (anonymous) at (5,5) size 367x612
-      RenderText {#text} at (0,0) size 363x612
+        text run at (0,291) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
+        text run at (0,309) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
+        text run at (0,327) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
+        text run at (0,345) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
+        text run at (0,363) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,381) width 95: "adipiscing elit. "
+        text run at (95,381) width 259: "Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,399) width 313: "adipiscing elit. Nulla varius enim ac mi. Curabitur"
+        text run at (0,417) width 352: "sollicitudin felis quis lectus. Quisque adipiscing rhoncus"
+        text run at (0,435) width 353: "sem. Proin nulla purus, vulputate vel, varius ut, euismod"
+        text run at (0,453) width 326: "et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras"
+        text run at (0,471) width 350: "convallis adipiscing sem. Nam nonummy enim. Nullam"
+        text run at (0,489) width 349: "bibendum lobortis neque. Vestibulum velit orci, tempus"
+        text run at (0,507) width 343: "euismod, pretium quis, interdum vitae, nulla. Phasellus"
+        text run at (0,525) width 357: "eget ante et tortor condimentum vestibulum. Suspendisse"
+        text run at (0,543) width 336: "hendrerit quam nec felis. Sed varius turpis vitae pede."
+        text run at (0,561) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+        text run at (0,579) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+        text run at (0,597) width 154: "Nulla varius enim ac mi."
+layer at (8,424) size 760x364
+  RenderBlock {DIV} at (0,416) size 760x364 [border: (5px solid #800000)]
+    RenderBlock (anonymous) at (5,5) size 367x624
+      RenderText {#text} at (0,0) size 363x624
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
@@ -75,28 +75,28 @@ layer at (8,428) size 760x352
         text run at (0,288) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
         text run at (0,306) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
         text run at (0,324) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
-        text run at (0,342) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
-        text run at (0,360) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,378) width 95: "adipiscing elit. "
-        text run at (95,378) width 259: "Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,396) width 313: "adipiscing elit. Nulla varius enim ac mi. Curabitur"
-        text run at (0,414) width 352: "sollicitudin felis quis lectus. Quisque adipiscing rhoncus"
-        text run at (0,432) width 353: "sem. Proin nulla purus, vulputate vel, varius ut, euismod"
-        text run at (0,450) width 326: "et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras"
-        text run at (0,468) width 350: "convallis adipiscing sem. Nam nonummy enim. Nullam"
-        text run at (0,486) width 349: "bibendum lobortis neque. Vestibulum velit orci, tempus"
-        text run at (0,504) width 343: "euismod, pretium quis, interdum vitae, nulla. Phasellus"
-        text run at (0,522) width 357: "eget ante et tortor condimentum vestibulum. Suspendisse"
-        text run at (0,540) width 336: "hendrerit quam nec felis. Sed varius turpis vitae pede."
-        text run at (0,558) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
-        text run at (0,576) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
-        text run at (0,594) width 154: "Nulla varius enim ac mi."
-    RenderBlock {H2} at (5,636) size 367x28 [bgcolor=#EEEEEE]
+        text run at (0,354) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
+        text run at (0,372) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,390) width 95: "adipiscing elit. "
+        text run at (95,390) width 259: "Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,408) width 313: "adipiscing elit. Nulla varius enim ac mi. Curabitur"
+        text run at (0,426) width 352: "sollicitudin felis quis lectus. Quisque adipiscing rhoncus"
+        text run at (0,444) width 353: "sem. Proin nulla purus, vulputate vel, varius ut, euismod"
+        text run at (0,462) width 326: "et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras"
+        text run at (0,480) width 350: "convallis adipiscing sem. Nam nonummy enim. Nullam"
+        text run at (0,498) width 349: "bibendum lobortis neque. Vestibulum velit orci, tempus"
+        text run at (0,516) width 343: "euismod, pretium quis, interdum vitae, nulla. Phasellus"
+        text run at (0,534) width 357: "eget ante et tortor condimentum vestibulum. Suspendisse"
+        text run at (0,552) width 336: "hendrerit quam nec felis. Sed varius turpis vitae pede."
+        text run at (0,570) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+        text run at (0,588) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+        text run at (0,606) width 154: "Nulla varius enim ac mi."
+    RenderBlock {H2} at (5,648) size 367x28 [bgcolor=#EEEEEE]
       RenderText {#text} at (0,0) size 276x28
         text run at (0,0) width 276: "This is a spanning element."
-layer at (8,796) size 760x380
-  RenderBlock {DIV} at (0,788) size 760x380 [border: (5px solid #800000)]
-    RenderBlock {P} at (5,21) size 367x234
+layer at (8,804) size 760x373
+  RenderBlock {DIV} at (0,796) size 760x373 [border: (5px solid #800000)]
+    RenderBlock {P} at (5,5) size 367x234
       RenderText {#text} at (0,0) size 363x234
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -112,36 +112,36 @@ layer at (8,796) size 760x380
         text run at (233,180) width 121: "Lorem ipsum dolor"
         text run at (0,198) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
         text run at (0,216) width 20: "mi."
-    RenderBlock {H2} at (5,274) size 367x28 [bgcolor=#EEEEEE]
+    RenderBlock {H2} at (5,258) size 367x28 [bgcolor=#EEEEEE]
       RenderText {#text} at (0,0) size 276x28
         text run at (0,0) width 276: "This is a spanning element."
-    RenderBlock {P} at (5,321) size 367x396
-      RenderText {#text} at (0,0) size 363x396
+    RenderBlock {P} at (5,305) size 367x405
+      RenderText {#text} at (0,0) size 363x405
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
-        text run at (0,54) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
-        text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
-        text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
-        text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 233: "sit amet, consectetuer adipiscing elit. "
-        text run at (233,180) width 121: "Lorem ipsum dolor"
-        text run at (0,198) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
-        text run at (0,216) width 318: "mi. Curabitur sollicitudin felis quis lectus. Quisque"
-        text run at (0,234) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
-        text run at (0,252) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
-        text run at (0,270) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
-        text run at (0,288) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
-        text run at (0,306) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
-        text run at (0,324) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
-        text run at (0,342) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
-        text run at (0,360) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,378) width 91: "adipiscing elit."
-layer at (8,1192) size 760x382
-  RenderBlock {DIV} at (0,1184) size 760x382 [border: (5px solid #800000)]
+        text run at (0,63) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
+        text run at (0,81) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
+        text run at (0,99) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
+        text run at (0,117) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (0,135) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,153) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,171) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,189) width 233: "sit amet, consectetuer adipiscing elit. "
+        text run at (233,189) width 121: "Lorem ipsum dolor"
+        text run at (0,207) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
+        text run at (0,225) width 318: "mi. Curabitur sollicitudin felis quis lectus. Quisque"
+        text run at (0,243) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
+        text run at (0,261) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
+        text run at (0,279) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
+        text run at (0,297) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
+        text run at (0,315) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
+        text run at (0,333) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
+        text run at (0,351) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
+        text run at (0,369) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,387) width 91: "adipiscing elit."
+layer at (8,1193) size 760x382
+  RenderBlock {DIV} at (0,1185) size 760x382 [border: (5px solid #800000)]
     RenderBlock (anonymous) at (5,5) size 367x234
       RenderText {#text} at (0,0) size 363x234
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
@@ -190,8 +190,8 @@ layer at (8,1192) size 760x382
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (8,1590) size 760x370
-  RenderBlock {DIV} at (0,1582) size 760x370 [border: (5px solid #800000)]
+layer at (8,1591) size 760x373
+  RenderBlock {DIV} at (0,1583) size 760x373 [border: (5px solid #800000)]
     RenderBlock (anonymous) at (5,5) size 367x198
       RenderInline {SPAN} at (0,0) size 362x198
         RenderText {#text} at (0,0) size 362x198
@@ -211,11 +211,11 @@ layer at (8,1590) size 760x370
         RenderText {#text} at (0,0) size 354x36
           text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
           text run at (0,18) width 154: "Nulla varius enim ac mi."
-    RenderBlock (anonymous) at (5,239) size 367x198
+    RenderBlock (anonymous) at (5,239) size 367x201
       RenderInline {SPAN} at (0,0) size 42x18
         RenderText {#text} at (0,0) size 42x18
           text run at (0,0) width 42: "Lorem"
-      RenderText {#text} at (42,0) size 362x198
+      RenderText {#text} at (42,0) size 362x201
         text run at (42,0) width 312: " ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
@@ -223,14 +223,14 @@ layer at (8,1590) size 760x370
         text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
         text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
         text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {H2} at (5,456) size 367x28 [bgcolor=#EEEEEE]
+        text run at (0,129) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,147) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,165) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,183) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock {H2} at (5,459) size 367x28 [bgcolor=#EEEEEE]
       RenderText {#text} at (0,0) size 276x28
         text run at (0,0) width 276: "This is a spanning element."
-    RenderBlock {P} at (5,503) size 367x198
+    RenderBlock {P} at (5,506) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -243,9 +243,9 @@ layer at (8,1590) size 760x370
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (8,1976) size 760x400
-  RenderBlock {DIV} at (0,1968) size 760x400 [border: (5px solid #800000)]
-    RenderBlock {P} at (5,21) size 367x198
+layer at (8,1980) size 760x384
+  RenderBlock {DIV} at (0,1972) size 760x384 [border: (5px solid #800000)]
+    RenderBlock {P} at (5,5) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -258,11 +258,11 @@ layer at (8,1976) size 760x400
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (5,235) size 367x36
+    RenderBlock {P} at (5,219) size 367x36
       RenderText {#text} at (0,0) size 354x36
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 154: "Nulla varius enim ac mi."
-    RenderBlock {P} at (5,287) size 367x198
+    RenderBlock {P} at (5,271) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -275,18 +275,18 @@ layer at (8,1976) size 760x400
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {H2} at (5,504) size 367x28 [bgcolor=#EEEEEE]
+    RenderBlock {H2} at (5,488) size 367x28 [bgcolor=#EEEEEE]
       RenderText {#text} at (0,0) size 276x28
         text run at (0,0) width 276: "This is a spanning element."
-    RenderBlock (anonymous) at (5,551) size 367x18
+    RenderBlock (anonymous) at (5,535) size 367x18
       RenderInline {SPAN} at (0,0) size 354x18
         RenderText {#text} at (0,0) size 354x18
           text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
-    RenderBlock (anonymous) at (5,569) size 367x18
+    RenderBlock (anonymous) at (5,553) size 367x18
       RenderBlock {SPAN} at (0,0) size 367x18
         RenderText {#text} at (0,0) size 154x18
           text run at (0,0) width 154: "Nulla varius enim ac mi."
-    RenderBlock (anonymous) at (5,587) size 367x180
+    RenderBlock (anonymous) at (5,571) size 367x180
       RenderInline {SPAN} at (0,0) size 362x180
         RenderText {#text} at (0,0) size 362x180
           text run at (0,0) width 362: "Curabitur sollicitudin felis quis lectus. Quisque adipiscing"
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.checksum b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.checksum
index 5fc0c5f..629a901 100644
--- a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.checksum
@@ -1 +1 @@
-2b5d2295ac12b8cd8618cf542f33c965
\ No newline at end of file
+3749af65f25a36c60746bba1f933ab29
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.png b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.png
index 706e72c..6d54a48 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.png and b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.txt b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.txt
index 12074e1..441d73a 100644
--- a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-dynamic-expected.txt
@@ -1,8 +1,8 @@
-layer at (0,0) size 785x2588
+layer at (0,0) size 785x2574
   RenderView at (0,0) size 785x600
-layer at (0,0) size 785x2588
-  RenderBlock {HTML} at (0,0) size 785x2588
-    RenderBody {BODY} at (8,16) size 769x2556
+layer at (0,0) size 785x2574
+  RenderBlock {HTML} at (0,0) size 785x2574
+    RenderBody {BODY} at (8,16) size 769x2542
 layer at (8,16) size 760x382
   RenderBlock {DIV} at (0,0) size 760x382 [border: (5px solid #800000)]
     RenderBlock (anonymous multi-column span) at (5,24) size 750x28
@@ -144,8 +144,8 @@ layer at (13,1025) size 750x198
         text run at (0,342) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
         text run at (0,360) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
         text run at (0,378) width 91: "adipiscing elit."
-layer at (8,1260) size 760x432
-  RenderBlock {DIV} at (0,1244) size 760x432 [border: (5px solid #800000)]
+layer at (8,1260) size 760x416
+  RenderBlock {DIV} at (0,1244) size 760x416 [border: (5px solid #800000)]
     RenderBlock (anonymous multi-column span) at (5,150) size 750x28
       RenderBlock {H2} at (0,0) size 750x28 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 276x28
@@ -168,8 +168,8 @@ layer at (13,1265) size 750x126
         text run at (233,180) width 121: "Lorem ipsum dolor"
         text run at (0,198) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
         text run at (0,216) width 20: "mi."
-layer at (13,1457) size 750x214
-  RenderBlock (anonymous multi-column) at (5,197) size 750x214
+layer at (13,1457) size 750x198
+  RenderBlock (anonymous multi-column) at (5,197) size 750x198
     RenderBlock (anonymous) at (0,0) size 367x198
       RenderInline {SPAN} at (0,0) size 42x18
         RenderText {#text} at (0,0) size 42x18
@@ -186,7 +186,7 @@ layer at (13,1457) size 750x214
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (0,214) size 367x198
+    RenderBlock {P} at (0,198) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -199,13 +199,13 @@ layer at (13,1457) size 750x214
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (8,1708) size 760x416
-  RenderBlock {DIV} at (0,1692) size 760x416 [border: (5px solid #800000)]
+layer at (8,1692) size 760x416
+  RenderBlock {DIV} at (0,1676) size 760x416 [border: (5px solid #800000)]
     RenderBlock (anonymous multi-column span) at (5,240) size 750x28
       RenderBlock {H2} at (0,0) size 750x28 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 276x28
           text run at (0,0) width 276: "This is a spanning element."
-layer at (13,1713) size 750x216
+layer at (13,1697) size 750x216
   RenderBlock (anonymous multi-column) at (5,5) size 750x216
     RenderBlock (anonymous) at (0,0) size 367x198
       RenderInline {SPAN} at (0,0) size 362x198
@@ -242,7 +242,7 @@ layer at (13,1713) size 750x216
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (13,1995) size 750x108
+layer at (13,1979) size 750x108
   RenderBlock (anonymous multi-column) at (5,287) size 750x108
     RenderBlock {P} at (0,0) size 367x198
       RenderText {#text} at (0,0) size 362x198
@@ -257,14 +257,14 @@ layer at (13,1995) size 750x108
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (8,2140) size 760x432
-  RenderBlock {DIV} at (0,2124) size 760x432 [border: (5px solid #800000)]
-    RenderBlock (anonymous multi-column span) at (5,272) size 750x28
+layer at (8,2124) size 760x434
+  RenderBlock {DIV} at (0,2108) size 760x434 [border: (5px solid #800000)]
+    RenderBlock (anonymous multi-column span) at (5,274) size 750x28
       RenderBlock {H2} at (0,0) size 750x28 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 276x28
           text run at (0,0) width 276: "This is a spanning element."
-layer at (13,2161) size 750x232
-  RenderBlock (anonymous multi-column) at (5,21) size 750x232
+layer at (13,2145) size 750x234
+  RenderBlock (anonymous multi-column) at (5,21) size 750x234
     RenderBlock {P} at (0,0) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
@@ -278,11 +278,11 @@ layer at (13,2161) size 750x232
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (0,214) size 367x36
-      RenderText {#text} at (0,0) size 354x36
+    RenderBlock {P} at (0,214) size 367x38
+      RenderText {#text} at (0,0) size 354x38
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
-        text run at (0,18) width 154: "Nulla varius enim ac mi."
-    RenderBlock {P} at (0,266) size 367x198
+        text run at (0,20) width 154: "Nulla varius enim ac mi."
+    RenderBlock {P} at (0,268) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -295,8 +295,8 @@ layer at (13,2161) size 750x232
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (13,2459) size 750x108
-  RenderBlock (anonymous multi-column) at (5,319) size 750x108
+layer at (13,2445) size 750x108
+  RenderBlock (anonymous multi-column) at (5,321) size 750x108
     RenderBlock (anonymous) at (0,0) size 367x18
       RenderInline {SPAN} at (0,0) size 354x18
         RenderText {#text} at (0,0) size 354x18
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-expected.txt b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-expected.txt
index 0f74fb9..6829c90 100644
--- a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-expected.txt
@@ -1,8 +1,8 @@
-layer at (0,0) size 785x3398
+layer at (0,0) size 785x3391
   RenderView at (0,0) size 785x600
-layer at (0,0) size 785x3398
-  RenderBlock {HTML} at (0,0) size 785x3398
-    RenderBody {BODY} at (8,16) size 769x3366
+layer at (0,0) size 785x3391
+  RenderBlock {HTML} at (0,0) size 785x3391
+    RenderBody {BODY} at (8,16) size 769x3359
 layer at (8,16) size 760x382
   RenderBlock {DIV} at (0,0) size 760x382 [border: (5px solid #800000)]
     RenderBlock (anonymous multi-column span) at (5,24) size 750x28
@@ -142,8 +142,8 @@ layer at (13,1009) size 750x198
       text run at (0,342) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
       text run at (0,360) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
       text run at (0,378) width 91: "adipiscing elit."
-layer at (8,1228) size 760x364
-  RenderBlock {DIV} at (0,1212) size 760x364 [border: (5px solid #800000)]
+layer at (8,1228) size 760x367
+  RenderBlock {DIV} at (0,1212) size 760x367 [border: (5px solid #800000)]
     RenderText {#text} at (5,5) size 363x242
       text run at (5,5) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
       text run at (5,23) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -164,33 +164,33 @@ layer at (8,1228) size 760x364
         text run at (29,221) width 321: "This is a spanning element with"
         text run at (5,249) width 345: "an original display of inline in the"
         text run at (5,277) width 294: "middle of the columns block."
-    RenderText {#text} at (299,285) size 363x416
+    RenderText {#text} at (299,285) size 363x419
       text run at (299,285) width 46: " Lorem"
       text run at (5,305) width 347: "ipsum dolor sit amet, consectetuer adipiscing elit. Nulla"
       text run at (5,323) width 356: "varius enim ac mi. Curabitur sollicitudin felis quis lectus."
       text run at (5,341) width 324: "Quisque adipiscing rhoncus sem. Proin nulla purus,"
-      text run at (5,359) width 345: "vulputate vel, varius ut, euismod et, nisi. Sed vitae felis"
-      text run at (5,377) width 346: "vel orci sagittis aliquam. Cras convallis adipiscing sem."
-      text run at (5,395) width 353: "Nam nonummy enim. Nullam bibendum lobortis neque."
-      text run at (5,413) width 332: "Vestibulum velit orci, tempus euismod, pretium quis,"
-      text run at (5,431) width 309: "interdum vitae, nulla. Phasellus eget ante et tortor"
-      text run at (5,449) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-      text run at (5,467) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-      text run at (5,485) width 233: "sit amet, consectetuer adipiscing elit. "
-      text run at (238,485) width 121: "Lorem ipsum dolor"
-      text run at (5,503) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
-      text run at (5,521) width 318: "mi. Curabitur sollicitudin felis quis lectus. Quisque"
-      text run at (5,539) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
-      text run at (5,557) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
-      text run at (5,575) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
-      text run at (5,593) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
-      text run at (5,611) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
-      text run at (5,629) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
-      text run at (5,647) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
-      text run at (5,665) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
-      text run at (5,683) width 91: "adipiscing elit."
-layer at (8,1608) size 760x384
-  RenderBlock {DIV} at (0,1592) size 760x384 [border: (5px solid #800000)]
+      text run at (5,362) width 345: "vulputate vel, varius ut, euismod et, nisi. Sed vitae felis"
+      text run at (5,380) width 346: "vel orci sagittis aliquam. Cras convallis adipiscing sem."
+      text run at (5,398) width 353: "Nam nonummy enim. Nullam bibendum lobortis neque."
+      text run at (5,416) width 332: "Vestibulum velit orci, tempus euismod, pretium quis,"
+      text run at (5,434) width 309: "interdum vitae, nulla. Phasellus eget ante et tortor"
+      text run at (5,452) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+      text run at (5,470) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+      text run at (5,488) width 233: "sit amet, consectetuer adipiscing elit. "
+      text run at (238,488) width 121: "Lorem ipsum dolor"
+      text run at (5,506) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
+      text run at (5,524) width 318: "mi. Curabitur sollicitudin felis quis lectus. Quisque"
+      text run at (5,542) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
+      text run at (5,560) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
+      text run at (5,578) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
+      text run at (5,596) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
+      text run at (5,614) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
+      text run at (5,632) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
+      text run at (5,650) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
+      text run at (5,668) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
+      text run at (5,686) width 91: "adipiscing elit."
+layer at (8,1611) size 760x386
+  RenderBlock {DIV} at (0,1595) size 760x386 [border: (5px solid #800000)]
     RenderText {#text} at (5,5) size 363x234
       text run at (5,5) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
       text run at (5,23) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -211,39 +211,39 @@ layer at (8,1608) size 760x384
         text run at (0,0) width 324: "This element specifies a column"
         text run at (0,28) width 338: "span, but it is also floating, so the"
         text run at (0,56) width 325: "column-span should be ignored."
-    RenderText {#text} at (29,221) size 363x518
+    RenderText {#text} at (29,221) size 363x520
       text run at (29,221) width 327: "Lorem ipsum dolor sit amet, consectetuer adipiscing"
       text run at (5,361) width 348: "elit. Nulla varius enim ac mi. Curabitur sollicitudin felis"
-      text run at (5,379) width 355: "quis lectus. Quisque adipiscing rhoncus sem. Proin nulla"
-      text run at (5,397) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
-      text run at (5,415) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
-      text run at (5,433) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
-      text run at (5,451) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-      text run at (5,469) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-      text run at (5,487) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-      text run at (5,505) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-      text run at (5,523) width 233: "sit amet, consectetuer adipiscing elit. "
-      text run at (238,523) width 121: "Lorem ipsum dolor"
-      text run at (5,541) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
-      text run at (5,559) width 318: "mi. Curabitur sollicitudin felis quis lectus. Quisque"
-      text run at (5,577) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
-      text run at (5,595) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
-      text run at (5,613) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
-      text run at (5,631) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
-      text run at (5,649) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
-      text run at (5,667) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
-      text run at (5,685) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
-      text run at (5,703) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
-      text run at (5,721) width 91: "adipiscing elit."
-layer at (8,2008) size 760x442
-  RenderBlock {DIV} at (0,1992) size 760x442 [border: (5px solid #800000)]
+      text run at (5,381) width 355: "quis lectus. Quisque adipiscing rhoncus sem. Proin nulla"
+      text run at (5,399) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
+      text run at (5,417) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
+      text run at (5,435) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
+      text run at (5,453) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+      text run at (5,471) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+      text run at (5,489) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+      text run at (5,507) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+      text run at (5,525) width 233: "sit amet, consectetuer adipiscing elit. "
+      text run at (238,525) width 121: "Lorem ipsum dolor"
+      text run at (5,543) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
+      text run at (5,561) width 318: "mi. Curabitur sollicitudin felis quis lectus. Quisque"
+      text run at (5,579) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
+      text run at (5,597) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
+      text run at (5,615) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
+      text run at (5,633) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
+      text run at (5,651) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
+      text run at (5,669) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
+      text run at (5,687) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
+      text run at (5,705) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
+      text run at (5,723) width 91: "adipiscing elit."
+layer at (8,2013) size 760x444
+  RenderBlock {DIV} at (0,1997) size 760x444 [border: (5px solid #800000)]
     RenderBlock (anonymous multi-column span) at (5,24) size 750x56
       RenderBlock {H2} at (0,0) size 750x56 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 709x56
           text run at (0,0) width 709: "This is a spanning element at the beginning of the columns block with"
           text run at (0,28) width 145: "block siblings."
-layer at (13,2107) size 750x322
-  RenderBlock (anonymous multi-column) at (5,99) size 750x322
+layer at (13,2112) size 750x324
+  RenderBlock (anonymous multi-column) at (5,99) size 750x324
     RenderBlock {P} at (0,0) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
@@ -257,20 +257,20 @@ layer at (13,2107) size 750x322
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (0,214) size 367x198
-      RenderText {#text} at (0,0) size 362x198
+    RenderBlock {P} at (0,214) size 367x200
+      RenderText {#text} at (0,0) size 362x200
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
         text run at (0,54) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
         text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
         text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
-        text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (0,428) size 367x198
+        text run at (0,110) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (0,128) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,146) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,164) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,182) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock {P} at (0,430) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -283,15 +283,15 @@ layer at (13,2107) size 750x322
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (8,2466) size 760x442
-  RenderBlock {DIV} at (0,2450) size 760x442 [border: (5px solid #800000)]
-    RenderBlock (anonymous multi-column span) at (5,362) size 750x56
+layer at (8,2473) size 760x444
+  RenderBlock {DIV} at (0,2457) size 760x444 [border: (5px solid #800000)]
+    RenderBlock (anonymous multi-column span) at (5,364) size 750x56
       RenderBlock {H2} at (0,0) size 750x56 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 707x56
           text run at (0,0) width 707: "This is a spanning element at the end of the columns block with block"
           text run at (0,28) width 83: "siblings."
-layer at (13,2487) size 750x322
-  RenderBlock (anonymous multi-column) at (5,21) size 750x322
+layer at (13,2494) size 750x324
+  RenderBlock (anonymous multi-column) at (5,21) size 750x324
     RenderBlock {P} at (0,0) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
@@ -305,20 +305,20 @@ layer at (13,2487) size 750x322
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (0,214) size 367x198
-      RenderText {#text} at (0,0) size 362x198
+    RenderBlock {P} at (0,214) size 367x200
+      RenderText {#text} at (0,0) size 362x200
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
         text run at (0,54) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
         text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
         text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
-        text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (0,428) size 367x198
+        text run at (0,110) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (0,128) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,146) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,164) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,182) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock {P} at (0,430) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -331,15 +331,15 @@ layer at (13,2487) size 750x322
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (8,2924) size 760x458
-  RenderBlock {DIV} at (0,2908) size 760x458 [border: (5px solid #800000)]
-    RenderBlock (anonymous multi-column span) at (5,254) size 750x56
+layer at (8,2933) size 760x442
+  RenderBlock {DIV} at (0,2917) size 760x442 [border: (5px solid #800000)]
+    RenderBlock (anonymous multi-column span) at (5,238) size 750x56
       RenderBlock {H2} at (0,0) size 750x56 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 741x56
           text run at (0,0) width 741: "This is a spanning element in the middle of the columns block with block"
           text run at (0,28) width 83: "siblings."
-layer at (13,2945) size 750x214
-  RenderBlock (anonymous multi-column) at (5,21) size 750x214
+layer at (13,2954) size 750x198
+  RenderBlock (anonymous multi-column) at (5,21) size 750x198
     RenderBlock {P} at (0,0) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
@@ -353,7 +353,7 @@ layer at (13,2945) size 750x214
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (0,214) size 367x198
+    RenderBlock {P} at (0,198) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -366,8 +366,8 @@ layer at (13,2945) size 750x214
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (13,3253) size 750x108
-  RenderBlock (anonymous multi-column) at (5,329) size 750x108
+layer at (13,3246) size 750x108
+  RenderBlock (anonymous multi-column) at (5,313) size 750x108
     RenderBlock {P} at (0,0) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-removal-expected.txt b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-removal-expected.txt
index 99becb6..83f0aed 100644
--- a/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-removal-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/span/span-as-immediate-columns-child-removal-expected.txt
@@ -1,8 +1,8 @@
-layer at (0,0) size 785x2158
+layer at (0,0) size 785x2164
   RenderView at (0,0) size 785x600
-layer at (0,0) size 785x2158
-  RenderBlock {HTML} at (0,0) size 785x2158
-    RenderBody {BODY} at (8,16) size 769x2126
+layer at (0,0) size 785x2164
+  RenderBlock {HTML} at (0,0) size 785x2164
+    RenderBody {BODY} at (8,16) size 769x2132
 layer at (8,16) size 760x316
   RenderBlock {DIV} at (0,0) size 760x316 [border: (5px solid #800000)]
     RenderText {#text} at (5,5) size 363x612
@@ -83,7 +83,7 @@ layer at (8,348) size 760x316
       text run at (5,599) width 154: "Nulla varius enim ac mi."
 layer at (8,680) size 760x350
   RenderBlock {DIV} at (0,664) size 760x350 [border: (5px solid #800000)]
-    RenderBlock {P} at (5,21) size 367x234
+    RenderBlock {P} at (5,5) size 367x234
       RenderText {#text} at (0,0) size 363x234
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -99,7 +99,7 @@ layer at (8,680) size 760x350
         text run at (233,180) width 121: "Lorem ipsum dolor"
         text run at (0,198) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
         text run at (0,216) width 20: "mi."
-    RenderBlock {P} at (5,271) size 367x396
+    RenderBlock {P} at (5,255) size 367x396
       RenderText {#text} at (0,0) size 363x396
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -124,8 +124,8 @@ layer at (8,680) size 760x350
         text run at (0,342) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
         text run at (0,360) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
         text run at (0,378) width 91: "adipiscing elit."
-layer at (8,1046) size 760x348
-  RenderBlock {DIV} at (0,1030) size 760x348 [border: (5px solid #800000)]
+layer at (8,1046) size 760x350
+  RenderBlock {DIV} at (0,1030) size 760x350 [border: (5px solid #800000)]
     RenderBlock (anonymous) at (5,5) size 367x234
       RenderText {#text} at (0,0) size 363x234
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
@@ -142,23 +142,23 @@ layer at (8,1046) size 760x348
         text run at (233,180) width 121: "Lorem ipsum dolor"
         text run at (0,198) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
         text run at (0,216) width 20: "mi."
-    RenderBlock (anonymous) at (5,239) size 367x198
+    RenderBlock (anonymous) at (5,239) size 367x214
       RenderInline {SPAN} at (0,0) size 42x18
         RenderText {#text} at (0,0) size 42x18
           text run at (0,0) width 42: "Lorem"
-      RenderText {#text} at (42,0) size 362x198
+      RenderText {#text} at (42,0) size 362x214
         text run at (42,0) width 312: " ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
         text run at (0,54) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
         text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
-        text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
-        text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (5,453) size 367x198
+        text run at (0,106) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
+        text run at (0,124) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (0,142) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,160) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,178) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,196) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock {P} at (5,469) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -171,8 +171,8 @@ layer at (8,1046) size 760x348
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (8,1410) size 760x348
-  RenderBlock {DIV} at (0,1394) size 760x348 [border: (5px solid #800000)]
+layer at (8,1412) size 760x350
+  RenderBlock {DIV} at (0,1396) size 760x350 [border: (5px solid #800000)]
     RenderBlock (anonymous) at (5,5) size 367x198
       RenderInline {SPAN} at (0,0) size 362x198
         RenderText {#text} at (0,0) size 362x198
@@ -192,23 +192,23 @@ layer at (8,1410) size 760x348
         RenderText {#text} at (0,0) size 354x36
           text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
           text run at (0,18) width 154: "Nulla varius enim ac mi."
-    RenderBlock (anonymous) at (5,239) size 367x198
+    RenderBlock (anonymous) at (5,239) size 367x214
       RenderInline {SPAN} at (0,0) size 42x18
         RenderText {#text} at (0,0) size 42x18
           text run at (0,0) width 42: "Lorem"
-      RenderText {#text} at (42,0) size 362x198
+      RenderText {#text} at (42,0) size 362x214
         text run at (42,0) width 312: " ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
         text run at (0,54) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
         text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
-        text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
-        text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (5,453) size 367x198
+        text run at (0,106) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
+        text run at (0,124) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (0,142) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,160) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,178) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,196) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock {P} at (5,469) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -221,9 +221,9 @@ layer at (8,1410) size 760x348
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-layer at (8,1774) size 760x368
-  RenderBlock {DIV} at (0,1758) size 760x368 [border: (5px solid #800000)]
-    RenderBlock {P} at (5,21) size 367x198
+layer at (8,1778) size 760x370
+  RenderBlock {DIV} at (0,1762) size 760x370 [border: (5px solid #800000)]
+    RenderBlock {P} at (5,5) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -236,32 +236,32 @@ layer at (8,1774) size 760x368
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (5,235) size 367x36
+    RenderBlock {P} at (5,219) size 367x36
       RenderText {#text} at (0,0) size 354x36
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 154: "Nulla varius enim ac mi."
-    RenderBlock {P} at (5,287) size 367x198
-      RenderText {#text} at (0,0) size 362x198
+    RenderBlock {P} at (5,271) size 367x202
+      RenderText {#text} at (0,0) size 362x202
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
         text run at (0,54) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
         text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
-        text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
-        text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock (anonymous) at (5,501) size 367x18
+        text run at (0,94) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
+        text run at (0,112) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (0,130) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,148) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,166) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,184) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock (anonymous) at (5,489) size 367x18
       RenderInline {SPAN} at (0,0) size 354x18
         RenderText {#text} at (0,0) size 354x18
           text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
-    RenderBlock (anonymous) at (5,519) size 367x18
+    RenderBlock (anonymous) at (5,507) size 367x18
       RenderBlock {SPAN} at (0,0) size 367x18
         RenderText {#text} at (0,0) size 154x18
           text run at (0,0) width 154: "Nulla varius enim ac mi."
-    RenderBlock (anonymous) at (5,537) size 367x180
+    RenderBlock (anonymous) at (5,525) size 367x180
       RenderInline {SPAN} at (0,0) size 362x180
         RenderText {#text} at (0,0) size 362x180
           text run at (0,0) width 362: "Curabitur sollicitudin felis quis lectus. Quisque adipiscing"
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.checksum b/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.checksum
index 27ea7cf..a78fbd1 100644
--- a/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.checksum
@@ -1 +1 @@
-c3ed302797c2df58741ad171509deed5
\ No newline at end of file
+3b6afbf6b121a5b61309629429577240
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.png b/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.png
index e6f69b2..80914ea 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.png and b/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.txt b/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.txt
index 7299737..9640144 100644
--- a/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-dynamic-expected.txt
@@ -1,16 +1,16 @@
-layer at (0,0) size 785x1308
+layer at (0,0) size 785x1324
   RenderView at (0,0) size 785x600
-layer at (0,0) size 785x1308
-  RenderBlock {HTML} at (0,0) size 785x1308
-    RenderBody {BODY} at (8,16) size 769x1276
-layer at (8,16) size 760x398
-  RenderBlock {DIV} at (0,0) size 760x398 [border: (5px solid #800000)]
+layer at (0,0) size 785x1324
+  RenderBlock {HTML} at (0,0) size 785x1324
+    RenderBody {BODY} at (8,16) size 769x1292
+layer at (8,16) size 760x400
+  RenderBlock {DIV} at (0,0) size 760x400 [border: (5px solid #800000)]
     RenderBlock (anonymous multi-column span) at (5,24) size 750x28 [color=#FFFFFF]
       RenderBlock {H2} at (0,0) size 750x28 [color=#000000] [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 276x28
           text run at (0,0) width 276: "This is a spanning element."
-layer at (13,87) size 750x322
-  RenderBlock (anonymous multi-column) at (5,71) size 750x322
+layer at (13,87) size 750x324
+  RenderBlock (anonymous multi-column) at (5,71) size 750x324
     RenderBlock {SPAN} at (0,0) size 367x198 [color=#FFFFFF] [bgcolor=#000000]
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
@@ -24,45 +24,45 @@ layer at (13,87) size 750x322
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock (anonymous) at (0,214) size 367x414
-      RenderText {#text} at (0,0) size 362x198
+    RenderBlock (anonymous) at (0,214) size 367x416
+      RenderText {#text} at (0,0) size 362x200
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
         text run at (0,54) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
         text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
         text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
-        text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 233: "sit amet, consectetuer adipiscing elit. "
+        text run at (0,110) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (0,128) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,146) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,164) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,182) width 233: "sit amet, consectetuer adipiscing elit. "
       RenderInline {SPAN} at (0,0) size 42x18
-        RenderText {#text} at (233,180) size 42x18
-          text run at (233,180) width 42: "Lorem"
-      RenderText {#text} at (275,180) size 363x234
-        text run at (275,180) width 79: " ipsum dolor"
-        text run at (0,198) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
-        text run at (0,216) width 318: "mi. Curabitur sollicitudin felis quis lectus. Quisque"
-        text run at (0,234) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
-        text run at (0,252) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
-        text run at (0,270) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
-        text run at (0,288) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
-        text run at (0,306) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
-        text run at (0,324) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
-        text run at (0,342) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
-        text run at (0,360) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,378) width 95: "adipiscing elit. "
-        text run at (95,378) width 259: "Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,396) width 249: "adipiscing elit. Nulla varius enim ac mi."
-layer at (8,430) size 760x398
-  RenderBlock {DIV} at (0,414) size 760x398 [border: (5px solid #800000)]
-    RenderBlock (anonymous multi-column span) at (5,346) size 750x28 [color=#FFFFFF]
+        RenderText {#text} at (233,182) size 42x18
+          text run at (233,182) width 42: "Lorem"
+      RenderText {#text} at (275,182) size 363x234
+        text run at (275,182) width 79: " ipsum dolor"
+        text run at (0,200) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
+        text run at (0,218) width 318: "mi. Curabitur sollicitudin felis quis lectus. Quisque"
+        text run at (0,236) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
+        text run at (0,254) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
+        text run at (0,272) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
+        text run at (0,290) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
+        text run at (0,308) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
+        text run at (0,326) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
+        text run at (0,344) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
+        text run at (0,362) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,380) width 95: "adipiscing elit. "
+        text run at (95,380) width 259: "Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,398) width 249: "adipiscing elit. Nulla varius enim ac mi."
+layer at (8,432) size 760x400
+  RenderBlock {DIV} at (0,416) size 760x400 [border: (5px solid #800000)]
+    RenderBlock (anonymous multi-column span) at (5,348) size 750x28 [color=#FFFFFF]
       RenderBlock {H2} at (0,0) size 750x28 [color=#000000] [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 276x28
           text run at (0,0) width 276: "This is a spanning element."
-layer at (13,435) size 750x322
-  RenderBlock (anonymous multi-column) at (5,5) size 750x322
+layer at (13,437) size 750x324
+  RenderBlock (anonymous multi-column) at (5,5) size 750x324
     RenderBlock (anonymous) at (0,0) size 367x576
       RenderText {#text} at (0,0) size 363x576
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
@@ -103,16 +103,16 @@ layer at (13,435) size 750x322
       RenderText {#text} at (0,0) size 354x36
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 154: "Nulla varius enim ac mi."
-layer at (8,844) size 760x448
-  RenderBlock {DIV} at (0,828) size 760x448 [border: (5px solid #800000)]
-    RenderBlock (anonymous multi-column span) at (5,166) size 750x28 [color=#FFFFFF]
+layer at (8,848) size 760x460
+  RenderBlock {DIV} at (0,832) size 760x460 [border: (5px solid #800000)]
+    RenderBlock (anonymous multi-column span) at (5,175) size 750x28 [color=#FFFFFF]
       RenderBlock {H2} at (0,0) size 750x28 [color=#000000] [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 276x28
           text run at (0,0) width 276: "This is a spanning element."
-layer at (13,865) size 750x126
-  RenderBlock (anonymous multi-column) at (5,21) size 750x126
-    RenderBlock {P} at (0,0) size 367x198
-      RenderText {#text} at (0,0) size 362x198
+layer at (13,869) size 750x135
+  RenderBlock (anonymous multi-column) at (5,21) size 750x135
+    RenderBlock {P} at (0,0) size 367x207
+      RenderText {#text} at (0,0) size 362x207
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
@@ -120,17 +120,17 @@ layer at (13,865) size 750x126
         text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
         text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
         text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {SPAN} at (0,214) size 367x36 [color=#FFFFFF] [bgcolor=#000000]
+        text run at (0,135) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,153) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,171) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,189) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock {SPAN} at (0,223) size 367x36 [color=#FFFFFF] [bgcolor=#000000]
       RenderBlock (anonymous) at (0,0) size 367x36
         RenderText {#text} at (0,0) size 354x36
           text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
           text run at (0,18) width 154: "Nulla varius enim ac mi."
-layer at (13,1057) size 750x214
-  RenderBlock (anonymous multi-column) at (5,213) size 750x214
+layer at (13,1070) size 750x217
+  RenderBlock (anonymous multi-column) at (5,222) size 750x217
     RenderBlock {SPAN} at (0,0) size 367x198 [color=#FFFFFF] [bgcolor=#000000]
       RenderBlock {P} at (0,0) size 367x198
         RenderText {#text} at (0,0) size 362x198
@@ -145,7 +145,7 @@ layer at (13,1057) size 750x214
           text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
           text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
           text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock (anonymous) at (0,214) size 367x198
+    RenderBlock (anonymous) at (0,217) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -158,4 +158,4 @@ layer at (13,1057) size 750x214
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {P} at (0,428) size 367x0
+    RenderBlock {P} at (0,431) size 367x0
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.checksum b/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.checksum
index bd70403..c4e1961 100644
--- a/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.checksum
+++ b/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.checksum
@@ -1 +1 @@
-5d3408d84ea23f116c8b41916c1ae096
\ No newline at end of file
+cbc24fe2c2c4d0b176eb48710deb3b60
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.png b/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.png
index 54cdf80..f50dbcf 100644
Binary files a/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.png and b/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.txt b/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.txt
index 800f0b7..9ab103b 100644
--- a/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.txt
+++ b/LayoutTests/platform/mac/fast/multicol/span/span-as-nested-columns-child-expected.txt
@@ -1,16 +1,16 @@
-layer at (0,0) size 785x1278
+layer at (0,0) size 785x1282
   RenderView at (0,0) size 785x600
-layer at (0,0) size 785x1278
-  RenderBlock {HTML} at (0,0) size 785x1278
-    RenderBody {BODY} at (8,16) size 769x1246
-layer at (8,16) size 760x398
-  RenderBlock {DIV} at (0,0) size 760x398 [border: (5px solid #800000)]
+layer at (0,0) size 785x1282
+  RenderBlock {HTML} at (0,0) size 785x1282
+    RenderBody {BODY} at (8,16) size 769x1250
+layer at (8,16) size 760x400
+  RenderBlock {DIV} at (0,0) size 760x400 [border: (5px solid #800000)]
     RenderBlock (anonymous multi-column span) at (5,24) size 750x28 [color=#FFFFFF]
       RenderBlock {H2} at (0,0) size 750x28 [color=#000000] [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 664x28
           text run at (0,0) width 664: "This is a spanning element at the beginning of the columns block."
-layer at (13,87) size 750x322
-  RenderBlock (anonymous multi-column) at (5,71) size 750x322
+layer at (13,87) size 750x324
+  RenderBlock (anonymous multi-column) at (5,71) size 750x324
     RenderBlock {SPAN} at (0,0) size 367x198 [color=#FFFFFF] [bgcolor=#000000]
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
@@ -24,43 +24,43 @@ layer at (13,87) size 750x322
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock (anonymous) at (0,214) size 367x414
-      RenderText {#text} at (0,0) size 363x414
+    RenderBlock (anonymous) at (0,214) size 367x416
+      RenderText {#text} at (0,0) size 363x416
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
         text run at (0,54) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
         text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
         text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
-        text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 233: "sit amet, consectetuer adipiscing elit. "
-        text run at (233,180) width 121: "Lorem ipsum dolor"
-        text run at (0,198) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
-        text run at (0,216) width 318: "mi. Curabitur sollicitudin felis quis lectus. Quisque"
-        text run at (0,234) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
-        text run at (0,252) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
-        text run at (0,270) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
-        text run at (0,288) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
-        text run at (0,306) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
-        text run at (0,324) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
-        text run at (0,342) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
-        text run at (0,360) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,378) width 95: "adipiscing elit. "
-        text run at (95,378) width 259: "Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,396) width 249: "adipiscing elit. Nulla varius enim ac mi."
-layer at (8,430) size 760x400
-  RenderBlock {DIV} at (0,414) size 760x400 [border: (5px solid #800000)]
-    RenderBlock (anonymous multi-column span) at (5,348) size 750x28 [color=#FFFFFF]
+        text run at (0,110) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (0,128) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,146) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,164) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,182) width 233: "sit amet, consectetuer adipiscing elit. "
+        text run at (233,182) width 121: "Lorem ipsum dolor"
+        text run at (0,200) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
+        text run at (0,218) width 318: "mi. Curabitur sollicitudin felis quis lectus. Quisque"
+        text run at (0,236) width 356: "adipiscing rhoncus sem. Proin nulla purus, vulputate vel,"
+        text run at (0,254) width 354: "varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis"
+        text run at (0,272) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
+        text run at (0,290) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
+        text run at (0,308) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
+        text run at (0,326) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
+        text run at (0,344) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
+        text run at (0,362) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,380) width 95: "adipiscing elit. "
+        text run at (95,380) width 259: "Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,398) width 249: "adipiscing elit. Nulla varius enim ac mi."
+layer at (8,432) size 760x409
+  RenderBlock {DIV} at (0,416) size 760x409 [border: (5px solid #800000)]
+    RenderBlock (anonymous multi-column span) at (5,357) size 750x28 [color=#FFFFFF]
       RenderBlock {H2} at (0,0) size 750x28 [color=#000000] [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 600x28
           text run at (0,0) width 600: "This is a spanning element at the end of the columns block."
-layer at (13,435) size 750x324
-  RenderBlock (anonymous multi-column) at (5,5) size 750x324
-    RenderBlock (anonymous) at (0,0) size 367x396
-      RenderText {#text} at (0,0) size 363x396
+layer at (13,437) size 750x333
+  RenderBlock (anonymous multi-column) at (5,5) size 750x333
+    RenderBlock (anonymous) at (0,0) size 367x405
+      RenderText {#text} at (0,0) size 363x405
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
@@ -80,11 +80,11 @@ layer at (13,435) size 750x324
         text run at (0,270) width 351: "aliquam. Cras convallis adipiscing sem. Nam nonummy"
         text run at (0,288) width 358: "enim. Nullam bibendum lobortis neque. Vestibulum velit"
         text run at (0,306) width 361: "orci, tempus euismod, pretium quis, interdum vitae, nulla."
-        text run at (0,324) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
-        text run at (0,342) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
-        text run at (0,360) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
-        text run at (0,378) width 91: "adipiscing elit."
-    RenderBlock {SPAN} at (0,412) size 367x234 [color=#FFFFFF] [bgcolor=#000000]
+        text run at (0,333) width 339: "Phasellus eget ante et tortor condimentum vestibulum."
+        text run at (0,351) width 345: "Suspendisse hendrerit quam nec felis. Sed varius turpis"
+        text run at (0,369) width 331: "vitae pede. Lorem ipsum dolor sit amet, consectetuer"
+        text run at (0,387) width 91: "adipiscing elit."
+    RenderBlock {SPAN} at (0,421) size 367x234 [color=#FFFFFF] [bgcolor=#000000]
       RenderText {#text} at (0,0) size 363x234
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
@@ -100,16 +100,16 @@ layer at (13,435) size 750x324
         text run at (233,180) width 121: "Lorem ipsum dolor"
         text run at (0,198) width 363: "sit amet, consectetuer adipiscing elit. Nulla varius enim ac"
         text run at (0,216) width 20: "mi."
-layer at (8,846) size 760x416
-  RenderBlock {DIV} at (0,830) size 760x416 [border: (5px solid #800000)]
-    RenderBlock (anonymous multi-column span) at (5,150) size 750x28 [color=#FFFFFF]
+layer at (8,857) size 760x409
+  RenderBlock {DIV} at (0,841) size 760x409 [border: (5px solid #800000)]
+    RenderBlock (anonymous multi-column span) at (5,159) size 750x28 [color=#FFFFFF]
       RenderBlock {H2} at (0,0) size 750x28 [color=#000000] [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 634x28
           text run at (0,0) width 634: "This is a spanning element in the middle of the columns block."
-layer at (13,851) size 750x126
-  RenderBlock (anonymous multi-column) at (5,5) size 750x126
-    RenderBlock (anonymous) at (0,0) size 367x198
-      RenderText {#text} at (0,0) size 362x198
+layer at (13,862) size 750x135
+  RenderBlock (anonymous multi-column) at (5,5) size 750x135
+    RenderBlock (anonymous) at (0,0) size 367x207
+      RenderText {#text} at (0,0) size 362x207
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
         text run at (0,36) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
@@ -117,16 +117,16 @@ layer at (13,851) size 750x126
         text run at (0,72) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
         text run at (0,90) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
         text run at (0,108) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
-        text run at (0,126) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
-        text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
-        text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
-        text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock {SPAN} at (0,214) size 367x36 [color=#FFFFFF] [bgcolor=#000000]
+        text run at (0,135) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (0,153) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (0,171) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (0,189) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock {SPAN} at (0,223) size 367x36 [color=#FFFFFF] [bgcolor=#000000]
       RenderText {#text} at (0,0) size 354x36
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 154: "Nulla varius enim ac mi."
-layer at (13,1043) size 750x214
-  RenderBlock (anonymous multi-column) at (5,197) size 750x214
+layer at (13,1063) size 750x198
+  RenderBlock (anonymous multi-column) at (5,206) size 750x198
     RenderBlock {SPAN} at (0,0) size 367x198 [color=#FFFFFF] [bgcolor=#000000]
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
@@ -140,7 +140,7 @@ layer at (13,1043) size 750x214
         text run at (0,144) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
         text run at (0,162) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
         text run at (0,180) width 229: "sit amet, consectetuer adipiscing elit."
-    RenderBlock (anonymous) at (0,214) size 367x198
+    RenderBlock (anonymous) at (0,198) size 367x198
       RenderText {#text} at (0,0) size 362x198
         text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
         text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
diff --git a/LayoutTests/platform/mac/fast/multicol/table-margin-collapse-expected.checksum b/LayoutTests/platform/mac/fast/multicol/table-margin-collapse-expected.checksum
new file mode 100644
index 0000000..c65881e
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/table-margin-collapse-expected.checksum
@@ -0,0 +1 @@
+9059a578dcdbd26c8dab4064b2b1678d
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/table-margin-collapse-expected.png b/LayoutTests/platform/mac/fast/multicol/table-margin-collapse-expected.png
new file mode 100644
index 0000000..9719a8d
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/table-margin-collapse-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/table-margin-collapse-expected.txt b/LayoutTests/platform/mac/fast/multicol/table-margin-collapse-expected.txt
new file mode 100644
index 0000000..92e37d3
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/table-margin-collapse-expected.txt
@@ -0,0 +1,21 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderBlock (anonymous) at (0,0) size 784x36
+        RenderText {#text} at (0,0) size 770x36
+          text run at (0,0) width 438: "The four rectangles below should both be at the top of their columns. "
+          text run at (438,0) width 332: "If one is lower than the other, than the test has failed."
+          text run at (0,18) width 404: "The pattern in each column should be the same (orange/yellow)."
+layer at (8,44) size 784x304
+  RenderBlock {DIV} at (0,36) size 784x304 [border: (2px solid #000000)]
+    RenderTable {TABLE} at (2,2) size 382x500
+      RenderTableSection {TBODY} at (0,0) size 382x500
+        RenderTableRow {TR} at (0,0) size 382x500
+          RenderTableCell {TD} at (0,0) size 191x500 [r=0 c=0 rs=1 cs=1]
+            RenderBlock {DIV} at (0,0) size 191x200 [bgcolor=#FFA500]
+            RenderBlock {DIV} at (0,300) size 191x200 [bgcolor=#FFA500]
+          RenderTableCell {TD} at (191,0) size 191x500 [r=0 c=1 rs=1 cs=1]
+            RenderBlock {DIV} at (0,0) size 191x200 [bgcolor=#FFFF00]
+            RenderBlock {DIV} at (0,300) size 191x200 [bgcolor=#FFFF00]
diff --git a/LayoutTests/platform/mac/fast/multicol/table-vertical-align-expected.checksum b/LayoutTests/platform/mac/fast/multicol/table-vertical-align-expected.checksum
new file mode 100644
index 0000000..3b4e27e
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/table-vertical-align-expected.checksum
@@ -0,0 +1 @@
+5f511b02f1b0e1f1f291e4743db6e499
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/table-vertical-align-expected.png b/LayoutTests/platform/mac/fast/multicol/table-vertical-align-expected.png
new file mode 100644
index 0000000..1a4e0c6
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/table-vertical-align-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/table-vertical-align-expected.txt b/LayoutTests/platform/mac/fast/multicol/table-vertical-align-expected.txt
new file mode 100644
index 0000000..34f2b31
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/table-vertical-align-expected.txt
@@ -0,0 +1,400 @@
+layer at (0,0) size 1560x1010
+  RenderView at (0,0) size 785x585
+layer at (0,0) size 1560x1010
+  RenderBlock {HTML} at (0,0) size 785x1010
+    RenderBody {BODY} at (8,8) size 769x994
+      RenderBlock {HR} at (0,358) size 769x2 [border: (1px inset #000000)]
+      RenderBlock {HR} at (0,676) size 769x2 [border: (1px inset #000000)]
+layer at (8,8) size 1552x350
+  RenderBlock {DIV} at (0,0) size 769x350
+    RenderTable {TABLE} at (0,0) size 376x1179 [border: (1px outset #808080)]
+      RenderTableSection {TBODY} at (1,1) size 374x1177
+        RenderTableRow {TR} at (0,0) size 374x1177
+          RenderTableCell {TD} at (0,44) size 140x1133 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
+            RenderText {#text} at (11,11) size 105x36
+              text run at (11,11) width 105: "This cell has lots"
+              text run at (11,29) width 44: "of text."
+            RenderBR {BR} at (55,43) size 0x0
+            RenderText {#text} at (11,47) size 105x36
+              text run at (11,47) width 105: "This cell has lots"
+              text run at (11,65) width 44: "of text."
+            RenderBR {BR} at (55,79) size 0x0
+            RenderText {#text} at (11,83) size 105x36
+              text run at (11,83) width 105: "This cell has lots"
+              text run at (11,101) width 44: "of text."
+            RenderBR {BR} at (55,115) size 0x0
+            RenderText {#text} at (11,119) size 105x36
+              text run at (11,119) width 105: "This cell has lots"
+              text run at (11,137) width 44: "of text."
+            RenderBR {BR} at (55,151) size 0x0
+            RenderText {#text} at (11,155) size 105x36
+              text run at (11,155) width 105: "This cell has lots"
+              text run at (11,173) width 44: "of text."
+            RenderBR {BR} at (55,187) size 0x0
+            RenderText {#text} at (11,191) size 105x36
+              text run at (11,191) width 105: "This cell has lots"
+              text run at (11,209) width 44: "of text."
+            RenderBR {BR} at (55,223) size 0x0
+            RenderText {#text} at (11,227) size 105x36
+              text run at (11,227) width 105: "This cell has lots"
+              text run at (11,245) width 44: "of text."
+            RenderBR {BR} at (55,259) size 0x0
+            RenderText {#text} at (11,263) size 105x36
+              text run at (11,263) width 105: "This cell has lots"
+              text run at (11,281) width 44: "of text."
+            RenderBR {BR} at (55,295) size 0x0
+            RenderText {#text} at (11,306) size 105x36
+              text run at (11,306) width 105: "This cell has lots"
+              text run at (11,324) width 44: "of text."
+            RenderBR {BR} at (55,338) size 0x0
+            RenderText {#text} at (11,342) size 105x36
+              text run at (11,342) width 105: "This cell has lots"
+              text run at (11,360) width 44: "of text."
+            RenderBR {BR} at (55,374) size 0x0
+            RenderText {#text} at (11,378) size 105x36
+              text run at (11,378) width 105: "This cell has lots"
+              text run at (11,396) width 44: "of text."
+            RenderBR {BR} at (55,410) size 0x0
+            RenderText {#text} at (11,414) size 105x36
+              text run at (11,414) width 105: "This cell has lots"
+              text run at (11,432) width 44: "of text."
+            RenderBR {BR} at (55,446) size 0x0
+            RenderText {#text} at (11,450) size 105x36
+              text run at (11,450) width 105: "This cell has lots"
+              text run at (11,468) width 44: "of text."
+            RenderBR {BR} at (55,482) size 0x0
+            RenderText {#text} at (11,486) size 105x36
+              text run at (11,486) width 105: "This cell has lots"
+              text run at (11,504) width 44: "of text."
+            RenderBR {BR} at (55,518) size 0x0
+            RenderText {#text} at (11,522) size 105x36
+              text run at (11,522) width 105: "This cell has lots"
+              text run at (11,540) width 44: "of text."
+            RenderBR {BR} at (55,554) size 0x0
+            RenderText {#text} at (11,558) size 105x36
+              text run at (11,558) width 105: "This cell has lots"
+              text run at (11,576) width 44: "of text."
+            RenderBR {BR} at (55,590) size 0x0
+            RenderText {#text} at (11,594) size 105x36
+              text run at (11,594) width 105: "This cell has lots"
+              text run at (11,612) width 44: "of text."
+            RenderBR {BR} at (55,626) size 0x0
+            RenderText {#text} at (11,630) size 105x44
+              text run at (11,630) width 105: "This cell has lots"
+              text run at (11,656) width 44: "of text."
+            RenderBR {BR} at (55,670) size 0x0
+            RenderText {#text} at (11,674) size 105x36
+              text run at (11,674) width 105: "This cell has lots"
+              text run at (11,692) width 44: "of text."
+            RenderBR {BR} at (55,706) size 0x0
+            RenderText {#text} at (11,710) size 105x36
+              text run at (11,710) width 105: "This cell has lots"
+              text run at (11,728) width 44: "of text."
+            RenderBR {BR} at (55,742) size 0x0
+            RenderText {#text} at (11,746) size 105x36
+              text run at (11,746) width 105: "This cell has lots"
+              text run at (11,764) width 44: "of text."
+            RenderBR {BR} at (55,778) size 0x0
+            RenderText {#text} at (11,782) size 105x36
+              text run at (11,782) width 105: "This cell has lots"
+              text run at (11,800) width 44: "of text."
+            RenderBR {BR} at (55,814) size 0x0
+            RenderText {#text} at (11,818) size 105x36
+              text run at (11,818) width 105: "This cell has lots"
+              text run at (11,836) width 44: "of text."
+            RenderBR {BR} at (55,850) size 0x0
+            RenderText {#text} at (11,854) size 105x36
+              text run at (11,854) width 105: "This cell has lots"
+              text run at (11,872) width 44: "of text."
+            RenderBR {BR} at (55,886) size 0x0
+            RenderText {#text} at (11,890) size 105x36
+              text run at (11,890) width 105: "This cell has lots"
+              text run at (11,908) width 44: "of text."
+            RenderBR {BR} at (55,922) size 0x0
+            RenderText {#text} at (11,926) size 105x36
+              text run at (11,926) width 105: "This cell has lots"
+              text run at (11,944) width 44: "of text."
+            RenderBR {BR} at (55,958) size 0x0
+            RenderText {#text} at (11,962) size 105x36
+              text run at (11,962) width 105: "This cell has lots"
+              text run at (11,980) width 44: "of text."
+            RenderBR {BR} at (55,994) size 0x0
+            RenderText {#text} at (11,1006) size 105x36
+              text run at (11,1006) width 105: "This cell has lots"
+              text run at (11,1024) width 44: "of text."
+            RenderBR {BR} at (55,1038) size 0x0
+            RenderText {#text} at (11,1042) size 105x36
+              text run at (11,1042) width 105: "This cell has lots"
+              text run at (11,1060) width 44: "of text."
+            RenderBR {BR} at (55,1074) size 0x0
+            RenderText {#text} at (11,1078) size 105x36
+              text run at (11,1078) width 105: "This cell has lots"
+              text run at (11,1096) width 44: "of text."
+            RenderBR {BR} at (55,1110) size 0x0
+          RenderTableCell {TD} at (140,0) size 234x170 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
+            RenderInline {SPAN} at (0,0) size 145x148
+              RenderText {#text} at (11,11) size 145x148
+                text run at (11,11) width 145: "Other"
+                text run at (11,85) width 108: "cell."
+layer at (8,376) size 1552x300
+  RenderBlock {DIV} at (0,368) size 769x300
+    RenderTable {TABLE} at (0,0) size 376x1129 [border: (1px outset #808080)]
+      RenderTableSection {TBODY} at (1,1) size 374x1127
+        RenderTableRow {TR} at (0,0) size 374x1127
+          RenderTableCell {TD} at (0,0) size 140x1127 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
+            RenderText {#text} at (11,11) size 105x36
+              text run at (11,11) width 105: "This cell has lots"
+              text run at (11,29) width 44: "of text."
+            RenderBR {BR} at (55,43) size 0x0
+            RenderText {#text} at (11,47) size 105x36
+              text run at (11,47) width 105: "This cell has lots"
+              text run at (11,65) width 44: "of text."
+            RenderBR {BR} at (55,79) size 0x0
+            RenderText {#text} at (11,83) size 105x36
+              text run at (11,83) width 105: "This cell has lots"
+              text run at (11,101) width 44: "of text."
+            RenderBR {BR} at (55,115) size 0x0
+            RenderText {#text} at (11,119) size 105x36
+              text run at (11,119) width 105: "This cell has lots"
+              text run at (11,137) width 44: "of text."
+            RenderBR {BR} at (55,151) size 0x0
+            RenderText {#text} at (11,155) size 105x36
+              text run at (11,155) width 105: "This cell has lots"
+              text run at (11,173) width 44: "of text."
+            RenderBR {BR} at (55,187) size 0x0
+            RenderText {#text} at (11,191) size 105x36
+              text run at (11,191) width 105: "This cell has lots"
+              text run at (11,209) width 44: "of text."
+            RenderBR {BR} at (55,223) size 0x0
+            RenderText {#text} at (11,227) size 105x36
+              text run at (11,227) width 105: "This cell has lots"
+              text run at (11,245) width 44: "of text."
+            RenderBR {BR} at (55,259) size 0x0
+            RenderText {#text} at (11,263) size 105x36
+              text run at (11,263) width 105: "This cell has lots"
+              text run at (11,281) width 44: "of text."
+            RenderBR {BR} at (55,295) size 0x0
+            RenderText {#text} at (11,300) size 105x36
+              text run at (11,300) width 105: "This cell has lots"
+              text run at (11,318) width 44: "of text."
+            RenderBR {BR} at (55,332) size 0x0
+            RenderText {#text} at (11,336) size 105x36
+              text run at (11,336) width 105: "This cell has lots"
+              text run at (11,354) width 44: "of text."
+            RenderBR {BR} at (55,368) size 0x0
+            RenderText {#text} at (11,372) size 105x36
+              text run at (11,372) width 105: "This cell has lots"
+              text run at (11,390) width 44: "of text."
+            RenderBR {BR} at (55,404) size 0x0
+            RenderText {#text} at (11,408) size 105x36
+              text run at (11,408) width 105: "This cell has lots"
+              text run at (11,426) width 44: "of text."
+            RenderBR {BR} at (55,440) size 0x0
+            RenderText {#text} at (11,444) size 105x36
+              text run at (11,444) width 105: "This cell has lots"
+              text run at (11,462) width 44: "of text."
+            RenderBR {BR} at (55,476) size 0x0
+            RenderText {#text} at (11,480) size 105x36
+              text run at (11,480) width 105: "This cell has lots"
+              text run at (11,498) width 44: "of text."
+            RenderBR {BR} at (55,512) size 0x0
+            RenderText {#text} at (11,516) size 105x36
+              text run at (11,516) width 105: "This cell has lots"
+              text run at (11,534) width 44: "of text."
+            RenderBR {BR} at (55,548) size 0x0
+            RenderText {#text} at (11,552) size 105x36
+              text run at (11,552) width 105: "This cell has lots"
+              text run at (11,570) width 44: "of text."
+            RenderBR {BR} at (55,584) size 0x0
+            RenderText {#text} at (11,600) size 105x36
+              text run at (11,600) width 105: "This cell has lots"
+              text run at (11,618) width 44: "of text."
+            RenderBR {BR} at (55,632) size 0x0
+            RenderText {#text} at (11,636) size 105x36
+              text run at (11,636) width 105: "This cell has lots"
+              text run at (11,654) width 44: "of text."
+            RenderBR {BR} at (55,668) size 0x0
+            RenderText {#text} at (11,672) size 105x36
+              text run at (11,672) width 105: "This cell has lots"
+              text run at (11,690) width 44: "of text."
+            RenderBR {BR} at (55,704) size 0x0
+            RenderText {#text} at (11,708) size 105x36
+              text run at (11,708) width 105: "This cell has lots"
+              text run at (11,726) width 44: "of text."
+            RenderBR {BR} at (55,740) size 0x0
+            RenderText {#text} at (11,744) size 105x36
+              text run at (11,744) width 105: "This cell has lots"
+              text run at (11,762) width 44: "of text."
+            RenderBR {BR} at (55,776) size 0x0
+            RenderText {#text} at (11,780) size 105x36
+              text run at (11,780) width 105: "This cell has lots"
+              text run at (11,798) width 44: "of text."
+            RenderBR {BR} at (55,812) size 0x0
+            RenderText {#text} at (11,816) size 105x36
+              text run at (11,816) width 105: "This cell has lots"
+              text run at (11,834) width 44: "of text."
+            RenderBR {BR} at (55,848) size 0x0
+            RenderText {#text} at (11,852) size 105x36
+              text run at (11,852) width 105: "This cell has lots"
+              text run at (11,870) width 44: "of text."
+            RenderBR {BR} at (55,884) size 0x0
+            RenderText {#text} at (11,900) size 105x36
+              text run at (11,900) width 105: "This cell has lots"
+              text run at (11,918) width 44: "of text."
+            RenderBR {BR} at (55,932) size 0x0
+            RenderText {#text} at (11,936) size 105x36
+              text run at (11,936) width 105: "This cell has lots"
+              text run at (11,954) width 44: "of text."
+            RenderBR {BR} at (55,968) size 0x0
+            RenderText {#text} at (11,972) size 105x36
+              text run at (11,972) width 105: "This cell has lots"
+              text run at (11,990) width 44: "of text."
+            RenderBR {BR} at (55,1004) size 0x0
+            RenderText {#text} at (11,1008) size 105x36
+              text run at (11,1008) width 105: "This cell has lots"
+              text run at (11,1026) width 44: "of text."
+            RenderBR {BR} at (55,1040) size 0x0
+            RenderText {#text} at (11,1044) size 105x36
+              text run at (11,1044) width 105: "This cell has lots"
+              text run at (11,1062) width 44: "of text."
+            RenderBR {BR} at (55,1076) size 0x0
+            RenderText {#text} at (11,1080) size 105x36
+              text run at (11,1080) width 105: "This cell has lots"
+              text run at (11,1098) width 44: "of text."
+            RenderBR {BR} at (55,1112) size 0x0
+          RenderTableCell {TD} at (140,478) size 234x170 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
+            RenderInline {SPAN} at (0,0) size 145x185
+              RenderText {#text} at (11,11) size 145x185
+                text run at (11,11) width 145: "Other"
+                text run at (11,122) width 108: "cell."
+layer at (8,702) size 1552x300
+  RenderBlock {DIV} at (0,694) size 769x300
+    RenderTable {TABLE} at (0,0) size 376x1129 [border: (1px outset #808080)]
+      RenderTableSection {TBODY} at (1,1) size 374x1127
+        RenderTableRow {TR} at (0,0) size 374x1127
+          RenderTableCell {TD} at (0,0) size 140x1127 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
+            RenderText {#text} at (11,11) size 105x36
+              text run at (11,11) width 105: "This cell has lots"
+              text run at (11,29) width 44: "of text."
+            RenderBR {BR} at (55,43) size 0x0
+            RenderText {#text} at (11,47) size 105x36
+              text run at (11,47) width 105: "This cell has lots"
+              text run at (11,65) width 44: "of text."
+            RenderBR {BR} at (55,79) size 0x0
+            RenderText {#text} at (11,83) size 105x36
+              text run at (11,83) width 105: "This cell has lots"
+              text run at (11,101) width 44: "of text."
+            RenderBR {BR} at (55,115) size 0x0
+            RenderText {#text} at (11,119) size 105x36
+              text run at (11,119) width 105: "This cell has lots"
+              text run at (11,137) width 44: "of text."
+            RenderBR {BR} at (55,151) size 0x0
+            RenderText {#text} at (11,155) size 105x36
+              text run at (11,155) width 105: "This cell has lots"
+              text run at (11,173) width 44: "of text."
+            RenderBR {BR} at (55,187) size 0x0
+            RenderText {#text} at (11,191) size 105x36
+              text run at (11,191) width 105: "This cell has lots"
+              text run at (11,209) width 44: "of text."
+            RenderBR {BR} at (55,223) size 0x0
+            RenderText {#text} at (11,227) size 105x36
+              text run at (11,227) width 105: "This cell has lots"
+              text run at (11,245) width 44: "of text."
+            RenderBR {BR} at (55,259) size 0x0
+            RenderText {#text} at (11,263) size 105x36
+              text run at (11,263) width 105: "This cell has lots"
+              text run at (11,281) width 44: "of text."
+            RenderBR {BR} at (55,295) size 0x0
+            RenderText {#text} at (11,300) size 105x36
+              text run at (11,300) width 105: "This cell has lots"
+              text run at (11,318) width 44: "of text."
+            RenderBR {BR} at (55,332) size 0x0
+            RenderText {#text} at (11,336) size 105x36
+              text run at (11,336) width 105: "This cell has lots"
+              text run at (11,354) width 44: "of text."
+            RenderBR {BR} at (55,368) size 0x0
+            RenderText {#text} at (11,372) size 105x36
+              text run at (11,372) width 105: "This cell has lots"
+              text run at (11,390) width 44: "of text."
+            RenderBR {BR} at (55,404) size 0x0
+            RenderText {#text} at (11,408) size 105x36
+              text run at (11,408) width 105: "This cell has lots"
+              text run at (11,426) width 44: "of text."
+            RenderBR {BR} at (55,440) size 0x0
+            RenderText {#text} at (11,444) size 105x36
+              text run at (11,444) width 105: "This cell has lots"
+              text run at (11,462) width 44: "of text."
+            RenderBR {BR} at (55,476) size 0x0
+            RenderText {#text} at (11,480) size 105x36
+              text run at (11,480) width 105: "This cell has lots"
+              text run at (11,498) width 44: "of text."
+            RenderBR {BR} at (55,512) size 0x0
+            RenderText {#text} at (11,516) size 105x36
+              text run at (11,516) width 105: "This cell has lots"
+              text run at (11,534) width 44: "of text."
+            RenderBR {BR} at (55,548) size 0x0
+            RenderText {#text} at (11,552) size 105x36
+              text run at (11,552) width 105: "This cell has lots"
+              text run at (11,570) width 44: "of text."
+            RenderBR {BR} at (55,584) size 0x0
+            RenderText {#text} at (11,600) size 105x36
+              text run at (11,600) width 105: "This cell has lots"
+              text run at (11,618) width 44: "of text."
+            RenderBR {BR} at (55,632) size 0x0
+            RenderText {#text} at (11,636) size 105x36
+              text run at (11,636) width 105: "This cell has lots"
+              text run at (11,654) width 44: "of text."
+            RenderBR {BR} at (55,668) size 0x0
+            RenderText {#text} at (11,672) size 105x36
+              text run at (11,672) width 105: "This cell has lots"
+              text run at (11,690) width 44: "of text."
+            RenderBR {BR} at (55,704) size 0x0
+            RenderText {#text} at (11,708) size 105x36
+              text run at (11,708) width 105: "This cell has lots"
+              text run at (11,726) width 44: "of text."
+            RenderBR {BR} at (55,740) size 0x0
+            RenderText {#text} at (11,744) size 105x36
+              text run at (11,744) width 105: "This cell has lots"
+              text run at (11,762) width 44: "of text."
+            RenderBR {BR} at (55,776) size 0x0
+            RenderText {#text} at (11,780) size 105x36
+              text run at (11,780) width 105: "This cell has lots"
+              text run at (11,798) width 44: "of text."
+            RenderBR {BR} at (55,812) size 0x0
+            RenderText {#text} at (11,816) size 105x36
+              text run at (11,816) width 105: "This cell has lots"
+              text run at (11,834) width 44: "of text."
+            RenderBR {BR} at (55,848) size 0x0
+            RenderText {#text} at (11,852) size 105x36
+              text run at (11,852) width 105: "This cell has lots"
+              text run at (11,870) width 44: "of text."
+            RenderBR {BR} at (55,884) size 0x0
+            RenderText {#text} at (11,900) size 105x36
+              text run at (11,900) width 105: "This cell has lots"
+              text run at (11,918) width 44: "of text."
+            RenderBR {BR} at (55,932) size 0x0
+            RenderText {#text} at (11,936) size 105x36
+              text run at (11,936) width 105: "This cell has lots"
+              text run at (11,954) width 44: "of text."
+            RenderBR {BR} at (55,968) size 0x0
+            RenderText {#text} at (11,972) size 105x36
+              text run at (11,972) width 105: "This cell has lots"
+              text run at (11,990) width 44: "of text."
+            RenderBR {BR} at (55,1004) size 0x0
+            RenderText {#text} at (11,1008) size 105x36
+              text run at (11,1008) width 105: "This cell has lots"
+              text run at (11,1026) width 44: "of text."
+            RenderBR {BR} at (55,1040) size 0x0
+            RenderText {#text} at (11,1044) size 105x36
+              text run at (11,1044) width 105: "This cell has lots"
+              text run at (11,1062) width 44: "of text."
+            RenderBR {BR} at (55,1076) size 0x0
+            RenderText {#text} at (11,1080) size 105x36
+              text run at (11,1080) width 105: "This cell has lots"
+              text run at (11,1098) width 44: "of text."
+            RenderBR {BR} at (55,1112) size 0x0
+          RenderTableCell {TD} at (140,957) size 234x170 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
+            RenderInline {SPAN} at (0,0) size 145x148
+              RenderText {#text} at (11,11) size 145x148
+                text run at (11,11) width 145: "Other"
+                text run at (11,85) width 108: "cell."
diff --git a/LayoutTests/platform/mac/fast/multicol/unsplittable-inline-block-expected.checksum b/LayoutTests/platform/mac/fast/multicol/unsplittable-inline-block-expected.checksum
new file mode 100644
index 0000000..33420bf
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/unsplittable-inline-block-expected.checksum
@@ -0,0 +1 @@
+cd3958fb04eef3dc8a5b6782c8a804a9
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/unsplittable-inline-block-expected.png b/LayoutTests/platform/mac/fast/multicol/unsplittable-inline-block-expected.png
new file mode 100644
index 0000000..3eef17f
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/unsplittable-inline-block-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/unsplittable-inline-block-expected.txt b/LayoutTests/platform/mac/fast/multicol/unsplittable-inline-block-expected.txt
new file mode 100644
index 0000000..eb8a300
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/unsplittable-inline-block-expected.txt
@@ -0,0 +1,44 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (8,8) size 770x320
+  RenderBlock {DIV} at (0,0) size 770x320 [border: (5px solid #000000)]
+    RenderBlock {DIV} at (10,10) size 367x250
+    RenderBlock (anonymous) at (10,310) size 367x202
+      RenderBlock {DIV} at (0,0) size 301x202 [border: (2px solid #008000)]
+        RenderText {#text} at (2,2) size 297x18
+          text run at (2,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (299,16) size 0x0
+        RenderText {#text} at (2,20) size 297x18
+          text run at (2,20) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (299,34) size 0x0
+        RenderText {#text} at (2,38) size 297x18
+          text run at (2,38) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (299,52) size 0x0
+        RenderText {#text} at (2,56) size 297x18
+          text run at (2,56) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (299,70) size 0x0
+        RenderText {#text} at (2,74) size 297x18
+          text run at (2,74) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (299,88) size 0x0
+        RenderText {#text} at (2,92) size 297x18
+          text run at (2,92) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (299,106) size 0x0
+        RenderText {#text} at (2,110) size 297x18
+          text run at (2,110) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (299,124) size 0x0
+        RenderText {#text} at (2,128) size 297x18
+          text run at (2,128) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (299,142) size 0x0
+        RenderText {#text} at (2,146) size 297x18
+          text run at (2,146) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (299,160) size 0x0
+        RenderText {#text} at (2,164) size 297x18
+          text run at (2,164) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (299,178) size 0x0
+        RenderText {#text} at (2,182) size 297x18
+          text run at (2,182) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (299,196) size 0x0
+      RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/mac/fast/repaint/multicol-repaint-expected.txt b/LayoutTests/platform/mac/fast/repaint/multicol-repaint-expected.txt
index fd4ca35..59b7ab7 100644
--- a/LayoutTests/platform/mac/fast/repaint/multicol-repaint-expected.txt
+++ b/LayoutTests/platform/mac/fast/repaint/multicol-repaint-expected.txt
@@ -9,6 +9,6 @@ layer at (8,8) size 402x102
       text run at (1,1) width 13: " "
     RenderBR {BR} at (14,1) size 0x59
     RenderInline {SPAN} at (0,0) size 300x50
-      RenderText {#text} at (1,66) size 300x50
-        text run at (1,66) width 300: "XXXXXX"
+      RenderText {#text} at (1,107) size 300x50
+        text run at (1,107) width 300: "XXXXXX"
     RenderText {#text} at (0,0) size 0x0
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 5ddfd7e..02e8619 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,135 @@
+2010-09-15  David Hyatt  <hyatt at apple.com>
+
+        Reviewed by Darin Adler.
+
+        https://bugs.webkit.org/show_bug.cgi?id=38402, paginate columns at layout time rather than at paint time.
+
+        This patch adds support for column breaking at layout time rather than at paint time.  New variables have been
+        added to LayoutState and to ColumnInfo to track column information while laying out.
+        
+        The basic idea behind this patch is to retain the columns' paint-time hackery of transforming one long vertical strip
+        into multiple columns.  Now, however, layout is aware of the columns and will move objects up and down vertically in order
+        to ensure they don't intersect a break.
+        
+        Many new tests added in fast/multicol and new results added for existing fast/multicol tests.
+
+        * rendering/ColumnInfo.h:
+        (WebCore::ColumnInfo::ColumnInfo):
+        (WebCore::ColumnInfo::columnCount):
+        (WebCore::ColumnInfo::columnHeight):
+        (WebCore::ColumnInfo::setColumnCountAndHeight):
+        (WebCore::ColumnInfo::setColumnHeight):
+        (WebCore::ColumnInfo::updateMinimumColumnHeight):
+        (WebCore::ColumnInfo::minimumColumnHeight):
+        (WebCore::ColumnInfo::forcedBreaks):
+        (WebCore::ColumnInfo::forcedBreakOffset):
+        (WebCore::ColumnInfo::maximumDistanceBetweenForcedBreaks):
+        (WebCore::ColumnInfo::clearForcedBreaks):
+        (WebCore::ColumnInfo::addForcedBreak):
+        * rendering/LayoutState.cpp:
+        (WebCore::LayoutState::LayoutState):
+        (WebCore::LayoutState::clearPaginationInformation):
+        (WebCore::LayoutState::pageY):
+        (WebCore::LayoutState::addForcedColumnBreak):
+        * rendering/LayoutState.h:
+        (WebCore::LayoutState::LayoutState):
+        (WebCore::LayoutState::paginatingColumns):
+        (WebCore::LayoutState::paginated):
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::RenderBlock):
+        (WebCore::RenderBlock::~RenderBlock):
+        (WebCore::RenderBlock::layoutBlock):
+        (WebCore::RenderBlock::collapseMargins):
+        (WebCore::RenderBlock::estimateVerticalPosition):
+        (WebCore::RenderBlock::layoutBlockChild):
+        (WebCore::RenderBlock::layoutPositionedObjects):
+        (WebCore::RenderBlock::paintColumnRules):
+        (WebCore::RenderBlock::paintColumnContents):
+        (WebCore::RenderBlock::paintChildren):
+        (WebCore::RenderBlock::insertFloatingObject):
+        (WebCore::RenderBlock::removeFloatingObjects):
+        (WebCore::RenderBlock::positionNewFloats):
+        (WebCore::RenderBlock::positionNewFloatOnLine):
+        (WebCore::RenderBlock::lowestPosition):
+        (WebCore::RenderBlock::rightmostPosition):
+        (WebCore::RenderBlock::leftmostPosition):
+        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):
+        (WebCore::RenderBlock::markDescendantBlocksAndLinesForLayout):
+        (WebCore::RenderBlock::hitTestColumns):
+        (WebCore::RenderBlock::setDesiredColumnCountAndWidth):
+        (WebCore::RenderBlock::columnCount):
+        (WebCore::RenderBlock::columnRectAt):
+        (WebCore::RenderBlock::layoutColumns):
+        (WebCore::RenderBlock::adjustPointToColumnContents):
+        (WebCore::RenderBlock::adjustRectForColumns):
+        (WebCore::RenderBlock::adjustForColumns):
+        (WebCore::RenderBlock::setMaxTopMargins):
+        (WebCore::RenderBlock::setMaxBottomMargins):
+        (WebCore::RenderBlock::setPaginationStrut):
+        (WebCore::RenderBlock::setPageY):
+        (WebCore::RenderBlock::nextPageTop):
+        (WebCore::inNormalFlow):
+        (WebCore::RenderBlock::applyBeforeBreak):
+        (WebCore::RenderBlock::applyAfterBreak):
+        (WebCore::RenderBlock::adjustForUnsplittableChild):
+        (WebCore::RenderBlock::adjustLinePositionForPagination):
+        * rendering/RenderBlock.h:
+        (WebCore::RenderBlock::paginationStrut):
+        (WebCore::RenderBlock::pageY):
+        (WebCore::RenderBlock::maxTopPosMargin):
+        (WebCore::RenderBlock::maxTopNegMargin):
+        (WebCore::RenderBlock::maxBottomPosMargin):
+        (WebCore::RenderBlock::maxBottomNegMargin):
+        (WebCore::RenderBlock::initMaxMarginValues):
+        (WebCore::RenderBlock::FloatingObject::FloatingObject):
+        (WebCore::RenderBlock::FloatingObject::type):
+        (WebCore::RenderBlock::RenderBlockRareData::RenderBlockRareData):
+        * rendering/RenderBlockLineLayout.cpp:
+        (WebCore::RenderBlock::layoutInlineChildren):
+        (WebCore::RenderBlock::determineStartPosition):
+        (WebCore::RenderBlock::skipLeadingWhitespace):
+        (WebCore::RenderBlock::findNextLineBreak):
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::mapLocalToContainer):
+        (WebCore::RenderBox::computeRectForRepaint):
+        (WebCore::RenderBox::markDescendantBlocksAndLinesForLayout):
+        * rendering/RenderBox.h:
+        * rendering/RenderFlexibleBox.cpp:
+        (WebCore::RenderFlexibleBox::layoutBlock):
+        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
+        (WebCore::RenderFlexibleBox::layoutVerticalBox):
+        * rendering/RenderFlexibleBox.h:
+        * rendering/RenderInline.cpp:
+        (WebCore::RenderInline::computeRectForRepaint):
+        (WebCore::RenderInline::mapLocalToContainer):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::updatePagination):
+        (WebCore::RenderLayer::paintChildLayerIntoColumns):
+        (WebCore::RenderLayer::hitTestChildLayerColumns):
+        * rendering/RenderLineBoxList.cpp:
+        (WebCore::RenderLineBoxList::paint):
+        * rendering/RenderTable.cpp:
+        (WebCore::RenderTable::RenderTable):
+        (WebCore::RenderTable::layout):
+        * rendering/RenderTable.h:
+        * rendering/RenderTableRow.cpp:
+        (WebCore::RenderTableRow::layout):
+        * rendering/RenderTableSection.cpp:
+        (WebCore::RenderTableSection::layoutRows):
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::RenderView):
+        (WebCore::RenderView::pushLayoutState):
+        * rendering/RenderView.h:
+        (WebCore::RenderView::setTruncatedAt):
+        (WebCore::RenderView::pushLayoutState):
+        (WebCore::RenderView::popLayoutState):
+        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
+        (WebCore::LayoutStateMaintainer::push):
+        * rendering/RootInlineBox.h:
+        (WebCore::RootInlineBox::RootInlineBox):
+        (WebCore::RootInlineBox::paginationStrut):
+        (WebCore::RootInlineBox::setPaginationStrut):
+
 2010-09-16  Pavel Podivilov  <podivilov at chromium.org>
 
         Reviewed by Dimitri Glazkov.
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index 5b0ae85..0eda462 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -2384,8 +2384,8 @@
 		893C47B81238A099002B3D86 /* JSFileCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 893C47B61238A099002B3D86 /* JSFileCallback.h */; };
 		893C47BB1238A0A9002B3D86 /* JSFileWriterCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 893C47B91238A0A9002B3D86 /* JSFileWriterCallback.cpp */; };
 		893C47BC1238A0A9002B3D86 /* JSFileWriterCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 893C47BA1238A0A9002B3D86 /* JSFileWriterCallback.h */; };
-		893C47DF123EF4A9002B3D86 /* JSDirectoryEntryCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 893C47DE123EF4A9002B3D86 /* JSDirectoryEntryCustom.cpp */; };
 		893C47CC123EEBA2002B3D86 /* JSEntryCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 893C47CA123EEBA2002B3D86 /* JSEntryCustom.cpp */; };
+		893C47DF123EF4A9002B3D86 /* JSDirectoryEntryCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 893C47DE123EF4A9002B3D86 /* JSDirectoryEntryCustom.cpp */; };
 		89878552122CA064003AABDA /* DirectoryEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 89878539122CA064003AABDA /* DirectoryEntry.cpp */; };
 		89878553122CA064003AABDA /* DirectoryEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 8987853A122CA064003AABDA /* DirectoryEntry.h */; };
 		89878554122CA064003AABDA /* DirectoryReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8987853B122CA064003AABDA /* DirectoryReader.cpp */; };
@@ -8290,8 +8290,8 @@
 		893C47B61238A099002B3D86 /* JSFileCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSFileCallback.h; sourceTree = "<group>"; };
 		893C47B91238A0A9002B3D86 /* JSFileWriterCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSFileWriterCallback.cpp; sourceTree = "<group>"; };
 		893C47BA1238A0A9002B3D86 /* JSFileWriterCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSFileWriterCallback.h; sourceTree = "<group>"; };
-		893C47DE123EF4A9002B3D86 /* JSDirectoryEntryCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDirectoryEntryCustom.cpp; sourceTree = "<group>"; };
 		893C47CA123EEBA2002B3D86 /* JSEntryCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSEntryCustom.cpp; sourceTree = "<group>"; };
+		893C47DE123EF4A9002B3D86 /* JSDirectoryEntryCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDirectoryEntryCustom.cpp; sourceTree = "<group>"; };
 		89878539122CA064003AABDA /* DirectoryEntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DirectoryEntry.cpp; path = fileapi/DirectoryEntry.cpp; sourceTree = "<group>"; };
 		8987853A122CA064003AABDA /* DirectoryEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryEntry.h; path = fileapi/DirectoryEntry.h; sourceTree = "<group>"; };
 		8987853B122CA064003AABDA /* DirectoryReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DirectoryReader.cpp; path = fileapi/DirectoryReader.cpp; sourceTree = "<group>"; };
diff --git a/WebCore/rendering/ColumnInfo.h b/WebCore/rendering/ColumnInfo.h
index 883287b..77313f8 100644
--- a/WebCore/rendering/ColumnInfo.h
+++ b/WebCore/rendering/ColumnInfo.h
@@ -29,6 +29,8 @@
 #include <wtf/Vector.h>
 #include "IntRect.h"
 
+using namespace std;
+
 namespace WebCore {
 
 class ColumnInfo : public Noncopyable {
@@ -36,6 +38,12 @@ public:
     ColumnInfo()
         : m_desiredColumnWidth(0)
         , m_desiredColumnCount(1)
+        , m_columnCount(1)
+        , m_columnHeight(0)
+        , m_minimumColumnHeight(0)
+        , m_forcedBreaks(0)
+        , m_maximumDistanceBetweenForcedBreaks(0)
+        , m_forcedBreakOffset(0)
         { }
     
     int desiredColumnWidth() const { return m_desiredColumnWidth; }
@@ -44,19 +52,51 @@ public:
     unsigned desiredColumnCount() const { return m_desiredColumnCount; }
     void setDesiredColumnCount(unsigned count) { m_desiredColumnCount = count; }
 
-    // Encapsulated for the future where we can avoid storing the rects and just compute them dynamically.
-    size_t columnCount() const { return m_columnRects.size(); }
-    const IntRect& columnRectAt(size_t i) const { return m_columnRects[i]; }
+    unsigned columnCount() const { return m_columnCount; }
+    int columnHeight() const { return m_columnHeight; }
 
-    void clearColumns() { m_columnRects.clear(); }
+    // Set our count and height.  This is enough info for a RenderBlock to compute page rects
+    // dynamically.
+    void setColumnCountAndHeight(int count, int height)
+    { 
+        m_columnCount = count;
+        m_columnHeight = height;
+    }
+    void setColumnHeight(int height) { m_columnHeight = height; }
+
+    void updateMinimumColumnHeight(int height) { m_minimumColumnHeight = max(height, m_minimumColumnHeight); }
+    int minimumColumnHeight() const { return m_minimumColumnHeight; }
+
+    int forcedBreaks() const { return m_forcedBreaks; }
+    int forcedBreakOffset() const { return m_forcedBreakOffset; }
+    int maximumDistanceBetweenForcedBreaks() const { return m_maximumDistanceBetweenForcedBreaks; }
+    void clearForcedBreaks()
+    { 
+        m_forcedBreaks = 0;
+        m_maximumDistanceBetweenForcedBreaks = 0;
+        m_forcedBreakOffset = 0;
+    }
+    void addForcedBreak(int offsetFromFirstPage)
+    { 
+        ASSERT(!m_columnHeight);
+        int distanceFromLastBreak = offsetFromFirstPage - m_forcedBreakOffset;
+        if (!distanceFromLastBreak)
+            return;
+        m_forcedBreaks++;
+        m_maximumDistanceBetweenForcedBreaks = max(m_maximumDistanceBetweenForcedBreaks, distanceFromLastBreak);
+        m_forcedBreakOffset = offsetFromFirstPage;
+    }
 
-    // FIXME: Will go away once we don't use the Vector.
-    void addColumnRect(const IntRect& rect) { m_columnRects.append(rect); }
-    
 private:
     int m_desiredColumnWidth;
     unsigned m_desiredColumnCount;
-    Vector<IntRect> m_columnRects;
+    
+    unsigned m_columnCount;
+    int m_columnHeight;
+    int m_minimumColumnHeight;
+    int m_forcedBreaks; // FIXME: We will ultimately need to cache more information to balance around forced breaks properly.
+    int m_maximumDistanceBetweenForcedBreaks;
+    int m_forcedBreakOffset;
 };
 
 }
diff --git a/WebCore/rendering/LayoutState.cpp b/WebCore/rendering/LayoutState.cpp
index 18c3da7..0d81b15 100644
--- a/WebCore/rendering/LayoutState.cpp
+++ b/WebCore/rendering/LayoutState.cpp
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "LayoutState.h"
 
+#include "ColumnInfo.h"
 #include "RenderArena.h"
 #include "RenderInline.h"
 #include "RenderLayer.h"
@@ -33,8 +34,9 @@
 
 namespace WebCore {
 
-LayoutState::LayoutState(LayoutState* prev, RenderBox* renderer, const IntSize& offset)
-    : m_next(prev)
+LayoutState::LayoutState(LayoutState* prev, RenderBox* renderer, const IntSize& offset, int pageHeight, ColumnInfo* columnInfo)
+    : m_columnInfo(columnInfo)
+    , m_next(prev)
 #ifndef NDEBUG
     , m_renderer(renderer)
 #endif
@@ -45,43 +47,67 @@ LayoutState::LayoutState(LayoutState* prev, RenderBox* renderer, const IntSize&
     if (fixed) {
         // FIXME: This doesn't work correctly with transforms.
         FloatPoint fixedOffset = renderer->view()->localToAbsolute(FloatPoint(), true);
-        m_offset = IntSize(fixedOffset.x(), fixedOffset.y()) + offset;
+        m_paintOffset = IntSize(fixedOffset.x(), fixedOffset.y()) + offset;
     } else
-        m_offset = prev->m_offset + offset;
+        m_paintOffset = prev->m_paintOffset + offset;
 
-    if (renderer->isRelPositioned()) {
-        if (renderer->hasLayer())
-            m_offset += renderer->layer()->relativePositionOffset();
-    } else if (renderer->isPositioned() && !fixed) {
+    if (renderer->isPositioned() && !fixed) {
         if (RenderObject* container = renderer->container()) {
             if (container->isRelPositioned() && container->isRenderInline())
-                m_offset += toRenderInline(container)->relativePositionedInlineOffset(renderer);
+                m_paintOffset += toRenderInline(container)->relativePositionedInlineOffset(renderer);
         }
     }
 
+    m_layoutOffset = m_paintOffset;
+
+    if (renderer->isRelPositioned() && renderer->hasLayer())
+        m_paintOffset += renderer->layer()->relativePositionOffset();
+
     m_clipped = !fixed && prev->m_clipped;
     if (m_clipped)
         m_clipRect = prev->m_clipRect;
 
     if (renderer->hasOverflowClip()) {
         RenderLayer* layer = renderer->layer();
-        IntRect clipRect(toPoint(m_offset) + renderer->view()->layoutDelta(), layer->size());
+        IntRect clipRect(toPoint(m_paintOffset) + renderer->view()->layoutDelta(), layer->size());
         if (m_clipped)
             m_clipRect.intersect(clipRect);
         else {
             m_clipRect = clipRect;
             m_clipped = true;
         }
-        m_offset -= layer->scrolledContentOffset();
+
+        m_paintOffset -= layer->scrolledContentOffset();
     }
 
-    m_layoutDelta = m_next->m_layoutDelta;
+    // If we establish a new page height, then cache the offset to the top of the first page.
+    // We can compare this later on to figure out what part of the page we're actually on,
+    if (pageHeight || m_columnInfo) {
+        m_pageHeight = pageHeight;
+        m_pageOffset = IntSize(m_layoutOffset.width() + renderer->borderLeft() + renderer->paddingLeft(),
+                               m_layoutOffset.height() + renderer->borderTop() + renderer->paddingTop());
+    } else {
+        // If we don't establish a new page height, then propagate the old page height and offset down.
+        m_pageHeight = m_next->m_pageHeight;
+        m_pageOffset = m_next->m_pageOffset;
+        
+        // Disable pagination for objects we don't support.  For now this includes overflow:scroll/auto and inline blocks.
+        if (renderer->isReplaced() || renderer->scrollsOverflow())
+            m_pageHeight = 0;
+    }
+    
+    if (!m_columnInfo)
+        m_columnInfo = m_next->m_columnInfo;
 
+    m_layoutDelta = m_next->m_layoutDelta;
+    
     // FIXME: <http://bugs.webkit.org/show_bug.cgi?id=13443> Apply control clip if present.
 }
 
 LayoutState::LayoutState(RenderObject* root)
     : m_clipped(false)
+    , m_pageHeight(0)
+    , m_columnInfo(0)
     , m_next(0)
 #ifndef NDEBUG
     , m_renderer(root)
@@ -89,13 +115,13 @@ LayoutState::LayoutState(RenderObject* root)
 {
     RenderObject* container = root->container();
     FloatPoint absContentPoint = container->localToAbsolute(FloatPoint(), false, true);
-    m_offset = IntSize(absContentPoint.x(), absContentPoint.y());
+    m_paintOffset = IntSize(absContentPoint.x(), absContentPoint.y());
 
     if (container->hasOverflowClip()) {
         RenderLayer* layer = toRenderBoxModelObject(container)->layer();
         m_clipped = true;
-        m_clipRect = IntRect(toPoint(m_offset), layer->size());
-        m_offset -= layer->scrolledContentOffset();
+        m_clipRect = IntRect(toPoint(m_paintOffset), layer->size());
+        m_paintOffset -= layer->scrolledContentOffset();
     }
 }
 
@@ -126,4 +152,23 @@ void LayoutState::operator delete(void* ptr, size_t sz)
     *(size_t*)ptr = sz;
 }
 
+void LayoutState::clearPaginationInformation()
+{
+    m_pageHeight = m_next->m_pageHeight;
+    m_pageOffset = m_next->m_pageOffset;
+    m_columnInfo = m_next->m_columnInfo;
+}
+
+int LayoutState::pageY(int childY) const
+{
+    return m_layoutOffset.height() + childY - m_pageOffset.height();
+}
+
+void LayoutState::addForcedColumnBreak(int childY)
+{
+    if (!m_columnInfo || m_columnInfo->columnHeight())
+        return;
+    m_columnInfo->addForcedBreak(pageY(childY));
+}
+
 } // namespace WebCore
diff --git a/WebCore/rendering/LayoutState.h b/WebCore/rendering/LayoutState.h
index 2f040c8..ca4cbfb 100644
--- a/WebCore/rendering/LayoutState.h
+++ b/WebCore/rendering/LayoutState.h
@@ -32,6 +32,7 @@
 
 namespace WebCore {
 
+class ColumnInfo;
 class RenderArena;
 class RenderBox;
 class RenderObject;
@@ -40,6 +41,8 @@ class LayoutState : public Noncopyable {
 public:
     LayoutState()
         : m_clipped(false)
+        , m_pageHeight(0)
+        , m_columnInfo(0)
         , m_next(0)
 #ifndef NDEBUG
         , m_renderer(0)
@@ -47,7 +50,7 @@ public:
     {
     }
 
-    LayoutState(LayoutState*, RenderBox*, const IntSize& offset);
+    LayoutState(LayoutState*, RenderBox*, const IntSize& offset, int pageHeight, ColumnInfo*);
     LayoutState(RenderObject*);
 
     void destroy(RenderArena*);
@@ -58,6 +61,12 @@ public:
     // Overridden to prevent the normal delete from being called.
     void operator delete(void*, size_t);
 
+    void clearPaginationInformation();
+    bool isPaginatingColumns() const { return m_columnInfo; }
+    bool isPaginated() const { return m_pageHeight || m_columnInfo; }
+    int pageY(int childY) const;
+    void addForcedColumnBreak(int childY);
+    
 private:
     // The normal operator new is disallowed.
     void* operator new(size_t) throw();
@@ -65,10 +74,16 @@ private:
 public:
     bool m_clipped;
     IntRect m_clipRect;
-    IntSize m_offset;       // x/y offset from container.
-    IntSize m_layoutDelta;  // Transient offset from the final position of the object
-                            // used to ensure that repaints happen in the correct place.
-                            // This is a total delta accumulated from the root.
+    IntSize m_paintOffset; // x/y offset from container.  Includes relative positioning and scroll offsets.
+    IntSize m_layoutOffset; // x/y offset from container.  Does not include relative positioning or scroll offsets.
+    IntSize m_layoutDelta; // Transient offset from the final position of the object
+                           // used to ensure that repaints happen in the correct place.
+                           // This is a total delta accumulated from the root.
+
+    int m_pageHeight; // The current page height for the pagination model that encloses us.
+    IntSize m_pageOffset; // The offset of the start of the first page in the nearest enclosing pagination model.
+    ColumnInfo* m_columnInfo; // If the enclosing pagination model is a column model, then this will store column information for easy retrieval/manipulation.
+
     LayoutState* m_next;
 #ifndef NDEBUG
     RenderObject* m_renderer;
diff --git a/WebCore/rendering/RenderBlock.cpp b/WebCore/rendering/RenderBlock.cpp
index cfa86cf..63d1f30 100644
--- a/WebCore/rendering/RenderBlock.cpp
+++ b/WebCore/rendering/RenderBlock.cpp
@@ -114,7 +114,7 @@ RenderBlock::RenderBlock(Node* node)
       , m_floatingObjects(0)
       , m_positionedObjects(0)
       , m_continuation(0)
-      , m_maxMargin(0)
+      , m_rareData(0)
       , m_lineHeight(-1)
 {
     setChildrenInline(true);
@@ -124,7 +124,6 @@ RenderBlock::~RenderBlock()
 {
     delete m_floatingObjects;
     delete m_positionedObjects;
-    delete m_maxMargin;
     
     if (hasColumns())
         delete gColumnInfoMap->take(this);
@@ -1112,7 +1111,7 @@ void RenderBlock::layout()
         clearLayoutOverflow();
 }
 
-void RenderBlock::layoutBlock(bool relayoutChildren)
+void RenderBlock::layoutBlock(bool relayoutChildren, int pageHeight)
 {
     ASSERT(needsLayout());
 
@@ -1122,9 +1121,6 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
     if (!relayoutChildren && layoutOnlyPositionedObjects())
         return;
 
-    LayoutRepainter repainter(*this, m_everHadLayout && checkForRepaintDuringLayout());
-    LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), hasColumns() || hasTransform() || hasReflection());
-
     int oldWidth = width();
     int oldColumnWidth = desiredColumnWidth();
 
@@ -1140,6 +1136,31 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
 
     int previousHeight = height();
     setHeight(0);
+    bool hasSpecifiedPageHeight = false;
+    ColumnInfo* colInfo = columnInfo();
+    if (hasColumns()) {
+        if (!pageHeight) {
+            // We need to go ahead and set our explicit page height if one exists, so that we can
+            // avoid doing two layout passes.
+            calcHeight();
+            int columnHeight = contentHeight();
+            if (columnHeight > 0) {
+                pageHeight = columnHeight;
+                hasSpecifiedPageHeight = true;
+            }
+            setHeight(0);
+        }
+        if (colInfo->columnHeight() != pageHeight && m_everHadLayout) {
+            colInfo->setColumnHeight(pageHeight);
+            markDescendantBlocksAndLinesForLayout(); // We need to dirty all descendant blocks and lines, since the column height is different now.
+        }
+        
+        if (!hasSpecifiedPageHeight && !pageHeight)
+            colInfo->clearForcedBreaks();
+    }
+
+    LayoutRepainter repainter(*this, m_everHadLayout && checkForRepaintDuringLayout());
+    LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), hasColumns() || hasTransform() || hasReflection(), pageHeight, colInfo);
 
     // We use four values, maxTopPos, maxTopNeg, maxBottomPos, and maxBottomNeg, to track
     // our current maximal positive and negative margins.  These values are used when we
@@ -1154,7 +1175,7 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
     bool isCell = isTableCell();
     if (!isCell) {
         initMaxMarginValues();
-
+        
         setTopMarginQuirk(style()->marginTop().quirk());
         setBottomMarginQuirk(style()->marginBottom().quirk());
 
@@ -1164,6 +1185,8 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
             // a bottom margin.
             setMaxBottomMargins(0, 0);
         }
+        
+        setPaginationStrut(0);
     }
 
     // For overflow:scroll blocks, ensure we have both scrollbars in place always.
@@ -1189,10 +1212,9 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
     if (floatBottom() > (height() - toAdd) && expandsToEncloseOverhangingFloats())
         setHeight(floatBottom() + toAdd);
     
-    // Now lay out our columns within this intrinsic height, since they can slightly affect the intrinsic height as
-    // we adjust for clean column breaks.
-    int singleColumnBottom = layoutColumns();
-
+    if (layoutColumns(hasSpecifiedPageHeight, pageHeight, statePusher))
+        return;
+ 
     // Calculate our new height.
     int oldHeight = height();
     calcHeight();
@@ -1207,21 +1229,18 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
                 }
             }
         }
-        
-        // We have to rebalance columns to the new height.
-        layoutColumns(singleColumnBottom);
     }
 
     if (previousHeight != height())
         relayoutChildren = true;
 
-    // This check is designed to catch anyone
-    // who wasn't going to propagate float information up to the parent and yet could potentially be painted by its ancestor.
-    if (isRoot() || expandsToEncloseOverhangingFloats())
-        addOverflowFromFloats();
-
     // Add overflow from children (unless we're multi-column, since in that case all our child overflow is clipped anyway).
     if (!hasColumns()) {
+        // This check is designed to catch anyone
+        // who wasn't going to propagate float information up to the parent and yet could potentially be painted by its ancestor.
+        if (isRoot() || expandsToEncloseOverhangingFloats())
+            addOverflowFromFloats();
+
         if (childrenInline())
             addOverflowFromInlineChildren();
         else
@@ -1237,6 +1256,9 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
     
     statePusher.pop();
 
+    if (view()->layoutState()->m_pageHeight)
+        setPageY(view()->layoutState()->pageY(y()));
+
     // Update our scroll information if we're overflow:auto/scroll/hidden now that we know if
     // we overflow or not.
     updateScrollInfoAfterLayout();
@@ -1485,7 +1507,8 @@ int RenderBlock::collapseMargins(RenderBox* child, MarginInfo& marginInfo)
     if (marginInfo.quirkContainer() && marginInfo.atTopOfBlock() && (posTop - negTop))
         marginInfo.setTopQuirk(topQuirk);
 
-    int ypos = height();
+    int beforeCollapseY = height();
+    int ypos = beforeCollapseY;
     if (child->isSelfCollapsingBlock()) {
         // This child has no height.  We need to compute our
         // position before we collapse the child's margins together,
@@ -1527,6 +1550,14 @@ int RenderBlock::collapseMargins(RenderBox* child, MarginInfo& marginInfo)
             marginInfo.setBottomQuirk(child->isBottomMarginQuirk() || style()->marginBottomCollapse() == MDISCARD);
     }
     
+    // If margins would pull us past the top of the next page, then we need to pull back and pretend like the margins
+    // collapsed into the page edge.
+    bool paginated = view()->layoutState()->isPaginated();
+    if (paginated && ypos > beforeCollapseY) {
+        int oldY = ypos;
+        ypos = min(ypos, nextPageTop(beforeCollapseY));
+        setHeight(height() + (ypos - oldY));
+    }
     return ypos;
 }
 
@@ -1586,7 +1617,27 @@ int RenderBlock::estimateVerticalPosition(RenderBox* child, const MarginInfo& ma
         int childMarginTop = child->selfNeedsLayout() ? child->marginTop() : child->collapsedMarginTop();
         yPosEstimate += max(marginInfo.margin(), childMarginTop);
     }
+    
+    bool paginated = view()->layoutState()->isPaginated();
+
+    // Adjust yPosEstimate down to the next page if the margins are so large that we don't fit on the current
+    // page.
+    if (paginated && yPosEstimate > height())
+        yPosEstimate = min(yPosEstimate, nextPageTop(height()));
+
     yPosEstimate += getClearDelta(child, yPosEstimate);
+    
+    if (paginated) {
+        // If the object has a page or column break value of "before", then we should shift to the top of the next page.
+        yPosEstimate = applyBeforeBreak(child, yPosEstimate);
+    
+        // For replaced elements and scrolled elements, we want to shift them to the next page if they don't fit on the current one.
+        yPosEstimate = adjustForUnsplittableChild(child, yPosEstimate);
+        
+        if (!child->selfNeedsLayout() && child->isRenderBlock())
+            yPosEstimate += toRenderBlock(child)->paginationStrut();
+    }
+
     return yPosEstimate;
 }
 
@@ -1776,8 +1827,9 @@ void RenderBlock::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo, int
     view()->addLayoutDelta(IntSize(0, child->y() - yPosEstimate));
     child->setLocation(child->x(), yPosEstimate);
 
+    RenderBlock* childRenderBlock = child->isRenderBlock() ? toRenderBlock(child) : 0;
     bool markDescendantsWithFloats = false;
-    if (yPosEstimate != oldRect.y() && !child->avoidsFloats() && child->isBlockFlow() && toRenderBlock(child)->containsFloats())
+    if (yPosEstimate != oldRect.y() && !child->avoidsFloats() && childRenderBlock && childRenderBlock->containsFloats())
         markDescendantsWithFloats = true;
     else if (!child->avoidsFloats() || child->shrinkToAvoidFloats()) {
         // If an element might be affected by the presence of floats, then always mark it for
@@ -1787,18 +1839,24 @@ void RenderBlock::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo, int
             markDescendantsWithFloats = true;
     }
 
-    if (child->isRenderBlock()) {
+    if (childRenderBlock) {
         if (markDescendantsWithFloats)
-            toRenderBlock(child)->markAllDescendantsWithFloatsForLayout();
-
+            childRenderBlock->markAllDescendantsWithFloatsForLayout();
         previousFloatBottom = max(previousFloatBottom, oldRect.y() + toRenderBlock(child)->floatBottom());
     }
 
+    bool paginated = view()->layoutState()->isPaginated();
+    if (!child->needsLayout() && paginated && view()->layoutState()->m_pageHeight && childRenderBlock && view()->layoutState()->pageY(child->y()) != childRenderBlock->pageY())
+        childRenderBlock->setChildNeedsLayout(true, false);
+
     bool childHadLayout = child->m_everHadLayout;
     bool childNeededLayout = child->needsLayout();
     if (childNeededLayout)
         child->layout();
 
+    // Cache if we are at the top of the block right now.
+    bool atTopOfBlock = marginInfo.atTopOfBlock();
+
     // Now determine the correct ypos based off examination of collapsing margin
     // values.
     int yBeforeClear = collapseMargins(child, marginInfo);
@@ -1806,6 +1864,32 @@ void RenderBlock::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo, int
     // Now check for clear.
     int yAfterClear = clearFloatsIfNeeded(child, marginInfo, oldTopPosMargin, oldTopNegMargin, yBeforeClear);
     
+    if (paginated) {
+        int oldY = yAfterClear;
+        
+        // If the object has a page or column break value of "before", then we should shift to the top of the next page.
+        yAfterClear = applyBeforeBreak(child, yAfterClear);
+    
+        // For replaced elements and scrolled elements, we want to shift them to the next page if they don't fit on the current one.
+        yAfterClear = adjustForUnsplittableChild(child, yAfterClear);
+        
+        if (childRenderBlock && childRenderBlock->paginationStrut()) {
+            // We are willing to propagate out to our parent block as long as we were at the top of the block prior
+            // to collapsing our margins, and as long as we didn't clear or move as a result of other pagination.
+            if (atTopOfBlock && oldY == yBeforeClear && !isPositioned() && !isTableCell()) {
+                // FIXME: Should really check if we're exceeding the page height before propagating the strut, but we don't
+                // have all the information to do so (the strut only has the remaining amount to push).  Gecko gets this wrong too
+                // and pushes to the next page anyway, so not too concerned about it.
+                setPaginationStrut(yAfterClear + childRenderBlock->paginationStrut());
+                childRenderBlock->setPaginationStrut(0);
+            } else
+                yAfterClear += childRenderBlock->paginationStrut();
+        }
+
+        // Similar to how we apply clearance.  Go ahead and boost height() to be the place where we're going to position the child.
+        setHeight(height() + (yAfterClear - oldY));
+    }
+
     view()->addLayoutDelta(IntSize(0, yPosEstimate - yAfterClear));
     child->setLocation(child->x(), yAfterClear);
 
@@ -1818,8 +1902,13 @@ void RenderBlock::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo, int
             // So go ahead and mark the item as dirty.
             child->setChildNeedsLayout(true, false);
         }
-        if (!child->avoidsFloats() && child->isBlockFlow() && toRenderBlock(child)->containsFloats())
-            toRenderBlock(child)->markAllDescendantsWithFloatsForLayout();
+        if (childRenderBlock) {
+            if (!child->avoidsFloats() && childRenderBlock->containsFloats())
+                childRenderBlock->markAllDescendantsWithFloatsForLayout();
+            if (paginated && !child->needsLayout() && view()->layoutState()->m_pageHeight && view()->layoutState()->pageY(child->y()) != childRenderBlock->pageY())
+                child->setChildNeedsLayout(true, false);
+        }
+
         // Our guess was wrong. Make the child lay itself out again.
         child->layoutIfNeeded();
     }
@@ -1840,7 +1929,7 @@ void RenderBlock::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo, int
     }
     // If the child has overhanging floats that intrude into following siblings (or possibly out
     // of this block), then the parent gets notified of the floats now.
-    if (child->isBlockFlow() && toRenderBlock(child)->containsFloats())
+    if (childRenderBlock && childRenderBlock->containsFloats())
         maxFloatBottom = max(maxFloatBottom, addOverhangingFloats(toRenderBlock(child), -child->x(), -child->y(), !childNeededLayout));
 
     IntSize childOffset(child->x() - oldRect.x(), child->y() - oldRect.y());
@@ -1859,6 +1948,13 @@ void RenderBlock::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo, int
         child->repaintOverhangingFloats(true);
     }
 
+    if (paginated) {
+        // Check for an after page/column break.
+        int newHeight = applyAfterBreak(child, height(), marginInfo);
+        if (newHeight != height())
+            setHeight(newHeight);
+    }
+
     ASSERT(oldLayoutDelta == view()->layoutDelta());
 }
 
@@ -1889,6 +1985,11 @@ bool RenderBlock::layoutOnlyPositionedObjects()
 void RenderBlock::layoutPositionedObjects(bool relayoutChildren)
 {
     if (m_positionedObjects) {
+        if (hasColumns())
+            view()->layoutState()->clearPaginationInformation(); // Positioned objects are not part of the column flow, so they don't paginate with the columns.
+
+        bool paginated = view()->layoutState()->isPaginated();
+
         RenderBox* r;
         Iterator end = m_positionedObjects->end();
         for (Iterator it = m_positionedObjects->begin(); it != end; ++it) {
@@ -1904,12 +2005,21 @@ void RenderBlock::layoutPositionedObjects(bool relayoutChildren)
             //if (relayoutChildren && (r->style()->paddingLeft().isPercent() || r->style()->paddingRight().isPercent()))
                 r->setPrefWidthsDirty(true, false);
             
+            if (!r->needsLayout() && paginated && view()->layoutState()->m_pageHeight) {
+                RenderBlock* childRenderBlock = r->isRenderBlock() ? toRenderBlock(r) : 0;
+                if (childRenderBlock && view()->layoutState()->pageY(childRenderBlock->y()) != childRenderBlock->pageY())
+                    childRenderBlock->setChildNeedsLayout(true, false);
+            }
+
             // We don't have to do a full layout.  We just have to update our position. Try that first. If we have shrink-to-fit width
             // and we hit the available width constraint, the layoutIfNeeded() will catch it and do a full layout.
             if (r->needsPositionedMovementLayoutOnly())
                 r->tryLayoutDoingPositionedMovementOnly();
             r->layoutIfNeeded();
         }
+        
+        if (hasColumns())
+            view()->layoutState()->m_columnInfo = columnInfo(); // FIXME: Kind of gross. We just put this back into the layout state so that pop() will work.
     }
 }
 
@@ -1997,12 +2107,12 @@ void RenderBlock::paintColumnRules(PaintInfo& paintInfo, int tx, int ty)
 
     // We need to do multiple passes, breaking up our child painting into strips.
     ColumnInfo* colInfo = columnInfo();
-    unsigned colCount = colInfo->columnCount();
+    unsigned colCount = columnCount(colInfo);
     int currXOffset = style()->direction() == LTR ? 0 : contentWidth();
     int ruleAdd = borderLeft() + paddingLeft();
     int ruleX = style()->direction() == LTR ? 0 : contentWidth();
     for (unsigned i = 0; i < colCount; i++) {
-        IntRect colRect = colInfo->columnRectAt(i);
+        IntRect colRect = columnRectAt(colInfo, i);
 
         // Move to the next position.
         if (style()->direction() == LTR) {
@@ -2033,14 +2143,14 @@ void RenderBlock::paintColumnContents(PaintInfo& paintInfo, int tx, int ty, bool
     GraphicsContext* context = paintInfo.context;
     int colGap = columnGap();
     ColumnInfo* colInfo = columnInfo();
-    unsigned colCount = colInfo->columnCount();
+    unsigned colCount = columnCount(colInfo);
     if (!colCount)
         return;
-    int currXOffset = style()->direction() == LTR ? 0 : contentWidth() - colInfo->columnRectAt(0).width();
+    int currXOffset = style()->direction() == LTR ? 0 : contentWidth() - columnRectAt(colInfo, 0).width();
     int currYOffset = 0;
     for (unsigned i = 0; i < colCount; i++) {
         // For each rect, we clip to the rect, and then we adjust our coords.
-        IntRect colRect = colInfo->columnRectAt(i);
+        IntRect colRect = columnRectAt(colInfo, i);
         colRect.move(tx, ty);
         PaintInfo info(paintInfo);
         info.rect.intersect(colRect);
@@ -2098,14 +2208,13 @@ void RenderBlock::paintChildren(PaintInfo& paintInfo, int tx, int ty)
     info.updatePaintingRootForChildren(this);
     
     RenderView* renderView = view();
-    bool usePrintRect = !renderView->printRect().isEmpty() && !document()->settings()->paginateDuringLayoutEnabled();
+    bool usePrintRect = !renderView->printRect().isEmpty();
     
     bool checkPageBreaks = document()->paginated() && !document()->settings()->paginateDuringLayoutEnabled();
-    bool checkColumnBreaks = !checkPageBreaks && usePrintRect;
 
     for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) {        
         // Check for page-break-before: always, and if it's set, break and bail.
-        bool checkBeforeAlways = !childrenInline() && ((checkPageBreaks && child->style()->pageBreakBefore() == PBALWAYS) || (checkColumnBreaks && child->style()->columnBreakBefore() == PBALWAYS));
+        bool checkBeforeAlways = !childrenInline() && (checkPageBreaks && child->style()->pageBreakBefore() == PBALWAYS);
         if (checkBeforeAlways
             && (ty + child->y()) > paintInfo.rect.y()
             && (ty + child->y()) < paintInfo.rect.bottom()) {
@@ -2128,7 +2237,7 @@ void RenderBlock::paintChildren(PaintInfo& paintInfo, int tx, int ty)
             child->paint(info, tx, ty);
 
         // Check for page-break-after: always, and if it's set, break and bail.
-        bool checkAfterAlways = !childrenInline() && ((checkPageBreaks && child->style()->pageBreakAfter() == PBALWAYS) || (checkColumnBreaks && child->style()->columnBreakAfter() == PBALWAYS));
+        bool checkAfterAlways = !childrenInline() && (checkPageBreaks && child->style()->pageBreakAfter() == PBALWAYS);
         if (checkAfterAlways
             && (ty + child->y() + child->height()) > paintInfo.rect.y()
             && (ty + child->y() + child->height()) < paintInfo.rect.bottom()) {
@@ -2776,7 +2885,7 @@ void RenderBlock::removePositionedObjects(RenderBlock* o)
         m_positionedObjects->remove(deadObjects.at(i));
 }
 
-void RenderBlock::insertFloatingObject(RenderBox* o)
+RenderBlock::FloatingObject* RenderBlock::insertFloatingObject(RenderBox* o)
 {
     ASSERT(o->isFloating());
 
@@ -2789,25 +2898,37 @@ void RenderBlock::insertFloatingObject(RenderBox* o)
         DeprecatedPtrListIterator<FloatingObject> it(*m_floatingObjects);
         FloatingObject* f;
         while ( (f = it.current()) ) {
-            if (f->m_renderer == o) return;
+            if (f->m_renderer == o)
+                return f;
             ++it;
         }
     }
 
     // Create the special object entry & append it to the list
 
-    o->layoutIfNeeded();
-
     FloatingObject* newObj = new FloatingObject(o->style()->floating() == FLEFT ? FloatingObject::FloatLeft : FloatingObject::FloatRight);
 
     newObj->m_top = -1;
     newObj->m_bottom = -1;
+    
+    // Our location is irrelevant if we're unsplittable or no pagination is in effect.
+    // Just go ahead and lay out the float.
+    bool affectedByPagination = o->isRenderBlock() && view()->layoutState()->m_pageHeight;
+    if (!affectedByPagination)
+        o->layoutIfNeeded();
+    else {
+        o->calcWidth();
+        o->calcVerticalMargins();
+    }
     newObj->m_width = o->width() + o->marginLeft() + o->marginRight();
+
     newObj->m_shouldPaint = !o->hasSelfPaintingLayer(); // If a layer exists, the float will paint itself.  Otherwise someone else will.
     newObj->m_isDescendant = true;
     newObj->m_renderer = o;
 
     m_floatingObjects->append(newObj);
+    
+    return newObj;
 }
 
 void RenderBlock::removeFloatingObject(RenderBox* o)
@@ -2831,6 +2952,18 @@ void RenderBlock::removeFloatingObject(RenderBox* o)
     }
 }
 
+void RenderBlock::removeFloatingObjectsBelow(FloatingObject* lastFloat, int y)
+{
+    if (!m_floatingObjects)
+        return;
+    
+    FloatingObject* curr = m_floatingObjects->last();
+    while (curr != lastFloat && (curr->m_top == -1 || curr->m_top >= y)) {
+        m_floatingObjects->removeLast();
+        curr = m_floatingObjects->last();
+    }
+}
+
 bool RenderBlock::positionNewFloats()
 {
     if (!m_floatingObjects)
@@ -2867,16 +3000,15 @@ bool RenderBlock::positionNewFloats()
         }
 
         RenderBox* o = f->m_renderer;
-        int _height = o->height() + o->marginTop() + o->marginBottom();
 
         int ro = rightOffset(); // Constant part of right offset.
-        int lo = leftOffset(); // Constat part of left offset.
+        int lo = leftOffset(); // Constant part of left offset.
         int fwidth = f->m_width; // The width we look for.
         if (ro - lo < fwidth)
             fwidth = ro - lo; // Never look for more than what will be available.
         
         IntRect oldRect(o->x(), o->y() , o->width(), o->height());
-        
+
         if (o->style()->clear() & CLEFT)
             y = max(leftBottom(), y);
         if (o->style()->clear() & CRIGHT)
@@ -2905,9 +3037,38 @@ bool RenderBlock::positionNewFloats()
             o->setLocation(fx - o->marginRight() - o->width(), y + o->marginTop());
         }
 
-        f->m_top = y;
-        f->m_bottom = f->m_top + _height;
+        if (view()->layoutState()->isPaginated()) {
+            RenderBlock* childBlock = o->isRenderBlock() ? toRenderBlock(o) : 0;
+
+            if (childBlock && view()->layoutState()->m_pageHeight && view()->layoutState()->pageY(o->y()) != childBlock->pageY())
+                childBlock->setChildNeedsLayout(true, false);
+            o->layoutIfNeeded();
+
+            // If we are unsplittable and don't fit, then we need to move down.
+            // We include our margins as part of the unsplittable area.
+            int newY = adjustForUnsplittableChild(o, y, true);
+            
+            // See if we have a pagination strut that is making us move down further.
+            // Note that an unsplittable child can't also have a pagination strut, so this is
+            // exclusive with the case above.
+            if (childBlock && childBlock->paginationStrut()) {
+                newY += childBlock->paginationStrut();
+                childBlock->setPaginationStrut(0);
+            }
+            
+            if (newY != y) {
+                f->m_paginationStrut = newY - y;
+                y = newY;
+                o->setY(y + o->marginTop());
+                if (childBlock)
+                    childBlock->setChildNeedsLayout(true, false);
+                o->layoutIfNeeded();
+            }
+        }
 
+        f->m_top = y;
+        f->m_bottom = f->m_top + o->marginTop() + o->height() + o->marginBottom();
+        
         // If the child moved, we have to repaint it.
         if (o->checkForRepaintDuringLayout())
             o->repaintDuringLayoutIfMoved(oldRect);
@@ -2917,6 +3078,40 @@ bool RenderBlock::positionNewFloats()
     return true;
 }
 
+bool RenderBlock::positionNewFloatOnLine(FloatingObject* newFloat, FloatingObject* lastFloatFromPreviousLine)
+{
+    bool didPosition = positionNewFloats();
+    if (!didPosition || !newFloat->m_paginationStrut)
+        return didPosition;
+    
+    int floatTop = newFloat->m_top;
+    int paginationStrut = newFloat->m_paginationStrut;
+    FloatingObject* f = m_floatingObjects->last();
+    
+    ASSERT(f == newFloat);
+
+    if (floatTop - paginationStrut != height())
+        return didPosition;
+
+    for (f = m_floatingObjects->prev(); f && f != lastFloatFromPreviousLine; f = m_floatingObjects->prev()) {
+        if (f->m_top == height()) {
+            ASSERT(!f->m_paginationStrut);
+            f->m_paginationStrut = paginationStrut;
+            RenderBox* o = f->m_renderer;
+            o->setY(o->y() + o->marginTop() + paginationStrut);
+            if (o->isRenderBlock())
+                toRenderBlock(o)->setChildNeedsLayout(true, false);
+            o->layoutIfNeeded();
+            f->m_top += f->m_paginationStrut;
+            f->m_bottom += f->m_paginationStrut;
+        }
+    }
+        
+    setHeight(height() + paginationStrut);
+    
+    return didPosition;
+}
+
 void RenderBlock::newLine(EClear clear)
 {
     positionNewFloats();
@@ -3158,8 +3353,8 @@ int RenderBlock::lowestPosition(bool includeOverflowInterior, bool includeSelf)
 
     if (hasColumns()) {
         ColumnInfo* colInfo = columnInfo();
-        for (unsigned i = 0; i < colInfo->columnCount(); i++)
-            bottom = max(bottom, colInfo->columnRectAt(i).bottom() + relativeOffset);
+        for (unsigned i = 0; i < columnCount(colInfo); i++)
+            bottom = max(bottom, columnRectAt(colInfo, i).bottom() + relativeOffset);
         return bottom;
     }
 
@@ -3253,8 +3448,9 @@ int RenderBlock::rightmostPosition(bool includeOverflowInterior, bool includeSel
         // This only matters for LTR
         if (style()->direction() == LTR) {
             ColumnInfo* colInfo = columnInfo();
-            if (colInfo->columnCount())
-                right = max(colInfo->columnRectAt(colInfo->columnCount() - 1).right() + relativeOffset, right);
+            unsigned count = columnCount(colInfo);
+            if (count)
+                right = max(columnRectAt(colInfo, count - 1).right() + relativeOffset, right);
         }
         return right;
     }
@@ -3353,8 +3549,9 @@ int RenderBlock::leftmostPosition(bool includeOverflowInterior, bool includeSelf
         // This only matters for RTL
         if (style()->direction() == RTL) {
             ColumnInfo* colInfo = columnInfo();
-            if (colInfo->columnCount())
-                left = min(colInfo->columnRectAt(colInfo->columnCount() - 1).x() + relativeOffset, left);
+            unsigned count = columnCount(colInfo);
+            if (count)
+                left = min(columnRectAt(colInfo, count - 1).x() + relativeOffset, left);
         }
         return left;
     }
@@ -3647,6 +3844,9 @@ bool RenderBlock::containsFloat(RenderObject* o)
 
 void RenderBlock::markAllDescendantsWithFloatsForLayout(RenderBox* floatToRemove, bool inLayout)
 {
+    if (!m_everHadLayout)
+        return;
+
     setChildNeedsLayout(true, !inLayout);
 
     if (floatToRemove)
@@ -3664,30 +3864,39 @@ void RenderBlock::markAllDescendantsWithFloatsForLayout(RenderBox* floatToRemove
     }
 }
 
-int RenderBlock::visibleTopOfHighestFloatExtendingBelow(int bottom, int maxHeight) const
+void RenderBlock::markDescendantBlocksAndLinesForLayout(bool inLayout)
 {
-    int top = bottom;
-    if (m_floatingObjects) {
-        FloatingObject* floatingObject;
-        for (DeprecatedPtrListIterator<FloatingObject> it(*m_floatingObjects); (floatingObject = it.current()); ++it) {
-            RenderBox* floatingBox = floatingObject->m_renderer;
-            IntRect visibleOverflow = floatingBox->visibleOverflowRect();
-            visibleOverflow.move(floatingBox->x(), floatingBox->y());
-            if (visibleOverflow.y() < top && visibleOverflow.bottom() > bottom && visibleOverflow.height() <= maxHeight && floatingBox->containingBlock() == this)
-                top = visibleOverflow.y();
-        }
-    }
+    if (!m_everHadLayout)
+        return;
+
+    setChildNeedsLayout(true, !inLayout);
 
+    // Iterate over our children and mark them as needed.
     if (!childrenInline()) {
-        for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
-            if (child->isFloatingOrPositioned() || !child->isRenderBlock())
+        for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) {
+            if (child->isFloatingOrPositioned())
                 continue;
-            RenderBlock* childBlock = toRenderBlock(child);
-            top = min(top, childBlock->y() + childBlock->visibleTopOfHighestFloatExtendingBelow(bottom - childBlock->y(), maxHeight));
+            child->markDescendantBlocksAndLinesForLayout(inLayout);
+        }
+    }
+    
+    // Walk our floating objects and mark them too.
+    if (m_floatingObjects) {
+        DeprecatedPtrListIterator<FloatingObject> it(*m_floatingObjects);
+        while (it.current()) {
+            if (it.current()->m_renderer->isRenderBlock())
+                it.current()->m_renderer->markDescendantBlocksAndLinesForLayout(inLayout);
+            ++it;
         }
     }
 
-    return top;
+    if (m_positionedObjects) {
+        // FIXME: Technically we don't have to mark the positioned objects if we're the block
+        // that established the columns, but we don't really have that information here.
+        Iterator end = m_positionedObjects->end();
+        for (Iterator it = m_positionedObjects->begin(); it != end; ++it)
+            (*it)->markDescendantBlocksAndLinesForLayout();
+    }
 }
 
 int RenderBlock::getClearDelta(RenderBox* child, int yPos)
@@ -3847,16 +4056,16 @@ bool RenderBlock::hitTestColumns(const HitTestRequest& request, HitTestResult& r
 {
     // We need to do multiple passes, breaking up our hit testing into strips.
     ColumnInfo* colInfo = columnInfo();
-    int colCount = colInfo->columnCount();
+    int colCount = columnCount(colInfo);
     if (!colCount)
         return false;
     int left = borderLeft() + paddingLeft();
     int currYOffset = 0;
     int i;
     for (i = 0; i < colCount; i++)
-        currYOffset -= colInfo->columnRectAt(i).height();
+        currYOffset -= columnRectAt(colInfo, i).height();
     for (i = colCount - 1; i >= 0; i--) {
-        IntRect colRect = colInfo->columnRectAt(i);
+        IntRect colRect = columnRectAt(colInfo, i);
         int currXOffset = colRect.x() - left;
         currYOffset += colRect.height();
         colRect.move(tx, ty);
@@ -4150,8 +4359,7 @@ void RenderBlock::setDesiredColumnCountAndWidth(int count, int width)
     bool destroyColumns = !firstChild()
                           || (count == 1 && style()->hasAutoColumnWidth())
                           || firstChild()->isAnonymousColumnsBlock()
-                          || firstChild()->isAnonymousColumnSpanBlock()
-                          || document()->settings()->paginateDuringLayoutEnabled();
+                          || firstChild()->isAnonymousColumnSpanBlock();
     if (destroyColumns) {
         if (hasColumns()) {
             delete gColumnInfoMap->take(this);
@@ -4194,133 +4402,75 @@ ColumnInfo* RenderBlock::columnInfo() const
     return gColumnInfoMap->get(this);    
 }
 
-int RenderBlock::layoutColumns(int endOfContent, int requestedColumnHeight)
+unsigned RenderBlock::columnCount(ColumnInfo* colInfo) const
 {
-    // Don't do anything if we have no columns
-    if (!hasColumns())
-        return -1;
+    ASSERT(hasColumns() && gColumnInfoMap->get(this) == colInfo);
+    return colInfo->columnCount();
+}
 
-    ColumnInfo* info = gColumnInfoMap->get(this);
-    int desiredColumnWidth = info->desiredColumnWidth();
-    int desiredColumnCount = info->desiredColumnCount();
-    
-    bool computeIntrinsicHeight = (endOfContent == -1);
-
-    // Fill the columns in to the available height.  Attempt to balance the height of the columns.
-    // Add in half our line-height to help with best-guess initial balancing.
-    int columnSlop = lineHeight(false) / 2;
-    int remainingSlopSpace = columnSlop * desiredColumnCount;
-    int availableHeight = contentHeight();
-    int colHeight;
-    if (computeIntrinsicHeight && requestedColumnHeight >= 0)
-        colHeight = requestedColumnHeight;
-    else if (computeIntrinsicHeight)
-        colHeight = min(availableHeight, availableHeight / desiredColumnCount + columnSlop);
-    else
-        colHeight = availableHeight;
-    int originalColHeight = colHeight;
+IntRect RenderBlock::columnRectAt(ColumnInfo* colInfo, unsigned index) const
+{
+    ASSERT(hasColumns() && gColumnInfoMap->get(this) == colInfo);
 
+    // Compute the appropriate rect based off our information.
+    int colWidth = colInfo->desiredColumnWidth();
+    int colHeight = colInfo->columnHeight();
+    int colTop = borderTop() + paddingTop();
     int colGap = columnGap();
+    int colLeft = style()->direction() == LTR ? 
+                      borderLeft() + paddingLeft() + (index * (colWidth + colGap))
+                      : borderLeft() + paddingLeft() + contentWidth() - colWidth - (index * (colWidth + colGap));
+    return IntRect(colLeft, colTop, colWidth, colHeight);
+}
 
-    // Compute a collection of column rects.
-    info->clearColumns();
-    
-    // Then we do a simulated "paint" into the column slices and allow the content to slightly adjust our individual column rects.
-    // FIXME: We need to take into account layers that are affected by the columns as well here so that they can have an opportunity
-    // to adjust column rects also.
-    RenderView* v = view();
-    int left = borderLeft() + paddingLeft();
-    int top = borderTop() + paddingTop();
-    int currX = style()->direction() == LTR ? borderLeft() + paddingLeft() : borderLeft() + paddingLeft() + contentWidth() - desiredColumnWidth;
-    int currY = top;
-    unsigned colCount = desiredColumnCount;
-    int maxColBottom = borderTop() + paddingTop();
-    int contentBottom = top + availableHeight;
-    int minimumColumnHeight = -1;
-    for (unsigned i = 0; i < colCount; i++) {
-        // If we aren't constrained, then the last column can just get all the remaining space.
-        if (computeIntrinsicHeight && i == colCount - 1)
-            colHeight = availableHeight;
-
-        // This represents the real column position.
-        IntRect colRect(currX, top, desiredColumnWidth, colHeight);
-
-        int truncationPoint = visibleTopOfHighestFloatExtendingBelow(currY + colHeight, colHeight);
-
-        // For the simulated paint, we pretend like everything is in one long strip.
-        IntRect pageRect(left, currY, contentWidth(), truncationPoint - currY);
-        v->setPrintRect(pageRect);
-        v->setTruncatedAt(truncationPoint);
-        GraphicsContext context((PlatformGraphicsContext*)0);
-        PaintInfo paintInfo(&context, pageRect, PaintPhaseForeground, false, 0, 0);
+bool RenderBlock::layoutColumns(bool hasSpecifiedPageHeight, int pageHeight, LayoutStateMaintainer& statePusher)
+{
+    if (hasColumns()) {
+        // FIXME: We don't balance properly at all in the presence of forced page breaks.  We need to understand what
+        // the distance between forced page breaks is so that we can avoid making the minimum column height too tall.
+        ColumnInfo* colInfo = columnInfo();
+        int desiredColumnCount = colInfo->desiredColumnCount();
+        if (!hasSpecifiedPageHeight) {
+            int columnHeight = pageHeight;
+            int minColumnCount = colInfo->forcedBreaks() + 1;
+            if (minColumnCount >= desiredColumnCount) {
+                // The forced page breaks are in control of the balancing.  Just set the column height to the
+                // maximum page break distance.
+                if (!pageHeight) {
+                    int distanceBetweenBreaks = max(colInfo->maximumDistanceBetweenForcedBreaks(),
+                                                    view()->layoutState()->pageY(borderTop() + paddingTop() + contentHeight()) - colInfo->forcedBreakOffset());
+                    columnHeight = max(colInfo->minimumColumnHeight(), distanceBetweenBreaks);
+                }
+            } else if (contentHeight() > pageHeight * desiredColumnCount) {
+                // Now that we know the intrinsic height of the columns, we have to rebalance them.
+                columnHeight = max(colInfo->minimumColumnHeight(), (int)ceilf((float)contentHeight() / desiredColumnCount));
+            }
+            
+            if (columnHeight && columnHeight != pageHeight) {
+                statePusher.pop();
+                m_everHadLayout = true;
+                layoutBlock(false, columnHeight);
+                return true;
+            }
+        } 
         
-        setHasColumns(false);
-        paintObject(paintInfo, 0, 0);
-        setHasColumns(true);
-
-        if (computeIntrinsicHeight && v->minimumColumnHeight() > originalColHeight) {
-            // The initial column height was too small to contain one line of text.
-            minimumColumnHeight = max(minimumColumnHeight, v->minimumColumnHeight());
-        }
+        if (pageHeight) // FIXME: Should we use lowestPosition (excluding our positioned objects) instead of contentHeight()?
+            colInfo->setColumnCountAndHeight(ceilf((float)contentHeight() / pageHeight), pageHeight);
+
+        if (columnCount(colInfo)) {
+            IntRect lastRect = columnRectAt(colInfo, columnCount(colInfo) - 1);
+            int overflowLeft = style()->direction() == RTL ? min(0, lastRect.x()) : 0;
+            int overflowRight = style()->direction() == LTR ? max(width(), lastRect.x() + lastRect.width()) : 0;
+            int overflowHeight = borderTop() + paddingTop() + colInfo->columnHeight();
+            
+            setHeight(overflowHeight + borderBottom() + paddingBottom() + horizontalScrollbarHeight());
 
-        int adjustedBottom = v->bestTruncatedAt();
-        if (adjustedBottom <= currY)
-            adjustedBottom = truncationPoint;
-        
-        colRect.setHeight(adjustedBottom - currY);
-        
-        // Add in the lost space to the subsequent columns.
-        // FIXME: This will create a "staircase" effect if there are enough columns, but the effect should be pretty subtle.
-        if (computeIntrinsicHeight) {
-            int lostSpace = colHeight - colRect.height();
-            if (lostSpace > remainingSlopSpace) {
-                // Redestribute the space among the remaining columns.
-                int spaceToRedistribute = lostSpace - remainingSlopSpace;
-                int remainingColumns = colCount - i + 1;
-                colHeight += spaceToRedistribute / remainingColumns;
-            } 
-            remainingSlopSpace = max(0, remainingSlopSpace - lostSpace);
+            m_overflow.clear();
+            addLayoutOverflow(IntRect(overflowLeft, 0, overflowRight - overflowLeft, overflowHeight));
         }
-        
-        if (style()->direction() == LTR)
-            currX += desiredColumnWidth + colGap;
-        else
-            currX -= (desiredColumnWidth + colGap);
-
-        currY += colRect.height();
-        availableHeight -= colRect.height();
-
-        maxColBottom = max(colRect.bottom(), maxColBottom);
-
-        info->addColumnRect(colRect);
-        
-        // Start adding in more columns as long as there's still content left.
-        if (currY < endOfContent && i == colCount - 1 && (computeIntrinsicHeight || contentHeight()))
-            colCount++;
-    }
-
-    if (minimumColumnHeight >= 0) {
-        // If originalColHeight was too small, we need to try to layout again.
-        return layoutColumns(endOfContent, minimumColumnHeight);
     }
-
-    int overflowRight = max(width(), currX - colGap);
-    int overflowLeft = min(0, currX + desiredColumnWidth + colGap);
-    int overflowHeight = maxColBottom;
-    int toAdd = borderBottom() + paddingBottom() + horizontalScrollbarHeight();
-        
-    if (computeIntrinsicHeight)
-        setHeight(maxColBottom + toAdd);
-
-    m_overflow.clear();
-    addLayoutOverflow(IntRect(overflowLeft, 0, overflowRight - overflowLeft, overflowHeight));
-
-    v->setPrintRect(IntRect());
-    v->setTruncatedAt(0);
-    
-    ASSERT(colCount == info->columnCount());
     
-    return contentBottom;
+    return false;
 }
 
 void RenderBlock::adjustPointToColumnContents(IntPoint& point) const
@@ -4330,17 +4480,17 @@ void RenderBlock::adjustPointToColumnContents(IntPoint& point) const
         return;
     
     ColumnInfo* colInfo = columnInfo();
-    if (!colInfo->columnCount())
+    if (!columnCount(colInfo))
         return;
 
     // Determine which columns we intersect.
     int colGap = columnGap();
     int leftGap = colGap / 2;
-    IntPoint columnPoint(colInfo->columnRectAt(0).location());
+    IntPoint columnPoint(columnRectAt(colInfo, 0).location());
     int yOffset = 0;
     for (unsigned i = 0; i < colInfo->columnCount(); i++) {
         // Add in half the column gap to the left and right of the rect.
-        IntRect colRect = colInfo->columnRectAt(i);
+        IntRect colRect = columnRectAt(colInfo, i);
         IntRect gapAndColumnRect(colRect.x() - leftGap, colRect.y(), colRect.width() + colGap, colRect.height());
 
         if (point.x() >= gapAndColumnRect.x() && point.x() < gapAndColumnRect.right()) {
@@ -4378,7 +4528,7 @@ void RenderBlock::adjustRectForColumns(IntRect& r) const
     IntRect result;
     
     // Determine which columns we intersect.
-    unsigned colCount = colInfo->columnCount();
+    unsigned colCount = columnCount(colInfo);
     if (!colCount)
         return;
     
@@ -4386,7 +4536,7 @@ void RenderBlock::adjustRectForColumns(IntRect& r) const
     
     int currYOffset = 0;
     for (unsigned i = 0; i < colCount; i++) {
-        IntRect colRect = colInfo->columnRectAt(i);
+        IntRect colRect = columnRectAt(colInfo, i);
         int currXOffset = colRect.x() - left;
         
         IntRect repaintRect = r;
@@ -4412,9 +4562,9 @@ void RenderBlock::adjustForColumns(IntSize& offset, const IntPoint& point) const
 
     int left = borderLeft() + paddingLeft();
     int yOffset = 0;
-    size_t columnCount = colInfo->columnCount();
-    for (size_t i = 0; i < columnCount; ++i) {
-        IntRect columnRect = colInfo->columnRectAt(i);
+    size_t colCount = columnCount(colInfo);
+    for (size_t i = 0; i < colCount; ++i) {
+        IntRect columnRect = columnRectAt(colInfo, i);
         int xOffset = columnRect.x() - left;
         if (point.y() < columnRect.bottom() + yOffset) {
             offset.expand(xOffset, -yOffset);
@@ -5428,24 +5578,44 @@ void RenderBlock::clearTruncation()
 
 void RenderBlock::setMaxTopMargins(int pos, int neg)
 {
-    if (!m_maxMargin) {
-        if (pos == MaxMargin::topPosDefault(this) && neg == MaxMargin::topNegDefault(this))
+    if (!m_rareData) {
+        if (pos == RenderBlockRareData::topPosDefault(this) && neg == RenderBlockRareData::topNegDefault(this))
             return;
-        m_maxMargin = new MaxMargin(this);
+        m_rareData = new RenderBlockRareData(this);
     }
-    m_maxMargin->m_topPos = pos;
-    m_maxMargin->m_topNeg = neg;
+    m_rareData->m_topPos = pos;
+    m_rareData->m_topNeg = neg;
 }
 
 void RenderBlock::setMaxBottomMargins(int pos, int neg)
 {
-    if (!m_maxMargin) {
-        if (pos == MaxMargin::bottomPosDefault(this) && neg == MaxMargin::bottomNegDefault(this))
+    if (!m_rareData) {
+        if (pos == RenderBlockRareData::bottomPosDefault(this) && neg == RenderBlockRareData::bottomNegDefault(this))
             return;
-        m_maxMargin = new MaxMargin(this);
+        m_rareData = new RenderBlockRareData(this);
     }
-    m_maxMargin->m_bottomPos = pos;
-    m_maxMargin->m_bottomNeg = neg;
+    m_rareData->m_bottomPos = pos;
+    m_rareData->m_bottomNeg = neg;
+}
+
+void RenderBlock::setPaginationStrut(int strut)
+{
+    if (!m_rareData) {
+        if (!strut)
+            return;
+        m_rareData = new RenderBlockRareData(this);
+    }
+    m_rareData->m_paginationStrut = strut;
+}
+
+void RenderBlock::setPageY(int y)
+{
+    if (!m_rareData) {
+        if (!y)
+            return;
+        m_rareData = new RenderBlockRareData(this);
+    }
+    m_rareData->m_pageY = y;
 }
 
 void RenderBlock::absoluteRects(Vector<IntRect>& rects, int tx, int ty)
@@ -5706,6 +5876,117 @@ RenderBlock* RenderBlock::createAnonymousColumnSpanBlock() const
     return newBox;
 }
 
+int RenderBlock::nextPageTop(int yPos) const
+{
+    LayoutState* layoutState = view()->layoutState();
+    if (!layoutState->m_pageHeight)
+        return yPos;
+    
+    // The yPos is in our coordinate space.  We can add in our pushed offset.
+    int pageHeight = layoutState->m_pageHeight;
+    int remainingHeight = (pageHeight - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageHeight) % pageHeight;
+    return yPos + remainingHeight;
+}
+
+static bool inNormalFlow(RenderBox* child)
+{
+    RenderBlock* curr = child->containingBlock();
+    RenderBlock* initialBlock = child->view();
+    while (curr && curr != initialBlock) {
+        if (curr->hasColumns())
+            return true;
+        if (curr->isFloatingOrPositioned())
+            return false;
+        curr = curr->containingBlock();
+    }
+    return true;
+}
+
+int RenderBlock::applyBeforeBreak(RenderBox* child, int yPos)
+{
+    // FIXME: Add page break checking here when we support printing.
+    bool checkColumnBreaks = view()->layoutState()->isPaginatingColumns();
+    bool checkBeforeAlways = checkColumnBreaks && child->style()->columnBreakBefore() == PBALWAYS;
+    if (checkBeforeAlways && inNormalFlow(child)) {
+        if (checkColumnBreaks)
+            view()->layoutState()->addForcedColumnBreak(yPos);
+        return nextPageTop(yPos);
+    }
+    return yPos;
+}
+
+int RenderBlock::applyAfterBreak(RenderBox* child, int yPos, MarginInfo& marginInfo)
+{
+    // FIXME: Add page break checking here when we support printing.
+    bool checkColumnBreaks = view()->layoutState()->isPaginatingColumns();
+    bool checkAfterAlways = checkColumnBreaks && child->style()->columnBreakAfter() == PBALWAYS;
+    if (checkAfterAlways && inNormalFlow(child)) {
+        marginInfo.setBottomQuirk(true); // Cause margins to be discarded for any following content.
+        if (checkColumnBreaks)
+            view()->layoutState()->addForcedColumnBreak(yPos);
+        return nextPageTop(yPos);
+    }
+    return yPos;
+}
+
+int RenderBlock::adjustForUnsplittableChild(RenderBox* child, int yPos, bool includeMargins)
+{
+    bool isUnsplittable = child->isReplaced() || child->scrollsOverflow();
+    if (!isUnsplittable)
+        return yPos;
+    int childHeight = child->height() + (includeMargins ? child->marginTop() + child->marginBottom() : 0);
+    LayoutState* layoutState = view()->layoutState();
+    if (layoutState->m_columnInfo)
+        layoutState->m_columnInfo->updateMinimumColumnHeight(childHeight);
+    int pageHeight = layoutState->m_pageHeight;
+    if (!pageHeight || childHeight > pageHeight)
+        return yPos;
+    int remainingHeight = (pageHeight - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageHeight) % pageHeight;
+    if (remainingHeight < childHeight)
+        return yPos + remainingHeight;
+    return yPos;
+}
+
+void RenderBlock::adjustLinePositionForPagination(RootInlineBox* lineBox, int& delta)
+{
+    // FIXME: For now we paginate using line overflow.  This ensures that lines don't overlap at all when we
+    // put a strut between them for pagination purposes.  However, this really isn't the desired rendering, since
+    // the line on the top of the next page will appear too far down relative to the same kind of line at the top
+    // of the first column.
+    //
+    // The rendering we would like to see is one where the lineTop is at the top of the column, and any line overflow
+    // simply spills out above the top of the column.  This effect would match what happens at the top of the first column.
+    // We can't achieve this rendering, however, until we stop columns from clipping to the column bounds (thus allowing
+    // for overflow to occur), and then cache visible overflow for each column rect.
+    //
+    // Furthermore, the paint we have to do when a column has overflow has to be special.  We need to exclude
+    // content that paints in a previous column (and content that paints in the following column).
+    //
+    // FIXME: Another problem with simply moving lines is that the available line width may change (because of floats).
+    // Technically if the location we move the line to has a different line width than our old position, then we need to dirty the
+    // line and all following lines.
+    LayoutState* layoutState = view()->layoutState();
+    int pageHeight = layoutState->m_pageHeight;
+    int yPos = lineBox->topVisibleOverflow();
+    int lineHeight = lineBox->bottomVisibleOverflow() - yPos;
+    if (layoutState->m_columnInfo)
+        layoutState->m_columnInfo->updateMinimumColumnHeight(lineHeight);
+    yPos += delta;
+    lineBox->setPaginationStrut(0);
+    if (!pageHeight || lineHeight > pageHeight)
+        return;
+    int remainingHeight = pageHeight - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageHeight;
+    if (remainingHeight < lineHeight) {
+        int totalHeight = lineHeight + max(0, yPos);
+        if (lineBox == firstRootBox() && totalHeight < pageHeight && !isPositioned() && !isTableCell())
+            setPaginationStrut(remainingHeight + max(0, yPos));
+        else {
+            delta += remainingHeight;
+            lineBox->setPaginationStrut(remainingHeight);
+        }
+    }  
+}
+ 
 const char* RenderBlock::renderName() const
 {
     if (isBody())
diff --git a/WebCore/rendering/RenderBlock.h b/WebCore/rendering/RenderBlock.h
index 6ed0d7b..b55ca0e 100644
--- a/WebCore/rendering/RenderBlock.h
+++ b/WebCore/rendering/RenderBlock.h
@@ -34,6 +34,7 @@ namespace WebCore {
 
 class ColumnInfo;
 class InlineIterator;
+class LayoutStateMaintainer;
 class RenderInline;
 
 struct BidiRun;
@@ -70,7 +71,7 @@ public:
     virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0);
     virtual void removeChild(RenderObject*);
 
-    virtual void layoutBlock(bool relayoutChildren);
+    virtual void layoutBlock(bool relayoutChildren, int pageHeight = 0);
 
     void insertPositionedObject(RenderBox*);
     void removePositionedObject(RenderBox*);
@@ -89,6 +90,7 @@ public:
 
     void markAllDescendantsWithFloatsForLayout(RenderBox* floatToRemove = 0, bool inLayout = true);
     void markPositionedObjectsForLayout();
+    virtual void markDescendantBlocksAndLinesForLayout(bool inLayout = true);
 
     bool containsFloats() { return m_floatingObjects && !m_floatingObjects->isEmpty(); }
     bool containsFloat(RenderObject*);
@@ -151,6 +153,15 @@ public:
 
     ColumnInfo* columnInfo() const;
     int columnGap() const;
+    
+    // These two functions take the ColumnInfo* to avoid repeated lookups of the info in the global HashMap.
+    unsigned columnCount(ColumnInfo*) const;
+    IntRect columnRectAt(ColumnInfo*, unsigned) const;
+
+    int paginationStrut() const { return m_rareData ? m_rareData->m_paginationStrut : 0; }
+    int pageY() const { return m_rareData ? m_rareData->m_pageY : 0; }
+    void setPaginationStrut(int strut);
+    void setPageY(int y);
 
 protected:
     // These functions are only used internally to manipulate the render tree structure via remove/insert/appendChildNode.
@@ -177,20 +188,22 @@ protected:
     }
     void moveChildrenTo(RenderBlock* to, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, bool fullRemoveInsert = false);
     
-    int maxTopPosMargin() const { return m_maxMargin ? m_maxMargin->m_topPos : MaxMargin::topPosDefault(this); }
-    int maxTopNegMargin() const { return m_maxMargin ? m_maxMargin->m_topNeg : MaxMargin::topNegDefault(this); }
-    int maxBottomPosMargin() const { return m_maxMargin ? m_maxMargin->m_bottomPos : MaxMargin::bottomPosDefault(this); }
-    int maxBottomNegMargin() const { return m_maxMargin ? m_maxMargin->m_bottomNeg : MaxMargin::bottomNegDefault(this); }
+    int maxTopPosMargin() const { return m_rareData ? m_rareData->m_topPos : RenderBlockRareData::topPosDefault(this); }
+    int maxTopNegMargin() const { return m_rareData ? m_rareData->m_topNeg : RenderBlockRareData::topNegDefault(this); }
+    int maxBottomPosMargin() const { return m_rareData ? m_rareData->m_bottomPos : RenderBlockRareData::bottomPosDefault(this); }
+    int maxBottomNegMargin() const { return m_rareData ? m_rareData->m_bottomNeg : RenderBlockRareData::bottomNegDefault(this); }
+    
     void setMaxTopMargins(int pos, int neg);
     void setMaxBottomMargins(int pos, int neg);
-    
+
     void initMaxMarginValues()
     {
-        if (m_maxMargin) {
-            m_maxMargin->m_topPos = MaxMargin::topPosDefault(this);
-            m_maxMargin->m_topNeg = MaxMargin::topNegDefault(this);
-            m_maxMargin->m_bottomPos = MaxMargin::bottomPosDefault(this);
-            m_maxMargin->m_bottomNeg = MaxMargin::bottomNegDefault(this);
+        if (m_rareData) {
+            m_rareData->m_topPos = RenderBlockRareData::topPosDefault(this);
+            m_rareData->m_topNeg = RenderBlockRareData::topNegDefault(this);
+            m_rareData->m_bottomPos = RenderBlockRareData::bottomPosDefault(this);
+            m_rareData->m_bottomNeg = RenderBlockRareData::bottomNegDefault(this);
+            m_rareData->m_paginationStrut = 0;
         }
     }
 
@@ -295,9 +308,42 @@ private:
         bool everHadLayout;
     };
 
+    struct FloatingObject : Noncopyable {
+        enum Type {
+            FloatLeft,
+            FloatRight
+        };
+
+        FloatingObject(Type type)
+            : m_renderer(0)
+            , m_top(0)
+            , m_bottom(0)
+            , m_left(0)
+            , m_width(0)
+            , m_paginationStrut(0)
+            , m_type(type)
+            , m_shouldPaint(true)
+            , m_isDescendant(false)
+        {
+        }
+
+        Type type() { return static_cast<Type>(m_type); }
+
+        RenderBox* m_renderer;
+        int m_top;
+        int m_bottom;
+        int m_left;
+        int m_width;
+        int m_paginationStrut;
+        unsigned m_type : 1; // Type (left or right aligned)
+        bool m_shouldPaint : 1;
+        bool m_isDescendant : 1;
+    };
+
     // The following functions' implementations are in RenderBlockLineLayout.cpp.
     RootInlineBox* determineStartPosition(bool& firstLine, bool& fullLayout, bool& previousLineBrokeCleanly,
-                                          InlineBidiResolver&, Vector<FloatWithRect>& floats, unsigned& numCleanFloats);
+                                          InlineBidiResolver&, Vector<FloatWithRect>& floats, unsigned& numCleanFloats,
+                                          bool& useRepaintBounds, int& repaintTop, int& repaintBottom);
     RootInlineBox* determineEndPosition(RootInlineBox* startBox, InlineIterator& cleanLineStart,
                                         BidiStatus& cleanLineBidiStatus,
                                         int& yPos);
@@ -305,9 +351,9 @@ private:
                         RootInlineBox*& endLine, int& endYPos, int& repaintBottom, int& repaintTop);
 
     void skipTrailingWhitespace(InlineIterator&, bool isLineEmpty, bool previousLineBrokeCleanly);
-    int skipLeadingWhitespace(InlineBidiResolver&, bool firstLine, bool isLineEmpty, bool previousLineBrokeCleanly);
+    int skipLeadingWhitespace(InlineBidiResolver&, bool firstLine, bool isLineEmpty, bool previousLineBrokeCleanly, FloatingObject* lastFloatFromPreviousLine);
     void fitBelowFloats(int widthToFit, bool firstLine, int& availableWidth);
-    InlineIterator findNextLineBreak(InlineBidiResolver&, bool firstLine, bool& isLineEmpty, bool& previousLineBrokeCleanly, bool& hyphenated, EClear* = 0);
+    InlineIterator findNextLineBreak(InlineBidiResolver&, bool firstLine, bool& isLineEmpty, bool& previousLineBrokeCleanly, bool& hyphenated, EClear*, FloatingObject* lastFloatFromPreviousLine);
     RootInlineBox* constructLine(unsigned runCount, BidiRun* firstRun, BidiRun* lastRun, bool firstLine, bool lastLine, RenderObject* endObject);
     InlineFlowBox* createLineBoxes(RenderObject*, bool firstLine);
     void computeHorizontalPositionsForLine(RootInlineBox*, bool firstLine, BidiRun* firstRun, BidiRun* trailingSpaceRun, bool reachedEnd, GlyphOverflowAndFallbackFontsMap&);
@@ -329,12 +375,18 @@ private:
     void paintSelection(PaintInfo&, int tx, int ty);
     void paintCaret(PaintInfo&, int tx, int ty, CaretType);
 
-    void insertFloatingObject(RenderBox*);
+    FloatingObject* insertFloatingObject(RenderBox*);
     void removeFloatingObject(RenderBox*);
-
+    void removeFloatingObjectsBelow(FloatingObject*, int y);
+    
     // Called from lineWidth, to position the floats added in the last line.
-    // Returns ture if and only if it has positioned any floats.
+    // Returns true if and only if it has positioned any floats.
     bool positionNewFloats();
+    
+    // Positions new floats and also adjust all floats encountered on the line if any of them
+    // have to move to the next page/column.
+    bool positionNewFloatOnLine(FloatingObject* newFloat, FloatingObject* lastFloatFromPreviousLine);
+
     void clearFloats();
     int getClearDelta(RenderBox* child, int yPos);
 
@@ -416,8 +468,7 @@ private:
     void offsetForContents(int& tx, int& ty) const;
 
     void calcColumnWidth();
-    int layoutColumns(int endOfContent = -1, int requestedColumnHeight = -1);
-    int visibleTopOfHighestFloatExtendingBelow(int bottom, int maxHeight) const;
+    bool layoutColumns(bool hasSpecifiedPageHeight, int pageHeight, LayoutStateMaintainer&);
     void makeChildrenAnonymousColumnBlocks(RenderObject* beforeChild, RenderBlock* newBlockBox, RenderObject* newChild);
 
     bool expandsToEncloseOverhangingFloats() const;
@@ -433,36 +484,6 @@ private:
     RenderBlock* continuationBefore(RenderObject* beforeChild);
     RenderBlock* containingColumnsBlock(bool allowAnonymousColumnBlock = true);
     RenderBlock* columnsBlockForSpanningElement(RenderObject* newChild);
-    
-    struct FloatingObject : Noncopyable {
-        enum Type {
-            FloatLeft,
-            FloatRight
-        };
-
-        FloatingObject(Type type)
-            : m_renderer(0)
-            , m_top(0)
-            , m_bottom(0)
-            , m_left(0)
-            , m_width(0)
-            , m_type(type)
-            , m_shouldPaint(true)
-            , m_isDescendant(false)
-        {
-        }
-
-        Type type() { return static_cast<Type>(m_type); }
-
-        RenderBox* m_renderer;
-        int m_top;
-        int m_bottom;
-        int m_left;
-        int m_width;
-        unsigned m_type : 1; // Type (left or right aligned)
-        bool m_shouldPaint : 1;
-        bool m_isDescendant : 1;
-    };
 
     class MarginInfo {
         // Collapsing flags for whether we can collapse our margins with our children's margins.
@@ -539,6 +560,13 @@ private:
     void setCollapsedBottomMargin(const MarginInfo&);
     // End helper functions and structs used by layoutBlockChildren.
 
+    // Pagination routines.
+    int nextPageTop(int yPos) const; // Returns the top of the next page following yPos.
+    int applyBeforeBreak(RenderBox* child, int yPos); // If the child has a before break, then return a new yPos that shifts to the top of the next page/column.
+    int applyAfterBreak(RenderBox* child, int yPos, MarginInfo& marginInfo); // If the child has an after break, then return a new yPos that shifts to the top of the next page/column.
+    int adjustForUnsplittableChild(RenderBox* child, int yPos, bool includeMargins = false); // If the child is unsplittable and can't fit on the current page, return the top of the next page/column.
+    void adjustLinePositionForPagination(RootInlineBox*, int& deltaY); // Computes a deltaY value that put a line at the top of the next page if it doesn't fit on the current page.
+
     typedef PositionedObjectsListHashSet::const_iterator Iterator;
     DeprecatedPtrList<FloatingObject>* m_floatingObjects;
     
@@ -551,12 +579,14 @@ private:
     RenderBoxModelObject* m_continuation;
 
     // Allocated only when some of these fields have non-default values
-    struct MaxMargin : Noncopyable {
-        MaxMargin(const RenderBlock* o) 
+    struct RenderBlockRareData : Noncopyable {
+        RenderBlockRareData(const RenderBlock* o) 
             : m_topPos(topPosDefault(o))
             , m_topNeg(topNegDefault(o))
             , m_bottomPos(bottomPosDefault(o))
             , m_bottomNeg(bottomNegDefault(o))
+            , m_paginationStrut(0)
+            , m_pageY(0)
         { 
         }
 
@@ -564,14 +594,16 @@ private:
         static int topNegDefault(const RenderBlock* o) { return o->marginTop() < 0 ? -o->marginTop() : 0; }
         static int bottomPosDefault(const RenderBlock* o) { return o->marginBottom() > 0 ? o->marginBottom() : 0; }
         static int bottomNegDefault(const RenderBlock* o) { return o->marginBottom() < 0 ? -o->marginBottom() : 0; }
-
+        
         int m_topPos;
         int m_topNeg;
         int m_bottomPos;
         int m_bottomNeg;
+        int m_paginationStrut;
+        int m_pageY;
      };
 
-    MaxMargin* m_maxMargin;
+    OwnPtr<RenderBlockRareData> m_rareData;
 
     RenderObjectChildList m_children;
     RenderLineBoxList m_lineBoxes;   // All of the root line boxes created for this block flow.  For example, <div>Hello<br>world.</div> will have two total lines for the <div>.
diff --git a/WebCore/rendering/RenderBlockLineLayout.cpp b/WebCore/rendering/RenderBlockLineLayout.cpp
index e57f28e..135185c 100644
--- a/WebCore/rendering/RenderBlockLineLayout.cpp
+++ b/WebCore/rendering/RenderBlockLineLayout.cpp
@@ -33,6 +33,7 @@
 #include "RenderLayer.h"
 #include "RenderListMarker.h"
 #include "RenderView.h"
+#include "Settings.h"
 #include "TrailingFloatsRootInlineBox.h"
 #include "break_lines.h"
 #include <wtf/AlwaysInline.h>
@@ -574,12 +575,11 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
             
                 if (o->isPositioned())
                     o->containingBlock()->insertPositionedObject(box);
-                else {
-                    if (o->isFloating())
-                        floats.append(FloatWithRect(box));
-                    else if (fullLayout || o->needsLayout()) // Replaced elements
-                        toRenderBox(o)->dirtyLineBoxes(fullLayout);
-
+                else if (o->isFloating())
+                    floats.append(FloatWithRect(box));
+                else if (fullLayout || o->needsLayout()) {
+                    // Replaced elements
+                    toRenderBox(o)->dirtyLineBoxes(fullLayout);
                     o->layoutIfNeeded();
                 }
             } else if (o->isText() || (o->isRenderInline() && !endOfInline)) {
@@ -597,7 +597,8 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
         unsigned floatIndex;
         bool firstLine = true;
         bool previousLineBrokeCleanly = true;
-        RootInlineBox* startLine = determineStartPosition(firstLine, fullLayout, previousLineBrokeCleanly, resolver, floats, floatIndex);
+        RootInlineBox* startLine = determineStartPosition(firstLine, fullLayout, previousLineBrokeCleanly, resolver, floats, floatIndex,
+                                                          useRepaintBounds, repaintTop, repaintBottom);
 
         if (fullLayout && hasInlineChild && !selfNeedsLayout()) {
             setNeedsLayout(true, false);  // Mark ourselves as needing a full layout. This way we'll repaint like
@@ -625,9 +626,11 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
                                  0 : determineEndPosition(startLine, cleanLineStart, cleanLineBidiStatus, endLineYPos);
 
         if (startLine) {
-            useRepaintBounds = true;
-            repaintTop = height();
-            repaintBottom = height();
+            if (!useRepaintBounds) {
+                useRepaintBounds = true;
+                repaintTop = height();
+                repaintBottom = height();
+            }
             RenderArena* arena = renderArena();
             RootInlineBox* box = startLine;
             while (box) {
@@ -662,6 +665,7 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
         bool checkForFloatsFromLastLine = false;
 
         bool isLineEmpty = true;
+        bool paginated = view()->layoutState() && view()->layoutState()->isPaginated();
 
         while (!end.atEnd()) {
             // FIXME: Is this check necessary before the first iteration or can it be moved to the end?
@@ -674,7 +678,10 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
             
             EClear clear = CNONE;
             bool hyphenated;
-            end = findNextLineBreak(resolver, firstLine, isLineEmpty, previousLineBrokeCleanly, hyphenated, &clear);
+            
+            InlineIterator oldEnd = end;
+            FloatingObject* lastFloatFromPreviousLine = m_floatingObjects ? m_floatingObjects->last() : 0;
+            end = findNextLineBreak(resolver, firstLine, isLineEmpty, previousLineBrokeCleanly, hyphenated, &clear, lastFloatFromPreviousLine);
             if (resolver.position().atEnd()) {
                 resolver.deleteRuns();
                 checkForFloatsFromLastLine = true;
@@ -739,6 +746,7 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
                 // inline flow boxes.
 
                 RootInlineBox* lineBox = 0;
+                int oldHeight = height();
                 if (resolver.runCount()) {
                     if (hyphenated)
                         resolver.logicallyLastRun()->m_hasHyphen = true;
@@ -789,6 +797,29 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
                         repaintTop = min(repaintTop, lineBox->topVisibleOverflow());
                         repaintBottom = max(repaintBottom, lineBox->bottomVisibleOverflow());
                     }
+                    
+                    if (paginated) {
+                        int adjustment = 0;
+                        adjustLinePositionForPagination(lineBox, adjustment);
+                        if (adjustment) {
+                            int oldLineWidth = lineWidth(oldHeight, firstLine);
+                            lineBox->adjustPosition(0, adjustment);
+                            if (useRepaintBounds) // This can only be a positive adjustment, so no need to update repaintTop.
+                                repaintBottom = max(repaintBottom, lineBox->bottomVisibleOverflow());
+                                
+                            if (lineWidth(oldHeight + adjustment, firstLine) != oldLineWidth) {
+                                // We have to delete this line, remove all floats that got added, and let line layout re-run.
+                                lineBox->deleteLine(renderArena());
+                                removeFloatingObjectsBelow(lastFloatFromPreviousLine, oldHeight);
+                                setHeight(oldHeight + adjustment);
+                                resolver.setPosition(oldEnd);
+                                end = oldEnd;
+                                continue;
+                            }
+
+                            setHeight(lineBox->blockHeight());
+                        }
+                    }
                 }
 
                 firstLine = false;
@@ -823,6 +854,10 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
                 int delta = height() - endLineYPos;
                 for (RootInlineBox* line = endLine; line; line = line->nextRootBox()) {
                     line->attachLine();
+                    if (paginated) {
+                        delta -= line->paginationStrut();
+                        adjustLinePositionForPagination(line, delta);
+                    }
                     if (delta) {
                         repaintTop = min(repaintTop, line->topVisibleOverflow() + min(delta, 0));
                         repaintBottom = max(repaintBottom, line->bottomVisibleOverflow() + max(delta, 0));
@@ -903,20 +938,44 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
 }
 
 RootInlineBox* RenderBlock::determineStartPosition(bool& firstLine, bool& fullLayout, bool& previousLineBrokeCleanly, 
-                                                   InlineBidiResolver& resolver, Vector<FloatWithRect>& floats, unsigned& numCleanFloats)
+                                                   InlineBidiResolver& resolver, Vector<FloatWithRect>& floats, unsigned& numCleanFloats,
+                                                   bool& useRepaintBounds, int& repaintTop, int& repaintBottom)
 {
     RootInlineBox* curr = 0;
     RootInlineBox* last = 0;
 
     bool dirtiedByFloat = false;
     if (!fullLayout) {
+        // Paginate all of the clean lines.
+        bool paginated = view()->layoutState() && view()->layoutState()->isPaginated();
+        int paginationDelta = 0;
         size_t floatIndex = 0;
         for (curr = firstRootBox(); curr && !curr->isDirty(); curr = curr->nextRootBox()) {
+            if (paginated) {
+                paginationDelta -= curr->paginationStrut();
+                adjustLinePositionForPagination(curr, paginationDelta);
+                if (paginationDelta) {
+                    if (containsFloats() || !floats.isEmpty()) {
+                        // FIXME: Do better eventually.  For now if we ever shift because of pagination and floats are present just go to a full layout.
+                        fullLayout = true; 
+                        break;
+                    }
+                    
+                    if (!useRepaintBounds)
+                        useRepaintBounds = true;
+                        
+                    repaintTop = min(repaintTop, curr->topVisibleOverflow() + min(paginationDelta, 0));
+                    repaintBottom = max(repaintBottom, curr->bottomVisibleOverflow() + max(paginationDelta, 0));
+                    curr->adjustPosition(0, paginationDelta);
+                }                
+            }
+            
             if (Vector<RenderBox*>* cleanLineFloats = curr->floatsPtr()) {
                 Vector<RenderBox*>::iterator end = cleanLineFloats->end();
                 for (Vector<RenderBox*>::iterator o = cleanLineFloats->begin(); o != end; ++o) {
                     RenderBox* f = *o;
-                    IntSize newSize(f->width() + f->marginLeft() +f->marginRight(), f->height() + f->marginTop() + f->marginBottom());
+                    f->layoutIfNeeded();
+                    IntSize newSize(f->width() + f->marginLeft() + f->marginRight(), f->height() + f->marginTop() + f->marginBottom());
                     ASSERT(floatIndex < floats.size());
                     if (floats[floatIndex].object != f) {
                         // A new float has been inserted before this line or before its last known float.
@@ -1239,14 +1298,14 @@ void RenderBlock::skipTrailingWhitespace(InlineIterator& iterator, bool isLineEm
     }
 }
 
-int RenderBlock::skipLeadingWhitespace(InlineBidiResolver& resolver, bool firstLine, bool isLineEmpty, bool previousLineBrokeCleanly)
+int RenderBlock::skipLeadingWhitespace(InlineBidiResolver& resolver, bool firstLine, bool isLineEmpty, bool previousLineBrokeCleanly,
+                                       FloatingObject* lastFloatFromPreviousLine)
 {
     int availableWidth = lineWidth(height(), firstLine);
     while (!resolver.position().atEnd() && !requiresLineBox(resolver.position(), isLineEmpty, previousLineBrokeCleanly)) {
         RenderObject* object = resolver.position().obj;
         if (object->isFloating()) {
-            insertFloatingObject(toRenderBox(object));
-            positionNewFloats();
+            positionNewFloatOnLine(insertFloatingObject(toRenderBox(object)), lastFloatFromPreviousLine);
             availableWidth = lineWidth(height(), firstLine);
         } else if (object->isPositioned()) {
             // FIXME: The math here is actually not really right.  It's a best-guess approximation that
@@ -1358,14 +1417,14 @@ static void tryHyphenating(RenderText* text, const Font& font, const AtomicStrin
 }
 
 InlineIterator RenderBlock::findNextLineBreak(InlineBidiResolver& resolver, bool firstLine,  bool& isLineEmpty, bool& previousLineBrokeCleanly, 
-                                              bool& hyphenated, EClear* clear)
+                                              bool& hyphenated, EClear* clear, FloatingObject* lastFloatFromPreviousLine)
 {
     ASSERT(resolver.position().block == this);
 
     bool appliedStartWidth = resolver.position().pos > 0;
     LineMidpointState& lineMidpointState = resolver.midpointState();
     
-    int width = skipLeadingWhitespace(resolver, firstLine, isLineEmpty, previousLineBrokeCleanly);
+    int width = skipLeadingWhitespace(resolver, firstLine, isLineEmpty, previousLineBrokeCleanly, lastFloatFromPreviousLine);
 
     int w = 0;
     int tmpW = 0;
@@ -1450,12 +1509,12 @@ InlineIterator RenderBlock::findNextLineBreak(InlineBidiResolver& resolver, bool
             // add to special objects...
             if (o->isFloating()) {
                 RenderBox* floatBox = toRenderBox(o);
-                insertFloatingObject(floatBox);
+                FloatingObject* f = insertFloatingObject(floatBox);
                 // check if it fits in the current line.
                 // If it does, position it now, otherwise, position
                 // it after moving to next line (in newLine() func)
                 if (floatsFitOnLine && floatBox->width() + floatBox->marginLeft() + floatBox->marginRight() + w + tmpW <= width) {
-                    positionNewFloats();
+                    positionNewFloatOnLine(f, lastFloatFromPreviousLine);
                     width = lineWidth(height(), firstLine);
                 } else
                     floatsFitOnLine = false;
diff --git a/WebCore/rendering/RenderBox.cpp b/WebCore/rendering/RenderBox.cpp
index 5e92315..d90c1f8 100644
--- a/WebCore/rendering/RenderBox.cpp
+++ b/WebCore/rendering/RenderBox.cpp
@@ -973,7 +973,7 @@ void RenderBox::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool
     if (RenderView* v = view()) {
         if (v->layoutStateEnabled() && !repaintContainer) {
             LayoutState* layoutState = v->layoutState();
-            IntSize offset = layoutState->m_offset;
+            IntSize offset = layoutState->m_paintOffset;
             offset.expand(x(), y());
             if (style()->position() == RelativePosition && layer())
                 offset += layer()->relativePositionOffset();
@@ -1170,7 +1170,7 @@ void RenderBox::computeRectForRepaint(RenderBoxModelObject* repaintContainer, In
                 rect.move(layer()->relativePositionOffset());
 
             rect.move(x(), y());
-            rect.move(layoutState->m_offset);
+            rect.move(layoutState->m_paintOffset);
             if (layoutState->m_clipped)
                 rect.intersect(layoutState->m_clipRect);
             return;
@@ -2915,4 +2915,19 @@ void RenderBox::clearLayoutOverflow()
     m_overflow->resetLayoutOverflow(borderBoxRect());
 }
 
+void RenderBox::markDescendantBlocksAndLinesForLayout(bool inLayout)
+{
+    if (!m_everHadLayout || isReplaced())
+        return;
+
+    setChildNeedsLayout(true, !inLayout);
+
+    // Iterate over our children and mark them as needed.
+    for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) {
+        if (child->isFloatingOrPositioned())
+            continue;
+        child->markDescendantBlocksAndLinesForLayout(inLayout);
+    }
+}
+
 } // namespace WebCore
diff --git a/WebCore/rendering/RenderBox.h b/WebCore/rendering/RenderBox.h
index f582d67..0846708 100644
--- a/WebCore/rendering/RenderBox.h
+++ b/WebCore/rendering/RenderBox.h
@@ -297,6 +297,8 @@ public:
     bool shrinkToAvoidFloats() const;
     virtual bool avoidsFloats() const;
 
+    virtual void markDescendantBlocksAndLinesForLayout(bool inLayout = true);
+    
 protected:
     virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle);
     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
diff --git a/WebCore/rendering/RenderFlexibleBox.cpp b/WebCore/rendering/RenderFlexibleBox.cpp
index c29f736..f0cbc1e 100644
--- a/WebCore/rendering/RenderFlexibleBox.cpp
+++ b/WebCore/rendering/RenderFlexibleBox.cpp
@@ -201,7 +201,7 @@ void RenderFlexibleBox::calcPrefWidths()
     setPrefWidthsDirty(false);
 }
 
-void RenderFlexibleBox::layoutBlock(bool relayoutChildren)
+void RenderFlexibleBox::layoutBlock(bool relayoutChildren, int /*pageHeight FIXME: Implement */)
 {
     ASSERT(needsLayout());
 
@@ -278,6 +278,9 @@ void RenderFlexibleBox::layoutBlock(bool relayoutChildren)
 
     statePusher.pop();
 
+    if (view()->layoutState()->m_pageHeight)
+        setPageY(view()->layoutState()->pageY(y()));
+
     // Update our scrollbars if we're overflow:auto/scroll/hidden now that we know if
     // we overflow or not.
     if (hasOverflowClip())
@@ -331,6 +334,8 @@ void RenderFlexibleBox::layoutHorizontalBox(bool relayoutChildren)
     bool haveFlex = false;
     gatherFlexChildrenInfo(iterator, relayoutChildren, highestFlexGroup, lowestFlexGroup, haveFlex);
 
+    bool paginated = view()->layoutState()->isPaginated();
+
     RenderBox* child;
 
     RenderBlock::startDelayUpdateScrollInfo();
@@ -361,6 +366,12 @@ void RenderFlexibleBox::layoutHorizontalBox(bool relayoutChildren)
             // Compute the child's vertical margins.
             child->calcVerticalMargins();
     
+            if (!child->needsLayout() && paginated && view()->layoutState()->m_pageHeight) {
+                RenderBlock* childRenderBlock = child->isRenderBlock() ? toRenderBlock(child) : 0;
+                if (childRenderBlock && view()->layoutState()->pageY(child->y()) != childRenderBlock->pageY())
+                    childRenderBlock->setChildNeedsLayout(true, false);
+            }
+
             // Now do the layout.
             child->layoutIfNeeded();
     
@@ -428,6 +439,13 @@ void RenderFlexibleBox::layoutHorizontalBox(bool relayoutChildren)
             child->calcHeight();
             if (oldChildHeight != child->height())
                 child->setChildNeedsLayout(true, false);
+                
+            if (!child->needsLayout() && paginated && view()->layoutState()->m_pageHeight) {
+                RenderBlock* childRenderBlock = child->isRenderBlock() ? toRenderBlock(child) : 0;
+                if (childRenderBlock && view()->layoutState()->pageY(child->y()) != childRenderBlock->pageY())
+                    childRenderBlock->setChildNeedsLayout(true, false);
+            }
+
             child->layoutIfNeeded();
     
             // We can place the child now, using our value of box-align.
@@ -641,6 +659,8 @@ void RenderFlexibleBox::layoutVerticalBox(bool relayoutChildren)
     bool haveFlex = false;
     gatherFlexChildrenInfo(iterator, relayoutChildren, highestFlexGroup, lowestFlexGroup, haveFlex);
 
+    bool paginated = view()->layoutState()->isPaginated();
+
     RenderBox* child;
 
     // We confine the line clamp ugliness to vertical flexible boxes (thus keeping it out of
@@ -690,6 +710,12 @@ void RenderFlexibleBox::layoutVerticalBox(bool relayoutChildren)
             // Add in the child's marginTop to our height.
             setHeight(height() + child->marginTop());
     
+            if (!child->needsLayout() && paginated && view()->layoutState()->m_pageHeight) {
+                RenderBlock* childRenderBlock = child->isRenderBlock() ? toRenderBlock(child) : 0;
+                if (childRenderBlock && view()->layoutState()->pageY(child->y()) != childRenderBlock->pageY())
+                    childRenderBlock->setChildNeedsLayout(true, false);
+            }
+
             // Now do a layout.
             child->layoutIfNeeded();
     
diff --git a/WebCore/rendering/RenderFlexibleBox.h b/WebCore/rendering/RenderFlexibleBox.h
index dfd14d9..2aa20b5 100644
--- a/WebCore/rendering/RenderFlexibleBox.h
+++ b/WebCore/rendering/RenderFlexibleBox.h
@@ -40,7 +40,7 @@ public:
     void calcHorizontalPrefWidths();
     void calcVerticalPrefWidths();
 
-    virtual void layoutBlock(bool relayoutChildren);
+    virtual void layoutBlock(bool relayoutChildren, int pageHeight);
     void layoutHorizontalBox(bool relayoutChildren);
     void layoutVerticalBox(bool relayoutChildren);
 
diff --git a/WebCore/rendering/RenderInline.cpp b/WebCore/rendering/RenderInline.cpp
index e91822e..c985b92 100644
--- a/WebCore/rendering/RenderInline.cpp
+++ b/WebCore/rendering/RenderInline.cpp
@@ -647,7 +647,7 @@ void RenderInline::computeRectForRepaint(RenderBoxModelObject* repaintContainer,
             LayoutState* layoutState = v->layoutState();
             if (style()->position() == RelativePosition && layer())
                 rect.move(layer()->relativePositionOffset());
-            rect.move(layoutState->m_offset);
+            rect.move(layoutState->m_paintOffset);
             if (layoutState->m_clipped)
                 rect.intersect(layoutState->m_clipRect);
             return;
@@ -734,7 +734,7 @@ void RenderInline::mapLocalToContainer(RenderBoxModelObject* repaintContainer, b
     if (RenderView *v = view()) {
         if (v->layoutStateEnabled() && !repaintContainer) {
             LayoutState* layoutState = v->layoutState();
-            IntSize offset = layoutState->m_offset;
+            IntSize offset = layoutState->m_paintOffset;
             if (style()->position() == RelativePosition && layer())
                 offset += layer()->relativePositionOffset();
             transformState.move(offset);
diff --git a/WebCore/rendering/RenderLayer.cpp b/WebCore/rendering/RenderLayer.cpp
index 1477a23..e6a0cda 100644
--- a/WebCore/rendering/RenderLayer.cpp
+++ b/WebCore/rendering/RenderLayer.cpp
@@ -471,7 +471,7 @@ TransformationMatrix RenderLayer::renderableTransform(PaintBehavior paintBehavio
 void RenderLayer::updatePagination()
 {
     m_isPaginated = false;
-    if (isComposited() || !parent() || renderer()->isPositioned())
+    if (isComposited() || !parent())
         return; // FIXME: We will have to deal with paginated compositing layers someday.
                 // FIXME: For now the RenderView can't be paginated.  Eventually printing will move to a model where it is though.
     
@@ -2555,11 +2555,11 @@ void RenderLayer::paintChildLayerIntoColumns(RenderLayer* childLayer, RenderLaye
     columnBlock->layer()->convertToLayerCoords(rootLayer, layerX, layerY);
     
     ColumnInfo* colInfo = columnBlock->columnInfo();
-    unsigned colCount = colInfo->columnCount();
+    unsigned colCount = columnBlock->columnCount(colInfo);
     int currYOffset = 0;
     for (unsigned i = 0; i < colCount; i++) {
         // For each rect, we clip to the rect, and then we adjust our coords.
-        IntRect colRect = colInfo->columnRectAt(i);
+        IntRect colRect = columnBlock->columnRectAt(colInfo, i);
         int currXOffset = colRect.x() - (columnBlock->borderLeft() + columnBlock->paddingLeft());
         colRect.move(layerX, layerY);
 
@@ -3021,17 +3021,17 @@ RenderLayer* RenderLayer::hitTestChildLayerColumns(RenderLayer* childLayer, Rend
     columnBlock->layer()->convertToLayerCoords(rootLayer, layerX, layerY);
     
     ColumnInfo* colInfo = columnBlock->columnInfo();
-    int colCount = colInfo->columnCount();
+    int colCount = columnBlock->columnCount(colInfo);
     
     // We have to go backwards from the last column to the first.
     int left = columnBlock->borderLeft() + columnBlock->paddingLeft();
     int currYOffset = 0;
     int i;
     for (i = 0; i < colCount; i++)
-        currYOffset -= colInfo->columnRectAt(i).height();
+        currYOffset -= columnBlock->columnRectAt(colInfo, i).height();
     for (i = colCount - 1; i >= 0; i--) {
         // For each rect, we clip to the rect, and then we adjust our coords.
-        IntRect colRect = colInfo->columnRectAt(i);
+        IntRect colRect = columnBlock->columnRectAt(colInfo, i);
         int currXOffset = colRect.x() - left;
         currYOffset += colRect.height();
         colRect.move(layerX, layerY);
diff --git a/WebCore/rendering/RenderLineBoxList.cpp b/WebCore/rendering/RenderLineBoxList.cpp
index 4d0dcd6..c1b81a5 100644
--- a/WebCore/rendering/RenderLineBoxList.cpp
+++ b/WebCore/rendering/RenderLineBoxList.cpp
@@ -35,7 +35,6 @@
 #include "RenderInline.h"
 #include "RenderView.h"
 #include "RootInlineBox.h"
-#include "Settings.h" // FIXME: This include can be removed when paginateDuringLayoutEnabled is taken out.
 
 using namespace std;
 
@@ -161,7 +160,7 @@ void RenderLineBoxList::paint(RenderBoxModelObject* renderer, PaintInfo& paintIn
         return;
 
     RenderView* v = renderer->view();
-    bool usePrintRect = !v->printRect().isEmpty() && !renderer->document()->settings()->paginateDuringLayoutEnabled();
+    bool usePrintRect = !v->printRect().isEmpty();
     
     // We can check the first box and last box and avoid painting if we don't
     // intersect.  This is a quick short-circuit that we can take to avoid walking any lines.
@@ -215,7 +214,6 @@ void RenderLineBoxList::paint(RenderBoxModelObject* renderer, PaintInfo& paintIn
         int bottom = curr->bottomVisibleOverflow() + renderer->maximalOutlineSize(info.phase);
         h = bottom - top;
         yPos = ty + top;
-        v->setMinimumColumnHeight(h);
         if (yPos < info.rect.bottom() && yPos + h > info.rect.y())
             curr->paint(info, tx, ty);
     }
diff --git a/WebCore/rendering/RenderTable.cpp b/WebCore/rendering/RenderTable.cpp
index af1016a..bd00bce 100644
--- a/WebCore/rendering/RenderTable.cpp
+++ b/WebCore/rendering/RenderTable.cpp
@@ -59,8 +59,10 @@ RenderTable::RenderTable(Node* node)
     , m_borderLeft(0)
     , m_borderRight(0)
 {
+    setChildrenInline(false);
     m_columnPos.fill(0, 2);
     m_columns.fill(ColumnStruct(), 1);
+    
 }
 
 void RenderTable::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
@@ -399,6 +401,9 @@ void RenderTable::layout()
 
     statePusher.pop();
 
+    if (view()->layoutState()->m_pageHeight)
+        setPageY(view()->layoutState()->pageY(y()));
+
     bool didFullRepaint = repainter.repaintAfterLayout();
     // Repaint with our new bounds if they are different from our old bounds.
     if (!didFullRepaint && sectionMoved)
diff --git a/WebCore/rendering/RenderTableRow.cpp b/WebCore/rendering/RenderTableRow.cpp
index a11a14b..0a8bfde 100644
--- a/WebCore/rendering/RenderTableRow.cpp
+++ b/WebCore/rendering/RenderTableRow.cpp
@@ -117,9 +117,14 @@ void RenderTableRow::layout()
     // Table rows do not add translation.
     LayoutStateMaintainer statePusher(view(), this, IntSize());
 
+    bool paginated = view()->layoutState()->isPaginated();
+                
     for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
         if (child->isTableCell()) {
             RenderTableCell* cell = toRenderTableCell(child);
+            if (!cell->needsLayout() && paginated && view()->layoutState()->m_pageHeight && view()->layoutState()->pageY(cell->y()) != cell->pageY())
+                cell->setChildNeedsLayout(true, false);
+
             if (child->needsLayout()) {
                 cell->calcVerticalMargins();
                 cell->layout();
diff --git a/WebCore/rendering/RenderTableSection.cpp b/WebCore/rendering/RenderTableSection.cpp
index bf74fed..4a872d6 100644
--- a/WebCore/rendering/RenderTableSection.cpp
+++ b/WebCore/rendering/RenderTableSection.cpp
@@ -605,6 +605,8 @@ int RenderTableSection::layoutRows(int toAdd)
             if (te != oldTe || be != oldBe) {
                 cell->setNeedsLayout(true, false);
                 cell->layoutIfNeeded();
+                if (view()->layoutState()->m_pageHeight && cell->height() != rHeight)
+                    cell->setHeight(rHeight); // FIXME: Pagination might have made us change size.  For now just shrink or grow the cell to fit without doing a relayout.
             }
 
             if ((te != oldTe || be > oldBe) && !table()->selfNeedsLayout() && cell->checkForRepaintDuringLayout())
diff --git a/WebCore/rendering/RenderView.cpp b/WebCore/rendering/RenderView.cpp
index d7aae36..35d776d 100644
--- a/WebCore/rendering/RenderView.cpp
+++ b/WebCore/rendering/RenderView.cpp
@@ -52,7 +52,6 @@ RenderView::RenderView(Node* node, FrameView* view)
     , m_maximalOutlineSize(0)
     , m_bestTruncatedAt(0)
     , m_truncatorWidth(0)
-    , m_minimumColumnHeight(0)
     , m_forcedPageBreak(false)
     , m_layoutState(0)
     , m_layoutStateDisableCount(0)
@@ -693,7 +692,6 @@ void RenderView::setBestTruncatedAt(int y, RenderBoxModelObject* forRenderer, bo
 
 void RenderView::pushLayoutState(RenderObject* root)
 {
-    ASSERT(!doingFullRepaint());
     ASSERT(m_layoutStateDisableCount == 0);
     ASSERT(m_layoutState == 0);
 
diff --git a/WebCore/rendering/RenderView.h b/WebCore/rendering/RenderView.h
index 0a411fd..e1f6128 100644
--- a/WebCore/rendering/RenderView.h
+++ b/WebCore/rendering/RenderView.h
@@ -83,12 +83,10 @@ public:
     IntRect printRect() const { return m_printRect; }
     void setPrintRect(const IntRect& r) { m_printRect = r; }
 
-    void setTruncatedAt(int y) { m_truncatedAt = y; m_bestTruncatedAt = m_truncatorWidth = 0; m_minimumColumnHeight = 0; m_forcedPageBreak = false; }
+    void setTruncatedAt(int y) { m_truncatedAt = y; m_bestTruncatedAt = m_truncatorWidth = 0; m_forcedPageBreak = false; }
     void setBestTruncatedAt(int y, RenderBoxModelObject* forRenderer, bool forcedBreak = false);
-    void setMinimumColumnHeight(int height) { m_minimumColumnHeight = height; }
     int bestTruncatedAt() const { return m_bestTruncatedAt; }
-    int minimumColumnHeight() const { return m_minimumColumnHeight; }
-
+    
     int truncatedAt() const { return m_truncatedAt; }
 
     virtual void absoluteRects(Vector<IntRect>&, int tx, int ty);
@@ -122,21 +120,20 @@ public:
 
     bool doingFullRepaint() const { return m_frameView->needsFullRepaint(); }
 
-    void pushLayoutState(RenderBox* renderer, const IntSize& offset)
+    void pushLayoutState(RenderBox* renderer, const IntSize& offset, int pageHeight = 0, ColumnInfo* colInfo = 0)
     {
-        if (doingFullRepaint())
-            return;
         // We push LayoutState even if layoutState is disabled because it stores layoutDelta too.
-        m_layoutState = new (renderArena()) LayoutState(m_layoutState, renderer, offset);
+        if (!doingFullRepaint() || renderer->hasColumns() || m_layoutState->isPaginated())
+            m_layoutState = new (renderArena()) LayoutState(m_layoutState, renderer, offset, pageHeight, colInfo);
     }
 
     void pushLayoutState(RenderObject*);
 
     void popLayoutState()
     {
-        if (doingFullRepaint())
-            return;
         LayoutState* state = m_layoutState;
+        if (doingFullRepaint() && !m_layoutState->isPaginated())
+            return;
         m_layoutState = state->m_next;
         state->destroy(renderArena());
     }
@@ -198,7 +195,6 @@ protected:
 private:
     int m_bestTruncatedAt;
     int m_truncatorWidth;
-    int m_minimumColumnHeight;
     bool m_forcedPageBreak;
     LayoutState* m_layoutState;
     unsigned m_layoutStateDisableCount;
@@ -227,13 +223,13 @@ void toRenderView(const RenderView*);
 class LayoutStateMaintainer : public Noncopyable {
 public:
     // ctor to push now
-    LayoutStateMaintainer(RenderView* view, RenderBox* root, IntSize offset, bool disableState = false)
+    LayoutStateMaintainer(RenderView* view, RenderBox* root, IntSize offset, bool disableState = false, int pageHeight = 0, ColumnInfo* colInfo = 0)
         : m_view(view)
         , m_disabled(disableState)
         , m_didStart(false)
         , m_didEnd(false)
     {
-        push(root, offset);
+        push(root, offset, pageHeight, colInfo);
     }
     
     // ctor to maybe push later
@@ -250,11 +246,11 @@ public:
         ASSERT(m_didStart == m_didEnd);   // if this fires, it means that someone did a push(), but forgot to pop().
     }
 
-    void push(RenderBox* root, IntSize offset)
+    void push(RenderBox* root, IntSize offset, int pageHeight = 0, ColumnInfo* colInfo = 0)
     {
         ASSERT(!m_didStart);
         // We push state even if disabled, because we still need to store layoutDelta
-        m_view->pushLayoutState(root, offset);
+        m_view->pushLayoutState(root, offset, pageHeight, colInfo);
         if (m_disabled)
             m_view->disableLayoutState();
         m_didStart = true;
diff --git a/WebCore/rendering/RootInlineBox.h b/WebCore/rendering/RootInlineBox.h
index ff98f24..d97d0b1 100644
--- a/WebCore/rendering/RootInlineBox.h
+++ b/WebCore/rendering/RootInlineBox.h
@@ -40,6 +40,7 @@ public:
         , m_lineBreakPos(0)
         , m_lineTop(0)
         , m_lineBottom(0)
+        , m_paginationStrut(0)
     {
     }
 
@@ -57,6 +58,9 @@ public:
     int lineTop() const { return m_lineTop; }
     int lineBottom() const { return m_lineBottom; }
 
+    int paginationStrut() const { return m_paginationStrut; }
+    void setPaginationStrut(int s) { m_paginationStrut = s; }
+
     int selectionTop() const;
     int selectionBottom() const { return lineBottom(); }
     int selectionHeight() const { return max(0, selectionBottom() - selectionTop()); }
@@ -141,6 +145,8 @@ private:
     int m_lineTop;
     int m_lineBottom;
 
+    int m_paginationStrut;
+
     // Floats hanging off the line are pushed into this vector during layout. It is only
     // good for as long as the line has not been marked dirty.
     OwnPtr<Vector<RenderBox*> > m_floats;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list