Index: /CKEditor/branches/features/pasting/_source/plugins/pastefromword/plugin.js
===================================================================
--- /CKEditor/branches/features/pasting/_source/plugins/pastefromword/plugin.js	(revision 4243)
+++ /CKEditor/branches/features/pasting/_source/plugins/pastefromword/plugin.js	(revision 4244)
@@ -176,22 +176,38 @@
 		{
 			// Create a <cke:listbullet> which indicate an list item type.
-			createListBulletMarker : function ( type )
+			createListBulletMarker : function ( bulletStyle )
 			{
 				var marker = new CKEDITOR.htmlParser.element( 'cke:listbullet' ),
-					// We took the decimal as default because we
-					// use 'ol' as root list.
-					defaultListType = 'decimal';
-
-				// TODO: Support more list type mapping rules.
-				if( !isNaN( type[ 1 ] ) && type[ 2 ] == '.' )
-					type = 'decimal';
-				else if ( type[ 1 ].search( /[l·]/ ) != -1 )
-					type = 'disc';
+					listType,
+					defaultBulletStyle = 'decimal';
+
+				// TODO: Support more list style type from MS-Word.
+				if( bulletStyle[ 2 ].search( /[.)]/ ) != -1 )
+				{
+					if( !isNaN( bulletStyle[ 1 ] ) )
+						bulletStyle = 'decimal';
+					else if( bulletStyle[ 1 ].search( /[a-z]/ ) != -1 )
+						bulletStyle = 'lower-latin';
+					else if( bulletStyle[ 1 ].search( /[A-Z]/ ) != -1 )
+						bulletStyle = 'upper-latin';
+				}
+				else if ( bulletStyle[ 1 ].search( /[l·•]/ ) != -1 )
+					bulletStyle = 'disc';
+				else if ( bulletStyle[ 1 ].search( /[oØ]/ ) != -1 )
+					bulletStyle = 'circle';
+				else if ( bulletStyle[ 1 ].search( /[n◆]/ ) != -1 )
+					bulletStyle = 'square';
 				else
-					type = defaultListType;
+					bulletStyle = defaultBulletStyle;
+
+				listType = bulletStyle == 'decimal' ? 'ol'
+						   : bulletStyle == 'disc' ? 'ul' : '';
 
 				// Represent list type as CSS style.
-				if( type != defaultListType )
-					marker.attributes = { style : 'list-style-type:' + type };
+				marker.attributes =
+				{
+					'cke:listtype' : listType,
+					'style' : 'list-style-type:' + bulletStyle
+				};
 
 				return marker;
@@ -252,4 +268,16 @@
 								 : false;
 					 };
+				},
+
+				/**
+				 * A filter which remove cke-namespaced-attribute on
+				 * all none-cke-namespaced elements. 
+				 * @param value
+				 * @param element
+				 */
+				bogusAttrFilter : function( value, element )
+				{
+					if( element.name.indexOf( 'cke:' ) == -1 )
+						return false;
 				}
 
@@ -260,5 +288,7 @@
 			var falsyFilter = this.filters.falsyFilter,
 				stylesFilter = this.filters.stylesFilter,
+				bogusAttrFilter = this.filters.bogusAttrFilter,
 				createListBulletMarker = this.utils.createListBulletMarker,
+				listDtdParents = CKEDITOR.dtd.parentOf( 'ol' ),
 				config = editor.config,
 				ignoreFontFace = config.pasteFromWordIgnoreFontFace,
@@ -339,7 +369,8 @@
 							}
 						}
+
 						// Any dtd-valid element which could contain a list.
-						else if( !tagName && element.children
-								 || tagName in CKEDITOR.dtd.parentOf( 'ol' ) )
+						if( !tagName && element.children
+								 || tagName in listDtdParents )
 						{
 							element.filterChildren();
@@ -347,4 +378,6 @@
 							var children = element.children, child,
 								listItem,   // The current processing cke:li element.
+								listItemAttrs,
+								listType,   // Determine the root type of the list.
 								listItemIndent, // Indent attribute represent the level of it.
 								lastListItem, // The previous one just been added to the list.
@@ -359,15 +392,20 @@
 								{
 									child.name = 'li';
-
 									listItem = child;
-
+									listItemAttrs = listItem.attributes;
+									listType = listItem.attributes[ 'cke:listtype' ];
 									// The indent attribute might not present.
-									listItemIndent = listItem.attributes && listItem.attributes.indent || 0;
-									if ( listItemIndent )
-										delete listItem.attributes.indent;
+									listItemIndent = listItemAttrs[ 'cke:indent' ] || 0;
+
+									// Ignore the 'list-style-type' attribute if it's matched with
+									// the list root element type.
+									if( ( !parentList && listType )
+										|| listType == ( parentList && parentList.name ) )
+										listItemAttrs.style = stylesFilter(
+										[ [ 'list-style-type' ] ] )( listItemAttrs.style ) || '' ;
 
 									if ( !list )
 									{
-										parentList = list = new CKEDITOR.htmlParser.element( 'ol' );
+										parentList = list = new CKEDITOR.htmlParser.element( listType || 'ol' );
 										list.add( listItem );
 										children[ i ] = list;
@@ -400,4 +438,7 @@
 							}
 
+							// Filter childrens again for cleaning up
+							// the list attributes.
+							element.filterChildren();
 						}
 					},
@@ -433,5 +474,5 @@
 								{
 									// Resolve indent level from 'margin-left' style.
-									attrs.indent = parseInt( value );
+									attrs[ 'cke:indent' ] = parseInt( value );
 								} ]
 							] )( attrs.style, element ) || '' ;
@@ -439,7 +480,7 @@
 							// Inherit list-type-style from bullet. 
 							var listBulletAttrs = firstChild.attributes,
-								listBulletStyle = listBulletAttrs && listBulletAttrs.style;
-							if( listBulletStyle )
-								attrs.style = listBulletStyle;
+								listBulletStyle = listBulletAttrs.style;
+							attrs.style += ( listBulletStyle + ';' );
+							CKEDITOR.tools.extend( attrs, listBulletAttrs );
 							children.splice( 0, 1 );
 						}
@@ -515,4 +556,6 @@
 				attributes :
 				{
+					'cke:listtype' : bogusAttrFilter,
+					'cke:indent' : bogusAttrFilter,
 					// Remove mso-xxx styles.
 					// Remove margin styles.
