Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 4029)
+++ /CKEditor/trunk/CHANGES.html	(revision 4030)
@@ -221,4 +221,5 @@
 		<li><a href="http://dev.fckeditor.net/ticket/4139">#4139</a> : Fixed list plugin regression of [3903].</li>
 		<li><a href="http://dev.fckeditor.net/ticket/4147">#4147</a> : Unify style text normalization logic when comparing styles.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4150">#4150</a> : Fixed enlarge list result incorrect at the inner boundary of block.</li>
 	</ul>
 	<h3>
Index: /CKEditor/trunk/_source/core/dom/range.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/range.js	(revision 4029)
+++ /CKEditor/trunk/_source/core/dom/range.js	(revision 4030)
@@ -130,5 +130,5 @@
 			// For Extract and Clone, we must clone this level.
 			if ( clone && !levelStartNode.equals( startNode ) )		// action = 0 = Delete
-				levelClone = clone.append( levelStartNode.clone( false, action == 1 ) );
+				levelClone = clone.append( levelStartNode.clone() );
 
 			currentNode = levelStartNode.getNext();
@@ -174,5 +174,5 @@
 			// For Extract and Clone, we must clone this level.
 			if ( action > 0 && !levelStartNode.equals( endNode ) )		// action = 0 = Delete
-				levelClone = clone.append( levelStartNode.clone( false, action == 1 ) );
+				levelClone = clone.append( levelStartNode.clone() );
 
 			// The processing of siblings may have already been done by the parent.
@@ -1175,17 +1175,16 @@
 
 
-					if ( ( enlargeable = walker.lastBackward() ) )
-					{
-						// It's the body which stop the enlaring if no block boundary found.
-						blockBoundary = blockBoundary || body;
-
-						// Start the range at different position by comparing
-						// the document position of it with 'enlargeable' node.
-						this.setStartAt(
-								blockBoundary,
-								blockBoundary.contains( enlargeable ) ?
-									CKEDITOR.POSITION_AFTER_START :
-									CKEDITOR.POSITION_AFTER_END );
-					}
+					enlargeable = walker.lastBackward()
+					// It's the body which stop the enlarging if no block boundary found.
+					blockBoundary = blockBoundary || body;
+
+					// Start the range at different position by comparing
+					// the document position of it with 'enlargeable' node.
+					this.setStartAt(
+							blockBoundary,
+							!blockBoundary.is( 'br' ) &&
+							( !enlargeable || blockBoundary.contains( enlargeable ) ) ?
+								CKEDITOR.POSITION_AFTER_START :
+								CKEDITOR.POSITION_AFTER_END );
 
 					// Enlarging the end boundary.
@@ -1201,17 +1200,16 @@
 					// End the range right before the block boundary node.
 
-					if ( ( enlargeable = walker.lastForward() ) )
-					{
-						// It's the body which stop the enlaring if no block boundary found.
-						blockBoundary = blockBoundary || body;
-
-						// Start the range at different position by comparing
-						// the document position of it with 'enlargeable' node.
-						this.setEndAt(
-								blockBoundary,
-								blockBoundary.contains( enlargeable ) ?
-									CKEDITOR.POSITION_BEFORE_END :
-									CKEDITOR.POSITION_BEFORE_START );
-					}
+					enlargeable = walker.lastForward()
+					// It's the body which stop the enlarging if no block boundary found.
+					blockBoundary = blockBoundary || body;
+
+					// Start the range at different position by comparing
+					// the document position of it with 'enlargeable' node.
+					this.setEndAt(
+							blockBoundary,
+							!blockBoundary.is( 'br' ) &&
+							( !enlargeable || blockBoundary.contains( enlargeable ) ) ?
+								CKEDITOR.POSITION_BEFORE_END :
+								CKEDITOR.POSITION_BEFORE_START );
 					// We must include the <br> at the end of range if there's
 					// one and we're expanding list item contents
Index: /CKEditor/trunk/_source/tests/core/dom/range.html
===================================================================
--- /CKEditor/trunk/_source/tests/core/dom/range.html	(revision 4029)
+++ /CKEditor/trunk/_source/tests/core/dom/range.html	(revision 4030)
@@ -1058,4 +1058,18 @@
 			assert.areSame( 0, range.startOffset, 'range.startOffset' );
 			assert.isTrue( range.collapsed, 'range.collapsed' );
+		},
+
+		/**
+		 * Test enlarge list when there's no nodes between
+		 * range start and the block boundary.
+		 */
+		test_enlarge_block6 : function()
+		{
+			var range = getRange( 'S11', null );
+			range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );
+
+			assert.areSame( document.getElementById( '_EnlargeP17' ),
+				range.startContainer.$, 'range.startContainer' );
+			assert.areSame( 0, range.startOffset, 'range.startOffset' );
 		},
 
@@ -2385,4 +2399,5 @@
 		<p id="_EnlargeP15">Test <span id="S9"></span>List<br/ >Item Enlarge</p>
 		<p id="_EnlargeP16">Test <strong>Block<span id="S10"></span></strong><br /><br />Enlarge</p>
+		<p id="_EnlargeP17"><span><span id="S11"></span>Test Block Enlarge<span id="E11"></span></span></p>
 		<p id="_trim_ct">Test trim</p>
 	</div>
