Index: /CKEditor/trunk/_source/plugins/undo/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/undo/plugin.js	(revision 5485)
+++ /CKEditor/trunk/_source/plugins/undo/plugin.js	(revision 5486)
@@ -139,7 +139,14 @@
 	});
 
-	// Gets a snapshot image which represent the current document status.
-	function Image( editor )
+	CKEDITOR.plugins.undo = {};
+
+	/**
+	 * Undo snapshot which represents the current document status.
+	 * @name CKEDITOR.plugins.undo.Image
+	 * @param editor The editor instance on which the image is created.
+	 */
+	var Image = CKEDITOR.plugins.undo.Image = function( editor )
 	{
+		this.editor = editor;
 		var contents	= editor.getSnapshot(),
 			selection	= contents && editor.getSelection();
@@ -147,8 +154,8 @@
 		// In IE, we need to remove the expando attributes.
 		CKEDITOR.env.ie && contents && ( contents = contents.replace( /\s+_cke_expando=".*?"/g, '' ) );
-
+		
 		this.contents	= contents;
 		this.bookmarks	= selection && selection.createBookmarks2( true );
-	}
+	};
 
 	// Attributes that browser may changing them when setting via innerHTML.
@@ -159,6 +166,12 @@
 		equals : function( otherImage, contentOnly )
 		{
+			
 			var thisContents = this.contents,
-				otherContents = otherImage.contents;
+				otherContents = otherImage.contents,
+				// Registered filters makes Image to respond correct on service markup of SCAYT and any other plugins 
+				// The editor object is absent in context of Image by default, 
+				// so for prototyping we use hardcoded editor name "editor1"
+				thisEqualsFilters = CKEDITOR.instances.editor1._.imageEqualsFilters,
+				i,err;
 
 			// For IE6/7 : Comparing only the protected attribute values but not the original ones.(#4522)
@@ -168,5 +181,16 @@
 				otherContents = otherContents.replace( protectedAttrs, '' );
 			}
-
+			
+			
+			// Run custom filters
+			if (thisEqualsFilters && thisEqualsFilters.length)
+				for ( i in thisEqualsFilters )
+					try{
+						filteredContents = thisEqualsFilters[i].apply(null,[thisContents,otherContents]);
+						thisContents = filteredContents[0];
+						otherContents = filteredContents[1];
+					}catch (err){}
+			
+					
 			if ( thisContents != otherContents )
 				return false;
