Index: /FCKeditor/trunk/editor/_source/commandclasses/fckindentcommands.js
===================================================================
--- /FCKeditor/trunk/editor/_source/commandclasses/fckindentcommands.js	(revision 869)
+++ /FCKeditor/trunk/editor/_source/commandclasses/fckindentcommands.js	(revision 870)
@@ -272,5 +272,5 @@
 
 		// Clean up the markers.
-		FCKDomTools.ClearElementMarkers( markerObj ) ;
+		FCKDomTools.ClearAllMarkers( markerObj ) ;
 	}
 } ;
Index: /FCKeditor/trunk/editor/_source/commandclasses/fcklistcommands.js
===================================================================
--- /FCKeditor/trunk/editor/_source/commandclasses/fcklistcommands.js	(revision 869)
+++ /FCKeditor/trunk/editor/_source/commandclasses/fcklistcommands.js	(revision 870)
@@ -156,7 +156,7 @@
 
 		// For all new lists created, merge adjacent, same type lists.
-		while ( listsCreated.length > 0 )
-		{
-			var listNode = listsCreated.shift() ;
+		for ( var i = 0 ; i < listsCreated.length ; i++ )
+		{
+			var listNode = listsCreated[i] ;
 			var stopFlag = false ;
 			var currentNode = listNode ;
@@ -164,5 +164,5 @@
 			{
 				currentNode = currentNode.nextSibling ;
-				if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0  )
+				if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )
 					continue ;
 				stopFlag = true ;
@@ -175,8 +175,25 @@
 					listNode.appendChild( currentNode.removeChild( currentNode.firstChild ) ) ;
 			}
+
+			stopFlag = false ;
+			currentNode = listNode ;
+			while ( ! stopFlag )
+			{
+				currentNode = currentNode.previousSibling ;
+				if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )
+					continue ;
+				stopFlag = true ;
+			}
+			if ( currentNode && currentNode.nodeName.IEquals( this.TagName ) )
+			{
+				currentNode.parentNode.removeChild( currentNode ) ;
+				while ( currentNode.lastChild )
+					listNode.insertBefore( currentNode.removeChild( currentNode.lastChild ),
+						       listNode.firstChild ) ;
+			}
 		}
 
 		// Clean up, restore selection and update toolbar button states.
-		FCKDomTools.ClearElementMarkers( markerObj ) ;
+		FCKDomTools.ClearAllMarkers( markerObj ) ;
 		range.MoveToBookmark( bookmark ) ;
 		range.Select() ;
@@ -208,5 +225,5 @@
 			listArray[listIndex].parent = fakeParent ;
 		}
-		var newList = FCKDomTools.ArrayToList( listArray ) ;
+		var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;
 		if ( newList.listNode.lastChild.nodeName.IEquals( this.TagName) )
 			listsCreated.push( newList.listNode.lastChild ) ;
@@ -316,5 +333,5 @@
 		}
 
-		var newList = FCKDomTools.ArrayToList( listArray ) ;
+		var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;
 		// If groupObj.root is the last element in its parent, or its nextSibling is a <br>, then we should 
 		// not add a <br> after the final item. So, check for the cases and trim the <br>.
Index: /FCKeditor/trunk/editor/_source/internals/fckdomtools.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fckdomtools.js	(revision 869)
+++ /FCKeditor/trunk/editor/_source/internals/fckdomtools.js	(revision 870)
@@ -585,24 +585,30 @@
 	},
 
-	SetElementMarker : function ( markObj, element, attrName, value)
+	SetElementMarker : function ( markerObj, element, attrName, value)
 	{
 		var id = String( parseInt( Math.random() * 0xfffffff, 10 ) ) ;
 		element._FCKMarkerId = id ;
 		element[attrName] = value ;
-		if ( ! markObj[id] )
-			markObj[id] = { 'element' : element, 'markers' : {} } ;
-		markObj[id]['markers'][attrName] = value ;
-	},
-
-	ClearElementMarkers : function( markObj )
-	{
-		for ( var i in markObj )
-		{
-			var element = markObj[i]['element'] ;
-			this.ClearElementJSProperty( element, '_FCKMarkerId' ) ;
-			for ( var j in markObj[i]['markers'] )
-				this.ClearElementJSProperty( element, j ) ;
-			delete markObj[i] ;
-		}
+		if ( ! markerObj[id] )
+			markerObj[id] = { 'element' : element, 'markers' : {} } ;
+		markerObj[id]['markers'][attrName] = value ;
+	},
+
+	ClearElementMarkers : function( markerObj, element, clearMarkerObj )
+	{
+		var id = element._FCKMarkerId ;
+		if ( ! id )
+			return ;
+		this.ClearElementJSProperty( element, '_FCKMarkerId' ) ;
+		for ( var j in markerObj[id]['markers'] )
+			this.ClearElementJSProperty( element, j ) ;
+		if ( clearMarkerObj )
+			delete markerObj[id] ;
+	},
+
+	ClearAllMarkers : function( markerObj )
+	{
+		for ( var i in markerObj )
+			this.ClearElementMarkers( markerObj, markerObj[i]['element'], true ) ;
 	},
 
@@ -652,5 +658,5 @@
 
 	// Convert our internal representation of a list back to a DOM forest.
-	ArrayToList : function( listArray, baseIndex )
+	ArrayToList : function( listArray, markerObj, baseIndex )
 	{
 		if ( baseIndex == undefined )
@@ -682,5 +688,5 @@
 			else if ( item.indent == Math.max( indentLevel, 0 ) + 1 )
 			{
-				var listData = this.ArrayToList( listArray, currentIndex ) ;
+				var listData = this.ArrayToList( listArray, null, currentIndex ) ;
 				currentListItem.appendChild( listData.listNode ) ;
 				currentIndex = listData.nextIndex ;
@@ -715,4 +721,17 @@
 			}
 		}
+
+		// Clear marker attributes for the new list tree made of cloned nodes, if any.
+		if ( markerObj )
+		{
+			var currentNode = retval.firstChild ;
+			while ( currentNode )
+			{
+				if ( currentNode.nodeType == 1 )
+					this.ClearElementMarkers( markerObj, currentNode ) ;
+				currentNode = this.GetNextSourceNode( currentNode ) ;
+			}
+		}
+
 		return { 'listNode' : retval, 'nextIndex' : currentIndex } ;
 	},
