Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 6605)
+++ /CKEditor/trunk/CHANGES.html	(revision 6606)
@@ -92,4 +92,5 @@
 		<li><a href="http://dev.ckeditor.com/ticket/5757">#5757</a> : [IE6] Text wasn't wrapping in the accessibility instructions dialog.</li>
 		<li><a href="http://dev.ckeditor.com/changeset/6604">[6604]</a> : Xml.js and Ajax.js are available as plugins ('xml' and 'ajax').</li>
+		<li><a href="http://dev.ckeditor.com/changeset/7304">7304</a> : MS-Word cleanup function is not always invoked when click on "Paste From Word" button.</li>
 		<li>Updated the following language files:<ul>
 			<li><a href="http://dev.ckeditor.com/ticket/7124">#7124</a> : Czech;</li>
Index: /CKEditor/trunk/_source/plugins/clipboard/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/clipboard/plugin.js	(revision 6605)
+++ /CKEditor/trunk/_source/plugins/clipboard/plugin.js	(revision 6606)
@@ -328,4 +328,6 @@
 							editor.insertText( data[ 'text' ] );
 
+						setTimeout( function () { editor.fire( 'afterPaste' ) }, 0 );
+
 					}, null, null, 1000 );
 
@@ -394,5 +396,5 @@
 								// The very last guard to make sure the
 								// paste has successfully happened.
-								if ( !data )
+								if ( !CKEDITOR.tools.trim( data.toLowerCase().replace( /<span[^>]+data-cke-bookmark[^<]*?<\/span>/g,'' ) ) )
 									return;
 
Index: /CKEditor/trunk/_source/plugins/pastefromword/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/pastefromword/plugin.js	(revision 6605)
+++ /CKEditor/trunk/_source/plugins/pastefromword/plugin.js	(revision 6606)
@@ -13,7 +13,8 @@
 			// pasting.
 			var forceFromWord = 0;
-			var resetFromWord = function()
+			var resetFromWord = function( evt )
 				{
-					setTimeout( function() { forceFromWord = 0; }, 0 );
+					evt && evt.removeListener();
+					forceFromWord && setTimeout( function() { forceFromWord = 0; }, 0 );
 				};
 
@@ -30,12 +31,17 @@
 					if ( editor.execCommand( 'paste' ) === false )
 					{
-						editor.on( 'dialogHide', function ( evt )
-							{
-								evt.removeListener();
-								resetFromWord();
-							});
+						editor.on( 'dialogShow', function ( evt )
+						{
+							evt.removeListener();
+							evt.data.on( 'cancel', resetFromWord );
+						});
+
+						editor.on( 'dialogHide', function( evt )
+						{
+							evt.data.removeListener( 'cancel', resetFromWord );
+						} );
 					}
-					else
-						resetFromWord();
+
+					editor.on( 'afterPaste', resetFromWord );
 				}
 			});
