Index: /CKEditor/trunk/_source/plugins/dialog/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/dialog/plugin.js	(revision 3645)
+++ /CKEditor/trunk/_source/plugins/dialog/plugin.js	(revision 3646)
@@ -2442,5 +2442,8 @@
 		{
 			editor.openDialog( this.dialogName );
-		}
+		},
+		// Dialog commands just open a dialog ui, thus require no undo logic,
+		// undo support should dedicate to specific dialog implementation.
+		canUndo: false
 	};
 
Index: /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js	(revision 3645)
+++ /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js	(revision 3646)
@@ -55,4 +55,5 @@
 		{
 			this.focus();
+			this.fire( 'saveSnapshot' );
 
 			var element = evt.data,
@@ -107,4 +108,12 @@
 			if ( selIsLocked )
 				this.getSelection().lock();
+
+			// Save snaps after the whole execution completed.
+			// This's a workaround for make DOM modification's happened after
+			// 'insertElement' to be included either, e.g. Form-based dialogs' 'commitContents'
+			// call.
+			CKEDITOR.tools.setTimeout( function(){
+				this.fire( 'saveSnapshot' );
+			}, 0, this );
 		}
 	}
