Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 6191)
+++ /CKEditor/trunk/CHANGES.html	(revision 6192)
@@ -35,34 +35,4 @@
 		CKEditor Changelog
 	</h1>
-	<h3>
-			CKEditor 3.5 (SVN)</h3>
-	<p>
-			New features:</p>
-	<ul>
-		<li><a href="http://dev.ckeditor.com/ticket/4090">#4090</a> : Full Adobe AIR support.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/5084">#5084</a> : Dialogs are now resizable with a grip in the bottom of the dialog.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/5755">#5755</a> : Introduced the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.dialog_buttonsOrder">dialog_buttonsOrder</a> setting, making it possible to control the buttons order.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/4648">#4648</a> : Added the new Iframe plugin.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/6010">#6010</a> : The "automatic" option of the font/background color panel now represents the real color.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/5654">#5654</a> : Added the new placeholder plugin.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/6334">#6334</a> : CKEditor now uses <a href="http://www.w3.org/TR/2010/WD-html5-20101019/elements.html#embedding-custom-non-visible-data-with-the-data-attributes">HTML5's data-* attributes</a> for its internal attributes.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/6103">#6103</a> : It's now possible to control the styling of inline read-only elements with the disableReadonlyStyling setting. It's also possible to avoid inline-styling any element by setting its data-cke-nostyle attribute to "1".</li>
-		<li><a href="http://dev.ckeditor.com/ticket/5404">#5404</a> : "fillEmptyBlocks" configuration option of v2 is now available.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/5367">#5367</a> : New "CKEDITOR.editor::insertText" method (check api.html sample page for usages) is now provided to insert plain text into editor.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/5367">#5915</a> : Hiding dialog tabs.</li>
-	</ul>
-	<p>
-			Fixed issues:</p>
-	<ul>
-		<li><a href="http://dev.ckeditor.com/ticket/4821">#4821</a> : Icons in the toolbar were distorted with IE and zoom != 100%.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/5587">#5587</a> : Visual improvements in dialogs.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/4652">#4652</a> : Config for disable editor context menu.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/5599">#5599</a> : Labels for special characters need to be resourced.</li>
-		<li><a href="http:/dev.ckeditor.com/ticket/6419">#6419</a> : IE: List creation by merging problem.</li>
-		<li><a href="http:/dev.ckeditor.com/ticket/6502">#6502</a> : Remove IE6 image preloading.</li>
-		<li>Updated the following language files:<ul>
-			<li>Hebrew;</li>
-		</ul></li>
-	</ul>
 	<h3>
 			CKEditor 3.4.3 (SVN)</h3>
Index: /CKEditor/trunk/_samples/api.html
===================================================================
--- /CKEditor/trunk/_samples/api.html	(revision 6191)
+++ /CKEditor/trunk/_samples/api.html	(revision 6192)
@@ -33,5 +33,5 @@
 	// Get the editor instance that we want to interact with.
 	var oEditor = CKEDITOR.instances.editor1;
-	var value = document.getElementById( 'htmlArea' ).value;
+	var value = document.getElementById( 'plainArea' ).value;
 
 	// Check the active editing mode.
@@ -45,25 +45,9 @@
 }
 
-function InsertText()
-{
-	// Get the editor instance that we want to interact with.
-	var oEditor = CKEDITOR.instances.editor1;
-	var value = document.getElementById( 'txtArea' ).value;
-
-	// Check the active editing mode.
-	if ( oEditor.mode == 'wysiwyg' )
-	{
-		// Insert as plain text.
-		oEditor.insertText( value );
-	}
-	else
-		alert( 'You must be on WYSIWYG mode!' );
-}
-
 function SetContents()
 {
 	// Get the editor instance that we want to interact with.
 	var oEditor = CKEDITOR.instances.editor1;
-	var value = document.getElementById( 'htmlArea' ).value;
+	var value = document.getElementById( 'plainArea' ).value;
 
 	// Set the editor contents (replace the actual one).
@@ -148,12 +132,6 @@
 			<input onclick="GetContents();" type="button" value="Get Editor Contents (XHTML)" />
 			<br />
-			<textarea cols="80" id="htmlArea" rows="3">&lt;h2&gt;Test&lt;/h2&gt;&lt;p&gt;This is some &lt;a href="/Test1.html"&gt;sample&lt;/a&gt; HTML&lt;/p&gt;</textarea>
+			<textarea cols="80" id="plainArea" rows="3">&lt;h2&gt;Test&lt;/h2&gt;&lt;p&gt;This is some &lt;a href="/Test1.html"&gt;sample&lt;/a&gt; HTML&lt;/p&gt;</textarea>
 			<br />
-			<br />
-			<input onclick="InsertText();" type="button" value="Insert Text" />
-			<br />
-			<textarea cols="80" id="txtArea" rows="3">   First line with some leading whitespaces.
-
-Second line of text preceding by two line-breaks.</textarea>
 			<br />
 			<input onclick="ExecuteCommand('bold');" type="button" value="Execute &quot;bold&quot; Command" />
Index: /CKEditor/trunk/_samples/index.html
===================================================================
--- /CKEditor/trunk/_samples/index.html	(revision 6191)
+++ /CKEditor/trunk/_samples/index.html	(revision 6192)
@@ -44,5 +44,4 @@
 		<li><a href="output_for_flash.html">Output for Flash</a></li>
 		<li><a href="autogrow.html">AutoGrow plugin</a></li>
-		<li><a href="placeholder.html">Placeholder plugin</a></li>
 	</ul>
 	<div id="footer">
Index: Editor/trunk/_samples/placeholder.html
===================================================================
--- /CKEditor/trunk/_samples/placeholder.html	(revision 6191)
+++ 	(revision )
@@ -1,66 +1,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!--
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
--->
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-	<title>Placeholder Plugin - CKEditor Sample</title>
-	<meta content="text/html; charset=utf-8" http-equiv="content-type" />
-	<!-- CKReleaser %REMOVE_LINE%
-	<script type="text/javascript" src="../ckeditor.js"></script>
-	CKReleaser %REMOVE_START% -->
-	<script type="text/javascript" src="../ckeditor_source.js"></script>
-	<!-- CKReleaser %REMOVE_END% -->
-	<script src="sample.js" type="text/javascript"></script>
-	<link href="sample.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-	<h1>
-		CKEditor Sample
-	</h1>
-	<!-- This <div> holds alert messages to be display in the sample page. -->
-	<div id="alerts">
-		<noscript>
-			<p>
-				<strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript
-				support, like yours, you should still see the contents (HTML data) and you should
-				be able to edit it normally, without a rich editor interface.
-			</p>
-		</noscript>
-	</div>
-	<form action="sample_posteddata.php" method="post">
-		<p>
-			In this sample the Placeholder plugin is available.<br />
-			It replaces text in the format of <code>[[text]]</code> to uneditable sections, and lets the user edit them and create new ones using a dialog.</p>
-		<p>
-			<label for="editor1">
-				With default configuration:</label><br />
-			<textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is a [[sample placeholder]]. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;. &lt;/p&gt;</textarea>
-			<script type="text/javascript">
-			//<![CDATA[
-
-				CKEDITOR.replace( 'editor1', {
-					extraPlugins : 'placeholder',
-					toolbar : [ [ 'Source', 'CreatePlaceholder' ] ]
-				});
-
-			//]]>
-			</script>
-		</p>
-		<p>
-			<input type="submit" value="Submit" />
-		</p>
-	</form>
-	<div id="footer">
-		<hr />
-		<p>
-			CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
-		</p>
-		<p id="copy">
-			Copyright &copy; 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico
-			Knabben. All rights reserved.
-		</p>
-	</div>
-</body>
-</html>
Index: /CKEditor/trunk/_source/core/ckeditor_base.js
===================================================================
--- /CKEditor/trunk/_source/core/ckeditor_base.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/ckeditor_base.js	(revision 6192)
@@ -13,5 +13,5 @@
 // ckeditor_source.js and ckeditor_basic_source.js files.
 
-// if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'%VERSION%',rev:'%REV%',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
+// if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'%VERSION%',rev:'%REV%',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
 
 // #### Raw code
@@ -127,5 +127,5 @@
 				// In IE (only) the script.src string is the raw valued entered in the
 				// HTML. Other browsers return the full resolved URL instead.
-				if ( path.indexOf(':/') == -1 )
+				if ( path.indexOf('://') == -1 )
 				{
 					// Absolute path.
@@ -169,5 +169,5 @@
 			{
 				// If this is not a full or absolute path.
-				if ( resource.indexOf(':/') == -1 && resource.indexOf( '/' ) !== 0 )
+				if ( resource.indexOf('://') == -1 && resource.indexOf( '/' ) !== 0 )
 					resource = this.basePath + resource;
 
Index: /CKEditor/trunk/_source/core/config.js
===================================================================
--- /CKEditor/trunk/_source/core/config.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/config.js	(revision 6192)
@@ -293,5 +293,4 @@
 		'horizontalrule,' +
 		'htmldataprocessor,' +
-		'iframe,' +
 		'image,' +
 		'indent,' +
Index: /CKEditor/trunk/_source/core/dom/document.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/document.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/dom/document.js	(revision 6192)
@@ -166,7 +166,4 @@
 		{
 			var head = this.$.getElementsByTagName( 'head' )[0];
-			if ( !head )
-				head = this.getDocumentElement().append( new CKEDITOR.dom.element( 'head' ), true );
-			else
 			head = new CKEDITOR.dom.element( head );
 
@@ -224,28 +221,4 @@
 					return win;
 				})();
-		},
-
-		/**
-		 * Defines the document contents through document.write. Note that the
-		 * previous document contents will be lost (cleaned).
-		 * @since 3.5
-		 * @param {String} html The HTML defining the document contents.
-		 * @example
-		 * document.write(
-		 *     '&lt;html&gt;' +
-		 *         '&lt;head&gt;&lt;title&gt;Sample Doc&lt;/title&gt;&lt;/head&gt;' +
-		 *         '&lt;body&gt;Document contents created by code&lt;/body&gt;' +
-		 *      '&lt;/html&gt;' );
-		 */
-		write : function( html )
-		{
-			// Don't leave any history log in IE. (#5657)
-			this.$.open( 'text/html', 'replace' );
-
-			// Support for custom document.domain in IE.
-			CKEDITOR.env.isCustomDomain() &&  ( this.$.domain = document.domain );
-
-			this.$.write( html );
-			this.$.close();
 		}
 	});
Index: /CKEditor/trunk/_source/core/dom/domobject.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/domobject.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/dom/domobject.js	(revision 6192)
@@ -168,7 +168,4 @@
 	 * Sets a data slot value for this object. These values are shared by all
 	 * instances pointing to that same DOM object.
-	 * <strong>Note:</strong> The created data slot is only guarantied to be available on this unique dom node,
-	 * thus any wish to continue access it from other element clones (either created by clone node or from innerHtml)
-	 * will fail, for such usage, please use {@link CKEDITOR.dom.element::setAttribute} instead.
 	 * @name CKEDITOR.dom.domObject.prototype.setCustomData
 	 * @function
@@ -204,5 +201,5 @@
 	domObjectProto.getCustomData = function( key )
 	{
-		var expandoNumber = this.$[ 'data-cke-expando' ],
+		var expandoNumber = this.$._cke_expando,
 			dataSlot = expandoNumber && customData[ expandoNumber ];
 
@@ -215,5 +212,5 @@
 	domObjectProto.removeCustomData = function( key )
 	{
-		var expandoNumber = this.$[ 'data-cke-expando' ],
+		var expandoNumber = this.$._cke_expando,
 			dataSlot = expandoNumber && customData[ expandoNumber ],
 			retval = dataSlot && dataSlot[ key ];
@@ -237,5 +234,5 @@
 		this.removeAllListeners();
 
-		var expandoNumber = this.$[ 'data-cke-expando' ];
+		var expandoNumber = this.$._cke_expando;
 		expandoNumber && delete customData[ expandoNumber ];
 	};
@@ -250,5 +247,5 @@
 	domObjectProto.getUniqueId = function()
 	{
-		return this.$[ 'data-cke-expando' ] || ( this.$[ 'data-cke-expando' ] = CKEDITOR.tools.getNextNumber() );
+		return this.$._cke_expando || ( this.$._cke_expando = CKEDITOR.tools.getNextNumber() );
 	};
 
Index: /CKEditor/trunk/_source/core/dom/element.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/element.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/dom/element.js	(revision 6192)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -308,14 +308,10 @@
 		/**
 		 * Moves the selection focus to this element.
-		 * @param  {Boolean} defer Whether to asynchronously defer the
-		 * 		execution by 100 ms.
 		 * @example
 		 * var element = CKEDITOR.document.getById( 'myTextarea' );
 		 * <b>element.focus()</b>;
 		 */
-		focus : ( function()
-		{
-			function exec()
-			{
+		focus : function()
+		{
 			// IE throws error if the element is not visible.
 			try
@@ -325,14 +321,5 @@
 			catch (e)
 			{}
-			}
-
-			return function( defer )
-			{
-				if ( defer )
-					CKEDITOR.tools.setTimeout( exec, 100, this );
-				else
-					exec.call( this );
-			};
-		})(),
+		},
 
 		/**
@@ -739,8 +726,5 @@
 				var attribute = thisAttribs[ i ];
 
-				if ( attribute.nodeName == '_moz_dirty' )
-					continue;
-
-				if ( ( !CKEDITOR.env.ie || ( attribute.specified && attribute.nodeName != 'data-cke-expando' ) ) && attribute.nodeValue != otherElement.getAttribute( attribute.nodeName ) )
+				if ( ( !CKEDITOR.env.ie || ( attribute.specified && attribute.nodeName != '_cke_expando' ) ) && attribute.nodeValue != otherElement.getAttribute( attribute.nodeName ) )
 					return false;
 			}
@@ -753,5 +737,5 @@
 				{
 					attribute = otherAttribs[ i ];
-					if ( attribute.specified && attribute.nodeName != 'data-cke-expando'
+					if ( attribute.specified && attribute.nodeName != '_cke_expando'
 							&& attribute.nodeValue != this.getAttribute( attribute.nodeName ) )
 						return false;
@@ -803,5 +787,5 @@
 				var child = children.getItem( i );
 
-				if ( child.type == CKEDITOR.NODE_ELEMENT && child.data( 'cke-bookmark' ) )
+				if ( child.type == CKEDITOR.NODE_ELEMENT && child.getAttribute( '_cke_bookmark' ) )
 					continue;
 
@@ -848,5 +832,5 @@
 
 							// Attributes to be ignored.
-							case 'data-cke-expando' :
+							case '_cke_expando' :
 								continue;
 
@@ -868,5 +852,5 @@
 
 					// The _moz_dirty attribute might get into the element after pasting (#5455)
-					var execludeAttrs = { 'data-cke-expando' : 1, _moz_dirty : 1 };
+					var execludeAttrs = { _cke_expando : 1, _moz_dirty : 1 };
 
 					return attrsNum > 0 &&
@@ -931,5 +915,5 @@
 					var pendingNodes = [];
 
-					while ( sibling.data( 'cke-bookmark' )
+					while ( sibling.getAttribute( '_cke_bookmark' )
 						|| sibling.isEmptyInlineRemoveable() )
 					{
@@ -1497,5 +1481,5 @@
 			// Replace the node.
 			this.getParent() && this.$.parentNode.replaceChild( newNode.$, this.$ );
-			newNode.$[ 'data-cke-expando' ] = this.$[ 'data-cke-expando' ];
+			newNode.$._cke_expando = this.$._cke_expando;
 			this.$ = newNode.$;
 		},
@@ -1539,4 +1523,34 @@
 
 		/**
+		 *  Update the element's size with box model awareness.
+		 * @name CKEDITOR.dom.element.setSize
+		 * @param {String} type [width|height]
+		 * @param {Number} size The length unit in px.
+		 * @param isBorderBox Apply the {@param width} and {@param height} based on border box model.
+		 */
+		setSize : ( function()
+		{
+			var sides = {
+				width : [ "border-left-width", "border-right-width","padding-left", "padding-right" ],
+				height : [ "border-top-width", "border-bottom-width", "padding-top",  "padding-bottom" ]
+			};
+
+			return function( type, size, isBorderBox )
+				{
+					if ( typeof size == 'number' )
+					{
+						if ( isBorderBox && !( CKEDITOR.env.ie && CKEDITOR.env.quirks ) )
+						{
+							var	adjustment = 0;
+							for ( var i = 0, len = sides[ type ].length; i < len; i++ )
+								adjustment += parseInt( this.getComputedStyle( sides [ type ][ i ] ) || 0, 10 ) || 0;
+							size -= adjustment;
+						}
+						this.setStyle( type, size + 'px' );
+					}
+				};
+		})(),
+
+		/**
 		 * Gets element's direction. Supports both CSS 'direction' prop and 'dir' attr.
 		 */
@@ -1544,72 +1558,4 @@
 		{
 			return useComputed ? this.getComputedStyle( 'direction' ) : this.getStyle( 'direction' ) || this.getAttribute( 'dir' );
-		},
-
-		/**
-		 * Gets, sets and removes custom data to be stored as HTML5 data-* attributes.
-		 * @name CKEDITOR.dom.element.data
-		 * @param {String} name The name of the attribute, execluding the 'data-' part.
-		 * @param {String} [value] The value to set. If set to false, the attribute will be removed.
-		 */
-		data : function ( name, value )
-		{
-			name = 'data-' + name;
-			if ( value === undefined )
-				return this.getAttribute( name );
-			else if ( value === false )
-				this.removeAttribute( name );
-			else
-				this.setAttribute( name, value );
 		}
 	});
-
-( function()
-{
-	var sides = {
-		width : [ "border-left-width", "border-right-width","padding-left", "padding-right" ],
-		height : [ "border-top-width", "border-bottom-width", "padding-top",  "padding-bottom" ]
-	};
-
-	function marginAndPaddingSize( type )
-	{
-		var adjustment = 0;
-		for ( var i = 0, len = sides[ type ].length; i < len; i++ )
-			adjustment += parseInt( this.getComputedStyle( sides [ type ][ i ] ) || 0, 10 ) || 0;
-		return adjustment;
-	}
-
-	/**
-	 * Update the element's size with box model awareness.
-	 * @name CKEDITOR.dom.element.setSize
-	 * @param {String} type [width|height]
-	 * @param {Number} size The length unit in px.
-	 * @param isBorderBox Apply the {@param width} and {@param height} based on border box model.
-	 */
-	CKEDITOR.dom.element.prototype.setSize = function( type, size, isBorderBox )
-		{
-			if ( typeof size == 'number' )
-			{
-				if ( isBorderBox && !( CKEDITOR.env.ie && CKEDITOR.env.quirks ) )
-					size -= marginAndPaddingSize.call( this, type );
-
-				this.setStyle( type, size + 'px' );
-			}
-		};
-
-	/**
-	 * Get the element's size, possibly with box model awareness.
-	 * @name CKEDITOR.dom.element.getSize
-	 * @param {String} type [width|height]
-	 * @param {Boolean} contentSize Get the {@param width} or {@param height} based on border box model.
-	 */
-	CKEDITOR.dom.element.prototype.getSize = function( type, contentSize )
-		{
-			var size = Math.max( this.$[ 'offset' + CKEDITOR.tools.capitalize( type )  ],
-				this.$[ 'client' + CKEDITOR.tools.capitalize( type )  ] ) || 0;
-
-			if ( contentSize )
-				size -= marginAndPaddingSize.call( this, type );
-
-			return size;
-		};
-})();
Index: /CKEditor/trunk/_source/core/dom/node.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/node.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/dom/node.js	(revision 6192)
@@ -108,23 +108,22 @@
 			var $clone = this.$.cloneNode( includeChildren );
 
-			var removeIds = function( node )
-			{
-				if ( node.nodeType != CKEDITOR.NODE_ELEMENT )
-					return;
-
-				if ( !cloneId )
-					node.removeAttribute( 'id', false );
-				node.removeAttribute( 'data-cke-expando', false );
-
-				if ( includeChildren )
-				{
+			if ( !cloneId )
+			{
+				var removeIds = function( node )
+				{
+					if ( node.nodeType != CKEDITOR.NODE_ELEMENT )
+						return;
+
+					node.removeAttribute( 'id', false ) ;
+					node.removeAttribute( '_cke_expando', false ) ;
+
 					var childs = node.childNodes;
-					for ( var i=0; i < childs.length; i++ )
+					for ( var i=0 ; i < childs.length ; i++ )
 						removeIds( childs[ i ] );
-				}
-			};
-
-			// The "id" attribute should never be cloned to avoid duplication.
-			removeIds( $clone );
+				};
+
+				// The "id" attribute should never be cloned to avoid duplication.
+				removeIds( $clone );
+			}
 
 			return new CKEDITOR.dom.node( $clone );
@@ -245,5 +244,11 @@
 		getDocument : function()
 		{
-			return new CKEDITOR.dom.document( this.$.ownerDocument || this.$.parentNode.ownerDocument );
+			var document = new CKEDITOR.dom.document( this.$.ownerDocument || this.$.parentNode.ownerDocument );
+
+			return (
+			this.getDocument = function()
+				{
+					return document;
+				})();
 		},
 
Index: /CKEditor/trunk/_source/core/dom/range.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/range.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/dom/range.js	(revision 6192)
@@ -309,5 +309,5 @@
 			    && node.getName() in CKEDITOR.dtd.$removeEmpty
 			    || !CKEDITOR.tools.trim( node.getText() )
-			    || node.getParent().data( 'cke-bookmark' );
+			    || node.getParent().hasAttribute( '_cke_bookmark' );
 	}
 
@@ -404,5 +404,5 @@
 
 			startNode = this.document.createElement( 'span' );
-			startNode.data( 'cke-bookmark', 1 );
+			startNode.setAttribute( '_cke_bookmark', 1 );
 			startNode.setStyle( 'display', 'none' );
 
@@ -714,8 +714,8 @@
 
 			if ( startNode.is && startNode.is( 'span' )
-				&& startNode.data( 'cke-bookmark' ) )
+				&& startNode.hasAttribute( '_cke_bookmark' ) )
 				this.setStartAt( startNode, CKEDITOR.POSITION_BEFORE_START );
 			if ( endNode && endNode.is && endNode.is( 'span' )
-				&& endNode.data( 'cke-bookmark' ) )
+				&& endNode.hasAttribute( '_cke_bookmark' ) )
 				this.setEndAt( endNode,  CKEDITOR.POSITION_AFTER_END );
 		},
@@ -923,5 +923,5 @@
 								// We need to check for the bookmark attribute because IE insists on
 								// rendering the display:none nodes we use for bookmarks. (#3363)
-								if ( sibling.$.offsetWidth > 0 && !sibling.data( 'cke-bookmark' ) )
+								if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_cke_bookmark' ) )
 								{
 									// We'll accept it only if we need
@@ -1082,5 +1082,5 @@
 								// We need to check for the bookmark attribute because IE insists on
 								// rendering the display:none nodes we use for bookmarks. (#3363)
-								if ( sibling.$.offsetWidth > 0 && !sibling.data( 'cke-bookmark' ) )
+								if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_cke_bookmark' ) )
 								{
 									// We'll accept it only if we need
Index: /CKEditor/trunk/_source/core/dom/rangelist.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/rangelist.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/dom/rangelist.js	(revision 6192)
@@ -114,4 +114,5 @@
 							range.moveToBookmark( bookmarks.shift() );
 
+							var next;
 							// Merge ranges finally after moving to bookmarks.
 							while( mergeCount-- )
Index: /CKEditor/trunk/_source/core/dom/walker.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/walker.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/dom/walker.js	(revision 6192)
@@ -374,5 +374,5 @@
 			return ( node && node.getName
 					&& node.getName() == 'span'
-					&& node.data( 'cke-bookmark' ) );
+					&& node.hasAttribute( '_cke_bookmark' ) );
 		}
 
Index: /CKEditor/trunk/_source/core/editor.js
===================================================================
--- /CKEditor/trunk/_source/core/editor.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/editor.js	(revision 6192)
@@ -228,7 +228,4 @@
 		}
 
-		// Load the Adobe AIR plugin conditionally.
-		CKEDITOR.env.air && ( plugins += ',adobeair' );
-
 		// Load all plugins defined in the "plugins" setting.
 		CKEDITOR.plugins.load( plugins.split( ',' ), function( plugins )
@@ -760,20 +757,4 @@
 
 		/**
-		 * Insert text content into the currently selected position in the
-		 * editor, in WYSIWYG mode, styles of the selected element will be applied to the inserted text,
-		 * spaces around the text will be leaving untouched.
-		 * <strong>Note:</strong> two subsequent line-breaks will introduce one paragraph, which element depends on {@link CKEDITOR.config.enterMode};
-		 * A single line-break will be instead translated into one &lt;br /&gt;.
-		 * @since 3.5
-		 * @param {String} text Text to be inserted into the editor.
-		 * @example
-		 * CKEDITOR.instances.editor1.<b>insertText( ' line1 \n\n line2' )</b>;
-		 */
-		insertText : function( text )
-		{
-			this.fire( 'insertText', text );
-		},
-
-		/**
 		 * Inserts an element into the currently selected position in the
 		 * editor.
Index: /CKEditor/trunk/_source/core/htmlparser/element.js
===================================================================
--- /CKEditor/trunk/_source/core/htmlparser/element.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/htmlparser/element.js	(revision 6192)
@@ -35,5 +35,5 @@
 	this.children = [];
 
-	var tagName = attributes[ 'data-cke-real-element-type' ] || name;
+	var tagName = attributes._cke_real_element_type || name;
 
 	var dtd			= CKEDITOR.dtd,
Index: /CKEditor/trunk/_source/core/htmlparser/fragment.js
===================================================================
--- /CKEditor/trunk/_source/core/htmlparser/fragment.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/htmlparser/fragment.js	(revision 6192)
@@ -126,5 +126,5 @@
 				if ( element.attributes
 					 && ( realElementName =
-						  element.attributes[ 'data-cke-real-element-type' ] ) )
+						  element.attributes[ '_cke_real_element_type' ] ) )
 					elementName = realElementName;
 				else
Index: /CKEditor/trunk/_source/core/imagecacher.js
===================================================================
--- /CKEditor/trunk/_source/core/imagecacher.js	(revision 6192)
+++ /CKEditor/trunk/_source/core/imagecacher.js	(revision 6192)
@@ -0,0 +1,80 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function()
+{
+	var loaded = {};
+
+	var loadImage = function( image, callback )
+	{
+		var doCallback = function()
+			{
+				img.removeAllListeners();
+				loaded[ image ] = 1;
+				callback();
+			};
+
+		var img = new CKEDITOR.dom.element( 'img' );
+		img.on( 'load', doCallback );
+		img.on( 'error', doCallback );
+		img.setAttribute( 'src', image );
+	};
+
+	/**
+	 * @namespace Load images into the browser cache.
+	 */
+ 	CKEDITOR.imageCacher =
+	{
+		/**
+		 * Loads one or more images.
+		 * @param {Array} images The URLs of the images to be loaded.
+		 * @param {Function} [callback] A function to be called once all images
+		 *		are loaded.
+		 * @return {CKEDITOR.event} An event object which fires the 'loaded'
+		 *		event when all images are completely loaded. Additionally, the
+		 *		"finished" property is set after the "loaded" event call.
+		 * @example
+		 * var loader = CKEDITOR.imageCacher.load( [ '/image1.png', 'image2.png' ] );
+		 * if ( !loader.finished )
+		 * {
+		 *     loader.on( 'load', function()
+		 *         {
+		 *             alert( 'All images are loaded' );
+		 *         });
+		 * }
+		 */
+		load : function( images, callback )
+		{
+			var pendingCount = images.length;
+
+			var event = new CKEDITOR.event;
+			event.on( 'loaded', function()
+				{
+					event.finished = 1;
+				});
+
+			if ( callback )
+				event.on( 'loaded', callback );
+
+			var checkPending = function()
+				{
+					if ( --pendingCount === 0 )
+						event.fire( 'loaded' );
+				};
+
+			for ( var i = 0 ; i < images.length ; i++ )
+			{
+				var image = images[ i ];
+
+				if ( loaded[ image ] )
+					checkPending();
+				else
+					loadImage( image, checkPending );
+			}
+
+			return event;
+		}
+	};
+})();
Index: /CKEditor/trunk/_source/core/loader.js
===================================================================
--- /CKEditor/trunk/_source/core/loader.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/loader.js	(revision 6192)
@@ -60,9 +60,10 @@
 			'core/htmlparser/filter'	: [ 'core/htmlparser' ],
 			'core/htmlparser/basicwriter': [ 'core/htmlparser' ],
+			'core/imagecacher'		: [ 'core/dom/element', 'core/event' ],
 			'core/lang'				: [],
 			'core/plugins'			: [ 'core/resourcemanager' ],
 			'core/resourcemanager'	: [ 'core/scriptloader', 'core/tools' ],
 			'core/scriptloader'		: [ 'core/dom/element', 'core/env' ],
-			'core/skins'			: [ 'core/scriptloader' ],
+			'core/skins'			: [ 'core/imagecacher', 'core/scriptloader' ],
 			'core/themes'			: [ 'core/resourcemanager' ],
 			'core/tools'			: [ 'core/env' ],
Index: /CKEditor/trunk/_source/core/skins.js
===================================================================
--- /CKEditor/trunk/_source/core/skins.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/skins.js	(revision 6192)
@@ -18,4 +18,5 @@
 	// Holds the list of loaded skins.
 	var loaded = {},
+		preloaded = {},
 		paths = {};
 
@@ -52,4 +53,31 @@
 							return 'url(' + baseUrl + opener +  path + closer + ')';
 					} );
+		}
+
+		// Check if we need to preload images from it.
+		var preload = skinDefinition.preload;
+		if ( preload && preload.length > 0 )
+		{
+			if ( !preloaded[ skinName ] )
+			{
+				// Prepare image URLs
+				appendSkinPath( preload );
+
+				// Get preloader event dispatcher object.
+				preloaded[ skinName ] = CKEDITOR.imageCacher.load( preload );
+			}
+
+			if ( !preloaded[ skinName ].finished )
+			{
+				// Bind listener for this editor instance.
+				preloaded[ skinName ].on( 'loaded', function()
+					{
+						loadPart( editor, skinName, part, callback );
+					}
+				);
+
+				// Execution will be continued from event listener.
+				return;
+			}
 		}
 
Index: /CKEditor/trunk/_source/core/tools.js
===================================================================
--- /CKEditor/trunk/_source/core/tools.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/tools.js	(revision 6192)
@@ -639,5 +639,5 @@
 			return functions.push( function()
 				{
-					return fn.apply( scope || this, arguments );
+					fn.apply( scope || this, arguments );
 				}) - 1;
 		},
Index: /CKEditor/trunk/_source/core/ui.js
===================================================================
--- /CKEditor/trunk/_source/core/ui.js	(revision 6191)
+++ /CKEditor/trunk/_source/core/ui.js	(revision 6192)
@@ -92,6 +92,4 @@
 };
 
-CKEDITOR.event.implementOn( CKEDITOR.ui );
-
 /**
  * (Virtual Class) Do not call this constructor. This class is not really part
Index: /CKEditor/trunk/_source/lang/_translationstatus.txt
===================================================================
--- /CKEditor/trunk/_source/lang/_translationstatus.txt	(revision 6191)
+++ /CKEditor/trunk/_source/lang/_translationstatus.txt	(revision 6192)
@@ -2,59 +2,59 @@
 For licensing, see LICENSE.html or http://ckeditor.com/license
 
-af.js      Found: 287 Missing: 259
-ar.js      Found: 451 Missing: 95
-bg.js      Found: 280 Missing: 266
-bn.js      Found: 281 Missing: 265
-bs.js      Found: 187 Missing: 359
-ca.js      Found: 490 Missing: 56
-cs.js      Found: 411 Missing: 135
-cy.js      Found: 452 Missing: 94
-da.js      Found: 404 Missing: 142
-de.js      Found: 528 Missing: 18
-el.js      Found: 286 Missing: 260
-en-au.js   Found: 369 Missing: 177
-en-ca.js   Found: 369 Missing: 177
-en-gb.js   Found: 370 Missing: 176
-eo.js      Found: 259 Missing: 287
-es.js      Found: 531 Missing: 15
-et.js      Found: 301 Missing: 245
-eu.js      Found: 403 Missing: 143
-fa.js      Found: 302 Missing: 244
-fi.js      Found: 531 Missing: 15
-fo.js      Found: 420 Missing: 126
-fr-ca.js   Found: 301 Missing: 245
-fr.js      Found: 403 Missing: 143
-gl.js      Found: 283 Missing: 263
-gu.js      Found: 300 Missing: 246
-he.js      Found: 546 Missing: 0
-hi.js      Found: 302 Missing: 244
-hr.js      Found: 404 Missing: 142
-hu.js      Found: 530 Missing: 16
-is.js      Found: 307 Missing: 239
-it.js      Found: 404 Missing: 142
-ja.js      Found: 489 Missing: 57
-km.js      Found: 275 Missing: 271
-ko.js      Found: 293 Missing: 253
-lt.js      Found: 306 Missing: 240
-lv.js      Found: 283 Missing: 263
-mn.js      Found: 300 Missing: 246
-ms.js      Found: 265 Missing: 281
-nb.js      Found: 470 Missing: 76
-nl.js      Found: 531 Missing: 15
-no.js      Found: 470 Missing: 76
-pl.js      Found: 411 Missing: 135
-pt-br.js   Found: 524 Missing: 22
-pt.js      Found: 282 Missing: 264
-ro.js      Found: 301 Missing: 245
-ru.js      Found: 467 Missing: 79
-sk.js      Found: 302 Missing: 244
-sl.js      Found: 410 Missing: 136
-sr-latn.js Found: 276 Missing: 270
-sr.js      Found: 275 Missing: 271
-sv.js      Found: 299 Missing: 247
-th.js      Found: 287 Missing: 259
-tr.js      Found: 524 Missing: 22
-uk.js      Found: 531 Missing: 15
-vi.js      Found: 481 Missing: 65
-zh-cn.js   Found: 546 Missing: 0
-zh.js      Found: 404 Missing: 142
+af.js      Found: 287 Missing: 244
+ar.js      Found: 451 Missing: 80
+bg.js      Found: 280 Missing: 251
+bn.js      Found: 281 Missing: 250
+bs.js      Found: 187 Missing: 344
+ca.js      Found: 490 Missing: 41
+cs.js      Found: 411 Missing: 120
+cy.js      Found: 452 Missing: 79
+da.js      Found: 404 Missing: 127
+de.js      Found: 528 Missing: 3
+el.js      Found: 286 Missing: 245
+en-au.js   Found: 369 Missing: 162
+en-ca.js   Found: 369 Missing: 162
+en-gb.js   Found: 370 Missing: 161
+eo.js      Found: 259 Missing: 272
+es.js      Found: 531 Missing: 0
+et.js      Found: 301 Missing: 230
+eu.js      Found: 403 Missing: 128
+fa.js      Found: 302 Missing: 229
+fi.js      Found: 531 Missing: 0
+fo.js      Found: 420 Missing: 111
+fr-ca.js   Found: 301 Missing: 230
+fr.js      Found: 403 Missing: 128
+gl.js      Found: 283 Missing: 248
+gu.js      Found: 300 Missing: 231
+he.js      Found: 531 Missing: 0
+hi.js      Found: 302 Missing: 229
+hr.js      Found: 404 Missing: 127
+hu.js      Found: 530 Missing: 1
+is.js      Found: 307 Missing: 224
+it.js      Found: 404 Missing: 127
+ja.js      Found: 489 Missing: 42
+km.js      Found: 275 Missing: 256
+ko.js      Found: 293 Missing: 238
+lt.js      Found: 306 Missing: 225
+lv.js      Found: 283 Missing: 248
+mn.js      Found: 300 Missing: 231
+ms.js      Found: 265 Missing: 266
+nb.js      Found: 470 Missing: 61
+nl.js      Found: 531 Missing: 0
+no.js      Found: 470 Missing: 61
+pl.js      Found: 411 Missing: 120
+pt-br.js   Found: 524 Missing: 7
+pt.js      Found: 282 Missing: 249
+ro.js      Found: 301 Missing: 230
+ru.js      Found: 467 Missing: 64
+sk.js      Found: 302 Missing: 229
+sl.js      Found: 410 Missing: 121
+sr-latn.js Found: 276 Missing: 255
+sr.js      Found: 275 Missing: 256
+sv.js      Found: 299 Missing: 232
+th.js      Found: 287 Missing: 244
+tr.js      Found: 524 Missing: 7
+uk.js      Found: 531 Missing: 0
+vi.js      Found: 481 Missing: 50
+zh-cn.js   Found: 531 Missing: 0
+zh.js      Found: 404 Missing: 127
Index: /CKEditor/trunk/_source/lang/af.js
===================================================================
--- /CKEditor/trunk/_source/lang/af.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/af.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/ar.js
===================================================================
--- /CKEditor/trunk/_source/lang/ar.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/ar.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/bg.js
===================================================================
--- /CKEditor/trunk/_source/lang/bg.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/bg.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/bn.js
===================================================================
--- /CKEditor/trunk/_source/lang/bn.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/bn.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/bs.js
===================================================================
--- /CKEditor/trunk/_source/lang/bs.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/bs.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/ca.js
===================================================================
--- /CKEditor/trunk/_source/lang/ca.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/ca.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/cs.js
===================================================================
--- /CKEditor/trunk/_source/lang/cs.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/cs.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/cy.js
===================================================================
--- /CKEditor/trunk/_source/lang/cy.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/cy.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/da.js
===================================================================
--- /CKEditor/trunk/_source/lang/da.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/da.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/de.js
===================================================================
--- /CKEditor/trunk/_source/lang/de.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/de.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/el.js
===================================================================
--- /CKEditor/trunk/_source/lang/el.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/el.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/en-au.js
===================================================================
--- /CKEditor/trunk/_source/lang/en-au.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/en-au.js	(revision 6192)
@@ -529,8 +529,8 @@
 	justify :
 	{
-		left	: 'Align Left',
-		center	: 'Centre',
-		right	: 'Align Right',
-		block	: 'Justify'
+		left	: 'Left Justify',
+		center	: 'Centre Justify',
+		right	: 'Right Justify',
+		block	: 'Block Justify'
 	},
 
@@ -615,23 +615,4 @@
 		remove				: 'Remove Div' // MISSING
   	},
-
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
 
 	font :
Index: /CKEditor/trunk/_source/lang/en-ca.js
===================================================================
--- /CKEditor/trunk/_source/lang/en-ca.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/en-ca.js	(revision 6192)
@@ -529,8 +529,8 @@
 	justify :
 	{
-		left	: 'Align Left',
-		center	: 'Centre',
-		right	: 'Align Right',
-		block	: 'Justify'
+		left	: 'Left Justify',
+		center	: 'Centre Justify',
+		right	: 'Right Justify',
+		block	: 'Block Justify'
 	},
 
@@ -615,23 +615,4 @@
 		remove				: 'Remove Div' // MISSING
   	},
-
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
 
 	font :
Index: /CKEditor/trunk/_source/lang/en-gb.js
===================================================================
--- /CKEditor/trunk/_source/lang/en-gb.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/en-gb.js	(revision 6192)
@@ -529,8 +529,8 @@
 	justify :
 	{
-		left	: 'Align Left',
-		center	: 'Centre',
-		right	: 'Align Right',
-		block	: 'Justify'
+		left	: 'Left Justify',
+		center	: 'Centre Justify',
+		right	: 'Right Justify',
+		block	: 'Block Justify'
 	},
 
@@ -615,23 +615,4 @@
 		remove				: 'Remove Div' // MISSING
   	},
-
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
 
 	font :
Index: /CKEditor/trunk/_source/lang/en.js
===================================================================
--- /CKEditor/trunk/_source/lang/en.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/en.js	(revision 6192)
@@ -529,8 +529,8 @@
 	justify :
 	{
-		left	: 'Align Left',
-		center	: 'Center',
-		right	: 'Align Right',
-		block	: 'Justify'
+		left	: 'Left Justify',
+		center	: 'Center Justify',
+		right	: 'Right Justify',
+		block	: 'Block Justify'
 	},
 
@@ -615,23 +615,4 @@
 		remove				: 'Remove Div'
   	},
-
-	iframe :
-	{
-		title		: 'iFrame Properties',
-		toolbar		: 'iFrame',
-		height		: 'Height',
-		width		: 'Width',
-		invalidHeight	: 'iFrame height must be a number.',
-		invalidWidth	: 'iFrame width must be a number.',
-		noUrl		: 'Please type the iFrame URL',
-		scrolling	: 'Enable scrollbars',
-		border		: 'Show frame border',
-		align		: 'Alignment',
-		alignLeft	: 'Left',
-		alignRight	: 'Right',
-		alignTop	: 'Top',
-		alignMiddle	: 'Middle',
-		alignBottom	: 'Bottom'
-	},
 
 	font :
Index: /CKEditor/trunk/_source/lang/eo.js
===================================================================
--- /CKEditor/trunk/_source/lang/eo.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/eo.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/es.js
===================================================================
--- /CKEditor/trunk/_source/lang/es.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/es.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/et.js
===================================================================
--- /CKEditor/trunk/_source/lang/et.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/et.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/eu.js
===================================================================
--- /CKEditor/trunk/_source/lang/eu.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/eu.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/fa.js
===================================================================
--- /CKEditor/trunk/_source/lang/fa.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/fa.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/fi.js
===================================================================
--- /CKEditor/trunk/_source/lang/fi.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/fi.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/fo.js
===================================================================
--- /CKEditor/trunk/_source/lang/fo.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/fo.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/fr-ca.js
===================================================================
--- /CKEditor/trunk/_source/lang/fr-ca.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/fr-ca.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/fr.js
===================================================================
--- /CKEditor/trunk/_source/lang/fr.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/fr.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/gl.js
===================================================================
--- /CKEditor/trunk/_source/lang/gl.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/gl.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/gu.js
===================================================================
--- /CKEditor/trunk/_source/lang/gu.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/gu.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/he.js
===================================================================
--- /CKEditor/trunk/_source/lang/he.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/he.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'מאפייני חלון פנימי (iFrame)',
-		toolbar		: 'חלון פנימי (iFrame)',
-		height		: 'גובה',
-		width		: 'רוחב',
-		invalidHeight	: 'גובה החלון חייב להיות מספרי.',
-		invalidWidth	: 'רוחב החלון חייב להיות מספרי.',
-		noUrl		: 'יש להכניס כתובת לחלון.',
-		scrolling	: 'אפשר פסי גלילה',
-		border		: 'הראה מסגרת לחלון',
-		align		: 'יישור',
-		alignLeft	: 'שמאל',
-		alignRight	: 'ימין',
-		alignTop	: 'למעלה',
-		alignMiddle	: 'מרכז',
-		alignBottom	: 'למטה'
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/hi.js
===================================================================
--- /CKEditor/trunk/_source/lang/hi.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/hi.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/hr.js
===================================================================
--- /CKEditor/trunk/_source/lang/hr.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/hr.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/hu.js
===================================================================
--- /CKEditor/trunk/_source/lang/hu.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/hu.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/is.js
===================================================================
--- /CKEditor/trunk/_source/lang/is.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/is.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/it.js
===================================================================
--- /CKEditor/trunk/_source/lang/it.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/it.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/ja.js
===================================================================
--- /CKEditor/trunk/_source/lang/ja.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/ja.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/km.js
===================================================================
--- /CKEditor/trunk/_source/lang/km.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/km.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/ko.js
===================================================================
--- /CKEditor/trunk/_source/lang/ko.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/ko.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/lt.js
===================================================================
--- /CKEditor/trunk/_source/lang/lt.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/lt.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/lv.js
===================================================================
--- /CKEditor/trunk/_source/lang/lv.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/lv.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/mn.js
===================================================================
--- /CKEditor/trunk/_source/lang/mn.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/mn.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/ms.js
===================================================================
--- /CKEditor/trunk/_source/lang/ms.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/ms.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/nb.js
===================================================================
--- /CKEditor/trunk/_source/lang/nb.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/nb.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/nl.js
===================================================================
--- /CKEditor/trunk/_source/lang/nl.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/nl.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/no.js
===================================================================
--- /CKEditor/trunk/_source/lang/no.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/no.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/pl.js
===================================================================
--- /CKEditor/trunk/_source/lang/pl.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/pl.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/pt-br.js
===================================================================
--- /CKEditor/trunk/_source/lang/pt-br.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/pt-br.js	(revision 6192)
@@ -615,23 +615,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/pt.js
===================================================================
--- /CKEditor/trunk/_source/lang/pt.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/pt.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/ro.js
===================================================================
--- /CKEditor/trunk/_source/lang/ro.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/ro.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/ru.js
===================================================================
--- /CKEditor/trunk/_source/lang/ru.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/ru.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/sk.js
===================================================================
--- /CKEditor/trunk/_source/lang/sk.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/sk.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/sl.js
===================================================================
--- /CKEditor/trunk/_source/lang/sl.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/sl.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/sr-latn.js
===================================================================
--- /CKEditor/trunk/_source/lang/sr-latn.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/sr-latn.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/sr.js
===================================================================
--- /CKEditor/trunk/_source/lang/sr.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/sr.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/sv.js
===================================================================
--- /CKEditor/trunk/_source/lang/sv.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/sv.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/th.js
===================================================================
--- /CKEditor/trunk/_source/lang/th.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/th.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/tr.js
===================================================================
--- /CKEditor/trunk/_source/lang/tr.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/tr.js	(revision 6192)
@@ -615,23 +615,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/uk.js
===================================================================
--- /CKEditor/trunk/_source/lang/uk.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/uk.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/vi.js
===================================================================
--- /CKEditor/trunk/_source/lang/vi.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/vi.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/zh-cn.js
===================================================================
--- /CKEditor/trunk/_source/lang/zh-cn.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/zh-cn.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame属性',
-		toolbar		: 'iFrame',
-		height		: '高度',
-		width		: '宽度',
-		invalidHeight	: '框架高度必须为数字格式',
-		invalidWidth	: '框架宽度必须为数字格式',
-		noUrl		: '请输入框架的 URL',
-		scrolling	: '允许滚动条',
-		border		: '显示框架边框',
-		align		: '对齐方式',
-		alignLeft	: '左',
-		alignRight	: '右',
-		alignTop	: '上',
-		alignMiddle	: '中',
-		alignBottom	: '下'
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/lang/zh.js
===================================================================
--- /CKEditor/trunk/_source/lang/zh.js	(revision 6191)
+++ /CKEditor/trunk/_source/lang/zh.js	(revision 6192)
@@ -616,23 +616,4 @@
   	},
 
-	iframe :
-	{
-		title		: 'iFrame Properties', // MISSING
-		toolbar		: 'iFrame', // MISSING
-		height		: 'Height', // MISSING
-		width		: 'Width', // MISSING
-		invalidHeight	: 'iFrame height must be a number.', // MISSING
-		invalidWidth	: 'iFrame width must be a number.', // MISSING
-		noUrl		: 'Please type the iFrame URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border', // MISSING
-		align		: 'Alignment', // MISSING
-		alignLeft	: 'Left', // MISSING
-		alignRight	: 'Right', // MISSING
-		alignTop	: 'Top', // MISSING
-		alignMiddle	: 'Middle', // MISSING
-		alignBottom	: 'Bottom' // MISSING
-	},
-
 	font :
 	{
Index: /CKEditor/trunk/_source/plugins/button/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/button/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/button/plugin.js	(revision 6192)
@@ -55,43 +55,4 @@
 	}
 };
-
-/**
- * Handles a button click.
- * @private
- */
-CKEDITOR.ui.button._ =
-{
-	instances : [],
-
-	keydown : function( index, ev )
-	{
-		var instance = CKEDITOR.ui.button._.instances[ index ];
-
-		if ( instance.onkey )
-		{
-			ev = new CKEDITOR.dom.event( ev );
-			return ( instance.onkey( instance, ev.getKeystroke() ) !== false );
-		}
-	},
-
-	focus : function( index, ev )
-	{
-		var instance = CKEDITOR.ui.button._.instances[ index ],
-			retVal;
-
-		if ( instance.onfocus )
-			retVal = ( instance.onfocus( instance, new CKEDITOR.dom.event( ev ) ) !== false );
-
-		// FF2: prevent focus event been bubbled up to editor container, which caused unexpected editor focus.
-		if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 )
-			ev.preventBubble();
-		return retVal;
-	}
-};
-
-( function()
-{
-	var keydownFn = CKEDITOR.tools.addFunction( CKEDITOR.ui.button._.keydown, CKEDITOR.ui.button._ ),
-		focusFn = CKEDITOR.tools.addFunction( CKEDITOR.ui.button._.focus, CKEDITOR.ui.button._ );
 
 CKEDITOR.ui.button.prototype =
@@ -200,6 +161,6 @@
 
 		output.push(
-					' onkeydown="return CKEDITOR.tools.callFunction(', keydownFn, ', ', index, ', event);"' +
-					' onfocus="return CKEDITOR.tools.callFunction(', focusFn,', ', index, ', event);"' +
+				' onkeydown="return CKEDITOR.ui.button._.keydown(', index, ', event);"' +
+				' onfocus="return CKEDITOR.ui.button._.focus(', index, ', event);"' +
 				' onclick="CKEDITOR.tools.callFunction(', clickFn, ', this); return false;">' +
 					'<span class="cke_icon"' );
@@ -261,5 +222,37 @@
 };
 
-})();
+/**
+ * Handles a button click.
+ * @private
+ */
+CKEDITOR.ui.button._ =
+{
+	instances : [],
+
+	keydown : function( index, ev )
+	{
+		var instance = CKEDITOR.ui.button._.instances[ index ];
+
+		if ( instance.onkey )
+		{
+			ev = new CKEDITOR.dom.event( ev );
+			return ( instance.onkey( instance, ev.getKeystroke() ) !== false );
+		}
+	},
+
+	focus : function( index, ev )
+	{
+		var instance = CKEDITOR.ui.button._.instances[ index ],
+			retVal;
+
+		if ( instance.onfocus )
+			retVal = ( instance.onfocus( instance, new CKEDITOR.dom.event( ev ) ) !== false );
+
+		// FF2: prevent focus event been bubbled up to editor container, which caused unexpected editor focus.
+		if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 )
+			ev.preventBubble();
+		return retVal;
+	}
+};
 
 /**
Index: /CKEditor/trunk/_source/plugins/clipboard/dialogs/paste.js
===================================================================
--- /CKEditor/trunk/_source/plugins/clipboard/dialogs/paste.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/clipboard/dialogs/paste.js	(revision 6192)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -14,6 +14,5 @@
 			docElement = doc.$;
 
-		var script = doc.getById( 'cke_actscrpt' );
-		script && script.remove();
+		doc.getById( 'cke_actscrpt' ).remove();
 
 		CKEDITOR.env.ie ?
@@ -76,16 +75,4 @@
 				'</html>';
 
-			var src =
-				CKEDITOR.env.air ?
-					'javascript:void(0)' :
-				isCustomDomain ?
-					'javascript:void((function(){' +
-						'document.open();' +
-						'document.domain=\'' + document.domain + '\';' +
-						'document.close();' +
-						'})())"'
-				:
-					'';
-
 			var iframe = CKEDITOR.dom.element.createFromHtml(
 						'<iframe' +
@@ -93,5 +80,11 @@
 						' frameborder="0" ' +
 						' allowTransparency="true"' +
-						' src="' + src + '"' +
+						// Support for custom document.domain in IE.
+						( isCustomDomain ?
+							' src="javascript:void((function(){' +
+								'document.open();' +
+								'document.domain=\'' + document.domain + '\';' +
+								'document.close();' +
+							'})())"' : '' ) +
 						' role="region"' +
 						' aria-label="' + lang.pasteArea + '"' +
@@ -101,14 +94,14 @@
 
 			iframe.on( 'load', function( e )
-				{
-					e.removeListener();
-
-					var doc = iframe.getFrameDocument();
-					doc.write( htmlToLoad );
-
-					if ( CKEDITOR.env.air )
-						onPasteFrameLoad.call( this, doc.getWindow().$ );
-				},
-				this );
+			{
+				e.removeListener();
+				var doc = iframe.getFrameDocument().$;
+				// Custom domain handling is needed after each document.open().
+				doc.open();
+				if ( isCustomDomain )
+					doc.domain = document.domain;
+				doc.write( htmlToLoad );
+				doc.close();
+			}, this );
 
 			iframe.setCustomData( 'dialog', this );
Index: /CKEditor/trunk/_source/plugins/clipboard/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/clipboard/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/clipboard/plugin.js	(revision 6192)
@@ -50,5 +50,5 @@
 				{
 					// Other browsers throw an error if the command is disabled.
-					return editor.document.$.execCommand( type, false, null );
+					return editor.document.$.execCommand( type );
 				}
 				catch( e )
Index: /CKEditor/trunk/_source/plugins/colorbutton/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/colorbutton/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/colorbutton/plugin.js	(revision 6192)
@@ -23,5 +23,4 @@
 		function addButton( name, type, title )
 		{
-			var colorBoxId = CKEDITOR.tools.getNextId() + '_colorBox';
 			editor.ui.add( name, CKEDITOR.UI_PANELBUTTON,
 				{
@@ -41,9 +40,7 @@
 						block.autoSize = true;
 						block.element.addClass( 'cke_colorblock' );
-						block.element.setHtml( renderColors( panel, type, colorBoxId ) );
+						block.element.setHtml( renderColors( panel, type ) );
 						// The block should not have scrollbars (#5933, #6056)
 						block.element.getDocument().getBody().setStyle( 'overflow', 'hidden' );
-
-						CKEDITOR.ui.fire( 'ready', this );
 
 						var keys = block.keys;
@@ -56,29 +53,4 @@
 						keys[ CKEDITOR.SHIFT + 9 ]	= 'prev';	// SHIFT + TAB
 						keys[ 32 ]	= 'click';					// SPACE
-					},
-
-					// The automatic colorbox should represent the real color (#6010)
-					onOpen : function()
-					{
-						var selection = editor.getSelection(),
-							block = selection && selection.getStartElement(),
-							path = new CKEDITOR.dom.elementPath( block ),
-							color;
-
-						// Find the closest block element.
-						block = path.block || path.blockLimit;
-
-						// The background color might be transparent. In that case, look up the color in the DOM tree.
-						do
-						{
-							color = block && block.getComputedStyle( type == 'back' ? 'background-color' : 'color' ) || 'transparent';
-						}
-						while ( type == 'back' && color == 'transparent' && ( block = block.getParent() ) );
-
-						// The box should never be transparent.
-						if ( !color || color == 'transparent' )
-							color = '#ffffff';
-
-						this._.panel._.iframe.getFrameDocument().getById( colorBoxId ).setStyle( 'background-color', color );
 					}
 				});
@@ -86,5 +58,5 @@
 
 
-		function renderColors( panel, type, colorBoxId )
+		function renderColors( panel, type )
 		{
 			var output = [],
@@ -129,16 +101,8 @@
 
 						colorStyle.childRule = type == 'back' ?
-							function( element )
-							{
-								// It's better to apply background color as the innermost style. (#3599)
-								// Except for "unstylable elements". (#6103)
-								return isUnstylable( element );
-							}
-							:
-							function( element )
-							{
-								// Fore color style must be applied inside links instead of around it.
-								return element.getName() != 'a' || isUnstylable( element );
-							};
+							// It's better to apply background color as the innermost style. (#3599)
+							function(){ return false; } :
+							// Fore color style must be applied inside links instead of around it.
+							function( element ){ return element.getName() != 'a'; };
 
 						new CKEDITOR.style( colorStyle, { color : color } ).apply( editor.document );
@@ -158,5 +122,5 @@
 						'<tr>' +
 							'<td>' +
-								'<span class="cke_colorbox" id="', colorBoxId, '"></span>' +
+								'<span class="cke_colorbox" style="background-color:#000"></span>' +
 							'</td>' +
 							'<td colspan=7 align=center>',
@@ -218,9 +182,4 @@
 			return output.join( '' );
 		}
-
-		function isUnstylable( ele )
-		{
-			return ( ele.getAttribute( 'contentEditable' ) == 'false' ) || ele.getAttribute( 'data-cke-nostyle' );
-		}
 	}
 });
Index: /CKEditor/trunk/_source/plugins/contextmenu/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/contextmenu/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/contextmenu/plugin.js	(revision 6192)
@@ -7,160 +7,273 @@
 {
 	requires : [ 'menu' ],
-	
-	// Make sure the base class (CKEDITOR.menu) is loaded before it (#3318).
-	onLoad : function()
-	{
-		CKEDITOR.plugins.contextMenu = CKEDITOR.tools.createClass(
-		{
-			base : CKEDITOR.menu,
-
-			$ : function( editor )
-			{
-				this.base.call( this, editor,
-				{
-					panel:
-					{
-						className : editor.skinClass + ' cke_contextmenu',
-						attributes :
+
+	beforeInit : function( editor )
+	{
+		editor.contextMenu = new CKEDITOR.plugins.contextMenu( editor );
+
+		editor.addCommand( 'contextMenu',
+			{
+				exec : function()
+					{
+						editor.contextMenu.show( editor.document.getBody() );
+					}
+			});
+	}
+});
+
+CKEDITOR.plugins.contextMenu = CKEDITOR.tools.createClass(
+{
+	$ : function( editor )
+	{
+		this.id = CKEDITOR.tools.getNextId();
+		this.editor = editor;
+		this._.listeners = [];
+		this._.functionId = CKEDITOR.tools.addFunction( function( commandName )
+			{
+				this._.panel.hide();
+				editor.focus();
+				editor.execCommand( commandName );
+			},
+			this);
+
+		this.definition =
+		{
+			panel:
+			{
+				className : editor.skinClass + ' cke_contextmenu',
+				attributes :
+				{
+					'aria-label' : editor.lang.contextmenu.options
+				}
+			}
+		};
+	},
+
+	_ :
+	{
+		onMenu : function( offsetParent, corner, offsetX, offsetY )
+		{
+			var menu = this._.menu,
+				editor = this.editor;
+
+			if ( menu )
+			{
+				menu.hide();
+				menu.removeAll();
+			}
+			else
+			{
+				menu = this._.menu = new CKEDITOR.menu( editor, this.definition );
+				menu.onClick = CKEDITOR.tools.bind( function( item )
+				{
+					menu.hide();
+
+					if ( item.onClick )
+						item.onClick();
+					else if ( item.command )
+						editor.execCommand( item.command );
+
+				}, this );
+
+				menu.onEscape = function( keystroke )
+				{
+					var parent = this.parent;
+					// 1. If it's sub-menu, restore the last focused item
+					// of upper level menu.
+					// 2. In case of a top-menu, close it.
+					if ( parent )
+					{
+						parent._.panel.hideChild();
+						// Restore parent block item focus.
+						var parentBlock = parent._.panel._.panel._.currentBlock,
+							parentFocusIndex =  parentBlock._.focusIndex;
+						parentBlock._.markItem( parentFocusIndex );
+					}
+					else if ( keystroke == 27 )
+					{
+						this.hide();
+						editor.focus();
+					}
+					return false;
+				};
+			}
+
+			var listeners = this._.listeners,
+				includedItems = [];
+
+			var selection = this.editor.getSelection(),
+				element = selection && selection.getStartElement();
+
+			menu.onHide = CKEDITOR.tools.bind( function()
+				{
+					menu.onHide = null;
+
+					if ( CKEDITOR.env.ie )
+					{
+						var selection = editor.getSelection();
+						selection && selection.unlock();
+					}
+
+					this.onHide && this.onHide();
+				},
+				this );
+
+			// Call all listeners, filling the list of items to be displayed.
+			for ( var i = 0 ; i < listeners.length ; i++ )
+			{
+				var listenerItems = listeners[ i ]( element, selection );
+
+				if ( listenerItems )
+				{
+					for ( var itemName in listenerItems )
+					{
+						var item = this.editor.getMenuItem( itemName );
+
+						if ( item )
 						{
-							'aria-label' : editor.lang.contextmenu.options
+							item.state = listenerItems[ itemName ];
+							menu.add( item );
 						}
 					}
+				}
+			}
+
+			// Don't show context menu with zero items.
+			menu.items.length && menu.show( offsetParent, corner || ( editor.lang.dir == 'rtl' ? 2 : 1 ), offsetX, offsetY );
+		}
+	},
+
+	proto :
+	{
+		addTarget : function( element, nativeContextMenuOnCtrl )
+		{
+
+			// For browsers (Opera <=10a) that doesn't  support 'contextmenu' event, we have duo approaches employed here:
+			// 1. Inherit the 'button override' hack we introduced in v2 (#4530) (In Opera browser, this require the
+			//  option 'Allow script to detect context menu/right click events' to be always turned on).
+			// 2. Considering the fact that ctrl/meta key is not been occupied
+			//  for multiple range selecting (like Gecko), we use this key
+			//  combination as a fallback for triggering context-menu. (#4530)
+			if ( CKEDITOR.env.opera && !( 'oncontextmenu' in document.body ) )
+			{
+				var contextMenuOverrideButton;
+				element.on( 'mousedown', function( evt )
+				{
+					evt = evt.data;
+					if ( evt.$.button != 2 )
+					{
+						if ( evt.getKeystroke() == CKEDITOR.CTRL + 1 )
+							element.fire( 'contextmenu', evt );
+						return;
+					}
+
+					if ( nativeContextMenuOnCtrl
+						 && ( CKEDITOR.env.mac ? evt.$.metaKey : evt.$.ctrlKey ) )
+						return;
+
+					var target = evt.getTarget();
+
+					if ( !contextMenuOverrideButton )
+					{
+						var ownerDoc =  target.getDocument();
+						contextMenuOverrideButton = ownerDoc.createElement( 'input' ) ;
+						contextMenuOverrideButton.$.type = 'button' ;
+						ownerDoc.getBody().append( contextMenuOverrideButton ) ;
+					}
+
+					contextMenuOverrideButton.setAttribute( 'style', 'position:absolute;top:' + ( evt.$.clientY - 2 ) +
+						'px;left:' + ( evt.$.clientX - 2 ) +
+						'px;width:5px;height:5px;opacity:0.01' );
+
+				} );
+
+				element.on( 'mouseup', function ( evt )
+				{
+					if ( contextMenuOverrideButton )
+					{
+						contextMenuOverrideButton.remove();
+						contextMenuOverrideButton = undefined;
+						// Simulate 'contextmenu' event.
+						element.fire( 'contextmenu', evt.data );
+					}
+				} );
+			}
+
+			element.on( 'contextmenu', function( event )
+				{
+					var domEvent = event.data;
+
+					if ( nativeContextMenuOnCtrl &&
+					     // Safari on Windows always show 'ctrlKey' as true in 'contextmenu' event,
+						// which make this property unreliable. (#4826)
+					     ( CKEDITOR.env.webkit ? holdCtrlKey : ( CKEDITOR.env.mac ? domEvent.$.metaKey : domEvent.$.ctrlKey ) ) )
+						return;
+
+
+					// Cancel the browser context menu.
+					domEvent.preventDefault();
+
+					var offsetParent = domEvent.getTarget().getDocument().getDocumentElement(),
+						offsetX = domEvent.$.clientX,
+						offsetY = domEvent.$.clientY;
+
+					CKEDITOR.tools.setTimeout( function()
+						{
+							this.show( offsetParent, null, offsetX, offsetY );
+						},
+						0, this );
+				},
+				this );
+
+			if ( CKEDITOR.env.opera )
+			{
+				// 'contextmenu' event triggered by Windows menu key is unpreventable,
+				// cancel the key event itself. (#6534)
+				element.on( 'keypress' , function ( evt )
+				{
+					var domEvent = evt.data;
+
+					if ( domEvent.$.keyCode === 0 )
+						domEvent.preventDefault();
 				});
-			},
-
-			proto :
-			{
-				addTarget : function( element, nativeContextMenuOnCtrl )
-				{
-					// Opera doesn't support 'contextmenu' event, we have duo approaches employed here:
-					// 1. Inherit the 'button override' hack we introduced in v2 (#4530), while this require the Opera browser
-					//  option 'Allow script to detect context menu/right click events' to be always turned on.
-					// 2. Considering the fact that ctrl/meta key is not been occupied
-					//  for multiple range selecting (like Gecko), we use this key
-					//  combination as a fallback for triggering context-menu. (#4530)
-					if ( CKEDITOR.env.opera && !( 'oncontextmenu' in document.body ))
-					{
-						var contextMenuOverrideButton;
-						element.on( 'mousedown', function( evt )
-						{
-							evt = evt.data;
-							if ( evt.$.button != 2 )
-							{
-								if ( evt.getKeystroke() == CKEDITOR.CTRL + 1 )
-									element.fire( 'contextmenu', evt );
-								return;
-							}
-
-							if ( nativeContextMenuOnCtrl
-								 && ( CKEDITOR.env.mac ? evt.$.metaKey : evt.$.ctrlKey ) )
-								return;
-
-							var target = evt.getTarget();
-
-							if ( !contextMenuOverrideButton )
-							{
-								var ownerDoc =  target.getDocument();
-								contextMenuOverrideButton = ownerDoc.createElement( 'input' ) ;
-								contextMenuOverrideButton.$.type = 'button' ;
-								ownerDoc.getBody().append( contextMenuOverrideButton ) ;
-							}
-
-							contextMenuOverrideButton.setAttribute( 'style', 'position:absolute;top:' + ( evt.$.clientY - 2 ) +
-								'px;left:' + ( evt.$.clientX - 2 ) +
-								'px;width:5px;height:5px;opacity:0.01' );
-
-						} );
-
-						element.on( 'mouseup', function ( evt )
-						{
-							if ( contextMenuOverrideButton )
-							{
-								contextMenuOverrideButton.remove();
-								contextMenuOverrideButton = undefined;
-								// Simulate 'contextmenu' event.
-								element.fire( 'contextmenu', evt.data );
-							}
-						} );
-					}
-
-					element.on( 'contextmenu', function( event )
-						{
-							var domEvent = event.data;
-
-							if ( nativeContextMenuOnCtrl &&
-								 // Safari on Windows always show 'ctrlKey' as true in 'contextmenu' event,
-								// which make this property unreliable. (#4826)
-								 ( CKEDITOR.env.webkit ? holdCtrlKey : ( CKEDITOR.env.mac ? domEvent.$.metaKey : domEvent.$.ctrlKey ) ) )
-								return;
-
-
-							// Cancel the browser context menu.
-							domEvent.preventDefault();
-
-							var offsetParent = domEvent.getTarget().getDocument().getDocumentElement(),
-								offsetX = domEvent.$.clientX,
-								offsetY = domEvent.$.clientY;
-
-							CKEDITOR.tools.setTimeout( function()
-								{
-									this.open( offsetParent, null, offsetX, offsetY );
-								},
-								0, this );
-						},
-						this );
-
-					if ( CKEDITOR.env.opera )
-					{
-						// 'contextmenu' event triggered by Windows menu key is unpreventable,
-						// cancel the key event itself. (#6534)
-						element.on( 'keypress' , function ( evt )
-						{
-							var domEvent = evt.data;
-
-							if ( domEvent.$.keyCode === 0 )
-								domEvent.preventDefault();
-						});
-					}
-
-					if ( CKEDITOR.env.webkit )
-					{
-						var holdCtrlKey,
-							onKeyDown = function( event )
-							{
-								holdCtrlKey = CKEDITOR.env.mac ? event.data.$.metaKey : event.data.$.ctrlKey ;
-							},
-							resetOnKeyUp = function()
-							{
-								holdCtrlKey = 0;
-							};
-
-						element.on( 'keydown', onKeyDown );
-						element.on( 'keyup', resetOnKeyUp );
-						element.on( 'contextmenu', resetOnKeyUp );
-					}
-				},
-
-				open : function( offsetParent, corner, offsetX, offsetY )
-				{
-					this.editor.focus();
-					offsetParent = offsetParent || CKEDITOR.document.getDocumentElement();
-					this.show( offsetParent, corner, offsetX, offsetY );
-				}
-			}
-		});
-	},
-
-	beforeInit : function( editor )
-	{
-		editor.contextMenu = new CKEDITOR.plugins.contextMenu( editor );
-
-		editor.addCommand( 'contextMenu',
-			{
-				exec : function()
-					{
-						editor.contextMenu.open( editor.document.getBody() );
-					}
-			});
+			}
+
+			if ( CKEDITOR.env.webkit )
+			{
+				var holdCtrlKey,
+					onKeyDown = function( event )
+					{
+						holdCtrlKey = CKEDITOR.env.mac ? event.data.$.metaKey : event.data.$.ctrlKey ;
+					},
+					resetOnKeyUp = function()
+					{
+						holdCtrlKey = 0;
+					};
+
+				element.on( 'keydown', onKeyDown );
+				element.on( 'keyup', resetOnKeyUp );
+				element.on( 'contextmenu', resetOnKeyUp );
+			}
+		},
+
+		addListener : function( listenerFn )
+		{
+			this._.listeners.push( listenerFn );
+		},
+
+		show : function( offsetParent, corner, offsetX, offsetY )
+		{
+			this.editor.focus();
+
+			// Selection will be unavailable after context menu shows up
+			// in IE, lock it now.
+			if ( CKEDITOR.env.ie )
+			{
+				var selection = this.editor.getSelection();
+				selection && selection.lock();
+			}
+
+			this._.onMenu( offsetParent || CKEDITOR.document.getDocumentElement(), corner, offsetX || 0, offsetY || 0 );
+		}
 	}
 });
Index: /CKEditor/trunk/_source/plugins/dialog/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/dialog/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/dialog/plugin.js	(revision 6192)
@@ -106,17 +106,8 @@
 	{
 		// Load the dialog definition.
-		var definition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ],
-			defaultDefinition = CKEDITOR.tools.clone( defaultDialogDefinition ),
-			buttonsOrder = editor.config.dialog_buttonsOrder || 'OS',
-			dir = editor.lang.dir;
-
-			if ( ( buttonsOrder == 'OS' && CKEDITOR.env.mac ) ||    // The buttons in MacOS Apps are in reverse order (#4750)  
-				( buttonsOrder == 'rtl' && dir == 'ltr' ) ||  
-				( buttonsOrder == 'ltr' && dir == 'rtl' ) )  
-					defaultDefinition.buttons.reverse();  
-
+		var definition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ];
 
 		// Completes the definition with the default values.
-		definition = CKEDITOR.tools.extend( definition( editor ), defaultDefinition );
+		definition = CKEDITOR.tools.extend( definition( editor ), defaultDialogDefinition );
 
 		// Clone a functionally independent copy for this dialog.
@@ -126,4 +117,5 @@
 		// functions.
 		definition = new definitionObject( this, definition );
+
 
 		var doc = CKEDITOR.document;
@@ -139,4 +131,5 @@
 			contentSize : { width : 0, height : 0 },
 			size : { width : 0, height : 0 },
+			updateSize : false,
 			contents : {},
 			buttons : {},
@@ -187,32 +180,4 @@
 			}
 			, editor ).definition;
-
-		var tabsToRemove = {};
-		// Cache tabs that should be removed.
-		if ( !( 'removeDialogTabs' in editor._ ) && editor.config.removeDialogTabs )
-		{
-			var removeContents = editor.config.removeDialogTabs.split( ';' );
-
-			for ( i = 0; i < removeContents.length; i++ )
-			{
-				var parts = removeContents[ i ].split( ':' );
-				if ( parts.length == 2 )
-				{
-					var removeDialogName = parts[ 0 ];
-					if ( !tabsToRemove[ removeDialogName ] )
-						tabsToRemove[ removeDialogName ] = [];
-					tabsToRemove[ removeDialogName ].push( parts[ 1 ] );
-				}
-			}
-			editor._.removeDialogTabs = tabsToRemove;
-		}
-
-		// Remove tabs of this dialog.
-		if ( editor._.removeDialogTabs && ( tabsToRemove = editor._.removeDialogTabs[ dialogName ] ) )
-		{
-			for ( i = 0; i < tabsToRemove.length; i++ )
-				definition.removeContents( tabsToRemove[ i ] );
-		}
-
 		// Initialize load, show, hide, ok and cancel events.
 		if ( definition.onLoad )
@@ -637,4 +602,5 @@
 
 				this._.contentSize = { width : width, height : height };
+				this._.updateSize = true;
 			};
 		})(),
@@ -648,6 +614,13 @@
 		getSize : function()
 		{
+			if ( !this._.updateSize )
+				return this._.size;
 			var element = this._.element.getFirst();
-			return { width : element.$.offsetWidth || 0, height : element.$.offsetHeight || 0};
+			var size = this._.size = { width : element.$.offsetWidth || 0, height : element.$.offsetHeight || 0};
+
+			// If either the offsetWidth or offsetHeight is 0, the element isn't visible.
+			this._.updateSize = !size.width || !size.height;
+
+			return size;
 		},
 
@@ -657,5 +630,4 @@
 		 * @param {Number} x The target x-coordinate.
 		 * @param {Number} y The target y-coordinate.
-		 * @param {Boolean} save Flag indicate whether the dialog position should be remembered on next open up.
 		 * @example
 		 * dialogObj.move( 10, 40 );
@@ -664,5 +636,5 @@
 		{
 			var isFixed;
-			return function( x, y, save )
+			return function( x, y )
 			{
 				// The dialog may be fixed positioned or absolute positioned. Ask the
@@ -691,6 +663,4 @@
 							'top'	: ( y > 0 ? y : 0 ) + 'px'
 						});
-
-				save && ( this._.moved = 1 );
 			};
 		})(),
@@ -726,5 +696,4 @@
 				element.setStyle( 'display', 'block' );
 
-			CKEDITOR.ui.fire( 'ready', this );
 			// FIREFOX BUG: Fix vanishing caret for Firefox 2 or Gecko 1.8.
 			if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 )
@@ -740,6 +709,5 @@
 
 			// First, set the dialog to an appropriate size.
-			this.resize( this._.contentSize && this._.contentSize.width || definition.minWidth,
-					this._.contentSize && this._.contentSize.height || definition.minHeight );
+			this.resize( definition.minWidth, definition.minHeight );
 
 			// Reset all inputs back to their default value.
@@ -786,7 +754,14 @@
 			this._.hasFocus = false;
 
+			// Rearrange the dialog to the middle of the window.
 			CKEDITOR.tools.setTimeout( function()
 				{
-					this.layout();
+					var viewSize = CKEDITOR.document.getWindow().getViewPaneSize();
+					var dialogSize = this.getSize();
+
+					// We're using definition size for initial position because of
+					// offten corrupted data in offsetWidth at this point. (#4084)
+					this.move( ( viewSize.width - definition.minWidth ) / 2, ( viewSize.height - dialogSize.height ) / 2 );
+
 					this.parts.dialog.setStyle( 'visibility', '' );
 
@@ -801,17 +776,4 @@
 				},
 				100, this );
-		},
-
-		/**
-		 * Rearrange the dialog to its previous position or the middle of the window.
-		 * @since 3.5
-		 */
-		layout : function()
-		{
-			var viewSize = CKEDITOR.document.getWindow().getViewPaneSize(),
-					dialogSize = this.getSize();
-
-			this.move( this._.moved ? this._.position.x : ( viewSize.width - dialogSize.width ) / 2,
-					this._.moved ? this._.position.y : ( viewSize.height - dialogSize.height ) / 2 );
 		},
 
@@ -942,5 +904,5 @@
 							expand : !!contents.expand,
 							padding : contents.padding,
-							style : contents.style || 'width: 100%;'
+							style : contents.style || 'width: 100%; height: 100%;'
 						}, pageHtml );
 
@@ -1381,4 +1343,7 @@
 	};
 
+	// The buttons in MacOS Apps are in reverse order #4750
+	CKEDITOR.env.mac && defaultDialogDefinition.buttons.reverse();
+
 	// Tool function used to return an item from an array based on its id
 	// property.
@@ -1649,5 +1614,5 @@
 				realX = - margins[3];
 			else if ( abstractDialogCoords.x - margins[1] > viewPaneSize.width - dialogSize.width - magnetDistance )
-				realX = viewPaneSize.width - dialogSize.width + ( editor.lang.dir == 'rtl' ? 0 : margins[1] );
+				realX = viewPaneSize.width - dialogSize.width + margins[1];
 			else
 				realX = abstractDialogCoords.x;
@@ -1660,5 +1625,5 @@
 				realY = abstractDialogCoords.y;
 
-			dialog.move( realX, realY, 1 );
+			dialog.move( realX, realY );
 
 			evt.data.preventDefault();
@@ -1680,4 +1645,6 @@
 		dialog.parts.title.on( 'mousedown', function( evt )
 			{
+				dialog._.updateSize = true;
+
 				lastCoords = { x : evt.data.$.screenX, y : evt.data.$.screenY };
 
@@ -1699,104 +1666,116 @@
 	function initResizeHandles( dialog )
 	{
-		var def = dialog.definition,
-			resizable = def.resizable;
-
-		if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE )
-			return;
-
-		var editor = dialog.getParentEditor();
-		var wrapperWidth, wrapperHeight, viewSize, origin, startSize;
-
-		function positionDialog( right )
-		{
-			// Maintain righthand sizing in RTL.
-			if ( dialog._.moved && editor.lang.dir == 'rtl' )
-			{
-				var element = dialog._.element.getFirst();
-				element.setStyle( 'right', right + "px" );
-				element.removeStyle( 'left' );
-			}
-			else if ( !dialog._.moved )
-				dialog.layout();
-		}
-
-		var mouseDownFn = CKEDITOR.tools.addFunction( function( $event )
-		{
-			startSize = dialog.getSize();
-
-			// Calculate the offset between content and chrome size.
-			wrapperHeight = startSize.height - dialog.parts.contents.getSize( 'height',  ! ( CKEDITOR.env.gecko || CKEDITOR.env.opera || CKEDITOR.env.ie && CKEDITOR.env.quirks ) );
-			wrapperWidth = startSize.width - dialog.parts.contents.getSize( 'width', 1 );
-
-			origin = { x : $event.screenX, y : $event.screenY };
-
-			viewSize = CKEDITOR.document.getWindow().getViewPaneSize();
-
-			CKEDITOR.document.on( 'mousemove', mouseMoveHandler );
-			CKEDITOR.document.on( 'mouseup', mouseUpHandler );
+		var definition = dialog.definition,
+			minWidth = definition.minWidth || 0,
+			minHeight = definition.minHeight || 0,
+			resizable = definition.resizable,
+			margins = dialog.getParentEditor().skin.margins || [ 0, 0, 0, 0 ];
+
+		function topSizer( coords, dy )
+		{
+			coords.y += dy;
+		}
+
+		function rightSizer( coords, dx )
+		{
+			coords.x2 += dx;
+		}
+
+		function bottomSizer( coords, dy )
+		{
+			coords.y2 += dy;
+		}
+
+		function leftSizer( coords, dx )
+		{
+			coords.x += dx;
+		}
+
+		var lastCoords = null,
+			abstractDialogCoords = null,
+			magnetDistance = dialog._.editor.config.magnetDistance,
+			parts = [ 'tl', 't', 'tr', 'l', 'r', 'bl', 'b', 'br' ];
+
+		function mouseDownHandler( evt )
+		{
+			var partName = evt.listenerData.part, size = dialog.getSize();
+			abstractDialogCoords = dialog.getPosition();
+			CKEDITOR.tools.extend( abstractDialogCoords,
+				{
+					x2 : abstractDialogCoords.x + size.width,
+					y2 : abstractDialogCoords.y + size.height
+				} );
+			lastCoords = { x : evt.data.$.screenX, y : evt.data.$.screenY };
+
+			CKEDITOR.document.on( 'mousemove', mouseMoveHandler, dialog, { part : partName } );
+			CKEDITOR.document.on( 'mouseup', mouseUpHandler, dialog, { part : partName } );
 
 			if ( CKEDITOR.env.ie6Compat )
 			{
 				var coverDoc = currentCover.getChild( 0 ).getFrameDocument();
-				coverDoc.on( 'mousemove', mouseMoveHandler );
-				coverDoc.on( 'mouseup', mouseUpHandler );
-			}
-
-			$event.preventDefault && $event.preventDefault();
-		});
-
-		// Prepend the grip to the dialog.
-		dialog.on( 'load', function()
-		{
-			var direction = '';
-			if ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH )
-				direction = ' cke_resizer_horizontal';
-			else if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT )
-				direction = ' cke_resizer_vertical';
-			var resizer = CKEDITOR.dom.element.createFromHtml( '<div class="cke_resizer' + direction + '"' +
-					' title="' + CKEDITOR.tools.htmlEncode( editor.lang.resize ) + '"' + 
-					' onmousedown="CKEDITOR.tools.callFunction(' + mouseDownFn + ', event )"></div>' );
-			dialog.parts.footer.append( resizer, 1 );
-		});
-		editor.on( 'destroy', function() { CKEDITOR.tools.removeFunction( mouseDownFn ); } );
+				coverDoc.on( 'mousemove', mouseMoveHandler, dialog, { part : partName } );
+				coverDoc.on( 'mouseup', mouseUpHandler, dialog, { part : partName } );
+			}
+
+			evt.data.preventDefault();
+		}
 
 		function mouseMoveHandler( evt )
 		{
-			var rtl = editor.lang.dir == 'rtl',
-				dx = ( evt.data.$.screenX - origin.x ) * ( rtl ? -1 : 1 ),
-				dy = evt.data.$.screenY - origin.y,
-				width = startSize.width,
-				height = startSize.height,
-				internalWidth = width + dx * ( dialog._.moved ? 1 : 2 ),
-				internalHeight = height + dy * ( dialog._.moved ? 1 : 2 ),
-				element = dialog._.element.getFirst(),
-				right = rtl && element.getComputedStyle( 'right' ),
-				position = dialog.getPosition();
-
-			// IE might return "auto", we need exact position.
-			if ( right )
-				right = right == 'auto' ? viewSize.width - ( position.x || 0 ) - element.getSize( 'width' ) : parseInt( right, 10 );
-
-			if ( position.y + internalHeight > viewSize.height )
-				internalHeight = viewSize.height - position.y;
-
-			if ( ( rtl ? right : position.x ) + internalWidth > viewSize.width )
-				internalWidth = viewSize.width - ( rtl ? right : position.x );
-
-			// Make sure the dialog will not be resized to the wrong side when it's in the leftmost position for RTL.
-			if ( ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) && !( rtl && dx > 0 && !position.x ) )
-				width = Math.max( def.minWidth || 0, internalWidth - wrapperWidth );
-
-			if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT || resizable == CKEDITOR.DIALOG_RESIZE_BOTH )
-				height = Math.max( def.minHeight || 0, internalHeight - wrapperHeight );
-
-			dialog.resize( width, height );
-			// The right property might get broken during resizing, so computing it before the resizing.
-			positionDialog( right );
+			var x = evt.data.$.screenX,
+				y = evt.data.$.screenY,
+				dx = x - lastCoords.x,
+				dy = y - lastCoords.y,
+				viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(),
+				partName = evt.listenerData.part;
+
+			if ( partName.search( 't' ) != -1 )
+				topSizer( abstractDialogCoords, dy );
+			if ( partName.search( 'l' ) != -1 )
+				leftSizer( abstractDialogCoords, dx );
+			if ( partName.search( 'b' ) != -1 )
+				bottomSizer( abstractDialogCoords, dy );
+			if ( partName.search( 'r' ) != -1 )
+				rightSizer( abstractDialogCoords, dx );
+
+			lastCoords = { x : x, y : y };
+
+			var realX, realY, realX2, realY2;
+
+			if ( abstractDialogCoords.x + margins[3] < magnetDistance )
+				realX = - margins[3];
+			else if ( partName.search( 'l' ) != -1 && abstractDialogCoords.x2 - abstractDialogCoords.x < minWidth + magnetDistance )
+				realX = abstractDialogCoords.x2 - minWidth;
+			else
+				realX = abstractDialogCoords.x;
+
+			if ( abstractDialogCoords.y + margins[0] < magnetDistance )
+				realY = - margins[0];
+			else if ( partName.search( 't' ) != -1 && abstractDialogCoords.y2 - abstractDialogCoords.y < minHeight + magnetDistance )
+				realY = abstractDialogCoords.y2 - minHeight;
+			else
+				realY = abstractDialogCoords.y;
+
+			if ( abstractDialogCoords.x2 - margins[1] > viewPaneSize.width - magnetDistance )
+				realX2 = viewPaneSize.width + margins[1] ;
+			else if ( partName.search( 'r' ) != -1 && abstractDialogCoords.x2 - abstractDialogCoords.x < minWidth + magnetDistance )
+				realX2 = abstractDialogCoords.x + minWidth;
+			else
+				realX2 = abstractDialogCoords.x2;
+
+			if ( abstractDialogCoords.y2 - margins[2] > viewPaneSize.height - magnetDistance )
+				realY2= viewPaneSize.height + margins[2] ;
+			else if ( partName.search( 'b' ) != -1 && abstractDialogCoords.y2 - abstractDialogCoords.y < minHeight + magnetDistance )
+				realY2 = abstractDialogCoords.y + minHeight;
+			else
+				realY2 = abstractDialogCoords.y2 ;
+
+			dialog.move( realX, realY );
+			dialog.resize( realX2 - realX, realY2 - realY );
 
 			evt.data.preventDefault();
 		}
 
-		function mouseUpHandler()
+		function mouseUpHandler( evt )
 		{
 			CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler );
@@ -1809,23 +1788,21 @@
 				coverDoc.removeListener( 'mousemove', mouseMoveHandler );
 			}
-
-			// Switch back to use the left property, if RTL is used.
-			if ( editor.lang.dir == 'rtl' )
-			{
-				var element = dialog._.element.getFirst(),
-					left = element.getComputedStyle( 'left' );
-
-				// IE might return "auto", we need exact position.
-				if ( left == 'auto' )
-					left = viewSize.width - parseInt( element.getStyle( 'right' ), 10 ) - dialog.getSize().width;
-				else
-					left = parseInt( left, 10 );
-
-				element.removeStyle( 'right' );
-				// Make sure the left property gets applied, even if it is the same as previously.
-				dialog._.position.x += 1;
-				dialog.move( left, dialog._.position.y );
-			}
-		}
+		}
+
+// TODO : Simplify the resize logic, having just a single resize grip <div>.
+//		var widthTest = /[lr]/,
+//			heightTest = /[tb]/;
+//		for ( var i = 0 ; i < parts.length ; i++ )
+//		{
+//			var element = dialog.parts[ parts[i] + '_resize' ];
+//			if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE ||
+//					resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT && widthTest.test( parts[i] ) ||
+//			  		resizable == CKEDITOR.DIALOG_RESIZE_WIDTH && heightTest.test( parts[i] ) )
+//			{
+//				element.hide();
+//				continue;
+//			}
+//			element.on( 'mousedown', mouseDownHandler, dialog, { part : parts[i] } );
+//		}
 	}
 
@@ -3016,32 +2993,4 @@
 
 /**
- * The guildeline to follow when generating the dialog buttons. There are 3 possible options:
- * <ul>
- *     <li>'OS' - the buttons will be displayed in the default order of the user's OS;</li>
- *     <li>'ltr' - for Left-To-Right order;</li>
- *     <li>'rtl' - for Right-To-Left order.</li>
- * </ul>
- * @name CKEDITOR.config.dialog_buttonsOrder
- * @type String
- * @default 'OS'
- * @since 3.5
- * @example
- * config.dialog_buttonsOrder = 'rtl';
- */
-
-/**  
- * The dialog contents to removed. It's a string composed by dialog name and tab name with a colon between them.
- * Separate each pair with semicolon (see example).
- * <b>Note: All names are case-sensitive.</b>
- * <b>Note: Be cautious when specifying dialog tabs that are mandatory, like "info", dialog functionality might be broken because of this!<b>
- * @name CKEDITOR.config.removeDialogTabs
- * @type String
- * @since 3.5
- * @default ''
- * @example
- * config.removeDialogTabs = 'flash:advanced;image:Link';
- */
-
-/**
  * Fired when a dialog definition is about to be used to create a dialog into
  * an editor instance. This event makes it possible to customize the definition
Index: /CKEditor/trunk/_source/plugins/div/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/div/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/div/plugin.js	(revision 6192)
@@ -38,8 +38,8 @@
 								div = blockLimit.is( 'div' ) && blockLimit;
 
-							if ( div && !div.data( 'cke-div-added' ) )
+							if ( div && !div.getAttribute( '_cke_div_added' ) )
 							{
 								toRemove.push( div );
-								div.data( 'cke-div-added' );
+								div.setAttribute( '_cke_div_added' );
 							}
 						}
Index: /CKEditor/trunk/_source/plugins/elementspath/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/elementspath/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/elementspath/plugin.js	(revision 6192)
@@ -20,7 +20,6 @@
 				var element = CKEDITOR.document.getById( idBase + '0' );
 
-				// Make the first button focus accessible for IE. (#3417)
-				// Adobe AIR instead need while of delay.
-				element && element.focus( CKEDITOR.env.ie || CKEDITOR.env.air );
+				if ( element )
+					element.focus();
 			}
 		}
@@ -56,51 +55,4 @@
 							'<div id="' + spaceId + '" class="cke_path" role="group" aria-labelledby="' + spaceId + '_label">' + emptyHtml + '</div>';
 					}
-				});
-
-			function onClick( elementIndex )
-			{
-				editor.focus();
-				var element = editor._.elementsPath.list[ elementIndex ];
-				editor.getSelection().selectElement( element );
-			}
-
-			var onClickHanlder = CKEDITOR.tools.addFunction( onClick );
-
-			var onKeyDownHandler = CKEDITOR.tools.addFunction( function( elementIndex, ev )
-				{
-					var idBase = editor._.elementsPath.idBase,
-						element;
-
-					ev = new CKEDITOR.dom.event( ev );
-
-					var rtl = editor.lang.dir == 'rtl';
-					switch ( ev.getKeystroke() )
-					{
-						case rtl ? 39 : 37 :		// LEFT-ARROW
-						case 9 :					// TAB
-							element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) );
-							if ( !element )
-								element = CKEDITOR.document.getById( idBase + '0' );
-							element.focus();
-							return false;
-
-						case rtl ? 37 : 39 :		// RIGHT-ARROW
-						case CKEDITOR.SHIFT + 9 :	// SHIFT + TAB
-							element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) );
-							if ( !element )
-								element = CKEDITOR.document.getById( idBase + ( editor._.elementsPath.list.length - 1 ) );
-							element.focus();
-							return false;
-
-						case 27 :					// ESC
-							editor.focus();
-							return false;
-
-						case 13 :					// ENTER	// Opera
-						case 32 :					// SPACE
-							onClick( elementIndex );
-							return false;
-					}
-					return true;
 				});
 
@@ -131,6 +83,6 @@
 							var index = elementsList.push( element ) - 1;
 							var name;
-							if ( element.data( 'cke-real-element-type' ) )
-								name = element.data( 'cke-real-element-type' );
+							if ( element.getAttribute( '_cke_real_element_type' ) )
+								name = element.getAttribute( '_cke_real_element_type' );
 							else
 								name = element.getName();
@@ -161,7 +113,7 @@
 									' onfocus="event.preventBubble();"' : '' ) +
 									' hidefocus="true" ' +
-									' onkeydown="return CKEDITOR.tools.callFunction(', onKeyDownHandler, ',', index, ', event );"' +
+									' onkeydown="return CKEDITOR._.elementsPath.keydown(\'', editor.name, '\',', index, ', event);"' +
 									extra ,
-									' onclick="CKEDITOR.tools.callFunction('+ onClickHanlder, ',', index, '); return false;"',
+									' onclick="return CKEDITOR._.elementsPath.click(\'', editor.name, '\',', index, ');"',
 									' role="button" aria-labelledby="' + idBase + index + '_label">',
 										name,
@@ -177,7 +129,5 @@
 					}
 
-					var space = getSpaceElement();
-					space.setHtml( html.join('') + emptyHtml );
-					editor.fire( 'elementsPathUpdate', { space : space } );
+					getSpaceElement().setHtml( html.join('') + emptyHtml );
 				});
 
@@ -193,2 +143,72 @@
 	});
 })();
+
+/**
+ * Handles the click on an element in the element path.
+ * @private
+ */
+CKEDITOR._.elementsPath =
+{
+	click : function( instanceName, elementIndex )
+	{
+		var editor = CKEDITOR.instances[ instanceName ];
+		editor.focus();
+
+		var element = editor._.elementsPath.list[ elementIndex ];
+
+		if ( element.is( 'body' ) )
+		{
+			var range = new CKEDITOR.dom.range( editor.document );
+			range.selectNodeContents( element );
+			range.select();
+		}
+		else
+			editor.getSelection().selectElement( element );
+
+		return false;
+	},
+
+	keydown : function( instanceName, elementIndex, ev )
+	{
+		var instance = CKEDITOR.ui.button._.instances[ elementIndex ];
+		var editor = CKEDITOR.instances[ instanceName ];
+		var idBase = editor._.elementsPath.idBase;
+
+		var element;
+
+		ev = new CKEDITOR.dom.event( ev );
+
+		var rtl = editor.lang.dir == 'rtl';
+		switch ( ev.getKeystroke() )
+		{
+			case rtl ? 39 : 37 :					// LEFT-ARROW
+			case 9 :					// TAB
+				element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) );
+				if ( !element )
+					element = CKEDITOR.document.getById( idBase + '0' );
+				element.focus();
+				return false;
+
+			case rtl ? 37 : 39 :					// RIGHT-ARROW
+			case CKEDITOR.SHIFT + 9 :	// SHIFT + TAB
+				element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) );
+				if ( !element )
+					element = CKEDITOR.document.getById( idBase + ( editor._.elementsPath.list.length - 1 ) );
+				element.focus();
+				return false;
+
+			case 27 :					// ESC
+				editor.focus();
+				return false;
+
+			case 13 :					// ENTER	// Opera
+			case 32 :					// SPACE
+				this.click( instanceName, elementIndex );
+				return false;
+
+			//default :
+			//	alert( ev.getKeystroke() );
+		}
+		return true;
+	}
+};
Index: /CKEditor/trunk/_source/plugins/enterkey/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/enterkey/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/enterkey/plugin.js	(revision 6192)
@@ -231,5 +231,5 @@
 					newBlockDir;
 					
-				if ( ( newBlockDir = startBlock.getDirection() ) )
+				if ( newBlockDir = startBlock.getDirection() )
 				{
 					newBlock = doc.createElement( 'div' );
Index: /CKEditor/trunk/_source/plugins/fakeobjects/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/fakeobjects/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/fakeobjects/plugin.js	(revision 6192)
@@ -13,5 +13,5 @@
 			{
 				var attributes = element.attributes,
-					realHtml = attributes && attributes[ 'data-cke-realelement' ],
+					realHtml = attributes && attributes._cke_realelement,
 					realFragment = realHtml && new CKEDITOR.htmlParser.fragment.fromHtml( decodeURIComponent( realHtml ) ),
 					realElement = realFragment && realFragment.children[ 0 ];
@@ -19,5 +19,5 @@
 				// If we have width/height in the element, we must move it into
 				// the real element.
-				if ( realElement && element.attributes[ 'data-cke-resizable' ] )
+				if ( realElement && element.attributes._cke_resizable )
 				{
 					var style = element.attributes.style;
@@ -69,6 +69,6 @@
 		'class' : className,
 		src : CKEDITOR.getUrl( 'images/spacer.gif' ),
-		'data-cke-realelement' : encodeURIComponent( realElement.getOuterHtml() ),
-		'data-cke-real-node-type' : realElement.type,
+		_cke_realelement : encodeURIComponent( realElement.getOuterHtml() ),
+		_cke_real_node_type : realElement.type,
 		alt : lang[ realElementType ] || lang.unknown,
 		align : realElement.getAttribute( 'align' ) || ''
@@ -76,8 +76,8 @@
 
 	if ( realElementType )
-		attributes[ 'data-cke-real-element-type' ] = realElementType;
+		attributes._cke_real_element_type = realElementType;
 
 	if ( isResizable )
-		attributes[ 'data-cke-resizable' ] = isResizable;
+		attributes._cke_resizable = isResizable;
 
 	return this.document.createElement( 'img', { attributes : attributes } );
@@ -97,6 +97,6 @@
 		'class' : className,
 		src : CKEDITOR.getUrl( 'images/spacer.gif' ),
-		'data-cke-realelement' : encodeURIComponent( html ),
-		'data-cke-real-node-type' : realElement.type,
+		_cke_realelement : encodeURIComponent( html ),
+		_cke_real_node_type : realElement.type,
 		alt : lang[ realElementType ] || lang.unknown,
 		align : realElement.attributes.align || ''
@@ -104,8 +104,8 @@
 
 	if ( realElementType )
-		attributes[ 'data-cke-real-element-type' ] = realElementType;
+		attributes._cke_real_element_type = realElementType;
 
 	if ( isResizable )
-		attributes[ 'data-cke-resizable' ] = isResizable;
+		attributes._cke_resizable = isResizable;
 
 	return new CKEDITOR.htmlParser.element( 'img', attributes );
@@ -114,9 +114,9 @@
 CKEDITOR.editor.prototype.restoreRealElement = function( fakeElement )
 {
-	if ( fakeElement.data( 'cke-real-node-type' ) != CKEDITOR.NODE_ELEMENT )
+	if ( fakeElement.getAttribute( '_cke_real_node_type' ) != CKEDITOR.NODE_ELEMENT )
 		return null;
 
 	return CKEDITOR.dom.element.createFromHtml(
-		decodeURIComponent( fakeElement.data( 'cke-realelement' ) ),
+		decodeURIComponent( fakeElement.getAttribute( '_cke_realelement' ) ),
 		this.document );
 };
Index: /CKEditor/trunk/_source/plugins/filebrowser/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/filebrowser/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/filebrowser/plugin.js	(revision 6192)
@@ -279,5 +279,5 @@
 			else if ( element.filebrowser.action == 'QuickUpload' && element[ 'for' ] )
 			{
-				url = element.filebrowser.url;
+				var url = element.filebrowser.url;
 				if ( url === undefined )
 				{
Index: /CKEditor/trunk/_source/plugins/flash/dialogs/flash.js
===================================================================
--- /CKEditor/trunk/_source/plugins/flash/dialogs/flash.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/flash/dialogs/flash.js	(revision 6192)
@@ -191,5 +191,5 @@
 				// Try to detect any embed or object tag that has Flash parameters.
 				var fakeImage = this.getSelectedElement();
-				if ( fakeImage && fakeImage.data( 'cke-real-element-type' ) && fakeImage.data( 'cke-real-element-type' ) == 'flash' )
+				if ( fakeImage && fakeImage.getAttribute( '_cke_real_element_type' ) && fakeImage.getAttribute( '_cke_real_element_type' ) == 'flash' )
 				{
 					this.fakeImage = fakeImage;
Index: /CKEditor/trunk/_source/plugins/flash/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/flash/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/flash/plugin.js	(revision 6192)
@@ -76,5 +76,5 @@
 					var element = evt.data.element;
 
-					if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'flash' )
+					if ( element.is( 'img' ) && element.getAttribute( '_cke_real_element_type' ) == 'flash' )
 						evt.data.dialog = 'flash';
 				});
@@ -86,5 +86,5 @@
 					{
 						if ( element && element.is( 'img' ) && !element.isReadOnly()
-								&& element.data( 'cke-real-element-type' ) == 'flash' )
+								&& element.getAttribute( '_cke_real_element_type' ) == 'flash' )
 							return { flash : CKEDITOR.TRISTATE_OFF };
 					});
Index: /CKEditor/trunk/_source/plugins/floatpanel/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/floatpanel/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/floatpanel/plugin.js	(revision 6192)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -306,5 +306,5 @@
 							this.allowBlur( true );
 						}, 0, this);
-					},  CKEDITOR.env.air ? 200 : 0, this);
+					}, 0, this);
 				this.visible = 1;
 
Index: /CKEditor/trunk/_source/plugins/forms/dialogs/button.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/dialogs/button.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/forms/dialogs/button.js	(revision 6192)
@@ -53,5 +53,5 @@
 						{
 							this.setValue(
-									element.data( 'cke-saved-name' ) ||
+									element.getAttribute( '_cke_saved_name' ) ||
 									element.getAttribute( 'name' ) ||
 									'' );
@@ -62,8 +62,8 @@
 
 							if ( this.getValue() )
-								element.data( 'cke-saved-name', this.getValue() );
+								element.setAttribute( '_cke_saved_name', this.getValue() );
 							else
 							{
-								element.data( 'cke-saved-name', false );
+								element.removeAttribute( '_cke_saved_name' );
 								element.removeAttribute( 'name' );
 							}
Index: /CKEditor/trunk/_source/plugins/forms/dialogs/checkbox.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/dialogs/checkbox.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/forms/dialogs/checkbox.js	(revision 6192)
@@ -52,5 +52,5 @@
 						{
 							this.setValue(
-									element.data( 'cke-saved-name' ) ||
+									element.getAttribute( '_cke_saved_name' ) ||
 									element.getAttribute( 'name' ) ||
 									'' );
@@ -62,8 +62,8 @@
 							// IE failed to update 'name' property on input elements, protect it now.
 							if ( this.getValue() )
-								element.data( 'cke-saved-name', this.getValue() );
+								element.setAttribute( '_cke_saved_name', this.getValue() );
 							else
 							{
-								element.data( 'cke-saved-name', false );
+								element.removeAttribute( '_cke_saved_name' );
 								element.removeAttribute( 'name' );
 							}
Index: /CKEditor/trunk/_source/plugins/forms/dialogs/form.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/dialogs/form.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/forms/dialogs/form.js	(revision 6192)
@@ -85,5 +85,5 @@
 						setup : function( element )
 						{
-							this.setValue( element.data( 'cke-saved-name' ) ||
+							this.setValue( element.getAttribute( '_cke_saved_name' ) ||
 									element.getAttribute( 'name' ) ||
 									'' );
@@ -92,8 +92,8 @@
 						{
 							if ( this.getValue() )
-								element.data( 'cke-saved-name', this.getValue() );
+								element.setAttribute( '_cke_saved_name', this.getValue() );
 							else
 							{
-								element.data( 'cke-saved-name', false );
+								element.removeAttribute( '_cke_saved_name' );
 								element.removeAttribute( 'name' );
 							}
Index: /CKEditor/trunk/_source/plugins/forms/dialogs/hiddenfield.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/dialogs/hiddenfield.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/forms/dialogs/hiddenfield.js	(revision 6192)
@@ -18,5 +18,5 @@
 				element = selection.getSelectedElement();
 
-			if ( element && element.data( 'cke-real-element-type' ) && element.data( 'cke-real-element-type' ) == 'hiddenfield' )
+			if ( element && element.getAttribute( '_cke_real_element_type' ) && element.getAttribute( '_cke_real_element_type' ) == 'hiddenfield' )
 			{
 				this.hiddenField = element;
@@ -60,5 +60,5 @@
 						{
 							this.setValue(
-									element.data( 'cke-saved-name' ) ||
+									element.getAttribute( '_cke_saved_name' ) ||
 									element.getAttribute( 'name' ) ||
 									'' );
Index: /CKEditor/trunk/_source/plugins/forms/dialogs/radio.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/dialogs/radio.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/forms/dialogs/radio.js	(revision 6192)
@@ -52,5 +52,5 @@
 						{
 							this.setValue(
-									element.data( 'cke-saved-name' ) ||
+									element.getAttribute( '_cke_saved_name' ) ||
 									element.getAttribute( 'name' ) ||
 									'' );
@@ -61,8 +61,8 @@
 
 							if ( this.getValue() )
-								element.data( 'cke-saved-name', this.getValue() );
+								element.setAttribute( '_cke_saved_name', this.getValue() );
 							else
 							{
-								element.data( 'cke-saved-name', false );
+								element.removeAttribute( '_cke_saved_name' );
 								element.removeAttribute( 'name' );
 							}
Index: /CKEditor/trunk/_source/plugins/forms/dialogs/select.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/dialogs/select.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/forms/dialogs/select.js	(revision 6192)
@@ -194,9 +194,9 @@
 						{
 							if ( name == 'clear' )
-								this.setValue( this[ 'default' ] || '' );
+								this.setValue( this['default'] || '' );
 							else if ( name == 'select' )
 							{
 								this.setValue(
-										element.data( 'cke-saved-name' ) ||
+										element.getAttribute( '_cke_saved_name' ) ||
 										element.getAttribute( 'name' ) ||
 										'' );
@@ -206,8 +206,8 @@
 						{
 							if ( this.getValue() )
-								element.data( 'cke-saved-name', this.getValue() );
+								element.setAttribute( '_cke_saved_name', this.getValue() );
 							else
 							{
-								element.data( 'cke-saved-name', false );
+								element.removeAttribute( '_cke_saved_name' ) ;
 								element.removeAttribute( 'name' );
 							}
Index: /CKEditor/trunk/_source/plugins/forms/dialogs/textarea.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/dialogs/textarea.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/forms/dialogs/textarea.js	(revision 6192)
@@ -51,5 +51,5 @@
 						{
 							this.setValue(
-									element.data( 'cke-saved-name' ) ||
+									element.getAttribute( '_cke_saved_name' ) ||
 									element.getAttribute( 'name' ) ||
 									'' );
@@ -58,8 +58,8 @@
 						{
 							if ( this.getValue() )
-								element.data( 'cke-saved-name', this.getValue() );
+								element.setAttribute( '_cke_saved_name', this.getValue() );
 							else
 							{
-								element.data( 'cke-saved-name', false );
+								element.removeAttribute( '_cke_saved_name' );
 								element.removeAttribute( 'name' );
 							}
Index: /CKEditor/trunk/_source/plugins/forms/dialogs/textfield.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/dialogs/textfield.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/forms/dialogs/textfield.js	(revision 6192)
@@ -99,5 +99,5 @@
 								{
 									this.setValue(
-											element.data( 'cke-saved-name' ) ||
+											element.getAttribute( '_cke_saved_name' ) ||
 											element.getAttribute( 'name' ) ||
 											'' );
@@ -108,8 +108,8 @@
 
 									if ( this.getValue() )
-										element.data( 'cke-saved-name', this.getValue() );
+										element.setAttribute( '_cke_saved_name', this.getValue() );
 									else
 									{
-										element.data( 'cke-saved-name', false );
+										element.removeAttribute( '_cke_saved_name' );
 										element.removeAttribute( 'name' );
 									}
Index: /CKEditor/trunk/_source/plugins/forms/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/forms/plugin.js	(revision 6192)
@@ -168,5 +168,5 @@
 						}
 
-						if ( name == 'img' && element.data( 'cke-real-element-type' ) == 'hiddenfield' )
+						if ( name == 'img' && element.getAttribute( '_cke_real_element_type' ) == 'hiddenfield' )
 							return { hiddenfield : CKEDITOR.TRISTATE_OFF };
 					}
@@ -184,5 +184,5 @@
 				else if ( element.is( 'textarea' ) )
 					evt.data.dialog = 'textarea';
-				else if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'hiddenfield' )
+				else if ( element.is( 'img' ) && element.getAttribute( '_cke_real_element_type' ) == 'hiddenfield' )
 					evt.data.dialog = 'hiddenfield';
 				else if ( element.is( 'input' ) )
Index: /CKEditor/trunk/_source/plugins/htmldataprocessor/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/htmldataprocessor/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/htmldataprocessor/plugin.js	(revision 6192)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -39,14 +39,10 @@
 	}
 
-	function blockNeedsExtension( block, fromSource, extendEmptyBlock )
-	{
-		if( !extendEmptyBlock ||
-			typeof extendEmptyBlock == 'function' && ( extendEmptyBlock( block ) === false ) )
-			return false;
-
+	function blockNeedsExtension( block, fromSource )
+	{
         // 1. For IE version >=8,  empty blocks are displayed correctly themself in wysiwiyg;
         // 2. For the rest, at least table cell and list item need no filler space.
         // (#6248)
-        if ( fromSource && CKEDITOR.env.ie &&
+        if ( fromSource && CKEDITOR.env.ie && 
                 ( document.documentMode > 7
                 || block.name in CKEDITOR.dtd.tr
@@ -56,25 +52,30 @@
 		var lastChild = lastNoneSpaceChild( block );
 
-		return !lastChild || lastChild &&
-				( lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.name == 'br'
-				// Some of the controls in form needs extension too,
-				// to move cursor at the end of the form. (#4791)
-				|| block.name == 'form' && lastChild.name == 'input' );
-	}
-
-	function getBlockExtension( isOutput, emptyBlockFiller )
-	{
-		return function( node )
-		{
-			trimFillers( node, !isOutput );
-
-			if ( blockNeedsExtension( node, !isOutput, emptyBlockFiller ) )
-			{
-				if ( isOutput || CKEDITOR.env.ie )
-					node.add( new CKEDITOR.htmlParser.text( '\xa0' ) );
-				else
-					node.add( new CKEDITOR.htmlParser.element( 'br', {} ) );
-			}
-		};
+		return !lastChild
+			|| lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.name == 'br'
+			// Some of the controls in form needs extension too,
+			// to move cursor at the end of the form. (#4791)
+			|| block.name == 'form' && lastChild.name == 'input';
+	}
+
+	function extendBlockForDisplay( block )
+	{
+		trimFillers( block, true );
+
+		if ( blockNeedsExtension( block, true ) )
+		{
+			if ( CKEDITOR.env.ie )
+				block.add( new CKEDITOR.htmlParser.text( '\xa0' ) );
+			else
+				block.add( new CKEDITOR.htmlParser.element( 'br', {} ) );
+		}
+	}
+
+	function extendBlockForOutput( block )
+	{
+		trimFillers( block );
+
+		if ( blockNeedsExtension( block ) )
+			block.add( new CKEDITOR.htmlParser.text( '\xa0' ) );
 	}
 
@@ -98,5 +99,5 @@
 			// Event attributes (onXYZ) must not be directly set. They can become
 			// active in the editing area (IE|WebKit).
-			[ ( /^on/ ), 'data-cke-pa-on' ]
+			[ ( /^on/ ), '_cke_pa_on' ]
 		]
 	};
@@ -105,5 +106,5 @@
 
 	for ( i in blockLikeTags )
-		defaultDataBlockFilterRules.elements[ i ] = getBlockExtension();
+		defaultDataBlockFilterRules.elements[ i ] = extendBlockForDisplay;
 
 	var defaultHtmlFilterRules =
@@ -121,8 +122,8 @@
 			[
 				// Attributes saved for changes and protected attributes.
-				[ ( /^data-cke-(saved|pa)-/ ), '' ],
-
-				// All "data-cke" attributes are to be ignored.
-				[ ( /^data-cke.*/ ), '' ],
+				[ ( /^_cke_(saved|pa)_/ ), '' ],
+
+				// All "_cke" attributes are to be ignored.
+				[ ( /^_cke.*/ ), '' ],
 
 				[ 'hidefocus', '' ]
@@ -138,5 +139,5 @@
 					{
 						// Elements marked as temporary are to be ignored.
-						if ( attribs[ 'data-cke-temp' ] )
+						if ( attribs.cke_temp )
 							return false;
 
@@ -146,5 +147,5 @@
 						for ( var i = 0 ; i < attributeNames.length ; i++ )
 						{
-							savedAttributeName = 'data-cke-saved-' + attributeNames[ i ];
+							savedAttributeName = '_cke_saved_' + attributeNames[ i ];
 							savedAttributeName in attribs && ( delete attribs[ attributeNames[ i ] ] );
 						}
@@ -181,5 +182,5 @@
 					if ( !( element.children.length ||
 							element.attributes.name ||
-							element.attributes[ 'data-cke-saved-name' ] ) )
+							element.attributes._cke_saved_name ) )
 					{
 						return false;
@@ -187,11 +188,4 @@
 				},
 
-				// Remove dummy span in webkit.
-				span: function( element )
-				{
-					if ( element.attributes[ 'class' ] == 'Apple-style-span' )
-						delete element.name;
-				},
-
 				html : function( element )
 				{
@@ -218,5 +212,5 @@
 				{
 					var titleText = element.children[ 0 ];
-					titleText && ( titleText.value = element.attributes[ 'data-cke-title' ] || '' );
+					titleText && ( titleText.value = element.attributes[ '_cke_title' ] || '' );
 				}
 			},
@@ -249,4 +243,9 @@
 		};
 
+	var defaultHtmlBlockFilterRules = { elements : {} };
+
+	for ( i in blockLikeTags )
+		defaultHtmlBlockFilterRules.elements[ i ] = extendBlockForOutput;
+
 	if ( CKEDITOR.env.ie )
 	{
@@ -275,5 +274,5 @@
 
 	var protectAttributeRegex = /<((?:a|area|img|input)\b[\s\S]*?\s)((href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))([^>]*)>/gi,
-		findSavedSrcRegex = /\sdata-cke-saved-src\s*=/;
+		findSavedSrcRegex = /\s_cke_saved_src\s*=/;
 
 	var protectElementsRegex = /(?:<style(?=[ >])[^>]*>[\s\S]*<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,
@@ -293,5 +292,5 @@
 					return tag;
 				else
-					return '<' + beginning + fullAttr + ' data-cke-saved-' + fullAttr + end + '>';
+					return '<' + beginning + fullAttr + ' _cke_saved_' + fullAttr + end + '>';
 			});
 	}
@@ -414,15 +413,5 @@
 			dataProcessor.dataFilter.addRules( defaultDataBlockFilterRules );
 			dataProcessor.htmlFilter.addRules( defaultHtmlFilterRules );
-
-			var defaultHtmlBlockFilterRules = { elements : {} };
-			for ( i in blockLikeTags )
-				defaultHtmlBlockFilterRules.elements[ i ] = getBlockExtension( true, editor.config.fillEmptyBlocks );
-
 			dataProcessor.htmlFilter.addRules( defaultHtmlBlockFilterRules );
-		},
-		
-		onLoad : function()
-		{
-			! ( 'fillEmptyBlocks' in CKEDITOR.config ) && ( CKEDITOR.config.fillEmptyBlocks = 1 );
 		}
 	});
@@ -516,5 +505,4 @@
  * W3C XHTML 1.0 standards (<a href="http://www.w3.org/TR/xhtml1/#C_12">C.12, XHTML 1.0</a>).
  * @name CKEDITOR.config.forceSimpleAmpersand
- * @name CKEDITOR.config.forceSimpleAmpersand
  * @type Boolean
  * @default false
@@ -522,23 +510,2 @@
  * config.forceSimpleAmpersand = false;
  */
-
-/**
- * Whether a filler text (non-breaking space entity - &nbsp;) will be inserted into empty block elements in HTML output,
- * this is used to render block elements properly with line-height; When a function is instead specified,
- * it'll be passed a {@link CKEDITOR.htmlParser.element} to decide whether adding the filler text
- * by expecting a boolean return value.
- * @name CKEDITOR.config.fillEmptyBlocks;
- * @since 3.5
- * @type Boolean
- * @default true
- * @example
- * config.fillEmptyBlocks = false;	// Prevent filler nodes in all empty blocks.
- *
- * // Prevent filler node only in float cleaners.
- * config.fillEmptyBlocks = function( element )
- * {
- * 	if ( element.attributes[ 'class' ].indexOf ( 'clear-both' ) != -1 )
- * 		return false;
- * }
- */
-
Index: /CKEditor/trunk/_source/plugins/image/dialogs/image.js
===================================================================
--- /CKEditor/trunk/_source/plugins/image/dialogs/image.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/image/dialogs/image.js	(revision 6192)
@@ -265,5 +265,5 @@
 			title : ( dialogType == 'image' ) ? editor.lang.image.title : editor.lang.image.titleButton,
 			minWidth : 420,
-			minHeight : CKEDITOR.env.ie && CKEDITOR.env.quirks?  360: 310,
+			minHeight : 310,
 			onShow : function()
 			{
@@ -320,5 +320,5 @@
 				}
 
-				if ( element && element.getName() == 'img' && !element.data( 'cke-realelement' )
+				if ( element && element.getName() == 'img' && !element.getAttribute( '_cke_realelement' )
 					|| element && element.getName() == 'input' && element.getAttribute( 'type' ) == 'image' )
 				{
@@ -534,5 +534,5 @@
 												if ( type == IMAGE )
 												{
-													var url = element.data( 'cke-saved-src' ) || element.getAttribute( 'src' );
+													var url = element.getAttribute( '_cke_saved_src' ) || element.getAttribute( 'src' );
 													var field = this;
 
@@ -548,5 +548,5 @@
 												if ( type == IMAGE && ( this.getValue() || this.isChanged() ) )
 												{
-													element.data( 'cke-saved-src', decodeURI( this.getValue() ) );
+													element.setAttribute( '_cke_saved_src', decodeURI( this.getValue() ) );
 													element.setAttribute( 'src', decodeURI( this.getValue() ) );
 												}
@@ -608,13 +608,15 @@
 						{
 							type : 'hbox',
+							widths : [ '140px', '240px' ],
 							children :
 							[
 								{
 									type : 'vbox',
+									padding : 10,
 									children :
 									[
 										{
 											type : 'hbox',
-											widths : [ '50%', '50%' ],
+											widths : [ '70%', '30%' ],
 											children :
 											[
@@ -628,4 +630,5 @@
 															width: '40px',
 															id : 'txtWidth',
+															labelLayout : 'horizontal',
 															label : editor.lang.image.width,
 															onKeyUp : onSizeChange,
@@ -677,4 +680,5 @@
 															id : 'txtHeight',
 															width: '40px',
+															labelLayout : 'horizontal',
 															label : editor.lang.image.height,
 															onKeyUp : onSizeChange,
@@ -727,5 +731,5 @@
 												{
 													type : 'html',
-													style : 'margin-top:30px;width:40px;height:40px;',
+													style : 'margin-top:10px;width:40px;height:40px;',
 													onLoad : function()
 													{
@@ -797,4 +801,5 @@
 													id : 'txtBorder',
 													width: '60px',
+													labelLayout : 'horizontal',
 													label : editor.lang.image.border,
 													'default' : '',
@@ -853,4 +858,5 @@
 													id : 'txtHSpace',
 													width: '60px',
+													labelLayout : 'horizontal',
 													label : editor.lang.image.hSpace,
 													'default' : '',
@@ -916,4 +922,5 @@
 													id : 'txtVSpace',
 													width : '60px',
+													labelLayout : 'horizontal',
 													label : editor.lang.image.vSpace,
 													'default' : '',
@@ -977,4 +984,5 @@
 													id : 'cmbAlign',
 													type : 'select',
+													labelLayout : 'horizontal',
 													widths : [ '35%','65%' ],
 													style : 'width:90px',
@@ -1091,5 +1099,5 @@
 								if ( type == LINK )
 								{
-									var href = element.data( 'cke-saved-href' );
+									var href = element.getAttribute( '_cke_saved_href' );
 									if ( !href )
 										href = element.getAttribute( 'href' );
@@ -1103,5 +1111,5 @@
 									if ( this.getValue() || this.isChanged() )
 									{
-										element.data( 'cke-saved-href', decodeURI( this.getValue() ) );
+										element.setAttribute( '_cke_saved_href', decodeURI( this.getValue() ) );
 										element.setAttribute( 'href', 'javascript:void(0)/*' +
 											CKEDITOR.tools.getNextNumber() + '*/' );
Index: /CKEditor/trunk/_source/plugins/image/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/image/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/image/plugin.js	(revision 6192)
@@ -31,5 +31,5 @@
 				var element = evt.data.element;
 
-				if ( element.is( 'img' ) && !element.data( 'cke-realelement' ) )
+				if ( element.is( 'img' ) && !element.getAttribute( '_cke_realelement' ) )
 					evt.data.dialog = 'image';
 			});
@@ -54,5 +54,5 @@
 			editor.contextMenu.addListener( function( element, selection )
 				{
-					if ( !element || !element.is( 'img' ) || element.data( 'cke-realelement' ) || element.isReadOnly() )
+					if ( !element || !element.is( 'img' ) || element.getAttribute( '_cke_realelement' ) || element.isReadOnly() )
 						return null;
 
Index: /CKEditor/trunk/_source/plugins/link/dialogs/anchor.js
===================================================================
--- /CKEditor/trunk/_source/plugins/link/dialogs/anchor.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/link/dialogs/anchor.js	(revision 6192)
@@ -39,5 +39,5 @@
 
 			// Set name.
-			element.data( 'cke-saved-name', false );
+			element.removeAttribute( '_cke_saved_name' );
 			element.setAttribute( 'name', name );
 
@@ -62,5 +62,5 @@
 			var selection = editor.getSelection();
 			var element = selection.getSelectedElement();
-			if ( element && element.data( 'cke-real-element-type' ) && element.data( 'cke-real-element-type' ) == 'anchor' )
+			if ( element && element.getAttribute( '_cke_real_element_type' ) && element.getAttribute( '_cke_real_element_type' ) == 'anchor' )
 			{
 				this.fakeObj = element;
Index: /CKEditor/trunk/_source/plugins/link/dialogs/link.js
===================================================================
--- /CKEditor/trunk/_source/plugins/link/dialogs/link.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/link/dialogs/link.js	(revision 6192)
@@ -76,6 +76,4 @@
 				element.hide();
 		}
-
-		dialog.layout();
 	};
 
@@ -97,5 +95,5 @@
 	var parseLink = function( editor, element )
 	{
-		var href = ( element  && ( element.data( 'cke-saved-href' ) || element.getAttribute( 'href' ) ) ) || '',
+		var href = ( element  && ( element.getAttribute( '_cke_saved_href' ) || element.getAttribute( 'href' ) ) ) || '',
 		 	javascriptMatch,
 			emailMatch,
@@ -187,5 +185,5 @@
 			if ( !target )
 			{
-				var onclick = element.data( 'cke-pa-onclick' ) || element.getAttribute( 'onclick' ),
+				var onclick = element.getAttribute( '_cke_pa_onclick' ) || element.getAttribute( 'onclick' ),
 					onclickMatch = onclick && onclick.match( popupRegex );
 				if ( onclickMatch )
@@ -245,5 +243,5 @@
 		{
 			var item = elements.getItem( i );
-			if ( item.data( 'cke-realelement' ) && item.data( 'cke-real-element-type' ) == 'anchor' )
+			if ( item.getAttribute( '_cke_realelement' ) && item.getAttribute( '_cke_real_element_type' ) == 'anchor' )
 				anchors.push( editor.restoreRealElement( item ) );
 		}
@@ -794,5 +792,5 @@
 					{
 						type : 'vbox',
-						width : '100%',
+						width : 260,
 						align : 'center',
 						padding : 2,
@@ -898,5 +896,5 @@
 											{
 												type :  'text',
-												widths : [ '50%', '50%' ],
+												widths : [ '30%', '70%' ],
 												labelLayout : 'horizontal',
 												label : linkLang.popupWidth,
@@ -909,5 +907,5 @@
 												type :  'text',
 												labelLayout : 'horizontal',
-												widths : [ '50%', '50%' ],
+												widths : [ '55%', '45%' ],
 												label : linkLang.popupLeft,
 												id : 'left',
@@ -925,5 +923,5 @@
 												type :  'text',
 												labelLayout : 'horizontal',
-												widths : [ '50%', '50%' ],
+												widths : [ '30%', '70%' ],
 												label : linkLang.popupHeight,
 												id : 'height',
@@ -936,5 +934,5 @@
 												labelLayout : 'horizontal',
 												label : linkLang.popupTop,
-												widths : [ '50%', '50%' ],
+												widths : [ '55%', '45%' ],
 												id : 'top',
 												setup : setupPopupParams,
@@ -1148,6 +1146,6 @@
 				selection.selectElement( element );
 			else if ( ( element = selection.getSelectedElement() ) && element.is( 'img' )
-					&& element.data( 'cke-real-element-type' )
-					&& element.data( 'cke-real-element-type' ) == 'anchor' )
+					&& element.getAttribute( '_cke_real_element_type' )
+					&& element.getAttribute( '_cke_real_element_type' ) == 'anchor' )
 			{
 				this.fakeObj = element;
@@ -1176,10 +1174,10 @@
 					var protocol = ( data.url && data.url.protocol != undefined ) ? data.url.protocol : 'http://',
 						url = ( data.url && data.url.url ) || '';
-					attributes[ 'data-cke-saved-href' ] = ( url.indexOf( '/' ) === 0 ) ? url : protocol + url;
+					attributes._cke_saved_href = ( url.indexOf( '/' ) === 0 ) ? url : protocol + url;
 					break;
 				case 'anchor':
 					var name = ( data.anchor && data.anchor.name ),
 						id = ( data.anchor && data.anchor.id );
-					attributes[ 'data-cke-saved-href' ] = '#' + ( name || id || '' );
+					attributes._cke_saved_href = '#' + ( name || id || '' );
 					break;
 				case 'email':
@@ -1228,5 +1226,5 @@
 					}
 
-					attributes[ 'data-cke-saved-href' ] = linkHref.join( '' );
+					attributes._cke_saved_href = linkHref.join( '' );
 					break;
 			}
@@ -1256,5 +1254,5 @@
 
 					onclickList.push( featureList.join( ',' ), '\'); return false;' );
-					attributes[ 'data-cke-pa-onclick' ] = onclickList.join( '' );
+					attributes[ '_cke_pa_onclick' ] = onclickList.join( '' );
 
 					// Add the "target" attribute. (#5074)
@@ -1268,5 +1266,5 @@
 						removeAttributes.push( 'target' );
 
-					removeAttributes.push( 'data-cke-pa-onclick', 'onclick' );
+					removeAttributes.push( '_cke_pa_onclick', 'onclick' );
 				}
 			}
@@ -1307,5 +1305,5 @@
 					// Short mailto link text view (#5736).
 					var text = new CKEDITOR.dom.text( data.type == 'email' ?
-							data.email.address : attributes[ 'data-cke-saved-href' ], editor.document );
+							data.email.address : attributes._cke_saved_href, editor.document );
 					ranges[0].insertNode( text );
 					ranges[0].selectNodeContents( text );
@@ -1336,5 +1334,5 @@
 				// We're only editing an existing link, so just overwrite the attributes.
 				var element = this._.selectedElement,
-					href = element.data( 'cke-saved-href' ),
+					href = element.getAttribute( '_cke_saved_href' ),
 					textView = element.getHtml();
 
@@ -1363,5 +1361,5 @@
 					// Short mailto link text view (#5736).
 					element.setHtml( data.type == 'email' ?
-						data.email.address : attributes[ 'data-cke-saved-href' ] );
+						data.email.address : attributes._cke_saved_href );
 				}
 				// Make the element display as an anchor if a name has been set.
Index: /CKEditor/trunk/_source/plugins/link/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/link/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/link/plugin.js	(revision 6192)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -74,5 +74,5 @@
 					if ( element.is( 'a' ) )
 						evt.data.dialog =  ( element.getAttribute( 'name' ) && !element.getAttribute( 'href' ) ) ? 'anchor' : 'link';
-					else if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'anchor' )
+					else if ( element.is( 'img' ) && element.getAttribute( '_cke_real_element_type' ) == 'anchor' )
 						evt.data.dialog = 'anchor';
 				}
@@ -117,5 +117,5 @@
 						return null;
 
-					var isAnchor = ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'anchor' );
+					var isAnchor = ( element.is( 'img' ) && element.getAttribute( '_cke_real_element_type' ) == 'anchor' );
 
 					if ( !isAnchor )
Index: /CKEditor/trunk/_source/plugins/menu/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/menu/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/menu/plugin.js	(revision 6192)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -54,5 +54,4 @@
 			this.editor = editor;
 			this.items = [];
-			this._.listeners = [];
 
 			this._.level = definition.level || 1;
@@ -73,82 +72,4 @@
 		_ :
 		{
-			onShow : function()
-			{
-				var selection = this.editor.getSelection();
-
-				// Selection will be unavailable after menu shows up
-				// in IE, lock it now.
-				if ( CKEDITOR.env.ie )
-					selection && selection.lock();
-
-				var element = selection && selection.getStartElement(),
-					listeners = this._.listeners,
-					includedItems = [];
-
-				this.removeAll();
-				// Call all listeners, filling the list of items to be displayed.
-				for ( var i = 0 ; i < listeners.length ; i++ )
-				{
-					var listenerItems = listeners[ i ]( element, selection );
-
-					if ( listenerItems )
-					{
-						for ( var itemName in listenerItems )
-						{
-							var item = this.editor.getMenuItem( itemName );
-
-							if ( item )
-							{
-								item.state = listenerItems[ itemName ];
-								this.add( item );
-							}
-						}
-					}
-				}
-			},
-
-			onClick : function( item )
-			{
-				this.hide();
-
-				if ( item.onClick )
-					item.onClick();
-				else if ( item.command )
-					this.editor.execCommand( item.command );
-			},
-
-			onEscape : function( keystroke )
-			{
-				var parent = this.parent;
-				// 1. If it's sub-menu, restore the last focused item
-				// of upper level menu.
-				// 2. In case of a top-menu, close it.
-				if ( parent )
-				{
-					parent._.panel.hideChild();
-					// Restore parent block item focus.
-					var parentBlock = parent._.panel._.panel._.currentBlock,
-						parentFocusIndex =  parentBlock._.focusIndex;
-					parentBlock._.markItem( parentFocusIndex );
-				}
-				else if ( keystroke == 27 )
-				{
-					this.hide();
-					this.editor.focus();
-				}
-				return false;
-			},
-
-			onHide : function()
-			{
-				if ( CKEDITOR.env.ie )
-				{
-					var selection = this.editor.getSelection();
-					selection && selection.unlock();
-				}
-
-				this.onHide && this.onHide();
-			},
-
 			showSubMenu : function( index )
 			{
@@ -178,5 +99,7 @@
 								   CKEDITOR.tools.extend( {}, this._.definition, { level : this._.level + 1 }, true ) );
 					menu.parent = this;
-					menu._.onClick = CKEDITOR.tools.bind( this._.onClick, this );
+					menu.onClick = CKEDITOR.tools.bind( this.onClick, this );
+					// Sub menu use their own scope for binding onEscape.
+					menu.onEscape = this.onEscape;
 				}
 
@@ -220,15 +143,4 @@
 			show : function( offsetParent, corner, offsetX, offsetY )
 			{
-				// Not for sub menu.
-				if ( !this.parent )
-				{
-					this._.onShow();
-					// Don't menu with zero items.
-					if ( ! this.items.length )
-						return;
-				}
-
-				corner = corner || ( this.editor.lang.dir == 'rtl' ? 2 : 1 );
-
 				var items = this.items,
 					editor = this.editor,
@@ -246,5 +158,5 @@
 					panel.onEscape = CKEDITOR.tools.bind( function( keystroke )
 					{
-						if ( this._.onEscape( keystroke ) === false )
+						if ( this.onEscape && this.onEscape( keystroke ) === false )
 							return false;
 					},
@@ -253,5 +165,5 @@
 					panel.onHide = CKEDITOR.tools.bind( function()
 					{
-						this._.onHide && this._.onHide();
+						this.onHide && this.onHide();
 					},
 					this );
@@ -302,5 +214,5 @@
 								this._.showSubMenu( index );
 							else
-								this._.onClick( item );
+								this.onClick && this.onClick( item );
 						},
 						this );
@@ -336,6 +248,4 @@
 				element.setHtml( output.join( '' ) );
 
-				CKEDITOR.ui.fire( 'ready', this );
-
 				// Show the panel.
 				if ( this.parent )
@@ -347,12 +257,6 @@
 			},
 
-			addListener : function( listenerFn )
-			{
-				this._.listeners.push( listenerFn );
-			},
-
 			hide : function()
 			{
-				this._.onHide && this._.onHide();
 				this._.panel && this._.panel.hide();
 			}
@@ -374,38 +278,40 @@
 			});
 	}
-	CKEDITOR.menuItem = CKEDITOR.tools.createClass(
+})();
+
+CKEDITOR.menuItem = CKEDITOR.tools.createClass(
+{
+	$ : function( editor, name, definition )
 	{
-		$ : function( editor, name, definition )
+		CKEDITOR.tools.extend( this, definition,
+			// Defaults
+			{
+				order : 0,
+				className : 'cke_button_' + name
+			});
+
+		// Transform the group name into its order number.
+		this.group = editor._.menuGroups[ this.group ];
+
+		this.editor = editor;
+		this.name = name;
+	},
+
+	proto :
+	{
+		render : function( menu, index, output )
 		{
-			CKEDITOR.tools.extend( this, definition,
-				// Defaults
-				{
-					order : 0,
-					className : 'cke_button_' + name
-				});
-
-			// Transform the group name into its order number.
-			this.group = editor._.menuGroups[ this.group ];
-
-			this.editor = editor;
-			this.name = name;
-		},
-
-		proto :
-		{
-			render : function( menu, index, output )
-			{
-				var id = menu.id + String( index ),
-					state = ( typeof this.state == 'undefined' ) ? CKEDITOR.TRISTATE_OFF : this.state;
-
-				var classes = ' cke_' + (
-					state == CKEDITOR.TRISTATE_ON ? 'on' :
-					state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' :
-					'off' );
-
-				var htmlLabel = this.label;
-
-				if ( this.className )
-					classes += ' ' + this.className;
+			var id = menu.id + String( index ),
+				state = ( typeof this.state == 'undefined' ) ? CKEDITOR.TRISTATE_OFF : this.state;
+
+			var classes = ' cke_' + (
+				state == CKEDITOR.TRISTATE_ON ? 'on' :
+				state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' :
+				'off' );
+
+			var htmlLabel = this.label;
+
+			if ( this.className )
+				classes += ' ' + this.className;
 
 			var hasSubMenu = this.getItems;
@@ -424,23 +330,23 @@
 					( state == CKEDITOR.TRISTATE_ON ? 'aria-pressed="true"' : '' ) );
 
-				// Some browsers don't cancel key events in the keydown but in the
-				// keypress.
-				// TODO: Check if really needed for Gecko+Mac.
-				if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) )
-				{
-					output.push(
-						' onkeypress="return false;"' );
-				}
-
-				// With Firefox, we need to force the button to redraw, otherwise it
-				// will remain in the focus state.
-				if ( CKEDITOR.env.gecko )
-				{
-					output.push(
-						' onblur="this.style.cssText = this.style.cssText;"' );
-				}
-
-				var offset = ( this.iconOffset || 0 ) * -16;
+			// Some browsers don't cancel key events in the keydown but in the
+			// keypress.
+			// TODO: Check if really needed for Gecko+Mac.
+			if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) )
+			{
 				output.push(
+					' onkeypress="return false;"' );
+			}
+
+			// With Firefox, we need to force the button to redraw, otherwise it
+			// will remain in the focus state.
+			if ( CKEDITOR.env.gecko )
+			{
+				output.push(
+					' onblur="this.style.cssText = this.style.cssText;"' );
+			}
+
+			var offset = ( this.iconOffset || 0 ) * -16;
+			output.push(
 //					' onkeydown="return CKEDITOR.ui.button._.keydown(', index, ', event);"' +
 					' onmouseover="CKEDITOR.tools.callFunction(', menu._.itemOverFn, ',', index, ');"' +
@@ -466,15 +372,12 @@
 			}
 
-				output.push(
-								htmlLabel,
-							'</span>' +
-					'</a>' +
-					'</span>' );
+			output.push(
+							htmlLabel,
+						'</span>' +
+				'</a>' +
+				'</span>' );
 		}
-		}
-	});
-
-})();
-
+	}
+});
 
 /**
Index: /CKEditor/trunk/_source/plugins/menubutton/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/menubutton/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/menubutton/plugin.js	(revision 6192)
@@ -6,5 +6,5 @@
 CKEDITOR.plugins.add( 'menubutton',
 {
-	requires : [ 'button', 'menu' ],
+	requires : [ 'button', 'contextmenu' ],
 	beforeInit : function( editor )
 	{
@@ -36,12 +36,6 @@
 		if ( !menu )
 		{
-			menu = _.menu = new CKEDITOR.menu( editor,
-			{
-				panel:
-				{
-					className : editor.skinClass + ' cke_contextmenu',
-					attributes : { 'aria-label' : editor.lang.common.options }
-				}
-			});
+			menu = _.menu = new CKEDITOR.plugins.contextMenu( editor );
+			menu.definition.panel.attributes[ 'aria-label' ] = editor.lang.common.options;
 
 			menu.onHide = CKEDITOR.tools.bind( function()
Index: /CKEditor/trunk/_source/plugins/panel/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/panel/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/panel/plugin.js	(revision 6192)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -137,4 +137,10 @@
 					langCode = parentDiv.getParent().getAttribute( 'lang' ),
 					doc = iframe.getFrameDocument();
+				// Initialize the IFRAME document body.
+				doc.$.open();
+
+				// Support for custom document.domain in IE.
+				if ( CKEDITOR.env.isCustomDomain() )
+					doc.$.domain = document.domain;
 
 				var onLoad = CKEDITOR.tools.addFunction( CKEDITOR.tools.bind( function( ev )
@@ -145,5 +151,5 @@
 					}, this ) );
 
-				var data =
+				doc.$.write(
 					'<!DOCTYPE html>' +
 					'<html dir="' + dir + '" class="' + className + '_container" lang="' + langCode + '">' +
@@ -157,7 +163,6 @@
 						// available. (#3031)
 						CKEDITOR.tools.buildStyleHtml( this.css ) +
-					'<\/html>';
-
-				doc.write( data );
+					'<\/html>' );
+				doc.$.close();
 
 				var win = doc.getWindow();
@@ -190,5 +195,4 @@
 				holder = doc.getBody();
 				holder.unselectable();
-				CKEDITOR.env.air && CKEDITOR.tools.callFunction( onLoad );
 			}
 			else
Index: /CKEditor/trunk/_source/plugins/pastetext/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/pastetext/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/pastetext/plugin.js	(revision 6192)
@@ -38,4 +38,18 @@
 	};
 
+	function doInsertText( doc, text )
+	{
+		// Native text insertion.
+		if ( CKEDITOR.env.ie )
+		{
+			var selection = doc.selection;
+			if ( selection.type == 'Control' )
+				selection.clear();
+			selection.createRange().pasteHTML( text );
+		}
+		else
+			doc.execCommand( 'inserthtml', false, text );
+	}
+
 	// Register the plugin.
 	CKEDITOR.plugins.add( 'pastetext',
@@ -71,4 +85,50 @@
 	});
 
+	function doEnter( editor, mode, times, forceMode )
+	{
+		while ( times-- )
+		{
+			CKEDITOR.plugins.enterkey[ mode == CKEDITOR.ENTER_BR ? 'enterBr' : 'enterBlock' ]
+					( editor, mode, null, forceMode );
+		}
+	}
+
+	CKEDITOR.editor.prototype.insertText = function( text )
+	{
+		this.focus();
+		this.fire( 'saveSnapshot' );
+
+		var mode = this.getSelection().getStartElement().hasAscendant( 'pre', true ) ? CKEDITOR.ENTER_BR : this.config.enterMode,
+			isEnterBrMode = mode == CKEDITOR.ENTER_BR,
+			doc = this.document.$,
+			self = this,
+			line;
+
+		text = CKEDITOR.tools.htmlEncode( text.replace( /\r\n|\r/g, '\n' ) );
+
+		var startIndex = 0;
+		text.replace( /\n+/g, function( match, lastIndex )
+		 {
+			line = text.substring( startIndex, lastIndex );
+			startIndex = lastIndex + match.length;
+			line.length && doInsertText( doc, line );
+
+			var lineBreakNums = match.length,
+				// Duo consequence line-break as a enter block.
+				enterBlockTimes = isEnterBrMode ? 0 : Math.floor( lineBreakNums / 2 ),
+				// Per link-break as a enter br.
+				enterBrTimes = isEnterBrMode ? lineBreakNums : lineBreakNums % 2;
+
+			// Line-breaks are converted to editor enter key strokes.
+			doEnter( self, mode, enterBlockTimes );
+			doEnter( self, CKEDITOR.ENTER_BR, enterBrTimes, isEnterBrMode ? false : true );
+		 });
+
+		// Insert the last text line of text.
+		line = text.substring( startIndex, text.length );
+		line.length && doInsertText( doc, line );
+
+		this.fire( 'saveSnapshot' );
+	};
 })();
 
Index: /CKEditor/trunk/_source/plugins/removeformat/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/removeformat/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/removeformat/plugin.js	(revision 6192)
@@ -99,5 +99,5 @@
 						// This node must not be a fake element.
 						if ( !( currentNode.getName() == 'img'
-							&& currentNode.data( 'cke-realelement' ) )
+							&& currentNode.getAttribute( '_cke_realelement' ) )
 							&& filter( editor, currentNode ) )
 						{
Index: /CKEditor/trunk/_source/plugins/richcombo/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/richcombo/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/richcombo/plugin.js	(revision 6192)
@@ -107,5 +107,6 @@
 					}
 
-					this.commit();
+					!_.committed && this.commit();
+
 					var value = this.getValue();
 					if ( value )
@@ -197,5 +198,5 @@
 							'<span id="' + id + '_text" class="cke_text cke_inline_label">' + this.label + '</span>' +
 						'</span>' +
-						'<span class=cke_openbutton>' + ( CKEDITOR.env.hc ? '<span>&#9660;</span>' : CKEDITOR.env.air ?  '&nbsp;' : '' ) + '</span>' +	// BLACK DOWN-POINTING TRIANGLE
+						'<span class=cke_openbutton>' + ( CKEDITOR.env.hc ? '<span>&#9660;</span>' : '' ) + '</span>' +	// BLACK DOWN-POINTING TRIANGLE
 					'</a>' +
 				'</span>' +
@@ -345,10 +346,5 @@
 		commit : function()
 		{
-			if ( !this._.committed )
-			{
-				this._.list.commit();
-				this._.committed = 1;
-				CKEDITOR.ui.fire( 'ready', this );
-			}
+			this._.list.commit();
 			this._.committed = 1;
 		},
Index: /CKEditor/trunk/_source/plugins/scayt/dialogs/options.js
===================================================================
--- /CKEditor/trunk/_source/plugins/scayt/dialogs/options.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/scayt/dialogs/options.js	(revision 6192)
@@ -201,5 +201,5 @@
 	tags = CKEDITOR.plugins.scayt.uiTabs;
 
-	for ( i in tags )
+	for ( var i in tags )
 	{
 		if ( tags[ i ] == 1 )
@@ -290,5 +290,5 @@
 		if ( tags[1] ==1 )
 		{
-			for ( i in lang_list.rtl )
+			for ( var i in lang_list.rtl )
 				langList[ langList.length ] = createOption( i, lang_list.ltr );
 
Index: /CKEditor/trunk/_source/plugins/scayt/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/scayt/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/scayt/plugin.js	(revision 6192)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -359,6 +359,6 @@
 		loadEngine : function( editor )
 		{
-			// SCAYT doesn't work with Firefox2, Opera and AIR.
-			if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 || CKEDITOR.env.opera || CKEDITOR.env.air )
+			// SCAYT doesn't work with Firefox2, Opera.
+			if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 || CKEDITOR.env.opera )
 				return editor.fire( 'showScaytState' );
 
@@ -758,5 +758,5 @@
 					editor.removeListener( 'showScaytState', showInitialState );
 
-					if ( !CKEDITOR.env.opera && !CKEDITOR.env.air )
+					if ( !CKEDITOR.env.opera )
 						command.setState( plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
 					else
@@ -766,5 +766,5 @@
 			editor.on( 'showScaytState', showInitialState );
 
-			if ( CKEDITOR.env.opera || CKEDITOR.env.air )
+			if ( CKEDITOR.env.opera )
 			{
 				editor.on( 'instanceReady', function()
Index: /CKEditor/trunk/_source/plugins/showblocks/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/showblocks/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/showblocks/plugin.js	(revision 6192)
@@ -148,6 +148,5 @@
 /**
  * Whether to automaticaly enable the "show block" command when the editor
- * loads. (StartupShowBlocks in FCKeditor)
- * @name CKEDITOR.config.startupOutlineBlocks
+ * loads.
  * @type Boolean
  * @default false
Index: /CKEditor/trunk/_source/plugins/showborders/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/showborders/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/showborders/plugin.js	(revision 6192)
@@ -195,6 +195,4 @@
 /**
  * Whether to automatically enable the "show borders" command when the editor loads.
- * (ShowBorders in FCKeditor)
- * @name CKEDITOR.config.startupShowBorders
  * @type Boolean
  * @default true
Index: /CKEditor/trunk/_source/plugins/smiley/dialogs/smiley.js
===================================================================
--- /CKEditor/trunk/_source/plugins/smiley/dialogs/smiley.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/smiley/dialogs/smiley.js	(revision 6192)
@@ -35,5 +35,5 @@
 				{
 					src : src,
-					'data-cke-saved-src' : src,
+					_cke_saved_src : src,
 					title : title,
 					alt : title,
Index: /CKEditor/trunk/_source/plugins/specialchar/dialogs/specialchar.js
===================================================================
--- /CKEditor/trunk/_source/plugins/specialchar/dialogs/specialchar.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/specialchar/dialogs/specialchar.js	(revision 6192)
@@ -13,4 +13,30 @@
 		lang = editor.lang.specialChar;
 
+	var insertSpecialChar = function ( specialChar )
+	{
+		var selection = editor.getSelection(),
+			ranges = selection.getRanges( true ),
+			range, textNode;
+
+		editor.fire( 'saveSnapshot' );
+
+		for ( var i = ranges.length - 1; i >= 0 ; i-- )
+		{
+			range = ranges[ i ];
+			range.deleteContents();
+
+			textNode = CKEDITOR.dom.element.createFromHtml( specialChar );
+			range.insertNode( textNode );
+		}
+
+		if ( range )
+		{
+			range.moveToPosition( textNode, CKEDITOR.POSITION_AFTER_END );
+			range.select();
+		}
+
+		editor.fire( 'saveSnapshot' );
+	};
+
 	var onChoice = function( evt )
 	{
@@ -26,5 +52,9 @@
 			dialog.hide();
 
-			editor.insertText( value );
+			// Firefox has bug on insert chars into a element use its own API. (#5170)
+			if ( CKEDITOR.env.gecko )
+				insertSpecialChar( value );
+			else
+				editor.insertHtml( value );
 		}
 	};
@@ -193,9 +223,46 @@
 		buttons : [ CKEDITOR.dialog.cancelButton ],
 		charColumns : 17,
+		chars :
+			[
+				'!','&quot;','#','$','%','&amp;',"'",'(',')','*','+','-','.','/',
+				'0','1','2','3','4','5','6','7','8','9',':',';',
+				'&lt;','=','&gt;','?','@',
+				'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
+				'P','Q','R','S','T','U','V','W','X','Y','Z',
+				'[',']','^','_','`',
+				'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p',
+				'q','r','s','t','u','v','w','x','y','z',
+				'{','|','}','~','&euro;(EURO SIGN)','&lsquo;(LEFT SINGLE QUOTATION MARK)','&rsquo;(RIGHT SINGLE QUOTATION MARK)','&ldquo;(LEFT DOUBLE QUOTATION MARK)',
+				'&rdquo;(RIGHT DOUBLE QUOTATION MARK)','&ndash;(EN DASH)','&mdash;(EM DASH)','&iexcl;(INVERTED EXCLAMATION MARK)','&cent;(CENT SIGN)','&pound;(POUND SIGN)',
+				'&curren;(CURRENCY SIGN)','&yen;(YEN SIGN)','&brvbar;(BROKEN BAR)','&sect;(SECTION SIGN)','&uml;(DIAERESIS)','&copy;(COPYRIGHT SIGN)','&ordf;(FEMININE ORDINAL INDICATOR)',
+				'&laquo;(LEFT-POINTING DOUBLE ANGLE QUOTATION MARK)','&not;(NOT SIGN)','&reg;(REGISTERED SIGN)','&macr;(MACRON)','&deg;(DEGREE SIGN)','&plusmn;(PLUS-MINUS SIGN)','&sup2;(SUPERSCRIPT TWO)',
+				'&sup3;(SUPERSCRIPT THREE)','&acute;(ACUTE ACCENT)','&micro;(MICRO SIGN)','&para;(PILCROW SIGN)','&middot;(MIDDLE DOT)','&cedil;(CEDILLA)',
+				'&sup1;(SUPERSCRIPT ONE)','&ordm;(MASCULINE ORDINAL INDICATOR)','&raquo;(RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK)','&frac14;(VULGAR FRACTION ONE QUARTER)','&frac12;(VULGAR FRACTION ONE HALF)','&frac34;(VULGAR FRACTION THREE QUARTERS)',
+				'&iquest;(INVERTED QUESTION MARK)','&Agrave;(LATIN CAPITAL LETTER A WITH GRAVE)','&Aacute;(LATIN CAPITAL LETTER A WITH ACUTE)','&Acirc;(LATIN CAPITAL LETTER A WITH CIRCUMFLEX)','&Atilde;(LATIN CAPITAL LETTER A WITH TILDE)','&Auml;(LATIN CAPITAL LETTER A WITH DIAERESIS)',
+				'&Aring;(LATIN CAPITAL LETTER A WITH RING ABOVE)','&AElig;(LATIN CAPITAL LETTER AE)','&Ccedil;(LATIN CAPITAL LETTER C WITH CEDILLA)','&Egrave;(LATIN CAPITAL LETTER E WITH GRAVE)','&Eacute;(LATIN CAPITAL LETTER E WITH ACUTE)','&Ecirc;(LATIN CAPITAL LETTER E WITH CIRCUMFLEX)',
+				'&Euml;(LATIN CAPITAL LETTER E WITH DIAERESIS)','&Igrave;(LATIN CAPITAL LETTER I WITH GRAVE)','&Iacute;(LATIN CAPITAL LETTER I WITH ACUTE)','&Icirc;(LATIN CAPITAL LETTER I WITH CIRCUMFLEX)','&Iuml;(LATIN CAPITAL LETTER I WITH DIAERESIS)','&ETH;(LATIN CAPITAL LETTER ETH)',
+				'&Ntilde;(LATIN CAPITAL LETTER N WITH TILDE)','&Ograve;(LATIN CAPITAL LETTER O WITH GRAVE)','&Oacute;(LATIN CAPITAL LETTER O WITH ACUTE)','&Ocirc;(LATIN CAPITAL LETTER O WITH CIRCUMFLEX)','&Otilde;(LATIN CAPITAL LETTER O WITH TILDE)','&Ouml;(LATIN CAPITAL LETTER O WITH DIAERESIS)',
+				'&times;(MULTIPLICATION SIGN)','&Oslash;(LATIN CAPITAL LETTER O WITH STROKE)','&Ugrave;(LATIN CAPITAL LETTER U WITH GRAVE)','&Uacute;(LATIN CAPITAL LETTER U WITH ACUTE)','&Ucirc;(LATIN CAPITAL LETTER U WITH CIRCUMFLEX)','&Uuml;(LATIN CAPITAL LETTER U WITH DIAERESIS)',
+				'&Yacute;(LATIN CAPITAL LETTER Y WITH ACUTE)','&THORN;(LATIN CAPITAL LETTER THORN)','&szlig;(LATIN SMALL LETTER SHARP S)','&agrave;(LATIN SMALL LETTER A WITH GRAVE)','&aacute;(LATIN SMALL LETTER A WITH ACUTE)','&acirc;(LATIN SMALL LETTER A WITH CIRCUMFLEX)',
+				'&atilde;(LATIN SMALL LETTER A WITH TILDE)','&auml;(LATIN SMALL LETTER A WITH DIAERESIS)','&aring;(LATIN SMALL LETTER A WITH RING ABOVE)','&aelig;(LATIN SMALL LETTER AE)','&ccedil;(LATIN SMALL LETTER C WITH CEDILLA)','&egrave;(LATIN SMALL LETTER E WITH GRAVE)',
+				'&eacute;(LATIN SMALL LETTER E WITH ACUTE)','&ecirc;(LATIN SMALL LETTER E WITH CIRCUMFLEX)','&euml;(LATIN SMALL LETTER E WITH DIAERESIS)','&igrave;(LATIN SMALL LETTER I WITH GRAVE)','&iacute;(LATIN SMALL LETTER I WITH ACUTE)','&icirc;(LATIN SMALL LETTER I WITH CIRCUMFLEX)',
+				'&iuml;(LATIN SMALL LETTER I WITH DIAERESIS)','&eth;(LATIN SMALL LETTER ETH)','&ntilde;(LATIN SMALL LETTER N WITH TILDE)','&ograve;(LATIN SMALL LETTER O WITH GRAVE)','&oacute;(LATIN SMALL LETTER O WITH ACUTE)','&ocirc;(LATIN SMALL LETTER O WITH CIRCUMFLEX)',
+				'&otilde;(LATIN SMALL LETTER O WITH TILDE)','&ouml;(LATIN SMALL LETTER O WITH DIAERESIS)',
+				'&divide;(DIVISION SIGN)','&oslash;(LATIN SMALL LETTER O WITH STROKE)',
+				'&ugrave;(LATIN SMALL LETTER U WITH GRAVE)','&uacute;(LATIN SMALL LETTER U WITH ACUTE)',
+				'&ucirc;(LATIN SMALL LETTER U WITH CIRCUMFLEX)','&uuml;(LATIN SMALL LETTER U WITH DIAERESIS)',
+				'&uuml;(LATIN SMALL LETTER U WITH DIAERESIS)','&yacute;(LATIN SMALL LETTER Y WITH ACUTE)','&thorn;(LATIN SMALL LETTER THORN)','&yuml;(LATIN SMALL LETTER Y WITH DIAERESIS)',
+				'&OElig;(LATIN CAPITAL LIGATURE OE)',
+				'&oelig;(LATIN SMALL LIGATURE OE)','&#372;(LATIN CAPITAL LETTER W WITH CIRCUMFLEX)',
+				'&#374(LATIN CAPITAL LETTER Y WITH CIRCUMFLEX)','&#373(LATIN SMALL LETTER W WITH CIRCUMFLEX)',
+				'&#375;(LATIN SMALL LETTER Y WITH CIRCUMFLEX)','&sbquo;(SINGLE LOW-9 QUOTATION MARK)',
+				'&#8219;(SINGLE HIGH-REVERSED-9 QUOTATION MARK)','&bdquo;(DOUBLE LOW-9 QUOTATION MARK)','&hellip;(HORIZONTAL ELLIPSIS)',
+				'&trade;(TRADE MARK SIGN)','&#9658;(BLACK RIGHT-POINTING POINTER)','&bull;(BULLET)',
+				'&rarr;(RIGHTWARDS ARROW)','&rArr;(RIGHTWARDS DOUBLE ARROW)','&hArr;(LEFT RIGHT DOUBLE ARROW)','&diams;(BLACK DIAMOND SUIT)','&asymp;(ALMOST EQUAL TO)'
+			],
 		onLoad :  function()
 		{
 			var columns = this.definition.charColumns,
-				extraChars = editor.config.extraSpecialChars,
-				chars = editor.config.specialChars;
+				chars = this.definition.chars;
 
 			var charsTableLabel =  CKEDITOR.tools.getNextId() + '_specialchar_table_label';
@@ -218,17 +285,12 @@
 					{
 						charDesc = '';
-						
-						if ( character instanceof Array )
-						{
-							charDesc = character[ 1 ];
-							character = character[ 0 ];
-						}
-						else
-						{
-							var _tmpName = character.toLowerCase().replace( '&', '' ).replace( ';', '' ).replace( '#', '' );
-
-							// Use character in case description unavailable.
-							charDesc = lang[ _tmpName ] || character;
-						}
+						character = character.replace( /\((.*?)\)/, function( match, desc )
+							{
+								charDesc = desc;
+								return '';
+							} );
+
+						// Use character in case description unavailable.
+						charDesc = charDesc || character;
 
 						var charLabelId =  'cke_specialchar_label_' + i + '_' + CKEDITOR.tools.getNextNumber();
Index: /CKEditor/trunk/_source/plugins/specialchar/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/specialchar/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/specialchar/plugin.js	(revision 6192)
@@ -10,33 +10,13 @@
 CKEDITOR.plugins.add( 'specialchar',
 {
-	// List of available localizations.
-	availableLangs : { en:1 },
-	
 	init : function( editor )
 	{
-		var pluginName = 'specialchar',
-			plugin = this;
+		var pluginName = 'specialchar';
 
 		// Register the dialog.
 		CKEDITOR.dialog.add( pluginName, this.path + 'dialogs/specialchar.js' );
 
-		editor.addCommand( pluginName,
-			{
-				exec : function()
-				{
-					var langCode = editor.langCode;
-					langCode = plugin.availableLangs[ langCode ] ? langCode : 'en';
-
-					CKEDITOR.scriptLoader.load(
-							CKEDITOR.getUrl( plugin.path + 'lang/' + langCode + '.js' ),
-							function()
-							{
-								CKEDITOR.tools.extend( editor.lang.specialChar, plugin.lang[ langCode ] );
-								editor.openDialog( pluginName );
-							});
-				},
-				modes : { wysiwyg:1 },
-				canUndo : false
-			});
+		// Register the command.
+		editor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName ) );
 
 		// Register the toolbar button.
@@ -48,23 +28,2 @@
 	}
 } );
-
-/**
-  * The list of special characters visible in Special Character dialog.
-  * @type Array
-  * @example
-  * config.specialChars = [ '&quot;', '&rsquo;', [ '&custom;', 'Custom label' ] ];
-  * config.specialChars = config.specialChars.concat( [ '&quot;', [ '&rsquo;', 'Custom label' ] ] );
-  */
-CKEDITOR.config.specialChars = 
-	[
-		'!','&quot;','#','$','%','&amp;',"'",'(',')','*','+','-','.','/',
-		'0','1','2','3','4','5','6','7','8','9',':',';',
-		'&lt;','=','&gt;','?','@',
-		'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
-		'P','Q','R','S','T','U','V','W','X','Y','Z',
-		'[',']','^','_','`',
-		'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p',
-		'q','r','s','t','u','v','w','x','y','z',
-		'{','|','}','~',
-		"&euro;", "&lsquo;", "&rsquo;", "&ldquo;", "&rdquo;", "&ndash;", "&mdash;", "&iexcl;", "&cent;", "&pound;", "&curren;", "&yen;", "&brvbar;", "&sect;", "&uml;", "&copy;", "&ordf;", "&laquo;", "&not;", "&reg;", "&macr;", "&deg;", "&", "&sup2;", "&sup3;", "&acute;", "&micro;", "&para;", "&middot;", "&cedil;", "&sup1;", "&ordm;", "&", "&frac14;", "&frac12;", "&frac34;", "&iquest;", "&Agrave;", "&Aacute;", "&Acirc;", "&Atilde;", "&Auml;", "&Aring;", "&AElig;", "&Ccedil;", "&Egrave;", "&Eacute;", "&Ecirc;", "&Euml;", "&Igrave;", "&Iacute;", "&Icirc;", "&Iuml;", "&ETH;", "&Ntilde;", "&Ograve;", "&Oacute;", "&Ocirc;", "&Otilde;", "&Ouml;", "&times;", "&Oslash;", "&Ugrave;", "&Uacute;", "&Ucirc;", "&Uuml;", "&Yacute;", "&THORN;", "&szlig;", "&agrave;", "&aacute;", "&acirc;", "&atilde;", "&auml;", "&aring;", "&aelig;", "&ccedil;", "&egrave;", "&eacute;", "&ecirc;", "&euml;", "&igrave;", "&iacute;", "&icirc;", "&iuml;", "&eth;", "&ntilde;", "&ograve;", "&oacute;", "&ocirc;", "&otilde;", "&ouml;", "&divide;", "&oslash;", "&ugrave;", "&uacute;", "&ucirc;", "&uuml;", "&uuml;", "&yacute;", "&thorn;", "&yuml;", "&OElig;", "&oelig;", "&#372;", "&#374", "&#373", "&#375;", "&sbquo;", "&#8219;", "&bdquo;", "&hellip;", "&trade;", "&#9658;", "&bull;", "&rarr;", "&rArr;", "&hArr;", "&diams;", "&asymp;"
-	];
Index: /CKEditor/trunk/_source/plugins/styles/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/styles/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/styles/plugin.js	(revision 6192)
@@ -6,15 +6,5 @@
 CKEDITOR.plugins.add( 'styles',
 {
-	requires : [ 'selection' ],
-	init : function( editor )
-	{
-		// This doesn't look like correct, but it's the safest way to proper
-		// pass the disableReadonlyStyling configuration to the style system
-		// without having to change any method signature in the API. (#6103)
-		editor.on( 'contentDom', function()
-			{
-				editor.document.setCustomData( 'cke_includeReadonly', !editor.config.disableReadonlyStyling );
-			});
-	}
+	requires : [ 'selection' ]
 });
 
@@ -364,33 +354,4 @@
 	};
 
-	// Gets the parent element which blocks the styling for an element. This
-	// can be done through read-only elements (contenteditable=false) or
-	// elements with the "data-cke-nostyle" attribute.
-	function getUnstylableParent( element )
-	{
-		var unstylable,
-			editable;
-		
-		while ( ( element = element.getParent() ) )
-		{
-			if ( element.getName() == 'body' )
-				break;
-
-			if ( element.getAttribute( 'data-cke-nostyle' ) )
-				unstylable = element;
-			else if ( !editable )
-			{
-				var contentEditable = element.getAttribute( 'contentEditable' );
-
-				if ( contentEditable == 'false' )
-					unstylable = element;
-				else if ( contentEditable == 'true' )
-					editable = 1;
-			}
-		}
-
-		return unstylable;
-	}
-
 	function applyInlineStyle( range )
 	{
@@ -414,12 +375,4 @@
 		var def = this._.definition;
 		var isUnknownElement;
-
-		// Indicates that fully selected read-only elements are to be included in the styling range.
-		var includeReadonly = def.includeReadonly;
-		
-		// If the read-only inclusion is not available in the definition, try
-		// to get it from the document data.
-		if ( includeReadonly == undefined )
-			includeReadonly = document.getCustomData( 'cke_includeReadonly' );
 
 		// Get the DTD definition for the element. Defaults to "span".
@@ -440,22 +393,4 @@
 		var styleRange;
 
-		// Check if the boundaries are inside non stylable elements.
-		var firstUnstylable = getUnstylableParent( firstNode ),
-			lastUnstylable = getUnstylableParent( lastNode );
-
-		// If the first element can't be styled, we'll start processing right
-		// after its unstylable root.
-		if ( firstUnstylable )
-			currentNode = firstUnstylable.getNextSourceNode( true );			
-
-		// If the last element can't be styled, we'll stop processing on its
-		// unstylable root.
-		if ( lastUnstylable )
-			lastNode = lastUnstylable;
-
-		// Do nothing if the current node now follows the last node to be processed.
-		if ( currentNode.getPosition( lastNode ) == CKEDITOR.POSITION_FOLLOWING )
-			currentNode = 0;
-
 		while ( currentNode )
 		{
@@ -471,8 +406,6 @@
 				var nodeType = currentNode.type;
 				var nodeName = nodeType == CKEDITOR.NODE_ELEMENT ? currentNode.getName() : null;
-				var nodeIsReadonly = nodeName && ( currentNode.getAttribute( 'contentEditable' ) == 'false' );
-				var nodeIsNoStyle = nodeName && currentNode.getAttribute( 'data-cke-nostyle' );
-
-				if ( nodeName && currentNode.data( 'cke-bookmark' ) )
+
+				if ( nodeName && currentNode.getAttribute( '_cke_bookmark' ) )
 				{
 					currentNode = currentNode.getNextSourceNode( true );
@@ -482,6 +415,4 @@
 				// Check if the current node can be a child of the style element.
 				if ( !nodeName || ( dtd[ nodeName ]
-					&& !nodeIsNoStyle
-					&& ( !nodeIsReadonly || includeReadonly )
 					&& ( currentNode.getPosition( lastNode ) | CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED )
 					&& ( !def.childRule || def.childRule( currentNode ) ) ) )
@@ -505,7 +436,7 @@
 						}
 
-						// Non element nodes, readonly elements, or empty
-						// elements can be added completely to the range.
-						if ( nodeType == CKEDITOR.NODE_TEXT || nodeIsReadonly || ( nodeType == CKEDITOR.NODE_ELEMENT && !currentNode.getChildCount() ) )
+						// Non element nodes, or empty elements can be added
+						// completely to the range.
+						if ( nodeType == CKEDITOR.NODE_TEXT || ( nodeType == CKEDITOR.NODE_ELEMENT && !currentNode.getChildCount() ) )
 						{
 							var includedNode = currentNode;
@@ -531,4 +462,5 @@
 							if ( !includedNode.$.nextSibling )
 								applyStyle = true;
+
 						}
 					}
@@ -540,5 +472,5 @@
 
 				// Get the next node to be processed.
-				currentNode = currentNode.getNextSourceNode( nodeIsNoStyle || nodeIsReadonly );
+				currentNode = currentNode.getNextSourceNode();
 			}
 
@@ -952,5 +884,5 @@
 		// Exclude the ones at header OR at tail,
 		// and ignore bookmark content between them.
-		var duoBrRegex = /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,
+		var duoBrRegex = /(\S\s*)\n(?:\s|(<span[^>]+_cke_bookmark.*?\/span>))*\n(?!$)/gi,
 			blockName = preBlock.getName(),
 			splitedHtml = replace( preBlock.getOuterHtml(),
@@ -974,5 +906,5 @@
 			tailBookmark = '';
 
-		str = str.replace( /(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,
+		str = str.replace( /(^<span[^>]+_cke_bookmark.*?\/span>)|(<span[^>]+_cke_bookmark.*?\/span>$)/gi,
 			function( str, m1, m2 ){
 					m1 && ( headBookmark = m1 );
@@ -1424,5 +1356,5 @@
 			// Bookmark the range so we can re-select it after processing.
 			bookmarks = selection.createBookmarks( 1 ),
-			ranges = selection.getRanges(),
+			ranges = selection.getRanges( 1 ),
 			func = remove ? this.removeFromRange : this.applyToRange,
 			range;
@@ -1516,21 +1448,4 @@
 		callback( this._.stylesDefinitions );
 };
-
-/**
- * Indicates that fully selected read-only elements will be included when
- * applying the style (for inline styles only).
- * @name CKEDITOR.style.includeReadonly
- * @type Boolean
- * @default false
- * @since 3.5
- */
-
- /**
-  * Disables inline styling on read-only elements.
-  * @name CKEDITOR.config.disableReadonlyStyling
-  * @type Boolean
-  * @default false
-  * @since 3.5
-  */
 
 /**
Index: /CKEditor/trunk/_source/plugins/table/dialogs/table.js
===================================================================
--- /CKEditor/trunk/_source/plugins/table/dialogs/table.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/table/dialogs/table.js	(revision 6192)
@@ -168,5 +168,5 @@
 							var th = theRow.getChild( i );
 							// Skip bookmark nodes. (#6155)
-							if ( th.type == CKEDITOR.NODE_ELEMENT && !th.data( 'cke-bookmark' ) )
+							if ( th.type == CKEDITOR.NODE_ELEMENT && !th.hasAttribute( '_cke_bookmark' ) )
 							{
 								th.renameNode( 'th' );
Index: /CKEditor/trunk/_source/plugins/tableresize/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/tableresize/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/tableresize/plugin.js	(revision 6192)
@@ -299,5 +299,5 @@
 
 		resizer = CKEDITOR.dom.element.createFromHtml(
-			'<div data-cke-temp=1 contenteditable=false unselectable=on '+
+			'<div cke_temp=1 contenteditable=false unselectable=on '+
 			'style="position:absolute;cursor:col-resize;filter:alpha(opacity=0);opacity:0;' +
 				'padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"></div>', document );
Index: /CKEditor/trunk/_source/plugins/tabletools/dialogs/tableCell.js
===================================================================
--- /CKEditor/trunk/_source/plugins/tabletools/dialogs/tableCell.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/tabletools/dialogs/tableCell.js	(revision 6192)
@@ -13,6 +13,5 @@
 			heightPattern = /^(\d+(?:\.\d+)?)px$/,
 			bind = CKEDITOR.tools.bind,
-			spacer = { type : 'html', html : '&nbsp;' },
-			rtl = editor.lang.dir == 'rtl';
+			spacer = { type : 'html', html : '&nbsp;' };
 
 		/**
@@ -73,6 +72,6 @@
 		return {
 			title : langCell.title,
-			minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks? 450 : 400,
-			minHeight : CKEDITOR.env.ie && CKEDITOR.env.quirks?  230 : 200,
+			minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks ? 550 : 480,
+			minHeight : CKEDITOR.env.ie ? ( CKEDITOR.env.quirks ? 180 : 150 ) : 140,
 			contents : [
 				{
@@ -100,6 +99,7 @@
 													type : 'text',
 													id : 'width',
-													width: '100px',
 													label : langTable.width,
+													widths : [ '71%', '29%' ],
+													labelLayout : 'horizontal',
 													validate : validate[ 'number' ]( langCell.invalidWidth ),
 
@@ -140,6 +140,8 @@
 													type : 'select',
 													id : 'widthType',
+													labelLayout : 'horizontal',
+													widths : [ '0%', '100%' ],
 													label : editor.lang.table.widthUnit,
-													labelStyle: 'visibility:hidden',
+													labelStyle: 'display:none',
 													'default' : 'px',
 													items :
@@ -166,6 +168,7 @@
 													id : 'height',
 													label : langTable.height,
-													width: '100px',
 													'default' : '',
+													widths : [ '71%', '29%' ],
+													labelLayout : 'horizontal',
 													validate : validate[ 'number' ]( langCell.invalidHeight ),
 
@@ -204,5 +207,5 @@
 													id : 'htmlHeightType',
 													type : 'html',
-													html : '<br />'+ langTable.widthPx
+													html : langTable.widthPx
 												}
 											]
@@ -212,5 +215,7 @@
 											type : 'select',
 											id : 'wordWrap',
+											labelLayout : 'horizontal',
 											label : langCell.wordWrap,
+											widths : [ '50%', '50%' ],
 											'default' : 'yes',
 											items :
@@ -241,5 +246,7 @@
 											type : 'select',
 											id : 'hAlign',
+											labelLayout : 'horizontal',
 											label : langCell.hAlign,
+											widths : [ '50%', '50%' ],
 											'default' : '',
 											items :
@@ -272,5 +279,7 @@
 											type : 'select',
 											id : 'vAlign',
+											labelLayout : 'horizontal',
 											label : langCell.vAlign,
+											widths : [ '50%', '50%' ],
 											'default' : '',
 											items :
@@ -325,4 +334,6 @@
 											id : 'cellType',
 											label : langCell.cellType,
+											labelLayout : 'horizontal',
+											widths : [ '50%', '50%' ],
 											'default' : 'td',
 											items :
@@ -345,4 +356,6 @@
 											id : 'rowSpan',
 											label : langCell.rowSpan,
+											labelLayout : 'horizontal',
+											widths : [ '50%', '50%' ],
 											'default' : '',
 											validate : validate.integer( langCell.invalidRowSpan ),
@@ -366,4 +379,6 @@
 											id : 'colSpan',
 											label : langCell.colSpan,
+											labelLayout : 'horizontal',
+											widths : [ '50%', '50%' ],
 											'default' : '',
 											validate : validate.integer( langCell.invalidColSpan ),
@@ -387,5 +402,5 @@
 											type : 'hbox',
 											padding : 0,
-											widths : [ '60%', '40%' ],
+											widths : [ '80%', '20%' ],
 											children :
 											[
@@ -394,4 +409,6 @@
 													id : 'bgColor',
 													label : langCell.bgColor,
+													labelLayout : 'horizontal',
+													widths : [ '70%', '30%' ],
 													'default' : '',
 													setup : function( element )
@@ -417,11 +434,6 @@
 													type : 'button',
 													id : 'bgColorChoose',
-													"class" : 'colorChooser',
 													label : langCell.chooseColor,
-													onLoad : function()
-													{
-														// Stick the element to the bottom (#5587)
-														this.getElement().getParent().setStyle( 'vertical-align', 'bottom' );
-													},
+													style : 'margin-left: 10px',
 													onClick : function()
 													{
@@ -441,5 +453,5 @@
 											type : 'hbox',
 											padding : 0,
-											widths : [ '60%', '40%' ],
+											widths : [ '80%', '20%' ],
 											children :
 											[
@@ -448,4 +460,6 @@
 													id : 'borderColor',
 													label : langCell.borderColor,
+													labelLayout : 'horizontal',
+													widths : [ '70%', '30%' ],
 													'default' : '',
 													setup : function( element )
@@ -470,12 +484,6 @@
 													type : 'button',
 													id : 'borderColorChoose',
-													"class" : 'colorChooser',
 													label : langCell.chooseColor,
-													style : ( rtl ? 'margin-right' : 'margin-left' ) + ': 10px',
-													onLoad : function()
-													{
-														// Stick the element to the bottom (#5587)
-														this.getElement().getParent().setStyle( 'vertical-align', 'bottom' );
-													},
+													style : 'margin-left: 10px',
 													onClick : function()
 													{
Index: /CKEditor/trunk/_source/plugins/toolbar/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/toolbar/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/toolbar/plugin.js	(revision 6192)
@@ -44,7 +44,6 @@
 					editor.toolbox.focusCommandExecuted = true;
 
-					// Make the first button focus accessible for IE. (#3417)
-					// Adobe AIR instead need while of delay.
-					if ( CKEDITOR.env.ie || CKEDITOR.env.air )
+					// Make the first button focus accessible. (#3417)
+					if ( CKEDITOR.env.ie )
 						setTimeout( function(){ editor.toolbox.focus(); }, 100 );
 					else
@@ -419,5 +418,5 @@
  *     ['BidiLtr', 'BidiRtl' ],
  *     ['Link','Unlink','Anchor'],
- *     ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe'],
+ *     ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
  *     '/',
  *     ['Styles','Format','Font','FontSize'],
@@ -438,5 +437,5 @@
 	['BidiLtr', 'BidiRtl' ],
 	['Link','Unlink','Anchor'],
-	['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe'],
+	['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
 	'/',
 	['Styles','Format','Font','FontSize'],
Index: /CKEditor/trunk/_source/plugins/undo/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/undo/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/undo/plugin.js	(revision 6192)
@@ -153,5 +153,5 @@
 
 		// In IE, we need to remove the expando attributes.
-		CKEDITOR.env.ie && contents && ( contents = contents.replace( /\s+data-cke-expando=".*?"/g, '' ) );
+		CKEDITOR.env.ie && contents && ( contents = contents.replace( /\s+_cke_expando=".*?"/g, '' ) );
 
 		this.contents	= contents;
@@ -268,5 +268,5 @@
 						// In IE, we need to remove the expando attributes.
 						if ( CKEDITOR.env.ie )
-							currentSnapshot = currentSnapshot.replace( /\s+data-cke-expando=".*?"/g, '' );
+							currentSnapshot = currentSnapshot.replace( /\s+_cke_expando=".*?"/g, '' );
 
 						if ( beforeTypeImage.contents != currentSnapshot )
Index: /CKEditor/trunk/_source/plugins/wsc/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/wsc/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/wsc/plugin.js	(revision 6192)
@@ -19,5 +19,5 @@
 
 		// SpellChecker doesn't work in Opera and with custom domain
-		command.modes = { wysiwyg : ( !CKEDITOR.env.opera && !CKEDITOR.env.air && document.domain == window.location.hostname ) };
+		command.modes = { wysiwyg : ( !CKEDITOR.env.opera && document.domain == window.location.hostname ) };
 
 		editor.ui.addButton( 'SpellChecker',
Index: /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js	(revision 6191)
+++ /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js	(revision 6192)
@@ -34,41 +34,97 @@
 	}
 
-
-	function onInsert( insertFunc )
-	{
-		return function( evt )
+	function onInsertHtml( evt )
+	{
+		if ( this.mode == 'wysiwyg' )
 		{
-			if ( this.mode == 'wysiwyg' )
+			this.focus();
+
+			var selection = this.getSelection();
+			if ( checkReadOnly( selection ) )
+				return;
+
+			var data = evt.data;
+			this.fire( 'saveSnapshot' );
+
+			if ( this.dataProcessor )
+				data = this.dataProcessor.toHtml( data );
+
+			if ( CKEDITOR.env.ie )
 			{
-				this.focus();
-
-				var selection = this.getSelection();
-				if ( checkReadOnly( selection ) )
-					return;
-
-				this.fire( 'saveSnapshot' );
-
-				insertFunc.call( this, evt.data );
-
-				// 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 );
+				var selIsLocked = selection.isLocked;
+
+				if ( selIsLocked )
+					selection.unlock();
+
+				var $sel = selection.getNative();
+
+				// Delete control selections to avoid IE bugs on pasteHTML.
+				if ( $sel.type == 'Control' )
+					$sel.clear();
+				else if  ( selection.getType() == CKEDITOR.SELECTION_TEXT )
+				{
+					// Due to IE bugs on handling contenteditable=false blocks
+					// (#6005), we need to make some checks and eventually
+					// delete the selection first.
+
+					var range = selection.getRanges()[0],
+						endContainer = range && range.endContainer;
+
+					if ( endContainer &&
+ 						 endContainer.type == CKEDITOR.NODE_ELEMENT &&
+ 						 endContainer.getAttribute( 'contenteditable' ) == 'false' &&
+						 range.checkBoundaryOfElement( endContainer, CKEDITOR.END ) )
+					{
+						range.setEndAfter( range.endContainer );
+						range.deleteContents();
+					}
+				}
+
+				try
+				{
+					$sel.createRange().pasteHTML( data );
+				}
+				catch (e) {}
+
+				if ( selIsLocked )
+					this.getSelection().lock();
 			}
-		};
+			else
+				this.document.$.execCommand( 'inserthtml', false, data );
+
+			// Webkit does not scroll to the cursor position after pasting (#5558)
+			if ( CKEDITOR.env.webkit )
+			{
+				this.document.$.execCommand( 'inserthtml', false, '<span id="cke_paste_marker" cke_temp="1"></span>' );
+				var marker = this.document.getById( 'cke_paste_marker' );
+				marker.scrollIntoView();
+				marker.remove();
+				marker = null;
+			}
+
+			CKEDITOR.tools.setTimeout( function()
+				{
+					this.fire( 'saveSnapshot' );
+				}, 0, this );
+		}
 	}
-	
-	function doInsertHtml( data )
-	{
-		if ( this.dataProcessor )
-			data = this.dataProcessor.toHtml( data );
-
-		var selection = this.getSelection();
-		if ( CKEDITOR.env.ie )
+
+	function onInsertElement( evt )
+	{
+		if ( this.mode == 'wysiwyg' )
 		{
+			this.focus();
+
+			var selection = this.getSelection();
+			if ( checkReadOnly( selection ) )
+				return;
+
+			this.fire( 'saveSnapshot' );
+
+			var ranges = selection.getRanges(),
+				element = evt.data,
+				elementName = element.getName(),
+				isBlock = CKEDITOR.dtd.$block[ elementName ];
+
 			var selIsLocked = selection.isLocked;
 
@@ -76,196 +132,77 @@
 				selection.unlock();
 
-			var $sel = selection.getNative();
-
-			// Delete control selections to avoid IE bugs on pasteHTML.
-			if ( $sel.type == 'Control' )
-				$sel.clear();
-				else if  ( selection.getType() == CKEDITOR.SELECTION_TEXT )
+			var range, clone, lastElement, bookmark;
+
+			for ( var i = ranges.length - 1 ; i >= 0 ; i-- )
 			{
-				// Due to IE bugs on handling contenteditable=false blocks
-				// (#6005), we need to make some checks and eventually
-				// delete the selection first.
-
-				var range = selection.getRanges()[0],
-						endContainer = range && range.endContainer;
-
-				if ( endContainer &&
-						endContainer.type == CKEDITOR.NODE_ELEMENT &&
-						endContainer.getAttribute( 'contenteditable' ) == 'false' &&
-						range.checkBoundaryOfElement( endContainer, CKEDITOR.END ) )
+				range = ranges[ i ];
+
+				// Remove the original contents.
+				range.deleteContents();
+
+				clone = !i && element || element.clone( 1 );
+
+				// If we're inserting a block at dtd-violated position, split
+				// the parent blocks until we reach blockLimit.
+				var current, dtd;
+				if ( isBlock )
 				{
-					range.setEndAfter( range.endContainer );
-					range.deleteContents();
+					while ( ( current = range.getCommonAncestor( 0, 1 ) )
+							&& ( dtd = CKEDITOR.dtd[ current.getName() ] )
+							&& !( dtd && dtd [ elementName ] ) )
+					{
+						// Split up inline elements.
+						if ( current.getName() in CKEDITOR.dtd.span )
+							range.splitElement( current );
+						// If we're in an empty block which indicate a new paragraph,
+						// simply replace it with the inserting block.(#3664)
+						else if ( range.checkStartOfBlock()
+							 && range.checkEndOfBlock() )
+						{
+							range.setStartBefore( current );
+							range.collapse( true );
+							current.remove();
+						}
+						else
+							range.splitBlock();
+					}
 				}
+
+				// Insert the new node.
+				range.insertNode( clone );
+
+				// Save the last element reference so we can make the
+				// selection later.
+				if ( !lastElement )
+					lastElement = clone;
 			}
 
-			try
+			range.moveToPosition( lastElement, CKEDITOR.POSITION_AFTER_END );
+
+			// If we're inserting a block element immediatelly followed by
+			// another block element, the selection must move there. (#3100,#5436)
+			if ( isBlock )
 			{
-				$sel.createRange().pasteHTML( data );
+				var next = lastElement.getNext( notWhitespaceEval ),
+					nextName = next && next.type == CKEDITOR.NODE_ELEMENT && next.getName();
+
+				// Check if it's a block element that accepts text.
+				if ( nextName && CKEDITOR.dtd.$block[ nextName ] && CKEDITOR.dtd[ nextName ]['#'] )
+					range.moveToElementEditStart( next );
 			}
-				catch (e) {}
+
+			selection.selectRanges( [ range ] );
 
 			if ( selIsLocked )
 				this.getSelection().lock();
-			}
-		else
-			this.document.$.execCommand( 'inserthtml', false, data );
-
-		// Webkit does not scroll to the cursor position after pasting (#5558)
-		if ( CKEDITOR.env.webkit )
-		{
-			selection = this.getSelection();
-			selection.scrollIntoView();
+
+			// 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 );
 		}
-	}
-
-	function doInsertText( text )
-	{
-		var selection = this.getSelection(),
-			mode = selection.getStartElement().hasAscendant( 'pre', true ) ?
-				   CKEDITOR.ENTER_BR : this.config.enterMode,
-			isEnterBrMode = mode == CKEDITOR.ENTER_BR;
-
-		var html = CKEDITOR.tools.htmlEncode( text.replace( /\r\n|\r/g, '\n' ) );
-
-		// Convert leading and trailing whitespaces into &nbsp;
-		html = html.replace( /^[ \t]+|[ \t]+$/g, function( match, offset, s )
-			{
-				if ( match.length == 1 )	// one space, preserve it
-					return '&nbsp;';
-				else if ( !offset )		// beginning of block
-					return CKEDITOR.tools.repeat( '&nbsp;', match.length - 1 ) + ' ';
-				else				// end of block
-					return ' ' + CKEDITOR.tools.repeat( '&nbsp;', match.length - 1 );
-			} );
-
-		// Convert subsequent whitespaces into &nbsp;
-		html = html.replace( /[ \t]{2,}/g, function ( match )
-		   {
-			   return CKEDITOR.tools.repeat( '&nbsp;', match.length - 1 ) + ' ';
-		   } );
-
-		var paragraphTag = mode == CKEDITOR.ENTER_P ? 'p' : 'div';
-
-		// Two line-breaks create one paragraph.
-		if ( !isEnterBrMode )
-		{
-			html = html.replace( /(\n{2})([\s\S]*?)(?:$|\1)/g,
-				function( match, group1, text )
-				{
-					return '<'+paragraphTag + '>' + text + '</' + paragraphTag + '>';
-				});
-		}
-
-		// One <br> per line-break.
-		html = html.replace( /\n/g, '<br>' );
-
-		// Compensate padding <br> for non-IE.
-		if ( !( isEnterBrMode || CKEDITOR.env.ie ) )
-		{
-			html = html.replace( new RegExp( '<br>(?=</' + paragraphTag + '>)' ), function( match )
-			{
-				return CKEDITOR.tools.repeat( match, 2 );
-			} );
-		}
-
-		// Inline styles have to be inherited in Firefox.
-		if ( CKEDITOR.env.gecko || CKEDITOR.env.webkit )
-		{
-			var path = new CKEDITOR.dom.elementPath( selection.getStartElement() ),
-				context = [];
-
-			for ( var i = 0; i < path.elements.length; i++ )
-			{
-				var tag = path.elements[ i ].getName();
-				if ( tag in CKEDITOR.dtd.$inline )
-					context.unshift( path.elements[ i ].getOuterHtml().match( /^<.*?>/) );
-				else if ( tag in CKEDITOR.dtd.$block )
-					break;
-			}
-
-			// Reproduce the context  by preceding the pasted HTML with opening inline tags.
-			html = context.join( '' ) + html;
-		}
-
-		doInsertHtml.call( this, html );
-	}
-
-	function doInsertElement( element )
-	{
-		var selection = this.getSelection(),
-				ranges = selection.getRanges(),
-				elementName = element.getName(),
-				isBlock = CKEDITOR.dtd.$block[ elementName ];
-
-		var selIsLocked = selection.isLocked;
-
-		if ( selIsLocked )
-			selection.unlock();
-
-		var range, clone, lastElement, bookmark;
-
-		for ( var i = ranges.length - 1 ; i >= 0 ; i-- )
-		{
-			range = ranges[ i ];
-
-			// Remove the original contents.
-			range.deleteContents();
-
-			clone = !i && element || element.clone( 1 );
-
-			// If we're inserting a block at dtd-violated position, split
-			// the parent blocks until we reach blockLimit.
-			var current, dtd;
-			if ( isBlock )
-			{
-				while ( ( current = range.getCommonAncestor( 0, 1 ) )
-						&& ( dtd = CKEDITOR.dtd[ current.getName() ] )
-						&& !( dtd && dtd [ elementName ] ) )
-				{
-					// Split up inline elements.
-					if ( current.getName() in CKEDITOR.dtd.span )
-						range.splitElement( current );
-					// If we're in an empty block which indicate a new paragraph,
-					// simply replace it with the inserting block.(#3664)
-					else if ( range.checkStartOfBlock()
-							&& range.checkEndOfBlock() )
-					{
-						range.setStartBefore( current );
-						range.collapse( true );
-						current.remove();
-					}
-					else
-						range.splitBlock();
-				}
-			}
-
-			// Insert the new node.
-			range.insertNode( clone );
-
-			// Save the last element reference so we can make the
-			// selection later.
-			if ( !lastElement )
-				lastElement = clone;
-		}
-
-		range.moveToPosition( lastElement, CKEDITOR.POSITION_AFTER_END );
-
-		// If we're inserting a block element immediatelly followed by
-		// another block element, the selection must move there. (#3100,#5436)
-		if ( isBlock )
-		{
-			var next = lastElement.getNext( notWhitespaceEval ),
-					nextName = next && next.type == CKEDITOR.NODE_ELEMENT && next.getName();
-
-			// Check if it's a block element that accepts text.
-			if ( nextName && CKEDITOR.dtd.$block[ nextName ] && CKEDITOR.dtd[ nextName ]['#'] )
-				range.moveToElementEditStart( next );
-		}
-
-		selection.selectRanges( [ range ] );
-
-		if ( selIsLocked )
-			this.getSelection().lock();
 	}
 
@@ -475,5 +412,6 @@
 							iframe.remove();
 
-						var src =
+
+						var srcScript =
 							'document.open();' +
 
@@ -483,15 +421,4 @@
 
 							'document.close();';
-
-						// With IE, the custom domain has to be taken care at first,
-						// for other browers, the 'src' attribute should be left empty to
-						// trigger iframe's 'load' event.
-  						src =
-							CKEDITOR.env.air ?
-								'javascript:void(0)' :
-							CKEDITOR.env.ie ?
-								'javascript:void(function(){' + encodeURIComponent( src ) + '}())'
-							:
-								'';
 
 						iframe = CKEDITOR.dom.element.createFromHtml( '<iframe' +
@@ -499,5 +426,8 @@
   							' frameBorder="0"' +
   							' title="' + frameLabel + '"' +
-  							' src="' + src + '"' +
+							// With IE, the custom domain has to be taken care at first,
+							// for other browers, the 'src' attribute should be left empty to
+							// trigger iframe's 'load' event.
+  							' src="' + ( CKEDITOR.env.ie ? 'javascript:void(function(){' + encodeURIComponent( srcScript ) + '}())' : '' ) + '"' +
 							' tabIndex="' + ( CKEDITOR.env.webkit? -1 : editor.tabIndex ) + '"' +
   							' allowTransparency="true"' +
@@ -514,8 +444,10 @@
 								ev.removeListener();
 
-								var doc = iframe.getFrameDocument();
+								var doc = iframe.getFrameDocument().$;
+
+								// Don't leave any history log in IE. (#5657)
+								doc.open( "text/html","replace" );
 								doc.write( data );
-
-								CKEDITOR.env.air && contentDomReady( doc.getWindow().$ );
+								doc.close();
 							});
 
@@ -554,5 +486,5 @@
 					contentDomReadyHandler = CKEDITOR.tools.addFunction( contentDomReady );
 					var activationScript =
-						'<script id="cke_actscrpt" type="text/javascript" data-cke-temp="1">' +
+						'<script id="cke_actscrpt" type="text/javascript" cke_temp="1">' +
 							( isCustomDomain ? ( 'document.domain="' + document.domain + '";' ) : '' ) +
 							'window.parent.CKEDITOR.tools.callFunction( ' + contentDomReadyHandler + ', window );' +
@@ -573,5 +505,5 @@
 						// Remove this script from the DOM.
 						var script = domDocument.getElementById( "cke_actscrpt" );
-						script && script.parentNode.removeChild( script );
+						script.parentNode.removeChild( script );
 
 						body.spellcheck = !editor.config.disableNativeSpellChecker;
@@ -867,5 +799,5 @@
 								// Build the additional stuff to be included into <head>.
 								var headExtra =
-									'<style type="text/css" data-cke-temp="1">' +
+									'<style type="text/css" cke_temp="1">' +
 										editor._.styles.join( '\n' ) +
 									'</style>';
@@ -875,5 +807,5 @@
 									headExtra );
 
-								var baseTag = config.baseHref ? '<base href="' + config.baseHref + '" data-cke-temp="1" />' : '';
+								var baseTag = config.baseHref ? '<base href="' + config.baseHref + '" cke_temp="1" />' : '';
 
 								if ( fullPage )
@@ -1013,6 +945,4 @@
 							focus : function()
 							{
-								var win = editor.window;
-
 								if ( isLoadingData )
 									isPendingFocus = true;
@@ -1028,8 +958,8 @@
 									editor.selectionChange();
 								}
-								else if ( !CKEDITOR.env.opera && win )
-								{
-									// AIR needs a while to focus when moving from a link.
-									CKEDITOR.env.air ? setTimeout( function () { win.focus(); }, 0 ) : win.focus();
+								else if ( !CKEDITOR.env.opera && editor.window )
+								{
+									editor.window.focus();
+
 									editor.selectionChange();
 								}
@@ -1037,7 +967,6 @@
 						});
 
-					editor.on( 'insertHtml', onInsert( doInsertHtml ) , null, null, 20 );
-					editor.on( 'insertElement', onInsert( doInsertElement ), null, null, 20 );
-					editor.on( 'insertText', onInsert( doInsertText ), null, null, 20 );
+					editor.on( 'insertHtml', onInsertHtml, null, null, 20 );
+					editor.on( 'insertElement', onInsertElement, null, null, 20 );
 					// Auto fixing on some document structure weakness to enhance usabilities. (#3190 and #3189)
 					editor.on( 'selectionChange', onSelectionChangeFixBody, null, null, 1 );
@@ -1050,5 +979,5 @@
 				{
 					var title = editor.document.getElementsByTag( 'title' ).getItem( 0 );
-					title.data( 'cke-title', editor.document.$.title );
+					title.setAttribute( '_cke_title', editor.document.$.title );
 					editor.document.$.title = frameLabel;
 				});
Index: /CKEditor/trunk/_source/skins/kama/dialog.css
===================================================================
--- /CKEditor/trunk/_source/skins/kama/dialog.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/kama/dialog.css	(revision 6192)
@@ -103,14 +103,4 @@
 }
 
-.cke_skin_kama .cke_dialog_footer .cke_resizer
-{
-	margin-top: 20px;
-}
-.cke_skin_kama .cke_browser_iequirks .cke_dialog_footer .cke_resizer,
-.cke_skin_kama .cke_browser_ie6 .cke_dialog_footer .cke_resizer
-{
-	margin-top: 27px;
-}
-
 /* tabs */
 
@@ -723,6 +713,6 @@
 	border : 2px ridge black;
 	overflow : scroll;
-	height : 200px;
-	width : 300px;
+	height : 160px;
+	width : 230px;
 	padding : 2px;
 	background-color : white;
@@ -891,19 +881,2 @@
 	border: 1px solid white;
 }
-
-/**
- * Styles specific to "cellProperties" dialog.
- */
-
-.cke_skin_kama .cke_dialog_contents a.colorChooser
-{
-	display:block;
-	margin-top:6px;
-	margin-left: 10px;
-	width: 80px;
-}
-
-.cke_skin_kama .cke_rtl .cke_dialog_contents a.colorChooser
-{
-	margin-right: 10px;
-}
Index: /CKEditor/trunk/_source/skins/kama/icons.css
===================================================================
--- /CKEditor/trunk/_source/skins/kama/icons.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/kama/icons.css	(revision 6192)
@@ -356,6 +356,2 @@
 	background-position: 0 -1056px;
 }
-.cke_skin_kama .cke_button_iframe .cke_icon
-{
-	background-position: 0 -1279px;
-}
Index: /CKEditor/trunk/_source/skins/kama/mainui.css
===================================================================
--- /CKEditor/trunk/_source/skins/kama/mainui.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/kama/mainui.css	(revision 6192)
@@ -126,11 +126,4 @@
 }
 
-/* Adobe AIR doesn't support *-resize cursor shape. */
-.cke_skin_kama .cke_browser_air .cke_resizer,
-.cke_skin_kama .cke_browser_air .cke_rtl .cke_resizer
-{
-	cursor: move;
-}
-
 .cke_skin_kama .cke_rtl .cke_resizer
 {
Index: /CKEditor/trunk/_source/skins/kama/menu.css
===================================================================
--- /CKEditor/trunk/_source/skins/kama/menu.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/kama/menu.css	(revision 6192)
@@ -50,36 +50,8 @@
 }
 
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_browser_ie .cke_skin_kama .cke_menuitem .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons.png', sizingMethod='scale');
-}
-.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons_rtl.png', sizingMethod='scale');
-}
-.cke_browser_ie6 .cke_skin_kama .cke_menuitem .cke_icon
-{
-	filter: ;
-}
-
 .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon
 {
 	filter: alpha(opacity=70); /* IE */
 	opacity: 0.70; /* Safari, Opera and Mozilla */
-}
-
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_browser_ie .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons.png', sizingMethod='scale');
-}
-.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons_rtl.png', sizingMethod='scale');
-}
-.cke_browser_ie6 .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon
-{
-	filter: ;
 }
 
Index: /CKEditor/trunk/_source/skins/kama/richcombo.css
===================================================================
--- /CKEditor/trunk/_source/skins/kama/richcombo.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/kama/richcombo.css	(revision 6192)
@@ -201,14 +201,4 @@
 }
 
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_kama .cke_browser_ie .cke_rcombo .cke_disabled .cke_openbutton
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/sprites.png', sizingMethod='scale'), alpha(opacity=50);
-}
-.cke_skin_kama .cke_browser_ie6 .cke_rcombo .cke_disabled .cke_openbutton
-{
-	filter: alpha(opacity=50);
-}
-
 .cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_text,
 .cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_openbutton
Index: /CKEditor/trunk/_source/skins/kama/skin.js
===================================================================
--- /CKEditor/trunk/_source/skins/kama/skin.js	(revision 6191)
+++ /CKEditor/trunk/_source/skins/kama/skin.js	(revision 6192)
@@ -6,7 +6,16 @@
 CKEDITOR.skins.add( 'kama', (function()
 {
-	var uiColorStylesheetId = 'cke_ui_color';
+	var preload = [],
+		uiColorStylesheetId = 'cke_ui_color';
+
+	if ( CKEDITOR.env.ie && CKEDITOR.env.version < 7 )
+	{
+		// For IE6, we need to preload some images, otherwhise they will be
+		// downloaded several times (CSS background bug).
+		preload.push( 'icons.png', 'images/sprites_ie6.png', 'images/dialog_sides.gif' );
+	}
 
 	return {
+		preload		: preload,
 		editor		: { css : [ 'editor.css' ] },
 		dialog		: { css : [ 'dialog.css' ] },
Index: /CKEditor/trunk/_source/skins/kama/toolbar.css
===================================================================
--- /CKEditor/trunk/_source/skins/kama/toolbar.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/kama/toolbar.css	(revision 6192)
@@ -180,25 +180,9 @@
 }
 
-.cke_skin_kama .cke_button a.cke_disabled *
+.cke_skin_kama .cke_button a.cke_disabled *,
+.cke_skin_kama .cke_browser_ie a:hover.cke_button .cke_disabled *
 {
 	filter: alpha(opacity=30); /* IE */
 	opacity: 0.3; /* Safari, Opera and Mozilla */
-}
-
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_kama .cke_browser_ie .cke_button a.cke_disabled *,
-.cke_skin_kama .cke_browser_ie a:hover.cke_button .cke_disabled *
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons.png', sizingMethod='scale'), alpha(opacity=30);
-}
-.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button a.cke_disabled *,
-.cke_skin_kama .cke_browser_ie .cke_rtl a:hover.cke_button .cke_disabled *
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons_rtl.png', sizingMethod='scale'), alpha(opacity=30);
-}
-.cke_skin_kama .cke_browser_ie6 .cke_button a.cke_disabled *,
-.cke_skin_kama .cke_browser_ie6 a:hover.cke_button .cke_disabled *
-{
-	filter: alpha(opacity=30);
 }
 
@@ -261,17 +245,4 @@
 	background-image: url(icons_rtl.png);
 }
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_kama .cke_browser_ie .cke_button .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons.png', sizingMethod='scale'); 
-}
-.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons_rtl.png', sizingMethod='scale'); 
-}
-.cke_skin_kama .cke_browser_ie6 .cke_button .cke_icon
-{
-	filter: ;
-}
 
 .cke_skin_kama .cke_rtl .cke_button .cke_icon
@@ -330,14 +301,4 @@
 }
 
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_kama .cke_browser_ie .cke_button .cke_buttonarrow
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/sprites.png', sizingMethod='scale');
-}
-.cke_skin_kama .cke_browser_ie6 .cke_button .cke_buttonarrow
-{
-	filter: ;
-}
-
 .cke_skin_kama .cke_rtl .cke_button .cke_buttonarrow
 {
Index: /CKEditor/trunk/_source/skins/office2003/dialog.css
===================================================================
--- /CKEditor/trunk/_source/skins/office2003/dialog.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/office2003/dialog.css	(revision 6192)
@@ -206,8 +206,4 @@
 }
 
-.cke_skin_office2003 .cke_dialog_footer .cke_resizer {
-	margin-top: 21px;
-}
-
 /* tabs */
 
@@ -657,5 +653,5 @@
 	border : 2px ridge black;
 	overflow : scroll;
-	height : 210px;
+	height : 160px;
 	width : 230px;
 	padding : 2px;
@@ -803,24 +799,2 @@
 	float: right;
 }
-
-/**
- * Styles specific to "cellProperties" dialog.
- */
-
-.cke_skin_office2003 .cke_dialog_contents a.colorChooser
-{
-	display:block;
-	margin-top:12px;
-	margin-left: 10px;
-	width: 40px;
-}
-
-.cke_skin_office2003 .cke_dialog_contents a.colorChooser .cke_dialog_ui_button
-{
-	width:100%;
-}
-
-.cke_skin_office2003 .cke_rtl .cke_dialog_contents a.colorChooser
-{
-	margin-right: 10px;
-}
Index: /CKEditor/trunk/_source/skins/office2003/icons.css
===================================================================
--- /CKEditor/trunk/_source/skins/office2003/icons.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/office2003/icons.css	(revision 6192)
@@ -353,7 +353,2 @@
 	background-position: 0 -1056px;
 }
-.cke_skin_office2003 .cke_button_iframe .cke_icon
-{
-	background-position: 0 -1279px;
-}
-
Index: /CKEditor/trunk/_source/skins/office2003/mainui.css
===================================================================
--- /CKEditor/trunk/_source/skins/office2003/mainui.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/office2003/mainui.css	(revision 6192)
@@ -94,11 +94,4 @@
 }
 
-/* Adobe AIR doesn't support *-resize cursor shape. */
-.cke_skin_office2003 .cke_browser_air .cke_resizer,
-.cke_skin_office2003 .cke_browser_air .cke_rtl .cke_resizer
-{
-	cursor: move;
-}
-
 .cke_skin_office2003 .cke_rtl .cke_resizer
 {
Index: /CKEditor/trunk/_source/skins/office2003/menu.css
===================================================================
--- /CKEditor/trunk/_source/skins/office2003/menu.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/office2003/menu.css	(revision 6192)
@@ -50,36 +50,8 @@
 }
 
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_browser_ie .cke_skin_office2003 .cke_menuitem .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons.png', sizingMethod='scale');
-}
-.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons_rtl.png', sizingMethod='scale');
-}
-.cke_browser_ie6 .cke_skin_office2003 .cke_menuitem .cke_icon
-{
-	filter: ;
-}
-
 .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon
 {
 	filter: alpha(opacity=70); /* IE */
 	opacity: 0.70; /* Safari, Opera and Mozilla */
-}
-
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_browser_ie .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons.png', sizingMethod='scale');
-}
-.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons_rtl.png', sizingMethod='scale');
-}
-.cke_browser_ie6 .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon
-{
-	filter: ;
 }
 
Index: /CKEditor/trunk/_source/skins/office2003/richcombo.css
===================================================================
--- /CKEditor/trunk/_source/skins/office2003/richcombo.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/office2003/richcombo.css	(revision 6192)
@@ -145,5 +145,5 @@
 	background-position: 5px -1002px;
 	background-image: url(images/sprites.png);
-	_background-image: url(images/sprites_ie6.png);
+	background-image: url(images/sprites_ie6.png);
 	background-repeat: no-repeat;
 
@@ -152,14 +152,4 @@
 	width: 14px;
 	height: 22px;
-}
-
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_office2003 .cke_browser_ie .cke_rcombo .cke_openbutton
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/sprites.png', sizingMethod='scale'); 
-}
-.cke_skin_office2003 .cke_browser_ie6 .cke_rcombo .cke_openbutton
-{
-	filter: ;
 }
 
@@ -255,14 +245,4 @@
 }
 
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_office2003 .cke_browser_ie .cke_rcombo .cke_disabled .cke_openbutton
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/sprites.png', sizingMethod='scale'), alpha(opacity=50);
-}
-.cke_skin_office2003 .cke_browser_ie6 .cke_rcombo .cke_disabled .cke_openbutton
-{
-	filter: alpha(opacity=50);
-}
-
 .cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_text,
 .cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_openbutton
@@ -271,5 +251,4 @@
 	opacity: 0.8;
 }
-
 
 .cke_skin_office2003 .cke_rcombo .cke_disabled .cke_text
Index: /CKEditor/trunk/_source/skins/office2003/skin.js
===================================================================
--- /CKEditor/trunk/_source/skins/office2003/skin.js	(revision 6191)
+++ /CKEditor/trunk/_source/skins/office2003/skin.js	(revision 6192)
@@ -6,5 +6,15 @@
 CKEDITOR.skins.add( 'office2003', (function()
 {
+	var preload = [];
+
+	if ( CKEDITOR.env.ie && CKEDITOR.env.version < 7 )
+	{
+		// For IE6, we need to preload some images, otherwhise they will be
+		// downloaded several times (CSS background bug).
+		preload.push( 'icons.png', 'images/sprites_ie6.png', 'images/dialog_sides.gif' );
+	}
+
 	return {
+		preload		: preload,
 		editor		: { css : [ 'editor.css' ] },
 		dialog		: { css : [ 'dialog.css' ] },
Index: /CKEditor/trunk/_source/skins/office2003/toolbar.css
===================================================================
--- /CKEditor/trunk/_source/skins/office2003/toolbar.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/office2003/toolbar.css	(revision 6192)
@@ -269,25 +269,9 @@
 }
 
-.cke_skin_office2003 .cke_button a.cke_disabled *
+.cke_skin_office2003 .cke_button a.cke_disabled *,
+.cke_skin_office2003 .cke_browser_ie a:hover.cke_button .cke_disabled *
 {
 	filter: alpha(opacity=30); /* IE */
 	opacity: 0.3; /* Safari, Opera and Mozilla */
-}
-
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_office2003 .cke_browser_ie .cke_button a.cke_disabled *,
-.cke_skin_office2003 .cke_browser_ie a:hover.cke_button .cke_disabled *
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons.png', sizingMethod='scale'), alpha(opacity=30);
-}
-.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_button a.cke_disabled *,
-.cke_skin_office2003 .cke_browser_ie .cke_rtl a:hover.cke_button .cke_disabled *
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons_rtl.png', sizingMethod='scale'), alpha(opacity=30);
-}
-.cke_skin_office2003 .cke_browser_ie6 .cke_button a.cke_disabled *,
-.cke_skin_office2003 .cke_browser_ie6 a:hover.cke_button .cke_disabled *
-{
-	filter: alpha(opacity=30);
 }
 
@@ -330,18 +314,4 @@
 }
 
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_office2003 .cke_browser_ie .cke_button .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons.png', sizingMethod='scale'); 
-}
-.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_button .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons_rtl.png', sizingMethod='scale'); 
-}
-.cke_skin_office2003 .cke_browser_ie6 .cke_button .cke_icon
-{
-	filter: ;
-}
-
 .cke_skin_office2003 .cke_button .cke_label
 {
@@ -397,14 +367,4 @@
 	background-repeat: no-repeat;
 	cursor: default;
-}
-
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_office2003 .cke_browser_ie .cke_button .cke_buttonarrow
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/sprites.png', sizingMethod='scale');
-}
-.cke_skin_office2003 .cke_browser_ie6 .cke_button .cke_buttonarrow
-{
-	filter: ;
 }
 
Index: /CKEditor/trunk/_source/skins/v2/dialog.css
===================================================================
--- /CKEditor/trunk/_source/skins/v2/dialog.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/v2/dialog.css	(revision 6192)
@@ -201,8 +201,4 @@
 {
 	text-align: left;
-}
-
-.cke_skin_v2 .cke_dialog_footer .cke_resizer {
-	margin-top: 21px;
 }
 
@@ -659,5 +655,5 @@
 	border : 2px ridge black;
 	overflow : scroll;
-	height : 210px;
+	height : 160px;
 	width : 230px;
 	padding : 2px;
@@ -818,25 +814,2 @@
 	border-color: #C7C78F;
 }
-
-
-/**
- * Styles specific to "cellProperties" dialog.
- */
-
-.cke_skin_v2 .cke_dialog_contents a.colorChooser
-{
-	display:block;
-	margin-top:12px;
-	margin-left: 10px;
-	width: 40px;
-}
-
-.cke_skin_v2 .cke_dialog_contents a.colorChooser .cke_dialog_ui_button
-{
-	width:100%;
-}
-
-.cke_skin_v2 .cke_rtl .cke_dialog_contents a.colorChooser
-{
-	margin-right: 10px;
-}
Index: /CKEditor/trunk/_source/skins/v2/icons.css
===================================================================
--- /CKEditor/trunk/_source/skins/v2/icons.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/v2/icons.css	(revision 6192)
@@ -343,4 +343,5 @@
 	background-position: 0 -1200px;
 }
+
 .cke_skin_v2 .cke_button_bidirtl .cke_icon
 {
@@ -352,7 +353,2 @@
 	background-position: 0 -1056px;
 }
-
-.cke_skin_v2 .cke_button_iframe .cke_icon
-{
-	background-position: 0 -1279px;
-}
Index: /CKEditor/trunk/_source/skins/v2/mainui.css
===================================================================
--- /CKEditor/trunk/_source/skins/v2/mainui.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/v2/mainui.css	(revision 6192)
@@ -103,11 +103,4 @@
 }
 
-/* Adobe AIR doesn't support *-resize cursor shape. */
-.cke_skin_v2 .cke_browser_air .cke_resizer,
-.cke_skin_v2 .cke_browser_air .cke_rtl .cke_resizer
-{
-	cursor: move;
-}
-
 .cke_skin_v2 .cke_rtl .cke_resizer
 {
Index: /CKEditor/trunk/_source/skins/v2/menu.css
===================================================================
--- /CKEditor/trunk/_source/skins/v2/menu.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/v2/menu.css	(revision 6192)
@@ -49,37 +49,8 @@
 }
 
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_browser_ie .cke_skin_v2 .cke_menuitem .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons.png', sizingMethod='scale');
-}
-.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons_rtl.png', sizingMethod='scale');
-}
-.cke_browser_ie6 .cke_skin_v2 .cke_menuitem .cke_icon
-{
-	filter: ;
-}
-
 .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon
 {
 	filter: alpha(opacity=70); /* IE */
 	opacity: 0.70; /* Safari, Opera and Mozilla */
-}
-
-
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_browser_ie .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons.png', sizingMethod='scale');
-}
-.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons_rtl.png', sizingMethod='scale');
-}
-.cke_browser_ie6 .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon
-{
-	filter: ;
 }
 
Index: /CKEditor/trunk/_source/skins/v2/richcombo.css
===================================================================
--- /CKEditor/trunk/_source/skins/v2/richcombo.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/v2/richcombo.css	(revision 6192)
@@ -149,14 +149,4 @@
 }
 
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_v2 .cke_browser_ie .cke_rcombo .cke_openbutton
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/sprites.png', sizingMethod='scale'); 
-}
-.cke_skin_v2 .cke_browser_ie6 .cke_rcombo .cke_openbutton
-{
-	filter: ;
-}
-
 .cke_skin_v2 .cke_rcombo .cke_openbutton span
 {
@@ -250,14 +240,4 @@
 }
 
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_v2 .cke_browser_ie .cke_rcombo .cke_disabled .cke_openbutton
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/sprites.png', sizingMethod='scale'), alpha(opacity=50);
-}
-.cke_skin_v2 .cke_browser_ie6 .cke_rcombo .cke_disabled .cke_openbutton
-{
-	filter: alpha(opacity=50);
-}
-
 .cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_text,
 .cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_openbutton
Index: /CKEditor/trunk/_source/skins/v2/skin.js
===================================================================
--- /CKEditor/trunk/_source/skins/v2/skin.js	(revision 6191)
+++ /CKEditor/trunk/_source/skins/v2/skin.js	(revision 6192)
@@ -6,5 +6,15 @@
 CKEDITOR.skins.add( 'v2', (function()
 {
+	var preload = [];
+
+	if ( CKEDITOR.env.ie && CKEDITOR.env.version < 7 )
+	{
+		// For IE6, we need to preload some images, otherwhise they will be
+		// downloaded several times (CSS background bug).
+		preload.push( 'icons.png', 'images/sprites_ie6.png', 'images/dialog_sides.gif' );
+	}
+
 	return {
+		preload		: preload,
 		editor		: { css : [ 'editor.css' ] },
 		dialog		: { css : [ 'dialog.css' ] },
Index: /CKEditor/trunk/_source/skins/v2/toolbar.css
===================================================================
--- /CKEditor/trunk/_source/skins/v2/toolbar.css	(revision 6191)
+++ /CKEditor/trunk/_source/skins/v2/toolbar.css	(revision 6192)
@@ -239,25 +239,9 @@
 }
 
-.cke_skin_v2 .cke_button a.cke_disabled *
+.cke_skin_v2 .cke_button a.cke_disabled *,
+.cke_skin_v2 .cke_browser_ie a:hover.cke_button .cke_disabled *
 {
 	filter: alpha(opacity=30); /* IE */
 	opacity: 0.3; /* Safari, Opera and Mozilla */
-}
-
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_v2 .cke_browser_ie .cke_button a.cke_disabled *,
-.cke_skin_v2 .cke_browser_ie a:hover.cke_button .cke_disabled *
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons.png', sizingMethod='scale'), alpha(opacity=30);
-}
-.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_button a.cke_disabled *,
-.cke_skin_v2 .cke_browser_ie .cke_rtl a:hover.cke_button .cke_disabled *
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons_rtl.png', sizingMethod='scale'), alpha(opacity=30);
-}
-.cke_skin_v2 .cke_browser_ie6 .cke_button a.cke_disabled *,
-.cke_skin_v2 .cke_browser_ie6 a:hover.cke_button .cke_disabled *
-{
-	filter: alpha(opacity=30);
 }
 
@@ -301,18 +285,4 @@
 {
 	background-image: url(icons_rtl.png);
-}
-
-/* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_v2 .cke_browser_ie .cke_button .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons.png', sizingMethod='scale'); 
-}
-.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_button .cke_icon
-{
-	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icons_rtl.png', sizingMethod='scale'); 
-}
-.cke_skin_v2 .cke_browser_ie6 .cke_button .cke_icon
-{
-	filter: ;
 }
 
Index: /CKEditor/trunk/_source/themes/default/theme.js
===================================================================
--- /CKEditor/trunk/_source/themes/default/theme.js	(revision 6191)
+++ /CKEditor/trunk/_source/themes/default/theme.js	(revision 6192)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -46,8 +46,4 @@
 			container = mainContainer.getChild( [0,0,0,0] );
 
-			// Save a reference to the shared space container.
-			!editor.sharedSpaces && ( editor.sharedSpaces = {} );
-			editor.sharedSpaces[ spaceName ] = container;
-
 			// When the editor gets focus, we show the space container, hiding others.
 			editor.on( 'focus', function()
@@ -127,5 +123,5 @@
 					' title="', ( CKEDITOR.env.gecko ? ' ' : '' ), '"' +
 					' lang="', editor.langCode, '"' +
-						( CKEDITOR.env.webkit? ' tabindex="' + tabIndex + '"' : '' ) +
+					( CKEDITOR.env.webkit? ' tabindex="' + tabIndex + '"' : '' ) +
 					' role="application"' +
 					' aria-labelledby="cke_', name, '_arialbl"' +
Index: /CKEditor/trunk/ckeditor.pack
===================================================================
--- /CKEditor/trunk/ckeditor.pack	(revision 6191)
+++ /CKEditor/trunk/ckeditor.pack	(revision 6192)
@@ -110,4 +110,5 @@
 					'_source/core/resourcemanager.js',
 					'_source/core/plugins.js',
+					'_source/core/imagecacher.js',
 					'_source/core/skins.js',
 					'_source/core/themes.js',
@@ -156,5 +157,4 @@
 					'_source/plugins/horizontalrule/plugin.js',
 					'_source/plugins/htmldataprocessor/plugin.js',
-					'_source/plugins/iframe/plugin.js',
 					'_source/plugins/image/plugin.js',
 					'_source/plugins/indent/plugin.js',
Index: /CKEditor/trunk/ckeditor_basic_source.js
===================================================================
--- /CKEditor/trunk/ckeditor_basic_source.js	(revision 6191)
+++ /CKEditor/trunk/ckeditor_basic_source.js	(revision 6192)
@@ -6,5 +6,5 @@
 // Compressed version of core/ckeditor_base.js. See original for instructions.
 /*jsl:ignore*/
-if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'%VERSION%',revision:'%REV%',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
+if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'%VERSION%',revision:'%REV%',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
 /*jsl:end*/
 
Index: /CKEditor/trunk/ckeditor_source.js
===================================================================
--- /CKEditor/trunk/ckeditor_source.js	(revision 6191)
+++ /CKEditor/trunk/ckeditor_source.js	(revision 6192)
@@ -6,5 +6,5 @@
 // Compressed version of core/ckeditor_base.js. See original for instructions.
 /*jsl:ignore*/
-if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'%VERSION%',revision:'%REV%',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
+if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'%VERSION%',revision:'%REV%',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
 /*jsl:end*/
 
