Index: /CKEditor/branches/features/paste/_source/core/htmlparser/fragment.js
===================================================================
--- /CKEditor/branches/features/paste/_source/core/htmlparser/fragment.js	(revision 4703)
+++ /CKEditor/branches/features/paste/_source/core/htmlparser/fragment.js	(revision 4704)
@@ -196,5 +196,5 @@
 					addPoint;   // New position to start adding nodes.
 
-				// Fixing malformed nested lists(#3828).
+				// Fixing malformed nested lists by moving it into a previous list item. (#3828)
 				if( tagName in listBlocks
 					&& currentName in listBlocks )
@@ -202,10 +202,10 @@
 					var children = currentNode.children,
 						lastChild = children[ children.length - 1 ];
-					// Move inner list into to previous list item if any.
-					if( lastChild && lastChild.name in listItems )
-						returnPoint = currentNode, addPoint = lastChild;
-					// Move inner list outside in the worst case.
-					else
-						addElement( currentNode, currentNode.parent );
+
+					// Establish the list item if it's not existed.
+					if ( !( lastChild && lastChild.name in listItems ) )
+						addElement( ( lastChild = new CKEDITOR.htmlParser.element( 'li' ) ), currentNode );
+
+					returnPoint = currentNode, addPoint = lastChild;
 				}
 				// If the element name is the same as the current element name,
Index: /CKEditor/branches/features/paste/_source/plugins/pastefromword/filter/default.js
===================================================================
--- /CKEditor/branches/features/paste/_source/plugins/pastefromword/filter/default.js	(revision 4703)
+++ /CKEditor/branches/features/paste/_source/plugins/pastefromword/filter/default.js	(revision 4704)
@@ -218,5 +218,7 @@
 								var values = value.split( ' ' );
 								value = values[ 3 ] || values[ 1 ] || values [ 0 ];
-								attrs[ 'cke:indent' ] = parseInt( value );
+								attrs[ 'cke:indent' ] =
+									// Indent margin unit by 36pt.
+									Math.floor( parseInt( value ) / 36 );
 							} ]
 						] )( attrs.style, element ) || '' ;
@@ -302,7 +304,10 @@
 							if( last.name in CKEDITOR.dtd.$list )
 							{
-								listItemChildren.length--;
 								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 );
 							}
 
@@ -559,8 +564,11 @@
 									listItemIndent = parseInt( listItemAttrs[ 'cke:indent' ] ) || 0;
 
+									console.log( listItemIndent );
+
 									// Ignore the 'list-style-type' attribute if it's matched with
 									// the list root element's default style type.
-									listItemAttrs.style = stylesFilter(
-										[ [ 'list-style-type', listType == 'ol'? 'decimal' : 'disc' ] ] )( listItemAttrs.style ) || '' ;
+									listItemAttrs.style && ( listItemAttrs.style = stylesFilter(
+										[ [ 'list-style-type', listType == 'ol'? 'decimal' : 'disc' ] ] )( listItemAttrs.style )
+										|| '' );
 
 									if ( !list )
