Index: /CKEditor/branches/features/readonly/_source/plugins/editingblock/plugin.js
===================================================================
--- /CKEditor/branches/features/readonly/_source/plugins/editingblock/plugin.js	(revision 6751)
+++ /CKEditor/branches/features/readonly/_source/plugins/editingblock/plugin.js	(revision 6752)
@@ -114,9 +114,4 @@
 				});
 
-			// Force reload the mode to refresh all command states.
-			editor.on( 'readOnly', function() {
-				this.setMode( this.mode || this.config.startupMode, 1 );
-			});
-
 			editor.on( 'destroy', function ()
 			{
@@ -152,10 +147,11 @@
 	/**
 	 * Sets the current editing mode in this editor instance.
-	 * @param {String} mode A registered mode name.
+	 * @param {String} [mode] A registered mode name. If not defined, the
+	 * 		current mode is simply unloaded.
 	 * @example
 	 * // Switch to "source" view.
 	 * CKEDITOR.instances.editor1.setMode( 'source' );
 	 */
-	CKEDITOR.editor.prototype.setMode = function( mode, forceReload )
+	CKEDITOR.editor.prototype.setMode = function( mode )
 	{
 		this.fire( 'beforeSetMode', { newMode : mode } );
@@ -168,5 +164,5 @@
 		if ( this.mode )
 		{
-			if ( !forceReload && mode == this.mode )
+			if ( mode == this.mode )
 				return;
 
@@ -180,4 +176,10 @@
 
 		holderElement.setHtml( '' );
+
+		if ( !mode )
+		{
+			this.setData( data );
+			return;
+		}
 
 		// Load required mode.
Index: /CKEditor/branches/features/readonly/_source/plugins/sourcearea/plugin.js
===================================================================
--- /CKEditor/branches/features/readonly/_source/plugins/sourcearea/plugin.js	(revision 6751)
+++ /CKEditor/branches/features/readonly/_source/plugins/sourcearea/plugin.js	(revision 6752)
@@ -42,5 +42,5 @@
 							textarea.addClass( 'cke_enable_context_menu' );
 
-							editor.readOnly && textarea.setAttribute( 'disabled', true );
+							editor.readOnly && textarea.setAttribute( 'readonly', 'readonly' );
 
 							var styles =
@@ -148,4 +148,15 @@
 						}
 					});
+			});
+
+		editor.on( 'readOnly', function()
+			{
+				if ( editor.mode == 'source' )
+				{
+					if ( editor.readOnly )
+						editor.textarea.setAttribute( 'readonly', 'readonly' );
+					else
+						editor.textarea.removeAttribute( 'readonly' );
+				}
 			});
 
Index: /CKEditor/branches/features/readonly/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/branches/features/readonly/_source/plugins/wysiwygarea/plugin.js	(revision 6751)
+++ /CKEditor/branches/features/readonly/_source/plugins/wysiwygarea/plugin.js	(revision 6752)
@@ -1141,4 +1141,14 @@
 				});
 
+			editor.on( 'readOnly', function()
+				{
+					if ( editor.mode == 'wysiwyg' )
+					{
+						// Simply reload the wysiwyg area.
+						editor.setMode();
+						editor.setMode( 'wysiwyg' );
+					}
+				});
+
 			// IE>=8 stricts mode doesn't have 'contentEditable' in effect
 			// on element unless it has layout. (#5562)
