Index: /CKEditor/trunk/_source/plugins/domiterator/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/domiterator/plugin.js	(revision 3537)
+++ /CKEditor/trunk/_source/plugins/domiterator/plugin.js	(revision 3538)
@@ -12,4 +12,19 @@
 (function()
 {
+
+	function isBookmarkNode( node )
+	{
+		return ( node && node.getName
+					&& node.getName() == 'span'
+					&& node.hasAttribute( '_fck_bookmark' ) )
+				||
+				( node && !node.getName && isBookmarkNode( node.getParent()) );
+	}
+
+	function ignoreBookmarkEvaluator( node )
+	{
+		return !isBookmarkNode( node );
+	}
+
 
 	/**
@@ -26,7 +41,5 @@
 				startFromSibling, null, endNode );
 		}
-		while( next && next.getName
-					&& next.getName() == 'span'
-					&& next.getAttribute( '_fck_bookmark' ) )
+		while( isBookmarkNode( next ) )
 		return next;
 	}
@@ -67,14 +80,19 @@
 				range.enlarge( this.forceBrBreak ? CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS : CKEDITOR.ENLARGE_BLOCK_CONTENTS );
 
-				var boundary = range.getBoundaryNodes();
-				this._.nextNode = boundary.startNode;
-				this._.lastNode = boundary.endNode.getNextSourceNode( true );
+				var walker = new CKEDITOR.dom.walker( range );
+				walker.evaluator = ignoreBookmarkEvaluator;
+				this._.nextNode = walker.next();
+
+				// TODO: It's better to have walker.reset() used here.
+				walker = new CKEDITOR.dom.walker( range );
+				walker.evaluator = ignoreBookmarkEvaluator;
+				var lastNode = walker.previous();
+				this._.lastNode = getNextSourceNode( lastNode, null, true );
 				// Probably the document end is reached, we need a marker node.
 				if ( !this._.lastNode )
 				{
 						this._.lastNode = range.document.createText( '' );
-						this._.lastNode.insertAfter(  boundary.endNode );
-				}
-
+						this._.lastNode.insertAfter( lastNode );
+				}
 				// Let's reuse this variable.
 				range = null;
