Index: /CKEditor/branches/features/pasting/_source/plugins/pastefromword/plugin.js
===================================================================
--- /CKEditor/branches/features/pasting/_source/plugins/pastefromword/plugin.js	(revision 4242)
+++ /CKEditor/branches/features/pasting/_source/plugins/pastefromword/plugin.js	(revision 4243)
@@ -247,6 +247,6 @@
 						 for ( var i = 0 ; i < rules.length ; i++ )
 							 rules[ i ] = rules[ i ].join( ':' );
-						 return rules.length ?
-						         ( rules.join( ';' ).replace( /\s+/g, '' ) + ';' )
+						return rules.length ?
+						         ( rules.join( ';' ) + ';' )
 						         // Remove attribute if there's no styles.
 								 : false;
@@ -277,5 +277,4 @@
 					$ : function( element )
 					{
-
 						var tagName = element.name || '';
 
@@ -328,4 +327,15 @@
 							else
 								delete element.name;
+						}
+						else if ( !tagName )
+						{
+							// Trim &nbsp; at the beginning of document for IE. 
+							if( CKEDITOR.env.ie )
+							{
+								var firstTextChild = element.firstTextChild();
+								if ( firstTextChild
+									 && CKEDITOR.tools.trim( firstTextChild.value ).match( /(?:&nbsp;)+/ ) )
+									element.children.splice( 0, 1 );
+							}
 						}
 						// Any dtd-valid element which could contain a list.
@@ -398,7 +408,18 @@
 
 						var attrs = element.attributes,
+							parent = element.parent,
 							children = element.children,
 							firstChild = children && children[ 0 ];
 
+						// Drop the single wrapper paragraph within table cell
+						// while preserve the styles.
+						if( /td|th/.test( parent.name )
+							&& parent.onlyChild() )
+						{
+							if( attrs && attrs.style )
+								parent.attributes.style += ( attrs.style + ';' );
+							delete element.name;
+							return;
+						}
 						// <cke:listbullet> been the first child of any paragraph
 						// indicate a list item.
@@ -456,5 +477,5 @@
 								return onlyChild;
 						}
-
+						
 						// Update the src attribute of image element with href.
 						var children = element.children,
@@ -499,4 +520,5 @@
 					[
 						[ /mso-/ ],
+						[ /-moz-/ ],
 						[ 'margin', /0(?:cm|in) 0(?:cm|in) 0pt/ ],
 						[ 'text-indent', '0cm' ],
@@ -507,5 +529,10 @@
 						ignoreFontFace ? [ 'font-family' ] : null,
 					] ),
-
+					'width' : function( element )
+					{
+						// Prefer width style over attribute on table cell.
+						if( element.name in { td : 1, th : 1 } )
+							return false;
+					},
 					'class' : falsyFilter,
 
@@ -546,13 +573,16 @@
 	}
 
-	CKEDITOR.htmlParser.element.prototype.onlyChild = function()
+	var fragmentPrototype = CKEDITOR.htmlParser.fragment.prototype,
+		elementPrototype = CKEDITOR.htmlParser.element.prototype;
+
+	fragmentPrototype.onlyChild = elementPrototype.onlyChild = function()
 	{
 		var children = this.children,
 			count = children.length,
-			firstChild = count && children[ 0 ];
+			firstChild = ( count == 1 ) && children[ 0 ];
 		return firstChild || null;
 	};
 
-	CKEDITOR.htmlParser.element.prototype.firstTextChild = function()
+	fragmentPrototype.firstTextChild = elementPrototype.firstTextChild = function()
 	{
 		var child;
