Index: _source/core/dom/walker.js
===================================================================
--- _source/core/dom/walker.js	(revision 6241)
+++ _source/core/dom/walker.js	(revision )
@@ -421,6 +421,14 @@
 		};
 	};
 
+	CKEDITOR.dom.walker.nodeType = function( type, isReject )
+	{
+		return function( node )
+		{
+			return !! ( isReject ^ ( node.type == type ) );
+		};
+	};
+
 	var tailNbspRegex = /^[\t\r\n ]*(?:&nbsp;|\xa0)$/,
 		isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( 1 ),
 		isNotBookmark = CKEDITOR.dom.walker.bookmark( 0, 1 ),
Index: _source/core/dom/range.js
===================================================================
--- _source/core/dom/range.js	(revision 6329)
+++ _source/core/dom/range.js	(revision )
@@ -373,6 +373,7 @@
 			if ( this.collapsed )
 				return;
 
+			this.fixListRange();
 			execContentsAction( this, 0 );
 		},
 
@@ -1909,8 +1910,34 @@
 				return container ;
 
 			return container.getChild( this.endOffset - 1 ) || container ;
+		},
+
+		// Fix list selection range where entire range is selected from the inner side.
+		// <ul><li>[...]</li></ul> =>	[<ul><li>...</li></ul>]
+		fixListRange : (function()
+		{
+			function moveListBoundary( fixEnd )
+			{
+				var listItem, listRoot;
+				if ( ( listItem = this[ fixEnd ? 'endContainer' : 'startContainer' ].getAscendant( 'li', 1 ) )
+						&& this.checkBoundaryOfElement( listItem, fixEnd ? CKEDITOR.END : CKEDITOR.START )
+						&& ( listRoot = listItem.getParent() )
+						&& ( listItem.equals( listRoot[ fixEnd ? 'getLast' : 'getFirst' ]( CKEDITOR.dom.walker.nodeType( CKEDITOR.NODE_ELEMENT ) ) ) )
+						// Make the fix only when both sides are in same situation.
+						&& ( fixEnd || moveListBoundary.call( this, 1 ) ) )
+				{
+					this[ fixEnd ? 'setEndAt' : 'setStartAt' ]( listRoot, fixEnd ?
+						CKEDITOR.POSITION_AFTER_END : CKEDITOR.POSITION_BEFORE_START );
+					return true;
-		}
+				}
+			}
+
+			return function()
+			{
+				moveListBoundary.call( this );
-	};
+			};
+		})()
+	};
 })();
 
 CKEDITOR.POSITION_AFTER_START	= 1;	// <element>^contents</element>		"^text"
