Index: /CKEditor/trunk/_source/plugins/pastefromword/filter/default.js
===================================================================
--- /CKEditor/trunk/_source/plugins/pastefromword/filter/default.js	(revision 6976)
+++ /CKEditor/trunk/_source/plugins/pastefromword/filter/default.js	(revision 6977)
@@ -280,6 +280,9 @@
 											indent = Number( val[ 1 ].match( /\d+/ ) );
 
-										listId !== previousListId && ( attrs[ 'cke:reset' ] = 1 );
-										previousListId = listId;
+										if ( indent == 1 )
+										{
+											listId !== previousListId && ( attrs[ 'cke:reset' ] = 1 );
+											previousListId = listId;
+										}
 										attrs[ 'cke:indent' ] = indent;
 									} ]
@@ -358,18 +361,10 @@
 				// <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 )
-				{
+				flattenList : function( element, level )
+				{
+					level = typeof level == 'number' ? level : 1;
+
 					var	attrs = element.attributes,
-						parent = element.parent;
-
-					var listStyleType,
-						indentLevel = 1;
-
-					// Resolve how many level nested.
-					while ( parent )
-					{
-						parent.attributes && parent.attributes[ 'cke:list' ] && indentLevel++;
-						parent = parent.parent;
-					}
+						listStyleType;
 
 					// All list items are of the same type.
@@ -379,4 +374,7 @@
 							listStyleType = 'lower-alpha';
 							break;
+						case '1' :
+							listStyleType = 'decimal';
+							break;
 						// TODO: Support more list style type from MS-Word.
 					}
@@ -388,47 +386,57 @@
 					{
 						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 )
-							{
-								children.splice( i + 1, 0, last );
-								last.parent = element;
-
-								// Remove the parent list item if it's just a holder.
-								if ( !--listItemChildren.length )
-									children.splice( i, 1 );
-							}
-
-							child.name = 'cke:li';
-
-							// Inherit numbering from list root on the first list item.
-							attrs.start && !i && ( attributes.value = attrs.start );
-
-							plugin.filters.stylesFilter(
-								[
-								    [ 'tab-stops', null, function( val )
-									{
-										var margin = val.split( ' ' )[ 1 ].match( cssLengthRelativeUnit );
-										margin && ( previousListItemMargin = parseInt( plugin.utils.convertToPx( margin[ 0 ] ), 10 ) );
-									} ],
-									[ 'mso-list', null, function( val )
-									{
-										val = val.split( ' ' );
-										var listId = Number( val[ 0 ].match( /\d+/ ) );
-										listId !== previousListId && ( attributes[ 'cke:reset' ] = 1 );
-										previousListId = listId;
-									} ]
-								] )( attributes.style );
-
-							attributes[ 'cke:indent' ] = indentLevel;
-							attributes[ 'cke:listtype' ] = element.name;
-							attributes[ 'cke:list-style-type' ] = listStyleType;
+						if ( child.name == 'li' )
+						{
+							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 )
+								{
+									children.splice( i + 1, 0, last );
+									last.parent = element;
+
+									// Remove the parent list item if it's just a holder.
+									if ( !--listItemChildren.length )
+										children.splice( i, 1 );
+
+									// Flatten sub list.
+									arguments.callee.apply( this, [ last, level + 1 ] );
+									var index = CKEDITOR.tools.indexOf( children, last );
+									// Absorb sub list children.
+									children = children.splice( 0, index ).concat( last.children ).concat( children.splice( index + 1 ) );
+									element.children = children;
+								}
+
+								child.name = 'cke:li';
+
+								// Inherit numbering from list root on the first list item.
+								attrs.start && !i && ( attributes.value = attrs.start );
+
+								plugin.filters.stylesFilter(
+									[
+										[ 'tab-stops', null, function( val )
+										{
+											var margin = val.split( ' ' )[ 1 ].match( cssLengthRelativeUnit );
+											margin && ( previousListItemMargin = parseInt( plugin.utils.convertToPx( margin[ 0 ] ), 10 ) );
+										} ],
+										( level == 1 ? [ 'mso-list', null, function( val )
+										{
+											val = val.split( ' ' );
+											var listId = Number( val[ 0 ].match( /\d+/ ) );
+											listId !== previousListId && ( attributes[ 'cke:reset' ] = 1 );
+											previousListId = listId;
+										 } ] : null )
+									] )( attributes.style );
+
+								attributes[ 'cke:indent' ] = level;
+								attributes[ 'cke:listtype' ] = element.name;
+								attributes[ 'cke:list-style-type' ] = listStyleType;
+							}
 						}
 					}
