Index: /CKEditor/branches/features/contenteditable/_source/plugins/list/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/list/plugin.js	(revision 5595)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/list/plugin.js	(revision 5596)
@@ -434,10 +434,10 @@
 			// or multiple lists have to be cancelled.
 			var listGroups = [],
-				database = {};
-
-			while ( ranges.length > 0 )
-			{
-				range = ranges.pop();
-
+				database = {},
+				rangeIterator = ranges.createIterator(),
+				index = 0;
+
+			while ( ( range = rangeIterator.getNextRange() ) && ++index )
+			{
 				var boundaryNodes = range.getBoundaryNodes(),
 					startNode = boundaryNodes.startNode,
@@ -476,5 +476,5 @@
 							// should belong to a different group of paragraphs before
 							// the list. (Bug #1309)
-							blockLimit.removeCustomData( 'list_group_object' );
+							blockLimit.removeCustomData( 'list_group_object' + index );
 
 							var groupObj = element.getCustomData( 'list_group_object' );
@@ -495,12 +495,12 @@
 						continue;
 
-					// No list ancestor? Group by block limit.
+					// No list ancestor? Group by block limit, but don't mix contents from different ranges.
 					var root = blockLimit;
-					if ( root.getCustomData( 'list_group_object' ) )
-						root.getCustomData( 'list_group_object' ).contents.push( block );
+					if ( root.getCustomData( 'list_group_object_' + index ) )
+						root.getCustomData( 'list_group_object_' + index ).contents.push( block );
 					else
 					{
 						groupObj = { root : root, contents : [ block ] };
-						CKEDITOR.dom.element.setMarker( database, root, 'list_group_object', groupObj );
+						CKEDITOR.dom.element.setMarker( database, root, 'list_group_object_' + index, groupObj );
 						listGroups.push( groupObj );
 					}
