Index: /CKEditor/trunk/_source/plugins/find/dialogs/find.js
===================================================================
--- /CKEditor/trunk/_source/plugins/find/dialogs/find.js	(revision 3677)
+++ /CKEditor/trunk/_source/plugins/find/dialogs/find.js	(revision 3678)
@@ -506,9 +506,22 @@
 						&& !this.matchRange._.isReplaced )
 				{
+					// Turn off highlight for a while when saving snapshots.
+					this.matchRange.removeHighlight();
 					var domRange = this.matchRange.toDomRange();
 					var text = editor.document.createText( newString );
+
+					// Save undo snaps before and after the replacement.
+					var selection = editor.getSelection();
+					selection.selectRanges( [ domRange ] );
+					editor.fire( 'saveSnapshot' );
+
 					domRange.deleteContents();
 					domRange.insertNode( text );
+
+					selection.selectRanges( [ domRange ] );
+					editor.fire( 'saveSnapshot' );
+
 					this.matchRange.updateFromDomRange( domRange );
+					this.matchRange.highlight();
 					this.matchRange._.isReplaced = true;
 					this.replaceCounter++;
@@ -649,5 +662,4 @@
 									{
 										var dialog = this.getDialog();
-										editor.fire( 'saveSnapshot' );
 										if ( !finder.replace( dialog,
 													dialog.getValueOf( 'replace', 'txtFindReplace' ),
@@ -686,5 +698,4 @@
 										var replaceNums;
 
-										editor.fire( 'saveSnapshot' );
 										finder.replaceCounter = 0;
 										if ( ( replaceNums = finder.replace( dialog,
