Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 7409)
+++ /CKEditor/trunk/CHANGES.html	(revision 7410)
@@ -76,4 +76,5 @@
 		<li><a href="http://dev.ckeditor.com/ticket/7492">#7492</a> : Enable in the Style system to use overrides with the same element (change classes instead of nesting).</li>
 		<li><a href="http://dev.ckeditor.com/ticket/6111">#6111</a> : Splitting cells results in incorrect column spans.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/8247">#8247</a> : [IE] Fix error when indent with page breaks inside of contents.</li>
 	</ul>
 	<h3>
Index: /CKEditor/trunk/_source/plugins/domiterator/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/domiterator/plugin.js	(revision 7409)
+++ /CKEditor/trunk/_source/plugins/domiterator/plugin.js	(revision 7410)
@@ -64,5 +64,5 @@
 
 			// This is the first iteration. Let's initialize it.
-			if ( !this._.lastNode )
+			if ( !this._.started )
 			{
 				range = this.range.clone();
@@ -77,42 +77,47 @@
 							   CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS : CKEDITOR.ENLARGE_BLOCK_CONTENTS );
 
-				var walker = new CKEDITOR.dom.walker( range ),
-					ignoreBookmarkTextEvaluator = CKEDITOR.dom.walker.bookmark( true, true );
-				// Avoid anchor inside bookmark inner text.
-				walker.evaluator = ignoreBookmarkTextEvaluator;
-				this._.nextNode = walker.next();
-				// TODO: It's better to have walker.reset() used here.
-				walker = new CKEDITOR.dom.walker( range );
-				walker.evaluator = ignoreBookmarkTextEvaluator;
-				var lastNode = walker.previous();
-				this._.lastNode = lastNode.getNextSourceNode( true );
-
-				// We may have an empty text node at the end of block due to [3770].
-				// If that node is the lastNode, it would cause our logic to leak to the
-				// next block.(#3887)
-				if ( this._.lastNode &&
-						this._.lastNode.type == CKEDITOR.NODE_TEXT &&
-						!CKEDITOR.tools.trim( this._.lastNode.getText() ) &&
-						this._.lastNode.getParent().isBlockBoundary() )
-				{
-					var testRange = new CKEDITOR.dom.range( range.document );
-					testRange.moveToPosition( this._.lastNode, CKEDITOR.POSITION_AFTER_END );
-					if ( testRange.checkEndOfBlock() )
-					{
-						var path = new CKEDITOR.dom.elementPath( testRange.endContainer );
-						var lastBlock = path.block || path.blockLimit;
-						this._.lastNode = lastBlock.getNextSourceNode( true );
-					}
-				}
-
-				// Probably the document end is reached, we need a marker node.
-				if ( !this._.lastNode )
-				{
-					this._.lastNode = this._.docEndMarker = range.document.createText( '' );
-					this._.lastNode.insertAfter( lastNode );
-				}
-
-				// Let's reuse this variable.
-				range = null;
+				if ( !range.collapsed )
+				{
+					var walker = new CKEDITOR.dom.walker( range.clone() ),
+						ignoreBookmarkTextEvaluator = CKEDITOR.dom.walker.bookmark( true, true );
+					// Avoid anchor inside bookmark inner text.
+					walker.evaluator = ignoreBookmarkTextEvaluator;
+					this._.nextNode = walker.next();
+					// TODO: It's better to have walker.reset() used here.
+					walker = new CKEDITOR.dom.walker( range.clone() );
+					walker.evaluator = ignoreBookmarkTextEvaluator;
+					var lastNode = walker.previous();
+					this._.lastNode = lastNode.getNextSourceNode( true );
+
+					// We may have an empty text node at the end of block due to [3770].
+					// If that node is the lastNode, it would cause our logic to leak to the
+					// next block.(#3887)
+					if ( this._.lastNode &&
+							this._.lastNode.type == CKEDITOR.NODE_TEXT &&
+							!CKEDITOR.tools.trim( this._.lastNode.getText() ) &&
+							this._.lastNode.getParent().isBlockBoundary() )
+					{
+						var testRange = new CKEDITOR.dom.range( range.document );
+						testRange.moveToPosition( this._.lastNode, CKEDITOR.POSITION_AFTER_END );
+						if ( testRange.checkEndOfBlock() )
+						{
+							var path = new CKEDITOR.dom.elementPath( testRange.endContainer );
+							var lastBlock = path.block || path.blockLimit;
+							this._.lastNode = lastBlock.getNextSourceNode( true );
+						}
+					}
+
+					// Probably the document end is reached, we need a marker node.
+					if ( !this._.lastNode )
+					{
+						this._.lastNode = this._.docEndMarker = range.document.createText( '' );
+						this._.lastNode.insertAfter( lastNode );
+					}
+
+					// Let's reuse this variable.
+					range = null;
+				}
+
+				this._.started = 1;
 			}
 
@@ -280,5 +285,5 @@
 
 						removePreviousBr = removeLastBr = true;
-					}
+				}
 				else if ( block.getName() != 'li' )
 				{
@@ -347,5 +352,5 @@
 			if ( !this._.nextNode )
 			{
-				this._.nextNode = ( isLast || block.equals( lastNode ) ) ? null :
+				this._.nextNode = ( isLast || block.equals( lastNode ) || !lastNode ) ? null :
 					getNextSourceNode( block, 1, lastNode );
 			}
