Index: /CKEditor/trunk/_source/plugins/list/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/list/plugin.js	(revision 3604)
+++ /CKEditor/trunk/_source/plugins/list/plugin.js	(revision 3605)
@@ -477,35 +477,16 @@
 			{
 				listNode = listsCreated[i];
-				var stopFlag = false,
-					currentNode = listNode;
-
-				while ( !stopFlag )
-				{
-					currentNode = currentNode.getNext();
-					if ( currentNode && currentNode.type == CKEDITOR.NODE_TEXT && emptyTextRegex.test( currentNode.getText() ) )
-						continue;
-					stopFlag = true;
-				}
-
-				if ( currentNode && currentNode.getName() == this.type )
-				{
-					currentNode.remove();
-					currentNode.moveChildren( listNode );
-				}
-
-				stopFlag = false;
-				currentNode = listNode;
-				while ( !stopFlag )
-				{
-					currentNode = currentNode.getNext();
-					if ( currentNode && currentNode.type == CKEDITOR.NODE_TEXT && emptyTextRegex.test( currentNode.getText() ) )
-						continue;
-					stopFlag = true;
-				}
-				if ( currentNode && currentNode.getName() == this.type  )
-				{
-					currentNode.remove();
-					currentNode.moveChildren( listNode, true );
-				}
+				var mergeSibling, listCommand = this;
+				( mergeSibling = function( rtl ){
+
+					var sibling = listNode[ rtl ? 'getPrevious' : 'getNext' ].call( listNode, true );
+					if ( sibling && sibling.getName &&
+					     sibling.getName() == listCommand.type )
+					{
+						sibling.remove();
+						sibling.moveChildren( listNode );
+					}
+				} )();
+				mergeSibling( true );
 			}
 
