Index: /CKEditor/trunk/_source/core/dom/element.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/element.js	(revision 6368)
+++ /CKEditor/trunk/_source/core/dom/element.js	(revision 6369)
@@ -948,4 +948,7 @@
 		},
 
+		/**
+		 * @param {Boolean} [inlineOnly=true] Allow only inline elements to be merged.
+		 */
 		mergeSiblings : ( function()
 		{
@@ -987,9 +990,12 @@
 			}
 
-			return function()
-				{
-					// Merge empty links and anchors also. (#5567)
-					if ( !( CKEDITOR.dtd.$removeEmpty[ this.getName() ] || this.is( 'a' ) ) )
+			return function( inlineOnly )
+				{
+					if ( ! ( inlineOnly === false
+							|| CKEDITOR.dtd.$removeEmpty[ this.getName() ]
+							|| this.is( 'a' ) ) )	// Merge empty links and anchors also. (#5567)
+					{
 						return;
+					}
 
 					mergeElements( this, this.getNext(), true );
Index: /CKEditor/trunk/_source/core/dom/range.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/range.js	(revision 6368)
+++ /CKEditor/trunk/_source/core/dom/range.js	(revision 6369)
@@ -33,5 +33,5 @@
 	// contents.
 	// V2
-	var execContentsAction = function( range, action, docFrag )
+	var execContentsAction = function( range, action, docFrag, mergeThen )
 	{
 		range.optimizeBookmark();
@@ -248,5 +248,15 @@
 					endIndex--;
 
-				range.setStart( topEnd.getParent(), endIndex );
+				// Merge splitted parents.
+				if ( mergeThen )
+				{
+					var span = CKEDITOR.dom.element.createFromHtml( '<span ' +
+						'data-cke-bookmark="1" style="display:none">&nbsp;</span>', range.document );
+					span.insertAfter( topStart );
+					topStart.mergeSiblings( false );
+					range.moveToBookmark( { startNode : span } );
+				}
+				else
+					range.setStart( topEnd.getParent(), endIndex );
 			}
 
@@ -368,12 +378,12 @@
 		/**
 		 * Deletes the content nodes of the range permanently from the DOM tree.
+		 * @param {Boolean} [mergeThen] Merge any splitted elements result in DOM true due to partial selection.
 		 */
-		deleteContents : function()
+		deleteContents : function( mergeThen )
 		{
 			if ( this.collapsed )
 				return;
 
-			this.fixListRange();
-			execContentsAction( this, 0 );
+			execContentsAction( this, 0, null, mergeThen );
 		},
 
@@ -381,11 +391,12 @@
 		 *  The content nodes of the range are cloned and added to a document fragment,
 		 * meanwhile they're removed permanently from the DOM tree.
+		 * @param {Boolean} [mergeThen] Merge any splitted elements result in DOM true due to partial selection.
 		 */
-		extractContents : function()
+		extractContents : function( mergeThen )
 		{
 			var docFrag = new CKEDITOR.dom.documentFragment( this.document );
 
 			if ( !this.collapsed )
-				execContentsAction( this, 1, docFrag );
+				execContentsAction( this, 1, docFrag, mergeThen );
 
 			return docFrag;
@@ -1911,31 +1922,5 @@
 
 			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 );
-			};
-		})()
+		}
 	};
 })();
Index: /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js	(revision 6368)
+++ /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js	(revision 6369)
@@ -206,6 +206,6 @@
 				if ( !range.checkReadOnly() )
 				{
-					// Remove the original contents.
-					range.deleteContents();
+					// Remove the original contents, merge splitted nodes.
+					range.deleteContents( 1 );
 
 					clone = !i && element || element.clone( 1 );
