Index: /CKEditor/trunk/_source/plugins/domiterator/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/domiterator/plugin.js	(revision 4690)
+++ /CKEditor/trunk/_source/plugins/domiterator/plugin.js	(revision 4691)
@@ -13,5 +13,5 @@
 {
 
-	var iterator = function( range )
+	function iterator( range )
 	{
 		if ( arguments.length < 1 )
@@ -26,7 +26,8 @@
 
 		this._ || ( this._ = {} );
-	},
-		beginWhitespaceRegex = /^[\r\n\t ]+$/;
-
+	};
+
+	var beginWhitespaceRegex = /^[\r\n\t ]+$/,
+		isBookmark = CKEDITOR.dom.walker.bookmark();
 
 	iterator.prototype = {
@@ -212,12 +213,10 @@
 				if ( ( closeRange || isLast ) && range )
 				{
-					var boundaryNodes = range.getBoundaryNodes(),
-						startPath = new CKEDITOR.dom.elementPath( range.startContainer ),
-						endPath = new CKEDITOR.dom.elementPath( range.endContainer );
-
-					// Drop the range if it only contains bookmark nodes.(#4087,#4450)
-					if ( boundaryNodes.startNode.getParent().equals( startPath.blockLimit )
-						 && boundaryNodes.startNode.is && boundaryNodes.startNode.getAttribute( '_fck_bookmark' )
-						 && boundaryNodes.endNode.is && boundaryNodes.startNode.getAttribute( '_fck_bookmark' ) )
+					var boundaryNodes = range.getBoundaryNodes();
+
+					// Drop the range if it only contains bookmark nodes, and is
+					// not because of the original collapsed range. (#4087,#4450)
+					if ( !this.range.collapsed
+						 && isBookmark( boundaryNodes.startNode ) && isBookmark( boundaryNodes.endNode ) )
 					{
 						range = null;
