Index: /CKEditor/branches/features/pasting/_source/plugins/pastefromword/plugin.js
===================================================================
--- /CKEditor/branches/features/pasting/_source/plugins/pastefromword/plugin.js	(revision 4601)
+++ /CKEditor/branches/features/pasting/_source/plugins/pastefromword/plugin.js	(revision 4602)
@@ -324,4 +324,56 @@
 		filters :
 		{
+				// Transform a normal list into flat list items only presentation.
+				// E.g. <ul><li>level1<ol><li>level2</li></ol></li> =>
+				// <cke:li cke:listtype="ul" cke:indent="1">level1</cke:li>
+				// <cke:li cke:listtype="ol" cke:indent="2">level2</cke:li>
+				flattenList : function( element )
+				{
+					var	parent = element.parent;
+
+					// Resolve how many level nested.
+					var indentLevel = 1;
+					while( parent )
+					{
+						parent.attributes && parent.attributes[ 'cke:list'] && indentLevel++;
+						parent = parent.parent;
+					}
+
+					var children = element.children,
+						child;
+
+					for ( var i = 0; i < children.length; i++ )
+					{
+						child = children[ i ];
+						var attributes = child.attributes;
+
+						if( child.name in CKEDITOR.dtd.$listItem )
+						{
+							var listItemChildren = child.children,
+								count = listItemChildren.length,
+								last = listItemChildren[ count - 1 ];
+
+							// Move out nested list.
+							if( last.name in CKEDITOR.dtd.$list )
+							{
+								listItemChildren.length--;
+								children.splice( i + 1, 0, last );
+								last.parent = element;
+							}
+
+							child.name = 'cke:li';
+							attributes[ 'cke:indent' ] = indentLevel;
+							// Assume only items in default list style type are
+							// represented.
+							attributes[ 'cke:listtype' ] = element.name;
+						}
+					}
+
+
+					delete element.name;
+					// We're loosing tag name here, signalize this element as a list.
+					attributes[ 'cke:list' ] = 1;
+				},
+
 				/**
 				 * A simple filter which always rejecting.
@@ -462,4 +514,5 @@
 				bogusAttrFilter = filters.bogusAttrFilter,
 				createListBulletMarker = this.utils.createListBulletMarker,
+				flattenList = filters.flattenList,
 				isListBulletIndicator = this.utils.isListBulletIndicator,
 				containsNothingButSpaces = this.utils.isContainingOnlySpaces,
@@ -704,5 +757,10 @@
 					},
 
-					// Deprecates <font> in favor of stylish <span>.
+					// MS-Word sometimes present list as a mixing of normal list
+					// and pseudo-list, normalize the previous ones into pseudo form.   
+					'ol' : flattenList,
+					'ul' : flattenList,
+					'dl' : flattenList,
+
 					'font' : function( element )
 					{
