Index: /CKEditor/trunk/_source/plugins/sourcearea/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/sourcearea/plugin.js	(revision 3598)
+++ /CKEditor/trunk/_source/plugins/sourcearea/plugin.js	(revision 3599)
@@ -187,7 +187,11 @@
 			exec : function( editor )
 			{
+				if ( editor.mode == 'wysiwyg' )
+					editor.fire( 'saveSnapshot' );
 				editor.getCommand( 'source' ).setState( CKEDITOR.TRISTATE_DISABLED );
 				editor.setMode( editor.mode == 'source' ? 'wysiwyg' : 'source' );
-			}
+			},
+
+			canUndo : false
 		}
 	}
Index: /CKEditor/trunk/_source/plugins/undo/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/undo/plugin.js	(revision 3598)
+++ /CKEditor/trunk/_source/plugins/undo/plugin.js	(revision 3599)
@@ -86,7 +86,7 @@
 								});
 
-							// Being this the first call, let's get an undo snapshot.
-							if ( undoManager.index == -1 )
-								undoManager.save();
+							// Always save an undo snapshot - the previous mode might have changed
+							// editor contents.
+							undoManager.save( true );
 						}
 					}
@@ -285,4 +285,13 @@
 			if ( image.bookmarks )
 				this.editor.getSelection().selectBookmarks( image.bookmarks );
+			else if ( CKEDITOR.env.ie )
+			{
+				// IE BUG: If I don't set the selection to *somewhere* after setting
+				// document contents, then IE would create an empty paragraph at the bottom
+				// the next time the document is modified.
+				$range = this.editor.document.getBody().$.createTextRange();
+				$range.collapse( true );
+				$range.select();
+			}
 
 			this.index = image.index;
