Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 4021)
+++ /CKEditor/trunk/CHANGES.html	(revision 4022)
@@ -219,4 +219,5 @@
 		<li><a href="http://dev.fckeditor.net/ticket/4145">#4145</a> : Fixed the on demand 
 			(&quot;basic&quot;) loading model of the editor.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4139">#4139</a> : Fixed list plugin regression of [3903].</li>
 	</ul>
 	<h3>
Index: /CKEditor/trunk/_source/plugins/list/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/list/plugin.js	(revision 4021)
+++ /CKEditor/trunk/_source/plugins/list/plugin.js	(revision 4022)
@@ -343,17 +343,20 @@
 		var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode );
 
-		// Compensate a <br> before the first node if the previous node of list is a non-blocks.(#3836)
-		var docFragment = newList.listNode, firstNode, previousNode;
-		if ( ( firstNode = docFragment.getFirst() )
-			 && !( firstNode.is && firstNode.isBlockBoundary() )
-			 && ( previousNode = groupObj.root.getPrevious( true ) )
-			 && !( previousNode.is && previousNode.isBlockBoundary( { br : 1 } ) ) )
-			editor.document.createElement( 'br' ).insertBefore( firstNode );
+		// Compensate <br> before/after the list node if the surrounds are non-blocks.(#3836)
+		var docFragment = newList.listNode, boundaryNode, siblingNode;
+		function compensateBrs( isStart )
+		{
+			if ( ( boundaryNode = docFragment[ isStart ? 'getFirst' : 'getLast' ]() )
+				 && !( boundaryNode.is && boundaryNode.isBlockBoundary() )
+				 && ( siblingNode = groupObj.root[ isStart ? 'getPrevious' : 'getNext' ]
+				      ( CKEDITOR.dom.walker.whitespaces( true ) ) )
+				 && !( siblingNode.is && siblingNode.isBlockBoundary( { br : 1 } ) ) )
+				editor.document.createElement( 'br' )[ isStart ? 'insertBefore' : 'insertAfter' ]( boundaryNode );
+		}
+		compensateBrs( true );
+		compensateBrs();
 
 		var rootParent = groupObj.root.getParent();
 		docFragment.replace( groupObj.root );
-		// The list content might be empty.(#3782)
-		if( !CKEDITOR.env.ie && rootParent )
-			rootParent.appendBogus();
 	}
 
