Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 7496)
+++ /CKEditor/trunk/CHANGES.html	(revision 7497)
@@ -48,4 +48,5 @@
 		<li><a href="http://dev.ckeditor.com/ticket/9016">#9016</a> : Applied the "presentation" role on the iframe element in dialog file field markup.</li>
 		<li><a href="http://dev.ckeditor.com/ticket/8949">#8949</a> : Image Properties does not show in context menu when the image is wrapped in a div with the width set.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/9008">#9008</a> : Fixed list items order reversed when merging two lists.</li>
 	</ul>
 	<h3>
Index: /CKEditor/trunk/_source/plugins/list/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/list/plugin.js	(revision 7496)
+++ /CKEditor/trunk/_source/plugins/list/plugin.js	(revision 7497)
@@ -498,9 +498,10 @@
 
 	var elementType = CKEDITOR.dom.walker.nodeType( CKEDITOR.NODE_ELEMENT );
-	// Merge list items with direction preserved. (#7448)
-	function mergeListItems( from, into, refNode, toHead )
+
+	// Merge child nodes with direction preserved. (#7448)
+	function mergeChildren( from, into, refNode, forward )
 	{
 		var child, itemDir;
-		while ( ( child = from.getFirst( elementType ) ) )
+		while ( ( child = from[ forward ? 'getLast' : 'getFirst' ]( elementType ) ) )
 		{
 			if ( ( itemDir = child.getDirection( 1 ) ) !== into.getDirection( 1 ) )
@@ -510,6 +511,6 @@
 
 			refNode ?
-				child[ toHead ? 'insertBefore' : 'insertAfter' ]( refNode ) :
-				into.append( child, toHead  );
+				child[ forward ? 'insertBefore' : 'insertAfter' ]( refNode ) :
+				into.append( child, forward  );
 		}
 	}
@@ -663,12 +664,10 @@
 				( mergeSibling = function( rtl )
 				{
-
-					var sibling = listNode[ rtl ?
-						'getPrevious' : 'getNext' ]( CKEDITOR.dom.walker.whitespaces( true ) );
+					var sibling = listNode[ rtl ? 'getPrevious' : 'getNext' ]( nonEmpty );
 					if ( sibling && sibling.getName &&
 						 sibling.getName() == listCommand.type )
 					{
 						// Move children order by merge direction.(#3820)
-						mergeListItems( listNode, sibling, null, !rtl );
+						mergeChildren( listNode, sibling, null, !rtl );
 
 						listNode.remove();
@@ -799,5 +798,5 @@
 				if ( currentLi.contains( nextLi ) )
 				{
-					mergeListItems( sublist, nextLi.getParent(), nextLi );
+					mergeChildren( sublist, nextLi.getParent(), nextLi );
 					sublist.remove();
 				}
