Index: _source/plugins/scayt/plugin.js
===================================================================
--- _source/plugins/scayt/plugin.js	(revision 2574)
+++ _source/plugins/scayt/plugin.js	(working copy)
@@ -61,12 +61,6 @@
 
 				};
 
-			oParams.onBeforeChange = function()
-			{
-				if ( plugin.getScayt( editor ) && !editor.checkDirty() )
-					setTimeout( function(){ editor.resetDirty(); }, 0 );
-			};
-
 			var scayt_custom_params = window.scayt_custom_params;
 			if ( typeof scayt_custom_params == 'object' )
 			{
@@ -128,6 +122,10 @@
 					var scayt_instance = plugin.getScayt( editor );
 					if ( scayt_instance )
 					{
+						// Clear previousValue from SCAYT mark-up set by resetDirty() called by OnSelectionChange	
+						if(!editor.checkDirty())
+							editor._.previousValue = scayt_instance.reset(editor._.previousValue);
+
 						plugin.setPaused( editor, !scayt_instance.disabled );
 						// store a control id for restore a specific scayt control settings
 						plugin.setControlId( editor, scayt_instance.id );
@@ -272,6 +270,31 @@
 			};
 		});
 
+		var editorCheckDirty = CKEDITOR.editor.prototype;
+		
+		// Override editor.checkDirty method avoid CK checkDirty functionality to fix SCAYT issues with incorrect checkDirty behavior.
+		editorCheckDirty.checkDirty = CKEDITOR.tools.override(editorCheckDirty.checkDirty, function( org )
+			{
+				return function()
+				{
+					var retval = null,
+					scayt_instance = plugin.getScayt( editor );
+					 
+					if ( scayt_instance && plugin.isScaytReady( editor ) )
+					{
+							var currentData = scayt_instance.reset(editor.getSnapshot());//.replace(/&nbsp;/g, " ");
+							var prevData = scayt_instance.reset(editor._.previousValue);//.replace(/&nbsp;/g, " ");
+							retval = ( editor.mayBeDirty && currentData !== prevData );
+					}
+					else
+					{
+						retval = org.apply(this);
+					}
+					
+					return retval;
+				}
+			});
+
 		if ( editor.document )
 			createInstance();
 	};
