diff --git a/fop-core/src/main/java/org/apache/fop/layoutmgr/RestartAtLM.java b/fop-core/src/main/java/org/apache/fop/layoutmgr/RestartAtLM.java
index 08189cb..80b1487 100644
--- a/fop-core/src/main/java/org/apache/fop/layoutmgr/RestartAtLM.java
+++ b/fop-core/src/main/java/org/apache/fop/layoutmgr/RestartAtLM.java
@@ -23,6 +23,7 @@
 import java.util.LinkedList;
 
 import org.apache.fop.events.EventBroadcaster;
+import org.apache.fop.layoutmgr.table.TableContentPosition;
 
 /**
  * Class to find the restart layoutmanager for changing IPD
@@ -39,6 +40,9 @@
             optimalBreak = null;
         }
         int positionIndex = findPositionIndex(breaker, optimalBreak, alg, start);
+        if (breaker.positionAtBreak.getLM() instanceof BlockLayoutManager) {
+            positionIndex = findPositionIndex(breaker, optimalBreak, alg, 0);
+        }
         if (ipdChangesOnNextPage || (breaker.positionAtBreak != null && breaker.positionAtBreak.getIndex() > -1)) {
             breaker.firstElementsForRestart = Collections.EMPTY_LIST;
             if (ipdChangesOnNextPage) {
@@ -112,9 +116,20 @@
         if (onLastPageAndIPDChanges && !visitedBefore && breaker.positionAtBreak.getPosition() != null) {
             restartAtLM = breaker.positionAtBreak.getPosition().getLM();
         }
+        findLeafPosition(breaker);
         return restartAtLM;
     }
 
+    private void findLeafPosition(AbstractBreaker breaker) {
+        while (breaker.positionAtBreak instanceof NonLeafPosition) {
+            Position pos = breaker.positionAtBreak.getPosition();
+            if (pos instanceof TableContentPosition) {
+                break;
+            }
+            breaker.positionAtBreak = pos;
+        }
+    }
+
     private int findPositionIndex(AbstractBreaker breaker, BreakingAlgorithm.KnuthNode optimalBreak,
                                   PageBreakingAlgorithm alg, int start) {
         int positionIndex = (optimalBreak != null) ? optimalBreak.position : start;
diff --git a/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java b/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
index ddffde3..2fff6c4 100644
--- a/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
+++ b/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
@@ -660,7 +660,9 @@
         }
 
         for (int i = 0; i < parIndex; i++) {
-            knuthParagraphs.remove(0);
+            if (knuthParagraphs.size() > 1) {
+                knuthParagraphs.remove(0);
+            }
         }
         parIndex = 0;
 
diff --git a/fop-core/src/main/java/org/apache/fop/layoutmgr/table/TableContentPosition.java b/fop-core/src/main/java/org/apache/fop/layoutmgr/table/TableContentPosition.java
index 98d474f..3f1236d 100644
--- a/fop-core/src/main/java/org/apache/fop/layoutmgr/table/TableContentPosition.java
+++ b/fop-core/src/main/java/org/apache/fop/layoutmgr/table/TableContentPosition.java
@@ -30,7 +30,7 @@
  * This class represents a Position specific to TableContentLayoutManager. Used for normal
  * content cases.
  */
-class TableContentPosition extends Position {
+public class TableContentPosition extends Position {
 
     /** The position is the first of the row group. */
     public static final int FIRST_IN_ROWGROUP = 1;
diff --git a/fop/test/layoutengine/standard-testcases/flow_changing-ipd_last-page_12.xml b/fop/test/layoutengine/standard-testcases/flow_changing-ipd_last-page_12.xml
index 10fb45e..d3918fc 100644
--- a/fop/test/layoutengine/standard-testcases/flow_changing-ipd_last-page_12.xml
+++ b/fop/test/layoutengine/standard-testcases/flow_changing-ipd_last-page_12.xml
@@ -60,5 +60,6 @@
 </fo>
   <checks>
     <eval expected="url(a.TIFF)" xpath="//pageViewport[2]//image/@url"/>
+    <eval expected="2" xpath="count(//pageViewport)"/>
   </checks>
 </testcase>
diff --git a/fop/test/layoutengine/standard-testcases/flow_changing-ipd_last-page_19.xml b/fop/test/layoutengine/standard-testcases/flow_changing-ipd_last-page_19.xml
new file mode 100755
index 0000000..a854fe8
--- /dev/null
+++ b/fop/test/layoutengine/standard-testcases/flow_changing-ipd_last-page_19.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!-- $Id$ -->
+<testcase>
+  <info>
+    <p>
+      This test checks that the definition of a special page-master for the last page with a
+      different width that the previous "rest" page causes FOP to redo the line breaking layout.
+    </p>
+  </info>
+  <fo>
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+  <fo:layout-master-set>
+    <fo:simple-page-master master-name="Portrait" page-width="8.5in" page-height="11in" margin-bottom="0pt" margin-right="0pt" margin-top="0pt" margin-left="0pt">
+      <fo:region-body margin-bottom="0pt" margin-right="0pt" margin-top="0pt" margin-left="0pt" region-name="Body"/>
+    </fo:simple-page-master>
+    <fo:simple-page-master master-name="Landscape" page-width="11in" page-height="8.5in" margin-bottom="0pt" margin-right="0pt" margin-top="0pt" margin-left="0pt">
+      <fo:region-body region-name="Body" margin-bottom="0pt" margin-right="0pt" margin-top="0pt" margin-left="0pt"/>
+    </fo:simple-page-master>
+    <fo:page-sequence-master master-name="LetterPages">
+      <fo:repeatable-page-master-alternatives>
+        <fo:conditional-page-master-reference page-position="first" master-reference="Portrait"/>
+        <fo:conditional-page-master-reference page-position="rest" master-reference="Portrait"/>
+        <fo:conditional-page-master-reference page-position="last" master-reference="Landscape"/>
+      </fo:repeatable-page-master-alternatives>
+    </fo:page-sequence-master>
+  </fo:layout-master-set>
+  <fo:page-sequence master-reference="LetterPages">
+    <fo:flow flow-name="Body">
+      <fo:block>
+          <fo:block>test</fo:block>
+          <fo:block break-before="page">test2</fo:block>
+          <fo:block>test3</fo:block>
+      </fo:block>
+    </fo:flow>
+  </fo:page-sequence>
+</fo:root>
+  </fo>
+  <checks>
+    <eval expected="2" xpath="count(//pageViewport)"/>
+    <eval expected="test" xpath="//pageViewport[1]//word"/>
+    <eval expected="test2" xpath="//pageViewport[2]//block/block[1]//word"/>
+    <eval expected="test3" xpath="//pageViewport[2]//block/block[2]//word"/>
+  </checks>
+</testcase>
