Index: /CKEditor/branches/versions/3.5.x/CHANGES.html
===================================================================
--- /CKEditor/branches/versions/3.5.x/CHANGES.html	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/CHANGES.html	(revision 6655)
@@ -35,4 +35,89 @@
 		CKEditor Changelog
 	</h1>
+	<h3>
+			CKEditor 3.5.3 (SVN)</h3>
+	<p>
+			New features:</p>
+	<ul>
+		<li><a href="http://dev.ckeditor.com/ticket/4890">#4890</a> : Added the possibility to edit the <code>rel</code> attribute for links.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7004">#7004</a> : Allow loading plugin translations even if they are not present in the plugin definition.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7315">#7315</a> : Firing the <code>resize</code> event on dialog window instances is now possible.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7259">#7259</a> : Dialog window definition allows to specify initial <code>width</code> and <code>height</code> values.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7131">#7131</a> : List item numbering is now supported on pasting from Microsoft Word.</li>
+	</ul>
+	<p>
+			Fixed issues:</p>
+	<ul>
+		<li><a href="http://dev.ckeditor.com/ticket/1272">#1272</a> : [WebKit] It is now possible to apply styles to collapsed selections in Safari and Chrome.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7054">#7054</a> : The tooltips for special characters are now lowercased, making them more readable.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7102">#7102</a> : "Replace DIV" sample did not work when double-clicking inside the formatted text.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7088">#7088</a> : Loading of plugins failed on new instances of the editor after the Insert Special Character dialog window was used.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6215">#6215</a> : Removal of inline styles now also removes overrides.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6144">#6144</a> : Rich text drop-down lists have wrong height when toolbar is wrapped.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6387">#6387</a> : AutoGrow may cause an error when editor instance is destroyed too quickly after a height change.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6901">#6901</a> : Mixed direction content was not properly respected in a shared toolbar setting.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4809">#4809</a> : Table-related tags are output in wrong order.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7092">#7092</a> : Corrupted toolbar button state for inline style after switching to Source.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6921">#6921</a> : Pasted text marked by SCAYT in one language is not re-checked if another spellchecking language is selected in the editor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6614">#6614</a> : Enhancement of the resize handle in RTL.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5924">#5924</a> : Flash plugin now recognizes Flash content without an <code>embed</code> tag.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4475">#4475</a> : Protected source in attributes and inline CSS text is not handled correctly.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6984">#6984</a> : [FF] Trailing line breaks are lost in <code>ENTER_BR</code>.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6987">#6987</a> : [IE] Text selection lost when calling <code>editor::insertHtml</code> from a dialog window in some situations.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6865">#6865</a> : BiDi mirroring does not work when a text direction change is done through a dialog window.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6966">#6966</a> : [IE] Unintended paragraph is created in an empty document in <code>enterMode</code> set for <code>BR</code> and <code>DIV</code>.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7084">#7084</a> : SCAYT dialog window is now working properly with more than one editor instance in a page.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6662">#6662</a> : [FF] List structure pasting error caused by a regression from FF3.5.x is now fixed.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7300">#7300</a> : Link dialog window now loads numeric values correctly.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7330">#7330</a> : New list items no longer inherit the <code>value</code> attribute from their sibling.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7293">#7293</a> : The "Automatic" color button is now presented correctly without focus inside the editor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7018">#7018</a> : [IE] Toolbar drop-down lists did not have a border around them.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7073">#7073</a> : Image dialog window no longer allows zero height and width value to be entered.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7316">#7316</a> : [FF] Clicking on "Paste" button incorrectly breaks the line at the cursor position.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6751">#6751</a> : Inline whitespaces are incorrectly stripped when pasting from Word.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6236">#6236</a> : [IE] Fixing malformed nested list structure which was introduced by the <em>Backspace</em> key.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6649">#6649</a> : [IE] Selection of the full table sometimes does not work.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6946">#6946</a> : HTML parser is now able to fix orphan list items.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6861">#6861</a> : Indenting a list item should retain the text direction.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6938">#6938</a> : Outdenting a list item should retain the text direction.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6849">#6849</a> : Correct <em>Enter</em> key behavior on list item.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7113">#7113</a> : [WebKit] Undesired document scroll on click after scrolling.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6491">#6491</a> : Undesired Image dialog window dimension lock reset on URL change.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7284">#7284</a> : [FF Quirks] Maximize now works correctly.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6609">#6609</a> : [IE9] Browser in high contrast mode is not properly detected.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7222">#7222</a> : [WebKit] Impossible to apply a single style to a collapsed selection without giving the editor focus.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7180">#7180</a> : [IE9] When using Kama skin and RTL layout dialog window buttons were not being displayed correctly.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7182">#7182</a> : [IE9] When using Office2003/v2 skin and RTL layout dialog window shadows were corrupted.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6913">#6913</a> : Invalid escape sequence (<code>\b</code>) was used in the PHP integration.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5757">#5757</a> : [IE6] Text was not wrapping in the accessibility instructions dialog window.</li>
+		<li><a href="http://dev.ckeditor.com/changeset/6604">[6604]</a> : <code>Xml.js</code> and <code>Ajax.js</code> are now available as plugins ('xml' and 'ajax').</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7304">#7304</a> : Microsoft Word cleanup function is not always invoked when clicking on the "Paste From Word" button.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6658">#6658</a> : [IE] Pasting text from Microsoft Word with one or more tabs between list items was failing.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7433">#7433</a> : [IE9] <code>ENTER_BR</code> at the end of a block breaks due to an IE9 regression.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7432">#7432</a> : [WebKit] Unable to create a new list in an empty document.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4880">#4880</a> : CKEditor changes tag style inside HTML comment with <code>cke_protected</code>.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7023">#7023</a> : [IE] JavaScript error when a Selection Field is inserted into a page.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7034">#7034</a> : Inserting special characters into styled text.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7132">#7132</a> : Paste toolbar buttons are becoming disabled.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7138">#7138</a> : The <code>api.html</code> sample in Opera does not work as expected.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7160">#7160</a> : Cannot paste the form element on top of the page.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7171">#7171</a> : Double-clicking an image in non-editable content opens the editing dialog window.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7455">#7455</a> : Extra line break is added automatically to the preformatted element.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/7467">#7467</a> : [Firefox] Extra <code>br</code> element is added in a nested list.</li>
+		<li>Updated the following language files:<ul>
+			<li><a href="http://dev.ckeditor.com/ticket/7124">#7124</a> : Czech;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/7126">#7126</a> : French;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/7140">#7140</a> : Catalan;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/7215">#7215</a> : Faroese;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/7177">#7177</a> : Finnish;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/7163">#7163</a> : Norwegian (no and nb);</li>
+			<li><a href="http://dev.ckeditor.com/ticket/7219">#7219</a> : Swedish;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/7183">#7183</a> : Afrikaans;</li>
+			<li>Hebrew;</li>
+			<li>Spanish;</li>
+			<li>Polish;</li>
+			<li>German;</li>
+		</ul></li>
+	</ul>
 	<h3>
 			CKEditor 3.5.2</h3>
Index: /CKEditor/branches/versions/3.5.x/_dev/docs_build/docs_build.conf
===================================================================
--- /CKEditor/branches/versions/3.5.x/_dev/docs_build/docs_build.conf	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_dev/docs_build/docs_build.conf	(revision 6655)
@@ -16,4 +16,5 @@
 	[
 		'../../_source/core/',
+		'../../_source/adapters/',
 		'../../_source/plugins/',
 		'../../_source/skins/kama/skin.js',
Index: /CKEditor/branches/versions/3.5.x/_dev/docs_build/template/static/default.css
===================================================================
--- /CKEditor/branches/versions/3.5.x/_dev/docs_build/template/static/default.css	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_dev/docs_build/template/static/default.css	(revision 6655)
@@ -38,7 +38,7 @@
 	margin-top: 14px;
 	float: left;
-	width: 220px;
+	width: 240px;
 	position: absolute;
-	left: 8px;
+	left: 2px;
 	background-color: #F3F3F3;
 	padding: 8px;
@@ -47,5 +47,5 @@
 #content
 {
-	margin-left: 250px;
+	margin-left: 260px;
 }
 
@@ -159,2 +159,9 @@
 	font-size: 10px;
 }
+
+.notapi {
+	padding:10px;
+	margin:10px;
+	border:1px #000 solid;
+	background:#E0E0E0;
+}
Index: /CKEditor/branches/versions/3.5.x/_dev/releaser/release.bat
===================================================================
--- /CKEditor/branches/versions/3.5.x/_dev/releaser/release.bat	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_dev/releaser/release.bat	(revision 6655)
@@ -11,3 +11,3 @@
 :: rmdir /S /Q release
 
-java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.5.2" ckeditor_3.5.2 --run-before-release=langtool.bat
+java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.5.3 (SVN)" ckeditor_3.5.3_svn --run-before-release=langtool.bat
Index: /CKEditor/branches/versions/3.5.x/_dev/releaser/release.sh
===================================================================
--- /CKEditor/branches/versions/3.5.x/_dev/releaser/release.sh	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_dev/releaser/release.sh	(revision 6655)
@@ -13,4 +13,4 @@
 
 pushd $DIR
-java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.5.2" ckeditor_3.5.2 --run-before-release=$LANGTOOL
+java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.5.3 (SVN)" ckeditor_3.5.3_svn --run-before-release=$LANGTOOL
 popd
Index: /CKEditor/branches/versions/3.5.x/_samples/ajax.html
===================================================================
--- /CKEditor/branches/versions/3.5.x/_samples/ajax.html	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_samples/ajax.html	(revision 6655)
@@ -18,5 +18,5 @@
 	//<![CDATA[
 
-var editor;
+var editor, html = '';
 
 function createEditor()
@@ -25,5 +25,4 @@
 		return;
 
-	var html = document.getElementById( 'editorcontents' ).innerHTML;
 
 	// Create a new editor inside the <div id="editor">, setting its value to html
@@ -39,5 +38,5 @@
 	// Retrieve the editor contents. In an Ajax application, this data would be
 	// sent to the server or used in any other way.
-	document.getElementById( 'editorcontents' ).innerHTML = editor.getData();
+	document.getElementById( 'editorcontents' ).innerHTML = html = editor.getData();
 	document.getElementById( 'contents' ).style.display = '';
 
Index: /CKEditor/branches/versions/3.5.x/_samples/api.html
===================================================================
--- /CKEditor/branches/versions/3.5.x/_samples/api.html	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_samples/api.html	(revision 6655)
@@ -26,5 +26,5 @@
 
 	// Show this sample buttons.
-	document.getElementById( 'eButtons' ).style.visibility = '';
+	 document.getElementById( 'eButtons' ).style.display = 'block';
 });
 
@@ -161,5 +161,5 @@
 		<div id="eMessage">
 		</div>
-		<div id="eButtons" style="visibility: hidden">
+		<div id="eButtons" style="display: none">
 			<input onclick="InsertHTML();" type="button" value="Insert HTML" />
 			<input onclick="SetContents();" type="button" value="Set Editor Contents" />
Index: /CKEditor/branches/versions/3.5.x/_samples/divreplace.html
===================================================================
--- /CKEditor/branches/versions/3.5.x/_samples/divreplace.html	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_samples/divreplace.html	(revision 6655)
@@ -53,8 +53,13 @@
 
 	// Find out the div that holds this element.
-	element = element.parentNode;
+	var name;
+	do
+	{
+		element = element.parentNode;
+	}
+	while ( element && ( name = element.nodeName.toLowerCase() ) && ( name != 'div' || element.className.indexOf( 'editable' ) == -1 ) && name != 'body' )
 
-	if ( element.nodeName.toLowerCase() == 'div'
-		 && ( element.className.indexOf( 'editable' ) != -1 ) )
+
+	if ( name == 'div' && element.className.indexOf( 'editable' ) != -1 )
 		replaceDiv( element );
 }
Index: /CKEditor/branches/versions/3.5.x/_samples/output_html.html
===================================================================
--- /CKEditor/branches/versions/3.5.x/_samples/output_html.html	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_samples/output_html.html	(revision 6655)
@@ -118,6 +118,5 @@
 							{
 								element : 'font',
-								attributes : { 'color' : '#(color)' },
-								overrides	: [ { element : 'span', attributes : { 'class' : /^FontColor(?:1|2|3)$/ } } ]
+								attributes : { 'color' : '#(color)' }
 							},
 
Index: /CKEditor/branches/versions/3.5.x/_source/adapters/jquery.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/adapters/jquery.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/adapters/jquery.js	(revision 6655)
@@ -33,13 +33,19 @@
 {
 	/**
-	 * Allow CKEditor to override jQuery.fn.val(). This results in ability to use val()
-	 * function on textareas as usual and having those calls synchronized with CKEditor
-	 * Rich Text Editor component.
-	 *
-	 * This config option is global and executed during plugin load.
-	 * Can't be customized across editor instances.
-	 *
+	 * Allows CKEditor to override jQuery.fn.val(), making it possible to use the val()
+	 * function on textareas, as usual, having it synchronized with CKEditor.<br>
+	 * <br>
+	 * This configuration option is global and executed during the jQuery Adapter loading.
+	 * It can't be customized across editor instances.
 	 * @type Boolean
 	 * @example
+	 * &lt;script&gt;
+	 * CKEDITOR.config.jqueryOverrideVal = true;
+	 * &lt;/script&gt;
+	 * &lt;!-- Important: The JQuery adapter is loaded *after* setting jqueryOverrideVal --&gt;
+	 * &lt;script src="/ckeditor/adapters/jquery.js"&gt;&lt;/script&gt;
+	 * @example
+	 * // ... then later in the code ...
+	 *
 	 * $( 'textarea' ).ckeditor();
 	 * // ...
Index: /CKEditor/branches/versions/3.5.x/_source/core/_bootstrap.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/_bootstrap.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/_bootstrap.js	(revision 6655)
@@ -17,17 +17,8 @@
 	}
 
-	// Check is High Contrast is active by creating a temporary element with a
-	// background image.
-
-	var useSpacer = CKEDITOR.env.ie && CKEDITOR.env.version < 7,
-		useBlank = CKEDITOR.env.ie && CKEDITOR.env.version == 7;
-
-	var backgroundImageUrl = useSpacer ? ( CKEDITOR.basePath + 'images/spacer.gif' ) :
-							 useBlank ? 'about:blank' : 'data:image/png;base64,';
-
+	// Check whether high contrast is active by creating a colored border.
 	var hcDetect = CKEDITOR.dom.element.createFromHtml(
-		'<div style="width:0px;height:0px;' +
-			'position:absolute;left:-10000px;' +
-			'background-image:url(' + backgroundImageUrl + ')"></div>', CKEDITOR.document );
+		'<div style="width:0px;height:0px;position:absolute;left:-10000px;' +
+			'border: 1px solid;border-color: red blue;"></div>', CKEDITOR.document );
 
 	hcDetect.appendTo( CKEDITOR.document.getHead() );
@@ -37,5 +28,5 @@
 	try
 	{
-		CKEDITOR.env.hc = ( hcDetect.getComputedStyle( 'background-image' ) == 'none' );
+		CKEDITOR.env.hc = hcDetect.getComputedStyle( 'border-top-color' ) == hcDetect.getComputedStyle( 'border-right-color' );
 	}
 	catch (e)
Index: Editor/branches/versions/3.5.x/_source/core/ajax.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/ajax.js	(revision 6654)
+++ 	(revision )
@@ -1,142 +1,0 @@
-﻿/*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-
-/**
- * @fileOverview Defines the {@link CKEDITOR.ajax} object, which holds ajax methods for
- *		data loading.
- */
-
-/**
- * @namespace Ajax methods for data loading.
- * @example
- */
-CKEDITOR.ajax = (function()
-{
-	var createXMLHttpRequest = function()
-	{
-		// In IE, using the native XMLHttpRequest for local files may throw
-		// "Access is Denied" errors.
-		if ( !CKEDITOR.env.ie || location.protocol != 'file:' )
-			try { return new XMLHttpRequest(); } catch(e) {}
-
-		try { return new ActiveXObject( 'Msxml2.XMLHTTP' ); } catch (e) {}
-		try { return new ActiveXObject( 'Microsoft.XMLHTTP' ); } catch (e) {}
-
-		return null;
-	};
-
-	var checkStatus = function( xhr )
-	{
-		// HTTP Status Codes:
-		//	 2xx : Success
-		//	 304 : Not Modified
-		//	   0 : Returned when running locally (file://)
-		//	1223 : IE may change 204 to 1223 (see http://dev.jquery.com/ticket/1450)
-
-		return ( xhr.readyState == 4 &&
-				(	( xhr.status >= 200 && xhr.status < 300 ) ||
-					xhr.status == 304 ||
-					xhr.status === 0 ||
-					xhr.status == 1223 ) );
-	};
-
-	var getResponseText = function( xhr )
-	{
-		if ( checkStatus( xhr ) )
-			return xhr.responseText;
-		return null;
-	};
-
-	var getResponseXml = function( xhr )
-	{
-		if ( checkStatus( xhr ) )
-		{
-			var xml = xhr.responseXML;
-			return new CKEDITOR.xml( xml && xml.firstChild ? xml : xhr.responseText );
-		}
-		return null;
-	};
-
-	var load = function( url, callback, getResponseFn )
-	{
-		var async = !!callback;
-
-		var xhr = createXMLHttpRequest();
-
-		if ( !xhr )
-			return null;
-
-		xhr.open( 'GET', url, async );
-
-		if ( async )
-		{
-			// TODO: perform leak checks on this closure.
-			/** @ignore */
-			xhr.onreadystatechange = function()
-			{
-				if ( xhr.readyState == 4 )
-				{
-					callback( getResponseFn( xhr ) );
-					xhr = null;
-				}
-			};
-		}
-
-		xhr.send(null);
-
-		return async ? '' : getResponseFn( xhr );
-	};
-
-	return 	/** @lends CKEDITOR.ajax */ {
-
-		/**
-		 * Loads data from an URL as plain text.
-		 * @param {String} url The URL from which load data.
-		 * @param {Function} [callback] A callback function to be called on
-		 *		data load. If not provided, the data will be loaded
-		 *		asynchronously, passing the data value the function on load.
-		 * @returns {String} The loaded data. For asynchronous requests, an
-		 *		empty string. For invalid requests, null.
-		 * @example
-		 * // Load data synchronously.
-		 * var data = CKEDITOR.ajax.load( 'somedata.txt' );
-		 * alert( data );
-		 * @example
-		 * // Load data asynchronously.
-		 * var data = CKEDITOR.ajax.load( 'somedata.txt', function( data )
-		 *     {
-		 *         alert( data );
-		 *     } );
-		 */
-		load : function( url, callback )
-		{
-			return load( url, callback, getResponseText );
-		},
-
-		/**
-		 * Loads data from an URL as XML.
-		 * @param {String} url The URL from which load data.
-		 * @param {Function} [callback] A callback function to be called on
-		 *		data load. If not provided, the data will be loaded
-		 *		asynchronously, passing the data value the function on load.
-		 * @returns {CKEDITOR.xml} An XML object holding the loaded data. For asynchronous requests, an
-		 *		empty string. For invalid requests, null.
-		 * @example
-		 * // Load XML synchronously.
-		 * var xml = CKEDITOR.ajax.loadXml( 'somedata.xml' );
-		 * alert( xml.getInnerXml( '//' ) );
-		 * @example
-		 * // Load XML asynchronously.
-		 * var data = CKEDITOR.ajax.loadXml( 'somedata.xml', function( xml )
-		 *     {
-		 *         alert( xml.getInnerXml( '//' ) );
-		 *     } );
-		 */
-		loadXml : function( url, callback )
-		{
-			return load( url, callback, getResponseXml );
-		}
-	};
-})();
Index: /CKEditor/branches/versions/3.5.x/_source/core/ckeditor_base.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/ckeditor_base.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/ckeditor_base.js	(revision 6655)
@@ -10,5 +10,5 @@
 
 // #### Compressed Code
-// Must be updated on changes in the script, as well as updated in the
+// Must be updated on changes in the script as well as updated in the
 // ckeditor_source.js and ckeditor_basic_source.js files.
 
@@ -34,5 +34,5 @@
 			 * A constant string unique for each release of CKEditor. Its value
 			 * is used, by default, to build the URL for all resources loaded
-			 * by the editor code, guaranteing clean cache results when
+			 * by the editor code, guaranteeing clean cache results when
 			 * upgrading.
 			 * @type String
@@ -43,5 +43,5 @@
 			/*							// %REMOVE_LINE%
 			// The production implementation contains a fixed timestamp, unique
-			// for each release, generated by the releaser.
+			// for each release and generated by the releaser.
 			// (Base 36 value of each component of YYMMDDHH - 4 chars total - e.g. 87bm == 08071122)
 			timestamp : '%TIMESTAMP%',
@@ -67,5 +67,5 @@
 
 			/**
-			 * Private object used to hold core stuff. It should not be used out of
+			 * Private object used to hold core stuff. It should not be used outside of
 			 * the API code as properties defined here may change at any time
 			 * without notice.
@@ -75,5 +75,5 @@
 
 			/**
-			 * Indicates the API loading status. The following status are available:
+			 * Indicates the API loading status. The following statuses are available:
 			 *		<ul>
 			 *			<li><b>unloaded</b>: the API is not yet loaded.</li>
@@ -94,7 +94,7 @@
 			/**
 			 * Contains the full URL for the CKEditor installation directory.
-			 * It's possible to manually provide the base path by setting a
+			 * It is possible to manually provide the base path by setting a
 			 * global variable named CKEDITOR_BASEPATH. This global variable
-			 * must be set "before" the editor script loading.
+			 * must be set <strong>before</strong> the editor script loading.
 			 * @type String
 			 * @example
@@ -103,5 +103,5 @@
 			basePath : (function()
 			{
-				// ATTENTION: fixes on this code must be ported to
+				// ATTENTION: fixes to this code must be ported to
 				// var basePath in "core/loader.js".
 
@@ -125,6 +125,6 @@
 				}
 
-				// In IE (only) the script.src string is the raw valued entered in the
-				// HTML. Other browsers return the full resolved URL instead.
+				// In IE (only) the script.src string is the raw value entered in the
+				// HTML source. Other browsers return the full resolved URL instead.
 				if ( path.indexOf(':/') == -1 )
 				{
@@ -145,14 +145,14 @@
 			/**
 			 * Gets the full URL for CKEditor resources. By default, URLs
-			 * returned by this function contains a querystring parameter ("t")
+			 * returned by this function contain a querystring parameter ("t")
 			 * set to the {@link CKEDITOR.timestamp} value.<br />
 			 * <br />
-			 * It's possible to provide a custom implementation to this
+			 * It is possible to provide a custom implementation of this
 			 * function by setting a global variable named CKEDITOR_GETURL.
-			 * This global variable must be set "before" the editor script
+			 * This global variable must be set <strong>before</strong> the editor script
 			 * loading. If the custom implementation returns nothing (==null), the
 			 * default implementation is used.
-			 * @param {String} resource The resource to which get the full URL.
-			 *		It may be a full, absolute or relative URL.
+			 * @param {String} resource The resource whose full URL we want to get.
+			 *		It may be a full, absolute, or relative URL.
 			 * @returns {String} The full URL.
 			 * @example
@@ -197,3 +197,25 @@
 }
 
+/**
+ * Function called upon loading a custom configuration file that can
+ * modify the editor instance configuration ({@link CKEDITOR.editor#config }).
+ * It is usually defined inside the custom configuration files that can
+ * include developer defined settings.
+ * @name CKEDITOR.editorConfig
+ * @function
+ * @param {CKEDITOR.config} config A configuration object containing the
+ *		settings defined for a {@link CKEDITOR.editor} instance up to this
+ *		function call. Note that not all settings may still be available. See
+ *		<a href="http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Setting_Configurations#Configuration_Loading_Order">Configuration Loading Order</a>
+ *		for details.
+ * @example
+ * // This is supposed to be placed in the config.js file.
+ * CKEDITOR.editorConfig = function( config )
+ * {
+ *     // Define changes to default configuration here. For example:
+ *     config.language = 'fr';
+ *     config.uiColor = '#AADC6E';
+ * };
+ */
+
 // PACKAGER_RENAME( CKEDITOR )
Index: /CKEditor/branches/versions/3.5.x/_source/core/ckeditor_basic.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/ckeditor_basic.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/ckeditor_basic.js	(revision 6655)
@@ -174,6 +174,5 @@
 			{
 				var config = null,
-					textarea = textareas[i],
-					name = textarea.name;
+					textarea = textareas[i];
 
 				// The "name" and/or "id" attribute must exist.
Index: /CKEditor/branches/versions/3.5.x/_source/core/dom/element.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/dom/element.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/dom/element.js	(revision 6655)
@@ -308,4 +308,5 @@
 		/**
 		 * Moves the selection focus to this element.
+		 * @function
 		 * @param  {Boolean} defer Whether to asynchronously defer the
 		 * 		execution by 100 ms.
@@ -817,12 +818,13 @@
 
 		/**
-		 * Indicates that the element has defined attributes.
+		 * Checks if the element has any defined attributes.
+		 * @function
 		 * @returns {Boolean} True if the element has attributes.
 		 * @example
-		 * var element = CKEDITOR.dom.element.createFromHtml( '<div title="Test">Example</div>' );
-		 * alert( <b>element.hasAttributes()</b> );  "true"
-		 * @example
-		 * var element = CKEDITOR.dom.element.createFromHtml( '<div>Example</div>' );
-		 * alert( <b>element.hasAttributes()</b> );  "false"
+		 * var element = CKEDITOR.dom.element.createFromHtml( '&lt;div title="Test"&gt;Example&lt;/div&gt;' );
+		 * alert( <b>element.hasAttributes()</b> );  // "true"
+		 * @example
+		 * var element = CKEDITOR.dom.element.createFromHtml( '&lt;div&gt;Example&lt;/div&gt;' );
+		 * alert( <b>element.hasAttributes()</b> );  // "false"
 		 */
 		hasAttributes :
@@ -878,7 +880,7 @@
 
 		/**
-		 * Indicates whether a specified attribute is defined for this element.
+		 * Checks if the specified attribute is defined for this element.
 		 * @returns {Boolean} True if the specified attribute is defined.
-		 * @param (String) name The attribute name.
+		 * @param {String} name The attribute name.
 		 * @example
 		 */
@@ -923,5 +925,10 @@
 
 		/**
-		 * @param {Boolean} [inlineOnly=true] Allow only inline elements to be merged.
+		 * Merges sibling elements that are identical to this one.<br>
+		 * <br>
+		 * Identical child elements are also merged. For example:<br>
+		 * &lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt; =&gt; &lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;
+		 * @function
+		 * @param {Boolean} [inlineOnly] Allow only inline elements to be merged. Defaults to "true".
 		 */
 		mergeSiblings : ( function()
@@ -1555,7 +1562,10 @@
 		/**
 		 * 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} name The name of the attribute, excluding the 'data-' part.
 		 * @param {String} [value] The value to set. If set to false, the attribute will be removed.
+		 * @example
+		 * element.data( 'extra-info', 'test' );   // appended the attribute data-extra-info="test" to the element
+		 * alert( element.data( 'extra-info' ) );  // "test"
+		 * element.data( 'extra-info', false );    // remove the data-extra-info attribute from the element
 		 */
 		data : function ( name, value )
@@ -1589,9 +1599,10 @@
 
 	/**
-	 * Update the element's size with box model awareness.
-	 * @name CKEDITOR.dom.element.setSize
-	 * @param {String} type [width|height]
+	 * Sets the element size considering the box model.
+	 * @name CKEDITOR.dom.element.prototype.setSize
+	 * @function
+	 * @param {String} type The dimension to set. It accepts "width" and "height".
 	 * @param {Number} size The length unit in px.
-	 * @param isBorderBox Apply the {@param width} and {@param height} based on border box model.
+	 * @param {Boolean} isBorderBox Apply the size based on the border box model.
 	 */
 	CKEDITOR.dom.element.prototype.setSize = function( type, size, isBorderBox )
@@ -1607,15 +1618,16 @@
 
 	/**
-	 * 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.
+	 * Gets the element size, possibly considering the box model.
+	 * @name CKEDITOR.dom.element.prototype.getSize
+	 * @function
+	 * @param {String} type The dimension to get. It accepts "width" and "height".
+	 * @param {Boolean} isBorderBox Get the size based on the border box model.
 	 */
-	CKEDITOR.dom.element.prototype.getSize = function( type, contentSize )
+	CKEDITOR.dom.element.prototype.getSize = function( type, isBorderBox )
 		{
 			var size = Math.max( this.$[ 'offset' + CKEDITOR.tools.capitalize( type )  ],
 				this.$[ 'client' + CKEDITOR.tools.capitalize( type )  ] ) || 0;
 
-			if ( contentSize )
+			if ( isBorderBox )
 				size -= marginAndPaddingSize.call( this, type );
 
Index: /CKEditor/branches/versions/3.5.x/_source/core/dom/node.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/dom/node.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/dom/node.js	(revision 6655)
@@ -205,27 +205,10 @@
 			{
 				var parentNode = node.parentNode;
-				var currentIndex = -1;
 
 				if ( parentNode )
 				{
-					for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )
-					{
-						var candidate = parentNode.childNodes[i];
-
-						if ( normalized &&
-								candidate.nodeType == 3 &&
-								candidate.previousSibling &&
-								candidate.previousSibling.nodeType == 3 )
-						{
-							continue;
-						}
-
-						currentIndex++;
-
-						if ( candidate == node )
-							break;
-					}
-
-					address.unshift( currentIndex );
+					// Get the node index. For performance, call getIndex
+					// directly, instead of creating a new node object.
+					address.unshift( this.getIndex.call( { $ : node }, normalized ) );
 				}
 
@@ -248,22 +231,26 @@
 		},
 
-		getIndex : function()
-		{
-			var $ = this.$;
-
-			var currentNode = $.parentNode && $.parentNode.firstChild;
-			var currentIndex = -1;
-
-			while ( currentNode )
-			{
-				currentIndex++;
-
-				if ( currentNode == $ )
-					return currentIndex;
-
-				currentNode = currentNode.nextSibling;
-			}
-
-			return -1;
+		getIndex : function( normalized )
+		{
+			// Attention: getAddress depends on this.$
+
+			var current = this.$,
+				index = 0;
+
+			while ( ( current = current.previousSibling ) )
+			{
+				// When normalizing, do not count it if this is an
+				// empty text node or if it's a text node following another one.
+				if ( normalized && current.nodeType == 3 &&
+					 ( !current.nodeValue.length ||
+					   ( current.previousSibling && current.previousSibling.nodeType == 3 ) ) )
+				{
+					continue;
+				}
+
+				index++;
+			}
+
+			return index;
 		},
 
@@ -501,9 +488,16 @@
 
 		/**
-		 * Gets the closes ancestor node of a specified node name.
-		 * @param {String} name Node name of ancestor node.
-		 * @param {Boolean} includeSelf (Optional) Whether to include the current
-		 * node in the calculation or not.
-		 * @returns {CKEDITOR.dom.node} Ancestor node.
+		 * Gets the closest ancestor node of this node, specified by its node name.
+		 * @param {String} name The node name of the ancestor node to search.
+		 * @param {Boolean} [includeSelf] Whether to include the current
+		 * node in the search.
+		 * @returns {CKEDITOR.dom.node} The located ancestor node or null if not found.
+		 * @example
+		 * // Suppose we have the following HTML:
+		 * // &lt;div id="outer"&gt;&lt;div id="inner"&gt;&lt;p&gt;&lt;b&gt;Some text&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
+		 * // If node == &lt;b&gt;
+		 * ascendant = node.getAscendant( 'div' );      // ascendant == &lt;div id="inner"&gt
+		 * ascendant = node.getAscendant( 'b' );        // ascendant == null
+		 * ascendant = node.getAscendant( 'b', true );  // ascendant == &lt;b&gt;
 		 */
 		getAscendant : function( name, includeSelf )
Index: /CKEditor/branches/versions/3.5.x/_source/core/dom/range.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/dom/range.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/dom/range.js	(revision 6655)
@@ -5,14 +5,85 @@
 
 /**
- * @class
+ * Creates a CKEDITOR.dom.range instance that can be used inside a specific
+ * DOM Document.
+ * @class Represents a delimited piece of content in a DOM Document.
+ * It is contiguous in the sense that it can be characterized as selecting all
+ * of the content between a pair of boundary-points.<br>
+ * <br>
+ * This class shares much of the W3C
+ * <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html">Document Object Model Range</a>
+ * ideas and features, adding several range manipulation tools to it, but it's
+ * not intended to be compatible with it.
+ * @param {CKEDITOR.dom.document} document The document into which the range
+ *		features will be available.
+ * @example
+ * // Create a range for the entire contents of the editor document body.
+ * var range = new CKEDITOR.dom.range( editor.document );
+ * range.selectNodeContents( editor.document.getBody() );
+ * // Delete the contents.
+ * range.deleteContents();
  */
 CKEDITOR.dom.range = function( document )
 {
+	/**
+	 * Node within which the range begins.
+	 * @type {CKEDITOR.NODE_ELEMENT|CKEDITOR.NODE_TEXT}
+	 * @example
+	 * var range = new CKEDITOR.dom.range( editor.document );
+	 * range.selectNodeContents( editor.document.getBody() );
+	 * alert( range.startContainer.getName() );  // "body"
+	 */
 	this.startContainer	= null;
+
+	/**
+	 * Offset within the starting node of the range.
+	 * @type {Number}
+	 * @example
+	 * var range = new CKEDITOR.dom.range( editor.document );
+	 * range.selectNodeContents( editor.document.getBody() );
+	 * alert( range.startOffset );  // "0"
+	 */
 	this.startOffset	= null;
+
+	/**
+	 * Node within which the range ends.
+	 * @type {CKEDITOR.NODE_ELEMENT|CKEDITOR.NODE_TEXT}
+	 * @example
+	 * var range = new CKEDITOR.dom.range( editor.document );
+	 * range.selectNodeContents( editor.document.getBody() );
+	 * alert( range.endContainer.getName() );  // "body"
+	 */
 	this.endContainer	= null;
+
+	/**
+	 * Offset within the ending node of the range.
+	 * @type {Number}
+	 * @example
+	 * var range = new CKEDITOR.dom.range( editor.document );
+	 * range.selectNodeContents( editor.document.getBody() );
+	 * alert( range.endOffset );  // == editor.document.getBody().getChildCount()
+	 */
 	this.endOffset		= null;
+
+	/**
+	 * Indicates that this is a collapsed range. A collapsed range has it's
+	 * start and end boudaries at the very same point so nothing is contained
+	 * in it.
+	 * @example
+	 * var range = new CKEDITOR.dom.range( editor.document );
+	 * range.selectNodeContents( editor.document.getBody() );
+	 * alert( range.collapsed );  // "false"
+	 * range.collapse();
+	 * alert( range.collapsed );  // "true"
+	 */
 	this.collapsed		= true;
 
+	/**
+	 * The document within which the range can be used.
+	 * @type {CKEDITOR.dom.document}
+	 * @example
+	 * // Selects the body contents of the range document.
+	 * range.selectNodeContents( range.document.getBody() );
+	 */
 	this.document = document;
 };
@@ -519,4 +590,8 @@
 						startOffset = 0;
 					}
+
+					// Get the normalized offset.
+					if ( child && child.type == CKEDITOR.NODE_ELEMENT )
+						startOffset = child.getIndex( 1 );
 				}
 
@@ -547,4 +622,8 @@
 							endOffset = 0;
 						}
+
+						// Get the normalized offset.
+						if ( child && child.type == CKEDITOR.NODE_ELEMENT )
+							endOffset = child.getIndex( 1 );
 					}
 
Index: /CKEditor/branches/versions/3.5.x/_source/core/dom/text.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/dom/text.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/dom/text.js	(revision 6655)
@@ -68,4 +68,9 @@
 		},
 
+		setText : function( text )
+		{
+			this.$.nodeValue = text;
+		},
+
 		/**
 		 * Breaks this text node into two nodes at the specified offset,
Index: /CKEditor/branches/versions/3.5.x/_source/core/editor.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/editor.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/editor.js	(revision 6655)
@@ -273,5 +273,5 @@
 						lang = ( CKEDITOR.tools.indexOf( pluginLangs, editor.langCode ) >= 0 ? editor.langCode : pluginLangs[ 0 ] );
 
-						if ( !plugin.lang[ lang ] )
+						if ( !plugin.langEntries || !plugin.langEntries[ lang ] )
 						{
 							// Put the language file URL into the list of files to
@@ -281,5 +281,5 @@
 						else
 						{
-							CKEDITOR.tools.extend( editor.lang, plugin.lang[ lang ] );
+							CKEDITOR.tools.extend( editor.lang, plugin.langEntries[ lang ] );
 							lang = null;
 						}
@@ -306,5 +306,5 @@
 								// Uses the first loop to update the language entries also.
 								if ( m === 0 && languageCodes[ i ] && plugin.lang )
-									CKEDITOR.tools.extend( editor.lang, plugin.lang[ languageCodes[ i ] ] );
+									CKEDITOR.tools.extend( editor.lang, plugin.langEntries[ languageCodes[ i ] ] );
 
 								// Call the plugin method (beforeInit and init).
Index: /CKEditor/branches/versions/3.5.x/_source/core/env.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/env.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/env.js	(revision 6655)
@@ -145,4 +145,14 @@
 			 */
 			env.ie8Compat = document.documentMode == 8;
+
+			/**
+			 * Indicates that CKEditor is running on Internet Explorer 9's standards mode.
+			 * @name CKEDITOR.env.ie9Compat
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.ie9Compat )
+			 *     alert( "IE9, the beauty of the web!" );
+			 */
+			env.ie9Compat = document.documentMode == 9;
 
 			/**
Index: /CKEditor/branches/versions/3.5.x/_source/core/htmlparser/element.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/htmlparser/element.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/htmlparser/element.js	(revision 6655)
@@ -35,5 +35,5 @@
 	this.children = [];
 
-	var tagName = attributes[ 'data-cke-real-element-type' ] || name;
+	var tagName = attributes[ 'data-cke-real-element-type' ] || name || '';
 
 	// Reveal the real semantic of our internal custom tag name (#6639).
@@ -128,5 +128,5 @@
 					var writer = new CKEDITOR.htmlParser.basicWriter();
 					CKEDITOR.htmlParser.fragment.prototype.writeChildrenHtml.call( element, writer, filter );
-					element.children = new CKEDITOR.htmlParser.fragment.fromHtml( writer.getHtml() ).children;
+					element.children = new CKEDITOR.htmlParser.fragment.fromHtml( writer.getHtml(), 0, element.clone() ).children;
 					isChildrenFiltered = 1;
 				}
Index: /CKEditor/branches/versions/3.5.x/_source/core/htmlparser/fragment.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/htmlparser/fragment.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/htmlparser/fragment.js	(revision 6655)
@@ -38,14 +38,12 @@
 (function()
 {
-	// Elements which the end tag is marked as optional in the HTML 4.01 DTD
-	// (expect empty elements).
-	var optionalClose = {colgroup:1,dd:1,dt:1,li:1,option:1,p:1,td:1,tfoot:1,th:1,thead:1,tr:1};
-
 	// Block-level elements whose internal structure should be respected during
 	// parser fixing.
-	var nonBreakingBlocks = CKEDITOR.tools.extend(
-			{table:1,ul:1,ol:1,dl:1},
-			CKEDITOR.dtd.table, CKEDITOR.dtd.ul, CKEDITOR.dtd.ol, CKEDITOR.dtd.dl ),
-		listBlocks = CKEDITOR.dtd.$list, listItems = CKEDITOR.dtd.$listItem;
+	var nonBreakingBlocks = CKEDITOR.tools.extend( { table:1,ul:1,ol:1,dl:1 }, CKEDITOR.dtd.table, CKEDITOR.dtd.ul, CKEDITOR.dtd.ol, CKEDITOR.dtd.dl );
+
+	var listBlocks = { ol:1, ul:1 };
+
+	// Dtd of the fragment element, basically it accept anything except for intermediate structure, e.g. orphan <li>.
+	var rootDtd = CKEDITOR.tools.extend( {}, { html: 1 }, CKEDITOR.dtd.html, CKEDITOR.dtd.body, CKEDITOR.dtd.head, { style:1,script:1 } );
 
 	/**
@@ -53,4 +51,5 @@
 	 * @param {String} fragmentHtml The HTML to be parsed, filling the fragment.
 	 * @param {Number} [fixForBody=false] Wrap body with specified element if needed.
+	 * @param {CKEDITOR.htmlParser.element} contextNode Parse the html as the content of this element.
 	 * @returns CKEDITOR.htmlParser.fragment The fragment created.
 	 * @example
@@ -59,15 +58,13 @@
 	 * alert( fragment.children[1].value );  " Text"
 	 */
-	CKEDITOR.htmlParser.fragment.fromHtml = function( fragmentHtml, fixForBody )
+	CKEDITOR.htmlParser.fragment.fromHtml = function( fragmentHtml, fixForBody, contextNode )
 	{
 		var parser = new CKEDITOR.htmlParser(),
-			html = [],
-			fragment = new CKEDITOR.htmlParser.fragment(),
+			fragment = contextNode || new CKEDITOR.htmlParser.fragment(),
 			pendingInline = [],
 			pendingBRs = [],
 			currentNode = fragment,
 		    // Indicate we're inside a <pre> element, spaces should be touched differently.
-			inPre = false,
-			returnPoint;
+			inPre = false;
 
 		function checkPending( newTagName )
@@ -109,17 +106,35 @@
 		}
 
-		function sendPendingBRs( brsToIgnore )
-		{
-			while ( pendingBRs.length - ( brsToIgnore || 0 ) > 0 )
+		function sendPendingBRs()
+		{
+			while ( pendingBRs.length )
 				currentNode.add( pendingBRs.shift() );
 		}
 
-		function addElement( element, target, enforceCurrent )
-		{
+		/*
+		* Beside of simply append specified element to target, this function also takes
+		* care of other dirty lifts like forcing block in body, trimming spaces at
+		* the block boundaries etc.
+		*
+		* @param {Element} element  The element to be added as the last child of {@link target}.
+		* @param {Element} target The parent element to relieve the new node.
+		* @param {Boolean} [moveCurrent=false] Don't change the "currentNode" global unless
+		* there's a return point node specified on the element, otherwise move current onto {@link target} node.
+		 */
+		function addElement( element, target, moveCurrent )
+		{
+			// Ignore any element that has already been added.
+			if ( element.previous !== undefined )
+				return;
+
 			target = target || currentNode || fragment;
+
+			// Current element might be mangled by fix body below,
+			// save it for restore later.
+			var savedCurrent = currentNode;
 
 			// If the target is the fragment and this inline element can't go inside
 			// body (if fixForBody).
-			if ( fixForBody && !target.type )
+			if ( fixForBody && ( !target.type || target.name == 'body' ) )
 			{
 				var elementName, realElementName;
@@ -131,8 +146,6 @@
 					elementName =  element.name;
 
-				if ( elementName && elementName in CKEDITOR.dtd.$inline )
-				{
-					var savedCurrent = currentNode;
-
+				if ( elementName && !( elementName in CKEDITOR.dtd.$body || elementName == 'body' || element.isOrphan ) )
+				{
 					// Create a <p> in the fragment.
 					currentNode = target;
@@ -140,8 +153,5 @@
 
 					// The new target now is the <p>.
-					target = currentNode;
-
-					if ( enforceCurrent )
-						currentNode = savedCurrent;
+					element.returnPoint = target = currentNode;
 				}
 			}
@@ -171,7 +181,9 @@
 				delete element.returnPoint;
 			}
+			else
+				currentNode = moveCurrent ? target : savedCurrent;
 		}
 
-		parser.onTagOpen = function( tagName, attributes, selfClosing )
+		parser.onTagOpen = function( tagName, attributes, selfClosing, optionalClose )
 		{
 			var element = new CKEDITOR.htmlParser.element( tagName, attributes );
@@ -182,4 +194,6 @@
 				element.isEmpty = true;
 
+			element.isOptionalClose = optionalClose;
+
 			// This is a tag to be removed if empty, so do not add it immediately.
 			if ( CKEDITOR.dtd.$removeEmpty[ tagName ] )
@@ -202,79 +216,69 @@
 			}
 
-			var currentName = currentNode.name;
-
-			var currentDtd = currentName
-				&& ( CKEDITOR.dtd[ currentName ]
-					|| ( currentNode._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span ) );
-
-			// If the element cannot be child of the current element.
-			if ( currentDtd   // Fragment could receive any elements.
-				 && !element.isUnknown && !currentNode.isUnknown && !currentDtd[ tagName ] )
-			{
-
-				var reApply = false,
-					addPoint;   // New position to start adding nodes.
-
-				// Fixing malformed nested lists by moving it into a previous list item. (#3828)
-				if ( tagName in listBlocks
-					&& currentName in listBlocks )
-				{
-					var children = currentNode.children,
-						lastChild = children[ children.length - 1 ];
-
-					// Establish the list item if it's not existed.
-					if ( !( lastChild && lastChild.name in listItems ) )
-						addElement( ( lastChild = new CKEDITOR.htmlParser.element( 'li' ) ), currentNode );
-
-					returnPoint = currentNode, addPoint = lastChild;
-				}
-				// If the element name is the same as the current element name,
-				// then just close the current one and append the new one to the
-				// parent. This situation usually happens with <p>, <li>, <dt> and
-				// <dd>, specially in IE. Do not enter in this if block in this case.
-				else if ( tagName == currentName )
-				{
-					addElement( currentNode, currentNode.parent );
-				}
-				else if ( tagName in CKEDITOR.dtd.$listItem )
-				{
-					parser.onTagOpen( 'ul', {} );
-					addPoint = currentNode;
-					reApply = true;
-				}
-				else
-				{
-					if ( nonBreakingBlocks[ currentName ] )
+			while( 1 )
+			{
+				var currentName = currentNode.name;
+
+				var currentDtd = currentName ? ( CKEDITOR.dtd[ currentName ]
+						|| ( currentNode._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span ) )
+						: rootDtd;
+
+				// If the element cannot be child of the current element.
+				if ( !element.isUnknown && !currentNode.isUnknown && !currentDtd[ tagName ] )
+				{
+					// Current node doesn't have a close tag, time for a close
+					// as this element isn't fit in. (#7497)
+					if ( currentNode.isOptionalClose )
+						parser.onTagClose( currentName );
+					// Fixing malformed nested lists by moving it into a previous list item. (#3828)
+					else if ( tagName in listBlocks
+						&& currentName in listBlocks )
 					{
-						if ( !returnPoint )
-							returnPoint = currentNode;
+						var children = currentNode.children,
+							lastChild = children[ children.length - 1 ];
+
+						// Establish the list item if it's not existed.
+						if ( !( lastChild && lastChild.name == 'li' ) )
+							addElement( ( lastChild = new CKEDITOR.htmlParser.element( 'li' ) ), currentNode );
+
+						!element.returnPoint && ( element.returnPoint = currentNode );
+						currentNode = lastChild;
+					}
+					// Establish new list root for orphan list items.
+					else if ( tagName in CKEDITOR.dtd.$listItem && currentName != tagName )
+						parser.onTagOpen( tagName == 'li' ? 'ul' : 'dl', {}, 0, 1 );
+					// We're inside a structural block like table and list, AND the incoming element
+					// is not of the same type (e.g. <td>td1<td>td2</td>), we simply add this new one before it,
+					// and most importantly, return back to here once this element is added,
+					// e.g. <table><tr><td>td1</td><p>p1</p><td>td2</td></tr></table>
+					else if ( currentName in nonBreakingBlocks && currentName != tagName )
+					{
+						!element.returnPoint && ( element.returnPoint = currentNode );
+						currentNode = currentNode.parent;
 					}
 					else
 					{
-						addElement( currentNode, currentNode.parent, true );
-
-						if ( !optionalClose[ currentName ] )
+						// The current element is an inline element, which
+						// need to be continued even after the close, so put
+						// it in the pending list.
+						if ( currentName in CKEDITOR.dtd.$inline )
+							pendingInline.unshift( currentNode );
+
+						// The most common case where we just need to close the
+						// current one and append the new one to the parent.
+						if ( currentNode.parent )
+							addElement( currentNode, currentNode.parent, 1 );
+						// We've tried our best to fix the embarrassment here, while
+						// this element still doesn't find it's parent, mark it as
+						// orphan and show our tolerance to it.
+						else
 						{
-							// The current element is an inline element, which
-							// cannot hold the new one. Put it in the pending list,
-							// and try adding the new one after it.
-							pendingInline.unshift( currentNode );
+							element.isOrphan = 1;
+							break;
 						}
 					}
-
-					reApply = true;
-				}
-
-				if ( addPoint )
-					currentNode = addPoint;
-				// Try adding it to the return point, or the parent element.
+				}
 				else
-					currentNode = currentNode.returnPoint || currentNode.parent;
-
-				if ( reApply )
-				{
-					parser.onTagOpen.apply( this, arguments );
-					return;
-				}
+					break;
 			}
 
@@ -283,6 +287,4 @@
 
 			element.parent = currentNode;
-			element.returnPoint = returnPoint;
-			returnPoint = 0;
 
 			if ( element.isEmpty )
@@ -309,5 +311,5 @@
 				candidate = currentNode;
 
-			while ( candidate.type && candidate.name != tagName )
+			while ( candidate != fragment && candidate.name != tagName )
 			{
 				// If this is an inline element, add it to the pending list, if we're
@@ -322,8 +324,9 @@
 				pendingAdd.push( candidate );
 
-				candidate = candidate.parent;
-			}
-
-			if ( candidate.type )
+				// Make sure return point is properly restored.
+				candidate = candidate.returnPoint || candidate.parent;
+			}
+
+			if ( candidate != fragment )
 			{
 				// Add all elements that have been found in the above loop.
@@ -374,5 +377,5 @@
 				 && CKEDITOR.tools.trim( text ) )
 			{
-				this.onTagOpen( fixForBody, {} );
+				this.onTagOpen( fixForBody, {}, 0, 1 );
 			}
 
@@ -403,22 +406,7 @@
 		sendPendingBRs( !CKEDITOR.env.ie && 1 );
 
-		// Close all pending nodes.
-		while ( currentNode.type )
-		{
-			var parent = currentNode.parent,
-				node = currentNode;
-
-			if ( fixForBody
-				 && ( !parent.type || parent.name == 'body' )
-				 && !CKEDITOR.dtd.$body[ node.name ] )
-			{
-				currentNode = parent;
-				parser.onTagOpen( fixForBody, {} );
-				parent = currentNode;
-			}
-
-			parent.add( node );
-			currentNode = parent;
-		}
+		// Close all pending nodes, make sure return point is properly restored.
+		while ( currentNode != fragment )
+			addElement( currentNode, currentNode.parent, 1 );
 
 		return fragment;
Index: /CKEditor/branches/versions/3.5.x/_source/core/loader.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/loader.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/loader.js	(revision 6655)
@@ -25,5 +25,4 @@
 		{
 			'core/_bootstrap'		: [ 'core/config', 'core/ckeditor', 'core/plugins', 'core/scriptloader', 'core/tools', /* The following are entries that we want to force loading at the end to avoid dependence recursion */ 'core/dom/comment', 'core/dom/elementpath', 'core/dom/text', 'core/dom/rangelist' ],
-			'core/ajax'				: [ 'core/xml' ],
 			'core/ckeditor'			: [ 'core/ckeditor_basic', 'core/dom', 'core/dtd', 'core/dom/document', 'core/dom/element', 'core/editor', 'core/event', 'core/htmlparser', 'core/htmlparser/element', 'core/htmlparser/fragment', 'core/htmlparser/filter', 'core/htmlparser/basicwriter', 'core/tools' ],
 			'core/ckeditor_base'	: [],
@@ -67,6 +66,5 @@
 			'core/themes'			: [ 'core/resourcemanager' ],
 			'core/tools'			: [ 'core/env' ],
-			'core/ui'				: [],
-			'core/xml'				: [ 'core/env' ]
+			'core/ui'				: []
 		};
 
Index: /CKEditor/branches/versions/3.5.x/_source/core/plugins.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/plugins.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/core/plugins.js	(revision 6655)
@@ -80,6 +80,10 @@
 {
 	var plugin = this.get( pluginName ),
-		pluginLang = plugin.lang || ( plugin.lang = {} );
+		pluginLangEntries = plugin.langEntries || ( plugin.langEntries = {} ),
+		pluginLang = plugin.lang || ( plugin.lang = [] );
 
-	pluginLang[ languageCode ] = languageEntries;
+	if ( CKEDITOR.tools.indexOf( pluginLang, languageCode ) == -1 )
+		pluginLang.push( languageCode );
+
+	pluginLangEntries[ languageCode ] = languageEntries;
 };
Index: Editor/branches/versions/3.5.x/_source/core/xml.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/xml.js	(revision 6654)
+++ 	(revision )
@@ -1,165 +1,0 @@
-﻿/*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-
-/**
- * @fileOverview Defines the {@link CKEDITOR.xml} class, which represents a
- *		loaded XML document.
- */
-
-/**
- * Represents a loaded XML document.
- * @constructor
- * @param {object|string} xmlObjectOrData A native XML (DOM document) object or
- *		a string containing the XML definition to be loaded.
- * @example
- * var xml = <b>new CKEDITOR.xml( '<books><book title="My Book" /></books>' )</b>;
- */
-CKEDITOR.xml = function( xmlObjectOrData )
-{
-	var baseXml = null;
-
-	if ( typeof xmlObjectOrData == 'object' )
-		baseXml = xmlObjectOrData;
-	else
-	{
-		var data = ( xmlObjectOrData || '' ).replace( /&nbsp;/g, '\xA0' );
-		if ( window.DOMParser )
-			baseXml = (new DOMParser()).parseFromString( data, 'text/xml' );
-		else if ( window.ActiveXObject )
-		{
-			try { baseXml = new ActiveXObject( 'MSXML2.DOMDocument' ); }
-			catch(e)
-			{
-				try { baseXml = new ActiveXObject( 'Microsoft.XmlDom' ); } catch(e) {}
-			}
-
-			if ( baseXml )
-			{
-				baseXml.async = false;
-				baseXml.resolveExternals = false;
-				baseXml.validateOnParse = false;
-				baseXml.loadXML( data );
-			}
-		}
-	}
-
-	/**
-	 * The native XML (DOM document) used by the class instance.
-	 * @type object
-	 * @example
-	 */
-	this.baseXml = baseXml;
-};
-
-CKEDITOR.xml.prototype =
-{
-	/**
-	 * Get a single node from the XML document, based on a XPath query.
-	 * @param {String} xpath The XPath query to execute.
-	 * @param {Object} [contextNode] The XML DOM node to be used as the context
-	 *		for the XPath query. The document root is used by default.
-	 * @returns {Object} A XML node element or null if the query has no results.
-	 * @example
-	 * // Create the XML instance.
-	 * var xml = new CKEDITOR.xml( '<list><item id="test1" /><item id="test2" /></list>' );
-	 * // Get the first <item> node.
-	 * var itemNode = <b>xml.selectSingleNode( 'list/item' )</b>;
-	 * // Alert "item".
-	 * alert( itemNode.nodeName );
-	 */
-	selectSingleNode : function( xpath, contextNode )
-	{
-		var baseXml = this.baseXml;
-
-		if ( contextNode || ( contextNode = baseXml ) )
-		{
-			if ( CKEDITOR.env.ie || contextNode.selectSingleNode )	// IE
-				return contextNode.selectSingleNode( xpath );
-			else if ( baseXml.evaluate )							// Others
-			{
-				var result = baseXml.evaluate( xpath, contextNode, null, 9, null);
-				return ( result && result.singleNodeValue ) || null;
-			}
-		}
-
-		return null;
-	},
-
-	/**
-	 * Gets a list node from the XML document, based on a XPath query.
-	 * @param {String} xpath The XPath query to execute.
-	 * @param {Object} [contextNode] The XML DOM node to be used as the context
-	 *		for the XPath query. The document root is used by default.
-	 * @returns {ArrayLike} An array containing all matched nodes. The array will
-	 *		be empty if the query has no results.
-	 * @example
-	 * // Create the XML instance.
-	 * var xml = new CKEDITOR.xml( '<list><item id="test1" /><item id="test2" /></list>' );
-	 * // Get the first <item> node.
-	 * var itemNodes = xml.selectSingleNode( 'list/item' );
-	 * // Alert "item" twice, one for each <item>.
-	 * for ( var i = 0 ; i < itemNodes.length ; i++ )
-	 *     alert( itemNodes[i].nodeName );
-	 */
-	selectNodes : function( xpath, contextNode )
-	{
-		var baseXml = this.baseXml,
-			nodes = [];
-
-		if ( contextNode || ( contextNode = baseXml ) )
-		{
-			if ( CKEDITOR.env.ie || contextNode.selectNodes )		// IE
-				return contextNode.selectNodes( xpath );
-			else if ( baseXml.evaluate )							// Others
-			{
-				var result = baseXml.evaluate( xpath, contextNode, null, 5, null);
-
-				if ( result )
-				{
-					var node;
-					while ( ( node = result.iterateNext() ) )
-						nodes.push( node );
-				}
-			}
-		}
-
-		return nodes;
-	},
-
-	/**
-	 * Gets the string representation of hte inner contents of a XML node,
-	 * based on a XPath query.
-	 * @param {String} xpath The XPath query to execute.
-	 * @param {Object} [contextNode] The XML DOM node to be used as the context
-	 *		for the XPath query. The document root is used by default.
-	 * @returns {String} The textual representation of the inner contents of
-	 *		the node or null if the query has no results.
-	 * @example
-	 * // Create the XML instance.
-	 * var xml = new CKEDITOR.xml( '<list><item id="test1" /><item id="test2" /></list>' );
-	 * // Alert "<item id="test1" /><item id="test2" />".
-	 * alert( xml.getInnerXml( 'list' ) );
-	 */
-	getInnerXml : function( xpath, contextNode )
-	{
-		var node = this.selectSingleNode( xpath, contextNode ),
-			xml = [];
-		if ( node )
-		{
-			node = node.firstChild;
-			while ( node )
-			{
-				if ( node.xml )				// IE
-					xml.push( node.xml );
-				else if ( window.XMLSerializer )	// Others
-					xml.push( ( new XMLSerializer() ).serializeToString( node ) );
-
-				node = node.nextSibling;
-			}
-		}
-
-		return xml.length ? xml.join( '' ) : null;
-	}
-};
Index: /CKEditor/branches/versions/3.5.x/_source/lang/_translationstatus.txt
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/_translationstatus.txt	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/_translationstatus.txt	(revision 6655)
@@ -1,60 +1,60 @@
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 
-af.js      Found: 275 Missing: 246
-ar.js      Found: 435 Missing: 86
-bg.js      Found: 268 Missing: 253
-bn.js      Found: 269 Missing: 252
-bs.js      Found: 175 Missing: 346
-ca.js      Found: 469 Missing: 52
-cs.js      Found: 395 Missing: 126
-cy.js      Found: 435 Missing: 86
-da.js      Found: 388 Missing: 133
-de.js      Found: 521 Missing: 0
-el.js      Found: 274 Missing: 247
-en-au.js   Found: 345 Missing: 176
-en-ca.js   Found: 345 Missing: 176
-en-gb.js   Found: 520 Missing: 1
-eo.js      Found: 247 Missing: 274
-es.js      Found: 521 Missing: 0
-et.js      Found: 289 Missing: 232
-eu.js      Found: 387 Missing: 134
-fa.js      Found: 290 Missing: 231
-fi.js      Found: 521 Missing: 0
-fo.js      Found: 402 Missing: 119
-fr-ca.js   Found: 289 Missing: 232
-fr.js      Found: 521 Missing: 0
-gl.js      Found: 271 Missing: 250
-gu.js      Found: 288 Missing: 233
-he.js      Found: 521 Missing: 0
-hi.js      Found: 290 Missing: 231
-hr.js      Found: 388 Missing: 133
-hu.js      Found: 512 Missing: 9
-is.js      Found: 295 Missing: 226
-it.js      Found: 388 Missing: 133
-ja.js      Found: 471 Missing: 50
-km.js      Found: 263 Missing: 258
-ko.js      Found: 281 Missing: 240
-lt.js      Found: 294 Missing: 227
-lv.js      Found: 271 Missing: 250
-mn.js      Found: 288 Missing: 233
-ms.js      Found: 253 Missing: 268
-nb.js      Found: 452 Missing: 69
-nl.js      Found: 513 Missing: 8
-no.js      Found: 452 Missing: 69
-pl.js      Found: 521 Missing: 0
-pt-br.js   Found: 506 Missing: 15
-pt.js      Found: 270 Missing: 251
-ro.js      Found: 289 Missing: 232
-ru.js      Found: 451 Missing: 70
-sk.js      Found: 290 Missing: 231
-sl.js      Found: 394 Missing: 127
-sr-latn.js Found: 264 Missing: 257
-sr.js      Found: 263 Missing: 258
-sv.js      Found: 287 Missing: 234
-th.js      Found: 275 Missing: 246
-tr.js      Found: 506 Missing: 15
-uk.js      Found: 513 Missing: 8
-vi.js      Found: 463 Missing: 58
-zh-cn.js   Found: 518 Missing: 3
-zh.js      Found: 388 Missing: 133
+af.js      Found: 521 Missing: 1
+ar.js      Found: 435 Missing: 87
+bg.js      Found: 268 Missing: 254
+bn.js      Found: 269 Missing: 253
+bs.js      Found: 175 Missing: 347
+ca.js      Found: 521 Missing: 1
+cs.js      Found: 520 Missing: 2
+cy.js      Found: 435 Missing: 87
+da.js      Found: 388 Missing: 134
+de.js      Found: 522 Missing: 0
+el.js      Found: 274 Missing: 248
+en-au.js   Found: 345 Missing: 177
+en-ca.js   Found: 345 Missing: 177
+en-gb.js   Found: 520 Missing: 2
+eo.js      Found: 247 Missing: 275
+es.js      Found: 522 Missing: 0
+et.js      Found: 289 Missing: 233
+eu.js      Found: 387 Missing: 135
+fa.js      Found: 290 Missing: 232
+fi.js      Found: 522 Missing: 0
+fo.js      Found: 521 Missing: 1
+fr-ca.js   Found: 289 Missing: 233
+fr.js      Found: 522 Missing: 0
+gl.js      Found: 271 Missing: 251
+gu.js      Found: 288 Missing: 234
+he.js      Found: 522 Missing: 0
+hi.js      Found: 290 Missing: 232
+hr.js      Found: 388 Missing: 134
+hu.js      Found: 512 Missing: 10
+is.js      Found: 295 Missing: 227
+it.js      Found: 388 Missing: 134
+ja.js      Found: 471 Missing: 51
+km.js      Found: 263 Missing: 259
+ko.js      Found: 281 Missing: 241
+lt.js      Found: 294 Missing: 228
+lv.js      Found: 271 Missing: 251
+mn.js      Found: 288 Missing: 234
+ms.js      Found: 253 Missing: 269
+nb.js      Found: 521 Missing: 1
+nl.js      Found: 513 Missing: 9
+no.js      Found: 521 Missing: 1
+pl.js      Found: 522 Missing: 0
+pt-br.js   Found: 506 Missing: 16
+pt.js      Found: 270 Missing: 252
+ro.js      Found: 289 Missing: 233
+ru.js      Found: 451 Missing: 71
+sk.js      Found: 290 Missing: 232
+sl.js      Found: 394 Missing: 128
+sr-latn.js Found: 264 Missing: 258
+sr.js      Found: 263 Missing: 259
+sv.js      Found: 521 Missing: 1
+th.js      Found: 275 Missing: 247
+tr.js      Found: 506 Missing: 16
+uk.js      Found: 513 Missing: 9
+vi.js      Found: 463 Missing: 59
+zh-cn.js   Found: 518 Missing: 4
+zh.js      Found: 388 Missing: 134
Index: /CKEditor/branches/versions/3.5.x/_source/lang/af.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/af.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/af.js	(revision 6655)
@@ -32,18 +32,18 @@
 	 * of reading non-English words. So be careful while translating it.
 	 */
-	editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING
+	editorTitle : 'Teksverwerker, %1, druk op ALT 0 vir hulp.',
 
 	// ARIA descriptions.
-	toolbar	: 'Toolbar', // MISSING
-	editor	: 'Rich Text Editor', // MISSING
+	toolbar	: 'Werkbalk',
+	editor	: 'Teksverwerker',
 
 	// Toolbar buttons without dialogs.
-	source			: 'Source',
-	newPage			: 'Nuwe Bladsy',
+	source			: 'Bron',
+	newPage			: 'Nuwe bladsy',
 	save			: 'Bewaar',
-	preview			: 'Voorskou',
-	cut				: 'Uitsny ',
-	copy			: 'Kopieer',
-	paste			: 'Byvoeg',
+	preview			: 'Voorbeeld',
+	cut				: 'Knip',
+	copy			: 'Kopiëer',
+	paste			: 'Plak',
 	print			: 'Druk',
 	underline		: 'Onderstreep',
@@ -51,83 +51,83 @@
 	italic			: 'Skuins',
 	selectAll		: 'Selekteer alles',
-	removeFormat	: 'Formaat verweider',
-	strike			: 'Gestreik',
-	subscript		: 'Subscript',
-	superscript		: 'Superscript',
-	horizontalrule	: 'Horisontale lyn byvoeg',
-	pagebreak		: 'Bladsy breek byvoeg',
-	pagebreakAlt		: 'Page Break', // MISSING
-	unlink			: 'Skakel verweider',
-	undo			: 'Ont-skep',
-	redo			: 'Her-skep',
+	removeFormat	: 'Verwyder opmaak',
+	strike			: 'Deurstreep',
+	subscript		: 'Onderskrif',
+	superscript		: 'Bo-skrif',
+	horizontalrule	: 'Horisontale lyn invoeg',
+	pagebreak		: 'Bladsy-einde invoeg',
+	pagebreakAlt		: 'Bladsy-einde',
+	unlink			: 'Verwyder skakel',
+	undo			: 'Ontdoen',
+	redo			: 'Oordoen',
 
 	// Common messages and labels.
 	common :
 	{
-		browseServer	: 'Server deurblaai',
+		browseServer	: 'Blaai op bediener',
 		url				: 'URL',
 		protocol		: 'Protokol',
 		upload			: 'Oplaai',
-		uploadSubmit	: 'Stuur dit na die Server',
-		image			: 'Beeld',
+		uploadSubmit	: 'Stuur na bediener',
+		image			: 'Afbeelding',
 		flash			: 'Flash',
-		form			: 'Form',
-		checkbox		: 'HakBox',
-		radio			: 'PuntBox',
-		textField		: 'Byvoegbare karakter strook',
-		textarea		: 'Byvoegbare karakter area',
-		hiddenField		: 'Blinde strook',
+		form			: 'Vorm',
+		checkbox		: 'Merkhokkie',
+		radio			: 'Radioknoppie',
+		textField		: 'Teksveld',
+		textarea		: 'Teks-area',
+		hiddenField		: 'Blinde veld',
 		button			: 'Knop',
-		select			: 'Opklapbare keuse strook',
-		imageButton		: 'Beeld knop',
+		select			: 'Keuseveld',
+		imageButton		: 'Afbeeldingsknop',
 		notSet			: '<geen instelling>',
 		id				: 'Id',
 		name			: 'Naam',
-		langDir			: 'Taal rigting',
+		langDir			: 'Skryfrigting',
 		langDirLtr		: 'Links na regs (LTR)',
 		langDirRtl		: 'Regs na links (RTL)',
-		langCode		: 'Taal kode',
-		longDescr		: 'Lang beskreiwing URL',
-		cssClass		: 'Skakel Tiepe',
-		advisoryTitle	: 'Voorbeveelings Titel',
+		langCode		: 'Taalkode',
+		longDescr		: 'Lang beskrywing URL',
+		cssClass		: 'CSS klasse',
+		advisoryTitle	: 'Aanbevole titel',
 		cssStyle		: 'Styl',
 		ok				: 'OK',
-		cancel			: 'Kanseleer',
-		close			: 'Close', // MISSING
-		preview			: 'Preview', // MISSING
-		generalTab		: 'General', // MISSING
-		advancedTab		: 'Ingewikkeld',
-		validateNumberFailed : 'This value is not a number.', // MISSING
-		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING
-		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING
-		options			: 'Options', // MISSING
-		target			: 'Target', // MISSING
-		targetNew		: 'New Window (_blank)', // MISSING
-		targetTop		: 'Topmost Window (_top)', // MISSING
-		targetSelf		: 'Same Window (_self)', // MISSING
-		targetParent	: 'Parent Window (_parent)', // MISSING
-		langDirLTR		: 'Left to Right (LTR)', // MISSING
-		langDirRTL		: 'Right to Left (RTL)', // MISSING
-		styles			: 'Style', // MISSING
-		cssClasses		: 'Stylesheet Classes', // MISSING
-		width			: 'Weidte',
-		height			: 'Hoogde',
-		align			: 'Paradeer',
+		cancel			: 'Kanselleer',
+		close			: 'Sluit',
+		preview			: 'Voorbeeld',
+		generalTab		: 'Algemeen',
+		advancedTab		: 'Gevorderd',
+		validateNumberFailed : 'Hierdie waarde is nie \'n getal nie.',
+		confirmNewPage	: 'Alle wysiginge sal verlore gaan. Is u seker dat u \'n nuwe bladsy wil laai?',
+		confirmCancel	: 'Sommige opsies is gewysig. Is u seker dat u hierdie dialoogvenster wil sluit?',
+		options			: 'Opsies',
+		target			: 'Doel',
+		targetNew		: 'Nuwe venster (_blank)',
+		targetTop		: 'Boonste venster (_top)',
+		targetSelf		: 'Selfde venster (_self)',
+		targetParent	: 'Oorspronklike venster (_parent)',
+		langDirLTR		: 'Links na Regs (LTR)',
+		langDirRTL		: 'Regs na Links (RTL)',
+		styles			: 'Styl',
+		cssClasses		: 'CSS klasse',
+		width			: 'Breedte',
+		height			: 'Hoogte',
+		align			: 'Oplyn',
 		alignLeft		: 'Links',
 		alignRight		: 'Regs',
-		alignCenter		: 'Middel',
+		alignCenter		: 'Sentreer',
 		alignTop		: 'Bo',
 		alignMiddle		: 'Middel',
 		alignBottom		: 'Onder',
-		invalidHeight	: 'Height must be a number.', // MISSING
-		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidHeight	: 'Hoogte moet \'n getal wees',
+		invalidWidth	: 'Breedte moet \'n getal wees.',
 
 		// Put the voice-only part of the label in the span.
-		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+		unavailable		: '%1<span class="cke_accessibility">, nie beskikbaar nie</span>'
 	},
 
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Konteks Spyskaart-opsies'
 	},
 
@@ -135,7 +135,7 @@
 	specialChar		:
 	{
-		toolbar		: 'Spesiaale Karakter byvoeg',
+		toolbar		: 'Voeg spesiaale karakter in',
 		title		: 'Kies spesiale karakter',
-		options : 'Special Character Options' // MISSING
+		options : 'Spesiale karakter-opsies'
 	},
 
@@ -143,53 +143,54 @@
 	link :
 	{
-		toolbar		: 'Skakel byvoeg/verander',
+		toolbar		: 'Skakel invoeg/wysig',
 		other 		: '<ander>',
-		menu		: 'Verander skakel',
+		menu		: 'Wysig skakel',
 		title		: 'Skakel',
 		info		: 'Skakel informasie',
-		target		: 'Mikpunt',
+		target		: 'Doel',
 		upload		: 'Oplaai',
-		advanced	: 'Ingewikkeld',
-		type		: 'Skakel soort',
-		toUrl		: 'URL', // MISSING
-		toAnchor	: 'Skakel na plekhouers in text',
-		toEmail		: 'E-Mail',
+		advanced	: 'Gevorderd',
+		type		: 'Skakelsoort',
+		toUrl		: 'URL',
+		toAnchor	: 'Anker in bladsy',
+		toEmail		: 'E-pos',
 		targetFrame		: '<raam>',
-		targetPopup		: '<popup venster>',
-		targetFrameName	: 'Mikpunt Venster Naam',
-		targetPopupName	: 'Popup Venster Naam',
-		popupFeatures	: 'Popup Venster Geaartheid',
-		popupResizable	: 'Resizable', // MISSING
-		popupStatusBar	: 'Status Balk',
-		popupLocationBar: 'Adres Balk',
-		popupToolbar	: 'Gereedskap Balk',
-		popupMenuBar	: 'Menu Balk',
-		popupFullScreen	: 'Voll Skerm (IE)',
-		popupScrollBars	: 'Gleibalkstuk',
+		targetPopup		: '<opspringvenster>',
+		targetFrameName	: 'Naam van doelraam',
+		targetPopupName	: 'Naam van opspringvenster',
+		popupFeatures	: 'Eienskappe van opspringvenster',
+		popupResizable	: 'Herskaalbaar',
+		popupStatusBar	: 'Statusbalk',
+		popupLocationBar: 'Adresbalk',
+		popupToolbar	: 'Werkbalk',
+		popupMenuBar	: 'Spyskaartbalk',
+		popupFullScreen	: 'Volskerm (IE)',
+		popupScrollBars	: 'Skuifbalke',
 		popupDependent	: 'Afhanklik (Netscape)',
-		popupLeft		: 'Links Posisie',
-		popupTop		: 'Bo Posisie',
-		id				: 'Id', // MISSING
-		langDir			: 'Taal rigting',
+		popupLeft		: 'Posisie links',
+		popupTop		: 'Posisie bo',
+		id				: 'Id',
+		langDir			: 'Skryfrigting',
 		langDirLTR		: 'Links na regs (LTR)',
 		langDirRTL		: 'Regs na links (RTL)',
-		acccessKey		: 'Toegang sleutel',
+		acccessKey		: 'Toegangsleutel',
 		name			: 'Naam',
-		langCode		: 'Taal rigting',
-		tabIndex		: 'Tab Index',
-		advisoryTitle	: 'Voorbeveelings Titel',
-		advisoryContentType	: 'Voorbeveelings inhoud soort',
-		cssClasses		: 'Skakel Tiepe',
-		charset			: 'Geskakelde voorbeeld karakterstel',
+		langCode			: 'Taalkode',
+		tabIndex			: 'Tab indeks',
+		advisoryTitle		: 'Aanbevole titel',
+		advisoryContentType	: 'Aanbevole inhoudstipe',
+		cssClasses		: 'CSS klasse',
+		charset			: 'Karakterstel van geskakelde bron',
 		styles			: 'Styl',
-		selectAnchor	: 'Kies \'n plekhouer',
-		anchorName		: 'Volgens plekhouer naam',
-		anchorId		: 'Volgens element Id',
-		emailAddress	: 'E-Mail Adres',
-		emailSubject	: 'Boodskap Opskrif',
-		emailBody		: 'Boodskap Inhoud',
-		noAnchors		: '(Geen plekhouers beskikbaar in dokument}',
-		noUrl			: 'Voeg asseblief die URL in',
-		noEmail			: 'Voeg asseblief die e-mail adres in'
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Kies \'n anker',
+		anchorName		: 'Op ankernaam',
+		anchorId			: 'Op element Id',
+		emailAddress		: 'E-posadres',
+		emailSubject		: 'Berig-onderwerp',
+		emailBody		: 'Berig-inhoud',
+		noAnchors		: '(Geen ankers beskikbaar in dokument)',
+		noUrl			: 'Gee die skakel se URL',
+		noEmail			: 'Gee die e-posadres'
 	},
 
@@ -197,9 +198,9 @@
 	anchor :
 	{
-		toolbar		: 'Plekhouer byvoeg/verander',
-		menu		: 'Plekhouer eienskappe',
-		title		: 'Plekhouer eienskappe',
-		name		: 'Plekhouer Naam',
-		errorName	: 'Voltooi die plekhouer naam asseblief'
+		toolbar		: 'Anker byvoeg/verander',
+		menu		: 'Anker-eienskappe',
+		title		: 'Anker-eienskappe',
+		name		: 'Ankernaam',
+		errorName	: 'Voltooi die ankernaam asseblief'
 	},
 
@@ -207,23 +208,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // MISSING
-		validateStartNumber				:'List start number must be a whole number.', // MISSING
-		circle				: 'Circle', // MISSING
-		disc				: 'Disc', // MISSING
-		square				: 'Square', // MISSING
-		none				: 'None', // MISSING
-		notset				: '<not set>', // MISSING
-		armenian			: 'Armenian numbering', // MISSING
-		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
-		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
-		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
-		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
-		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
-		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
-		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
-		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+		numberedTitle		: 'Eienskappe van genommerde lys',
+		bulletedTitle		: 'Eienskappe van ongenommerde lys',
+		type				: 'Tipe',
+		start				: 'Begin',
+		validateStartNumber				:'Beginnommer van lys moet \'n heelgetal wees.',
+		circle				: 'Sirkel',
+		disc				: 'Skyf',
+		square				: 'Vierkant',
+		none				: 'Geen',
+		notset				: '<nie ingestel nie>',
+		armenian			: 'Armeense nommering',
+		georgian			: 'Georgiese nommering (an, ban, gan, ens.)',
+		lowerRoman			: 'Romeinse kleinletters (i, ii, iii, iv, v, ens.)',
+		upperRoman			: 'Romeinse hoofletters (I, II, III, IV, V, ens.)',
+		lowerAlpha			: 'Kleinletters (a, b, c, d, e, ens.)',
+		upperAlpha			: 'Hoofletters (A, B, C, D, E, ens.)',
+		lowerGreek			: 'Griekse kleinletters (alpha, beta, gamma, ens.)',
+		decimal				: 'Desimale syfers (1, 2, 3, ens.)',
+		decimalLeadingZero	: 'Desimale syfers met voorloopnul (01, 02, 03, ens.)'
 	},
 
@@ -231,15 +232,15 @@
 	findAndReplace :
 	{
-		title				: 'Find and Replace', // MISSING
-		find				: 'Vind',
+		title				: 'Soek en vervang',
+		find				: 'Soek',
 		replace				: 'Vervang',
-		findWhat			: 'Soek wat:',
+		findWhat			: 'Soek na:',
 		replaceWith			: 'Vervang met:',
-		notFoundMsg			: 'Die gespesifiseerde karakters word nie gevind nie.',
-		matchCase			: 'Vergelyk karakter skryfweise',
-		matchWord			: 'Vergelyk komplete woord',
-		matchCyclic			: 'Match cyclic', // MISSING
+		notFoundMsg			: 'Teks nie gevind nie.',
+		matchCase			: 'Hoof/kleinletter sensitief',
+		matchWord			: 'Hele woord moet voorkom',
+		matchCyclic			: 'Soek deurlopend',
 		replaceAll			: 'Vervang alles',
-		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+		replaceSuccessMsg	: '%1 voorkoms(te) vervang.'
 	},
 
@@ -250,58 +251,58 @@
 		title		: 'Tabel eienskappe',
 		menu		: 'Tabel eienskappe',
-		deleteTable	: 'Tabel verweider',
-		rows		: 'Reie',
-		columns		: 'Kolome',
-		border		: 'Kant groote',
-		widthPx		: 'pixels',
-		widthPc		: 'percent',
-		widthUnit	: 'width unit', // MISSING
-		cellSpace	: 'Cell spasieering',
-		cellPad		: 'Cell buffer',
-		caption		: 'Beskreiwing',
+		deleteTable	: 'Verwyder tabel',
+		rows		: 'Rye',
+		columns		: 'Kolomme',
+		border		: 'Randbreedte',
+		widthPx		: 'piksels',
+		widthPc		: 'persent',
+		widthUnit	: 'breedte-eenheid',
+		cellSpace	: 'Sel-afstand',
+		cellPad		: 'Sel-spasie',
+		caption		: 'Naam',
 		summary		: 'Opsomming',
-		headers		: 'Headers', // MISSING
-		headersNone		: 'None', // MISSING
-		headersColumn	: 'First column', // MISSING
-		headersRow		: 'First Row', // MISSING
-		headersBoth		: 'Both', // MISSING
-		invalidRows		: 'Number of rows must be a number greater than 0.', // MISSING
-		invalidCols		: 'Number of columns must be a number greater than 0.', // MISSING
-		invalidBorder	: 'Border size must be a number.', // MISSING
-		invalidWidth	: 'Table width must be a number.', // MISSING
-		invalidHeight	: 'Table height must be a number.', // MISSING
-		invalidCellSpacing	: 'Cell spacing must be a number.', // MISSING
-		invalidCellPadding	: 'Cell padding must be a number.', // MISSING
+		headers		: 'Opskrifte',
+		headersNone		: 'Geen',
+		headersColumn	: 'Eerste kolom',
+		headersRow		: 'Eerste ry',
+		headersBoth		: 'Beide    ',
+		invalidRows		: 'Aantal rye moet \'n getal groter as 0 wees.',
+		invalidCols		: 'Aantal kolomme moet \'n getal groter as 0 wees.',
+		invalidBorder	: 'Randbreedte moet \'n getal wees.',
+		invalidWidth	: 'Tabelbreedte moet \'n getal wees.',
+		invalidHeight	: 'Tabelhoogte moet \'n getal wees.',
+		invalidCellSpacing	: 'Sel-afstand moet \'n getal wees.',
+		invalidCellPadding	: 'Sel-spasie moet \'n getal wees.',
 
 		cell :
 		{
-			menu			: 'Cell',
-			insertBefore	: 'Insert Cell Before', // MISSING
-			insertAfter		: 'Insert Cell After', // MISSING
-			deleteCell		: 'Cell verweider',
-			merge			: 'Cell verenig',
-			mergeRight		: 'Merge Right', // MISSING
-			mergeDown		: 'Merge Down', // MISSING
-			splitHorizontal	: 'Split Cell Horizontally', // MISSING
-			splitVertical	: 'Split Cell Vertically', // MISSING
-			title			: 'Cell Properties', // MISSING
-			cellType		: 'Cell Type', // MISSING
-			rowSpan			: 'Rows Span', // MISSING
-			colSpan			: 'Columns Span', // MISSING
-			wordWrap		: 'Word Wrap', // MISSING
-			hAlign			: 'Horizontal Alignment', // MISSING
-			vAlign			: 'Vertical Alignment', // MISSING
-			alignBaseline	: 'Baseline', // MISSING
-			bgColor			: 'Background Color', // MISSING
-			borderColor		: 'Border Color', // MISSING
-			data			: 'Data', // MISSING
-			header			: 'Header', // MISSING
-			yes				: 'Yes', // MISSING
-			no				: 'No', // MISSING
-			invalidWidth	: 'Cell width must be a number.', // MISSING
-			invalidHeight	: 'Cell height must be a number.', // MISSING
-			invalidRowSpan	: 'Rows span must be a whole number.', // MISSING
-			invalidColSpan	: 'Columns span must be a whole number.', // MISSING
-			chooseColor		: 'Choose' // MISSING
+			menu			: 'Sel',
+			insertBefore	: 'Voeg sel in voor',
+			insertAfter		: 'Voeg sel in na',
+			deleteCell		: 'Verwyder sel',
+			merge			: 'Voeg selle saam',
+			mergeRight		: 'Voeg saam na regs',
+			mergeDown		: 'Voeg saam ondertoe',
+			splitHorizontal	: 'Splits sel horisontaal',
+			splitVertical	: 'Splits sel vertikaal',
+			title			: 'Sel eienskappe',
+			cellType		: 'Sel tipe',
+			rowSpan			: 'Omspan rye',
+			colSpan			: 'Omspan kolomme',
+			wordWrap		: 'Woord terugloop',
+			hAlign			: 'Horisontale oplyning',
+			vAlign			: 'Vertikale oplyning',
+			alignBaseline	: 'Basislyn',
+			bgColor			: 'Agtergrondkleur',
+			borderColor		: 'Randkleur',
+			data			: 'Inhoud',
+			header			: 'Opskrif',
+			yes				: 'Ja',
+			no				: 'Nee',
+			invalidWidth	: 'Selbreedte moet \'n getal wees.',
+			invalidHeight	: 'Selhoogte moet \'n getal wees.',
+			invalidRowSpan	: 'Omspan rye moet \'n heelgetal wees.',
+			invalidColSpan	: 'Omspan kolomme moet \'n heelgetal wees.',
+			chooseColor		: 'Kies'
 		},
 
@@ -309,7 +310,7 @@
 		{
 			menu			: 'Ry',
-			insertBefore	: 'Insert Row Before', // MISSING
-			insertAfter		: 'Insert Row After', // MISSING
-			deleteRow		: 'Ry verweider'
+			insertBefore	: 'Voeg ry in voor',
+			insertAfter		: 'Voeg ry in na',
+			deleteRow		: 'Verwyder ry'
 		},
 
@@ -317,7 +318,7 @@
 		{
 			menu			: 'Kolom',
-			insertBefore	: 'Insert Column Before', // MISSING
-			insertAfter		: 'Insert Column After', // MISSING
-			deleteColumn	: 'Kolom verweider'
+			insertBefore	: 'Voeg kolom in voor',
+			insertAfter		: 'Voeg kolom in na',
+			deleteColumn	: 'Verwyder kolom'
 		}
 	},
@@ -327,9 +328,9 @@
 	{
 		title		: 'Knop eienskappe',
-		text		: 'Karakters (Waarde)',
+		text		: 'Teks (Waarde)',
 		type		: 'Soort',
 		typeBtn		: 'Knop',
-		typeSbm		: 'Indien',
-		typeRst		: 'Reset'
+		typeSbm		: 'Stuur',
+		typeRst		: 'Maak leeg'
 	},
 
@@ -337,8 +338,8 @@
 	checkboxAndRadio :
 	{
-		checkboxTitle : 'HakBox eienskappe',
-		radioTitle	: 'PuntBox eienskappe',
+		checkboxTitle : 'Merkhokkie eienskappe',
+		radioTitle	: 'Radioknoppie eienskappe',
 		value		: 'Waarde',
-		selected	: 'Uitgekies'
+		selected	: 'Geselekteer'
 	},
 
@@ -346,9 +347,9 @@
 	form :
 	{
-		title		: 'Form eienskappe',
-		menu		: 'Form eienskappe',
+		title		: 'Vorm eienskappe',
+		menu		: 'Vorm eienskappe',
 		action		: 'Aksie',
 		method		: 'Metode',
-		encoding	: 'Encoding' // MISSING
+		encoding	: 'Kodering'
 	},
 
@@ -356,19 +357,19 @@
 	select :
 	{
-		title		: 'Opklapbare keuse strook eienskappe',
+		title		: 'Keuseveld eienskappe',
 		selectInfo	: 'Info',
-		opAvail		: 'Beskikbare Opsies',
+		opAvail		: 'Beskikbare opsies',
 		value		: 'Waarde',
-		size		: 'Grote',
-		lines		: 'lyne',
-		chkMulti	: 'Laat meerere keuses toe',
-		opText		: 'Karakters',
+		size		: 'Grootte',
+		lines		: 'Lyne',
+		chkMulti	: 'Laat meer as een keuse toe',
+		opText		: 'Teks',
 		opValue		: 'Waarde',
 		btnAdd		: 'Byvoeg',
-		btnModify	: 'Verander',
+		btnModify	: 'Wysig',
 		btnUp		: 'Op',
 		btnDown		: 'Af',
-		btnSetValue : 'Stel as uitgekiesde waarde',
-		btnDelete	: 'Verweider'
+		btnSetValue : 'Stel as geselekteerde waarde',
+		btnDelete	: 'Verwyder'
 	},
 
@@ -376,7 +377,7 @@
 	textarea :
 	{
-		title		: 'Karakter area eienskappe',
-		cols		: 'Kolom',
-		rows		: 'Reie'
+		title		: 'Teks-area eienskappe',
+		cols		: 'Kolomme',
+		rows		: 'Rye'
 	},
 
@@ -384,11 +385,11 @@
 	textfield :
 	{
-		title		: 'Karakter strook eienskappe',
+		title		: 'Teksveld eienskappe',
 		name		: 'Naam',
 		value		: 'Waarde',
-		charWidth	: 'Karakter weite',
-		maxChars	: 'Maximale karakters',
+		charWidth	: 'Breedte (karakters)',
+		maxChars	: 'Maksimum karakters',
 		type		: 'Soort',
-		typeText	: 'Karakters',
+		typeText	: 'Teks',
 		typePass	: 'Wagwoord'
 	},
@@ -397,5 +398,5 @@
 	hidden :
 	{
-		title	: 'Blinde strook eienskappe',
+		title	: 'Verborge veld eienskappe',
 		name	: 'Naam',
 		value	: 'Waarde'
@@ -405,25 +406,25 @@
 	image :
 	{
-		title		: 'Beeld eienskappe',
-		titleButton	: 'Beeld knop eienskappe',
-		menu		: 'Beeld eienskappe',
-		infoTab		: 'Beeld informasie',
-		btnUpload	: 'Stuur dit na die Server',
-		upload		: 'Uplaai',
-		alt			: 'Alternatiewe beskrywing',
-		lockRatio	: 'Behou preporsie',
-		unlockRatio	: 'Unlock Ratio', // MISSING
-		resetSize	: 'Herstel groote',
-		border		: 'Kant',
+		title		: 'Afbeelding eienskappe',
+		titleButton	: 'Afbeeldingsknop eienskappe',
+		menu		: 'Afbeelding eienskappe',
+		infoTab		: 'Afbeelding informasie',
+		btnUpload	: 'Stuur na bediener',
+		upload		: 'Oplaai',
+		alt			: 'Alternatiewe teks',
+		lockRatio	: 'Vaste proporsie',
+		unlockRatio	: 'Vrye proporsie',
+		resetSize	: 'Herstel grootte',
+		border		: 'Rand',
 		hSpace		: 'HSpasie',
 		vSpace		: 'VSpasie',
-		alertUrl	: 'Voeg asseblief Beeld URL in.',
+		alertUrl	: 'Gee URL van afbeelding.',
 		linkTab		: 'Skakel',
-		button2Img	: 'Do you want to transform the selected image button on a simple image?', // MISSING
-		img2Button	: 'Do you want to transform the selected image on a image button?', // MISSING
-		urlMissing	: 'Image source URL is missing.', // MISSING
-		validateBorder	: 'Border must be a whole number.', // MISSING
-		validateHSpace	: 'HSpace must be a whole number.', // MISSING
-		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+		button2Img	: 'Wil u die geselekteerde afbeeldingsknop vervang met \'n eenvoudige afbeelding?',
+		img2Button	: 'Wil u die geselekteerde afbeelding vervang met \'n afbeeldingsknop?',
+		urlMissing	: 'Die URL na die afbeelding ontbreek.',
+		validateBorder	: 'Rand moet \'n heelgetal wees.',
+		validateHSpace	: 'HSpasie moet \'n heelgetal wees.',
+		validateVSpace	: 'VSpasie moet \'n heelgetal wees.'
 	},
 
@@ -432,40 +433,40 @@
 	{
 		properties		: 'Flash eienskappe',
-		propertiesTab	: 'Properties', // MISSING
+		propertiesTab	: 'Eienskappe',
 		title			: 'Flash eienskappe',
-		chkPlay			: 'Automaties Speel',
-		chkLoop			: 'Herhaling',
-		chkMenu			: 'Laat Flash Menu toe',
-		chkFull			: 'Allow Fullscreen', // MISSING
- 		scale			: 'Scale',
+		chkPlay			: 'Speel outomaties',
+		chkLoop			: 'Herhaal',
+		chkMenu			: 'Flash spyskaart aan',
+		chkFull			: 'Laat volledige skerm toe',
+ 		scale			: 'Skaal',
 		scaleAll		: 'Wys alles',
-		scaleNoBorder	: 'Geen kante',
+		scaleNoBorder	: 'Geen rand',
 		scaleFit		: 'Presiese pas',
-		access			: 'Script Access', // MISSING
-		accessAlways	: 'Always', // MISSING
-		accessSameDomain: 'Same domain', // MISSING
-		accessNever		: 'Never', // MISSING
-		alignAbsBottom	: 'Abs Onder',
-		alignAbsMiddle	: 'Abs Middel',
-		alignBaseline	: 'Baseline',
-		alignTextTop	: 'Text Bo',
-		quality			: 'Quality', // MISSING
-		qualityBest		: 'Best', // MISSING
-		qualityHigh		: 'High', // MISSING
-		qualityAutoHigh	: 'Auto High', // MISSING
-		qualityMedium	: 'Medium', // MISSING
-		qualityAutoLow	: 'Auto Low', // MISSING
-		qualityLow		: 'Low', // MISSING
-		windowModeWindow: 'Window', // MISSING
-		windowModeOpaque: 'Opaque', // MISSING
-		windowModeTransparent : 'Transparent', // MISSING
-		windowMode		: 'Window mode', // MISSING
-		flashvars		: 'Variables for Flash', // MISSING
-		bgcolor			: 'Agtergrond kleur',
+		access			: 'Skrip toegang',
+		accessAlways	: 'Altyd',
+		accessSameDomain: 'Selfde domeinnaam',
+		accessNever		: 'Nooit',
+		alignAbsBottom	: 'Absoluut-onder',
+		alignAbsMiddle	: 'Absoluut-middel',
+		alignBaseline	: 'Basislyn',
+		alignTextTop	: 'Teks bo',
+		quality			: 'Kwaliteit',
+		qualityBest		: 'Beste',
+		qualityHigh		: 'Hoog',
+		qualityAutoHigh	: 'Outomaties hoog',
+		qualityMedium	: 'Gemiddeld',
+		qualityAutoLow	: 'Outomaties laag',
+		qualityLow		: 'Laag',
+		windowModeWindow: 'Venster',
+		windowModeOpaque: 'Ondeursigtig',
+		windowModeTransparent : 'Deursigtig',
+		windowMode		: 'Venster modus',
+		flashvars		: 'Veranderlikes vir Flash',
+		bgcolor			: 'Agtergrondkleur',
 		hSpace			: 'HSpasie',
 		vSpace			: 'VSpasie',
-		validateSrc		: 'Voeg asseblief die URL in',
-		validateHSpace	: 'HSpace must be a number.', // MISSING
-		validateVSpace	: 'VSpace must be a number.' // MISSING
+		validateSrc		: 'Voeg die URL in',
+		validateHSpace	: 'HSpasie moet \'n heelgetal wees.',
+		validateVSpace	: 'VSpasie moet \'n heelgetal wees.'
 	},
 
@@ -473,104 +474,104 @@
 	spellCheck :
 	{
-		toolbar			: 'Spelling nagaan',
-		title			: 'Spell Check', // MISSING
-		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
-		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		toolbar			: 'Speltoets',
+		title			: 'Speltoetser',
+		notAvailable	: 'Jammer, hierdie diens is nie nou beskikbaar nie.',
+		errorLoading	: 'Fout by inlaai van diens: %s.',
 		notInDic		: 'Nie in woordeboek nie',
 		changeTo		: 'Verander na',
 		btnIgnore		: 'Ignoreer',
-		btnIgnoreAll	: 'Ignoreer na-volgende',
+		btnIgnoreAll	: 'Ignoreer alles',
 		btnReplace		: 'Vervang',
-		btnReplaceAll	: 'vervang na-volgende',
-		btnUndo			: 'Ont-skep',
+		btnReplaceAll	: 'vervang alles',
+		btnUndo			: 'Ontdoen',
 		noSuggestions	: '- Geen voorstel -',
-		progress		: 'Spelling word beproef...',
-		noMispell		: 'Spellproef kompleet: Geen foute',
-		noChanges		: 'Spellproef kompleet: Geen woord veranderings',
-		oneChange		: 'Spellproef kompleet: Een woord verander',
-		manyChanges		: 'Spellproef kompleet: %1 woorde verander',
-		ieSpellDownload	: 'Geen Spellproefer geinstaleer nie. Wil U dit aflaai?'
+		progress		: 'Spelling word getoets...',
+		noMispell		: 'Klaar met speltoets: Geen foute nie',
+		noChanges		: 'Klaar met speltoets: Geen woorde verander nie',
+		oneChange		: 'Klaar met speltoets: Een woord verander',
+		manyChanges		: 'Klaar met speltoets: %1 woorde verander',
+		ieSpellDownload	: 'Speltoetser is nie geïnstalleer nie. Wil u dit nou aflaai?'
 	},
 
 	smiley :
 	{
-		toolbar	: 'Smiley',
-		title	: 'Voeg Smiley by',
-		options : 'Smiley Options' // MISSING
+		toolbar	: 'Lagbekkie',
+		title	: 'Voeg lagbekkie by',
+		options : 'Lagbekkie opsies'
 	},
 
 	elementsPath :
 	{
-		eleLabel : 'Elements path', // MISSING
-		eleTitle : '%1 element' // MISSING
+		eleLabel : 'Elemente-pad',
+		eleTitle : '%1 element'
 	},
 
 	numberedlist	: 'Genommerde lys',
-	bulletedlist	: 'Gepunkte lys',
-	indent			: 'Paradeering verleng',
-	outdent			: 'Paradeering verkort',
+	bulletedlist	: 'Ongenommerde lys',
+	indent			: 'Vergroot inspring',
+	outdent			: 'Verklein inspring',
 
 	justify :
 	{
-		left	: 'Links rig',
-		center	: 'Rig Middel',
-		right	: 'Regs rig',
-		block	: 'Blok paradeer'
-	},
-
-	blockquote : 'Block Quote', // MISSING
+		left	: 'Links oplyn',
+		center	: 'Sentreer',
+		right	: 'Regs oplyn',
+		block	: 'Uitvul'
+	},
+
+	blockquote : 'Sitaatblok',
 
 	clipboard :
 	{
 		title		: 'Byvoeg',
-		cutError	: 'U browser se sekuriteit instelling behinder die uitsny aksie. Gebruik asseblief die sleutel kombenasie(Ctrl/Cmd+X).',
-		copyError	: 'U browser se sekuriteit instelling behinder die kopieerings aksie. Gebruik asseblief die sleutel kombenasie(Ctrl/Cmd+C).',
-		pasteMsg	: 'Voeg asseblief die inhoud in die gegewe box by met sleutel kombenasie(<STRONG>Ctrl/Cmd+V</STRONG>) en druk <STRONG>OK</STRONG>.',
-		securityMsg	: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING
-		pasteArea	: 'Paste Area' // MISSING
+		cutError	: 'U blaaier se sekuriteitsinstelling belet die outomatiese knip-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).',
+		copyError	: 'U blaaier se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).',
+		pasteMsg	: 'Plak die teks in die volgende teks-area met die sleutelbordkombinasie (<STRONG>Ctrl/Cmd+V</STRONG>) en druk <STRONG>OK</STRONG>.',
+		securityMsg	: 'Weens u blaaier se sekuriteitsinstelling is data op die knipbord nie toeganklik nie. U kan dit eers weer in hierdie venster plak.',
+		pasteArea	: 'Plak-area'
 	},
 
 	pastefromword :
 	{
-		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
-		toolbar			: 'Van Word af byvoeg',
-		title			: 'Van Word af byvoeg',
-		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		confirmCleanup	: 'Die teks wat u wil plak lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit geplak word?',
+		toolbar			: 'Plak vanuit Word',
+		title			: 'Plak vanuit Word',
+		error			: 'Die geplakte teks kon nie skoongemaak word nie, weens \'n interne fout'
 	},
 
 	pasteText :
 	{
-		button	: 'Voeg slegs karakters by',
-		title	: 'Voeg slegs karakters by'
+		button	: 'Plak as eenvoudige teks',
+		title	: 'Plak as eenvoudige teks'
 	},
 
 	templates :
 	{
-		button			: 'Templates',
-		title			: 'Inhoud Templates',
-		options : 'Template Options', // MISSING
-		insertOption	: 'Vervang bestaande inhoud',
-		selectPromptMsg	: 'Kies die template om te gebruik in die editor<br>(Inhoud word vervang!):',
-		emptyListMsg	: '(Geen templates gedefinieerd)'
-	},
-
-	showBlocks : 'Show Blocks', // MISSING
+		button			: 'Sjablone',
+		title			: 'Inhoud Sjablone',
+		options : 'Sjabloon opsies',
+		insertOption	: 'Vervang huidige inhoud',
+		selectPromptMsg	: 'Kies die sjabloon om te gebruik in die redigeerder (huidige inhoud gaan verlore):',
+		emptyListMsg	: '(Geen sjablone gedefineer nie)'
+	},
+
+	showBlocks : 'Toon blokke',
 
 	stylesCombo :
 	{
 		label		: 'Styl',
-		panelTitle	: 'Formatting Styles', // MISSING
-		panelTitle1	: 'Block Styles', // MISSING
-		panelTitle2	: 'Inline Styles', // MISSING
-		panelTitle3	: 'Object Styles' // MISSING
+		panelTitle	: 'Opmaak style',
+		panelTitle1	: 'Blok style',
+		panelTitle2	: 'Inlyn style',
+		panelTitle3	: 'Objek style'
 	},
 
 	format :
 	{
-		label		: 'Karakter formaat',
-		panelTitle	: 'Karakter formaat',
+		label		: 'Opmaak',
+		panelTitle	: 'Opmaak',
 
 		tag_p		: 'Normaal',
-		tag_pre		: 'Geformateerd',
+		tag_pre		: 'Opgemaak',
 		tag_address	: 'Adres',
 		tag_h1		: 'Opskrif 1',
@@ -585,48 +586,48 @@
 	div :
 	{
-		title				: 'Create Div Container', // MISSING
-		toolbar				: 'Create Div Container', // MISSING
-		cssClassInputLabel	: 'Stylesheet Classes', // MISSING
-		styleSelectLabel	: 'Style', // MISSING
-		IdInputLabel		: 'Id', // MISSING
-		languageCodeInputLabel	: ' Language Code', // MISSING
-		inlineStyleInputLabel	: 'Inline Style', // MISSING
-		advisoryTitleInputLabel	: 'Advisory Title', // MISSING
-		langDirLabel		: 'Language Direction', // MISSING
-		langDirLTRLabel		: 'Left to Right (LTR)', // MISSING
-		langDirRTLLabel		: 'Right to Left (RTL)', // MISSING
-		edit				: 'Edit Div', // MISSING
-		remove				: 'Remove Div' // MISSING
+		title				: 'Skep Div houer',
+		toolbar				: 'Skep Div houer',
+		cssClassInputLabel	: 'CSS klasse',
+		styleSelectLabel	: 'Styl',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Taalkode',
+		inlineStyleInputLabel	: 'Inlyn Styl',
+		advisoryTitleInputLabel	: 'Aanbevole Titel',
+		langDirLabel		: 'Skryfrigting',
+		langDirLTRLabel		: 'Links na regs (LTR)',
+		langDirRTLLabel		: 'Regs na links (RTL)',
+		edit				: 'Wysig Div',
+		remove				: 'Verwyder Div'
   	},
 
 	iframe :
 	{
-		title		: 'IFrame Properties', // MISSING
-		toolbar		: 'IFrame', // MISSING
-		noUrl		: 'Please type the iframe URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border' // MISSING
+		title		: 'IFrame Eienskappe',
+		toolbar		: 'IFrame',
+		noUrl		: 'Gee die iframe URL',
+		scrolling	: 'Skuifbalke aan',
+		border		: 'Wys rand van raam'
 	},
 
 	font :
 	{
-		label		: 'Karakters',
-		voiceLabel	: 'Font', // MISSING
-		panelTitle	: 'Karakters'
+		label		: 'Font',
+		voiceLabel	: 'Font',
+		panelTitle	: 'Fontnaam'
 	},
 
 	fontSize :
 	{
-		label		: 'Karakter grote',
-		voiceLabel	: 'Font Size', // MISSING
-		panelTitle	: 'Karakter grote'
+		label		: 'Grootte',
+		voiceLabel	: 'Fontgrootte',
+		panelTitle	: 'Fontgrootte'
 	},
 
 	colorButton :
 	{
-		textColorTitle	: 'Karakter kleur',
-		bgColorTitle	: 'Agtergrond kleur',
-		panelTitle		: 'Colors', // MISSING
-		auto			: 'Automaties',
+		textColorTitle	: 'Tekskleur',
+		bgColorTitle	: 'Agtergrondkleur',
+		panelTitle		: 'Kleure',
+		auto			: 'Outomaties',
 		more			: 'Meer Kleure...'
 	},
@@ -634,119 +635,119 @@
 	colors :
 	{
-		'000' : 'Black', // MISSING
-		'800000' : 'Maroon', // MISSING
-		'8B4513' : 'Saddle Brown', // MISSING
-		'2F4F4F' : 'Dark Slate Gray', // MISSING
-		'008080' : 'Teal', // MISSING
-		'000080' : 'Navy', // MISSING
-		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dark Gray', // MISSING
-		'B22222' : 'Fire Brick', // MISSING
-		'A52A2A' : 'Brown', // MISSING
-		'DAA520' : 'Golden Rod', // MISSING
-		'006400' : 'Dark Green', // MISSING
-		'40E0D0' : 'Turquoise', // MISSING
-		'0000CD' : 'Medium Blue', // MISSING
-		'800080' : 'Purple', // MISSING
-		'808080' : 'Gray', // MISSING
-		'F00' : 'Red', // MISSING
-		'FF8C00' : 'Dark Orange', // MISSING
-		'FFD700' : 'Gold', // MISSING
-		'008000' : 'Green', // MISSING
-		'0FF' : 'Cyan', // MISSING
-		'00F' : 'Blue', // MISSING
-		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dim Gray', // MISSING
-		'FFA07A' : 'Light Salmon', // MISSING
-		'FFA500' : 'Orange', // MISSING
-		'FFFF00' : 'Yellow', // MISSING
-		'00FF00' : 'Lime', // MISSING
-		'AFEEEE' : 'Pale Turquoise', // MISSING
-		'ADD8E6' : 'Light Blue', // MISSING
-		'DDA0DD' : 'Plum', // MISSING
-		'D3D3D3' : 'Light Grey', // MISSING
-		'FFF0F5' : 'Lavender Blush', // MISSING
-		'FAEBD7' : 'Antique White', // MISSING
-		'FFFFE0' : 'Light Yellow', // MISSING
-		'F0FFF0' : 'Honeydew', // MISSING
-		'F0FFFF' : 'Azure', // MISSING
-		'F0F8FF' : 'Alice Blue', // MISSING
-		'E6E6FA' : 'Lavender', // MISSING
-		'FFF' : 'White' // MISSING
+		'000' : 'Swart',
+		'800000' : 'Meroen',
+		'8B4513' : 'Sjokoladebruin',
+		'2F4F4F' : 'Donkerleisteengrys',
+		'008080' : 'Blougroen',
+		'000080' : 'Vlootblou',
+		'4B0082' : 'Indigo',
+		'696969' : 'Donkergrys',
+		'B22222' : 'Rooibaksteen',
+		'A52A2A' : 'Bruin',
+		'DAA520' : 'Donkergeel',
+		'006400' : 'Donkergroen',
+		'40E0D0' : 'Turkoois',
+		'0000CD' : 'Middelblou',
+		'800080' : 'Pers',
+		'808080' : 'Grys',
+		'F00' : 'Rooi',
+		'FF8C00' : 'Donkeroranje',
+		'FFD700' : 'Goud',
+		'008000' : 'Groen',
+		'0FF' : 'Siaan',
+		'00F' : 'Blou',
+		'EE82EE' : 'Viooltjieblou',
+		'A9A9A9' : 'Donkergrys',
+		'FFA07A' : 'Ligsalm',
+		'FFA500' : 'Oranje',
+		'FFFF00' : 'Geel',
+		'00FF00' : 'Lemmetjie',
+		'AFEEEE' : 'Ligturkoois',
+		'ADD8E6' : 'Ligblou',
+		'DDA0DD' : 'Pruim',
+		'D3D3D3' : 'Liggrys',
+		'FFF0F5' : 'Linne',
+		'FAEBD7' : 'Ivoor',
+		'FFFFE0' : 'Liggeel',
+		'F0FFF0' : 'Heuningdou',
+		'F0FFFF' : 'Asuur',
+		'F0F8FF' : 'Ligte hemelsblou',
+		'E6E6FA' : 'Laventel',
+		'FFF' : 'Wit'
 	},
 
 	scayt :
 	{
-		title			: 'Spell Check As You Type', // MISSING
-		opera_title		: 'Not supported by Opera', // MISSING
-		enable			: 'Enable SCAYT', // MISSING
-		disable			: 'Disable SCAYT', // MISSING
-		about			: 'About SCAYT', // MISSING
-		toggle			: 'Toggle SCAYT', // MISSING
-		options			: 'Options', // MISSING
-		langs			: 'Languages', // MISSING
-		moreSuggestions	: 'More suggestions', // MISSING
-		ignore			: 'Ignore', // MISSING
-		ignoreAll		: 'Ignore All', // MISSING
-		addWord			: 'Add Word', // MISSING
-		emptyDic		: 'Dictionary name should not be empty.', // MISSING
-
-		optionsTab		: 'Options', // MISSING
-		allCaps			: 'Ignore All-Caps Words', // MISSING
-		ignoreDomainNames : 'Ignore Domain Names', // MISSING
-		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
-		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
-
-		languagesTab	: 'Languages', // MISSING
-
-		dictionariesTab	: 'Dictionaries', // MISSING
-		dic_field_name	: 'Dictionary name', // MISSING
-		dic_create		: 'Create', // MISSING
-		dic_restore		: 'Restore', // MISSING
-		dic_delete		: 'Delete', // MISSING
-		dic_rename		: 'Rename', // MISSING
-		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
-
-		aboutTab		: 'About' // MISSING
+		title			: 'Speltoets terwyl u tik',
+		opera_title		: 'Nie ondersteun deur Opera nie',
+		enable			: 'SCAYT aan',
+		disable			: 'SCAYT af',
+		about			: 'SCAYT info',
+		toggle			: 'SCAYT wissel aan/af',
+		options			: 'Opsies',
+		langs			: 'Tale',
+		moreSuggestions	: 'Meer voorstelle',
+		ignore			: 'Ignoreer',
+		ignoreAll		: 'Ignoreer alles',
+		addWord			: 'Voeg woord by',
+		emptyDic		: 'Woordeboeknaam mag nie leeg wees nie.',
+
+		optionsTab		: 'Opsies',
+		allCaps			: 'Ignoreer woorde in hoofletters',
+		ignoreDomainNames : 'Ignoreer domeinname',
+		mixedCase		: 'Ignoreer woorde met hoof- en kleinletters',
+		mixedWithDigits	: 'Ignoreer woorde met syfers',
+
+		languagesTab	: 'Tale',
+
+		dictionariesTab	: 'Woordeboeke',
+		dic_field_name	: 'Naam van woordeboek',
+		dic_create		: 'Skep',
+		dic_restore		: 'Herstel',
+		dic_delete		: 'Verwijder',
+		dic_rename		: 'Hernoem',
+		dic_info		: 'Aanvanklik word die gebruikerswoordeboek in \'n koekie gestoor. Koekies is egter beperk in grootte. Wanneer die gebruikerswoordeboek te groot vir \'n koekie geword het, kan dit op ons bediener gestoor word. Om u persoonlike woordeboek op ons bediener te stoor, gee asb. \'n naam vir u woordeboek. Indien u alreeds \'n gestoorde woordeboek het, tik die naam en kliek op die Herstel knop.',
+
+		aboutTab		: 'Info'
 	},
 
 	about :
 	{
-		title		: 'About CKEditor', // MISSING
-		dlgTitle	: 'About CKEditor', // MISSING
-		moreInfo	: 'For licensing information please visit our web site:', // MISSING
-		copy		: 'Copyright &copy; $1. All rights reserved.' // MISSING
-	},
-
-	maximize : 'Maximize', // MISSING
-	minimize : 'Minimize', // MISSING
+		title		: 'Info oor CKEditor',
+		dlgTitle	: 'Info oor CKEditor',
+		moreInfo	: 'Vir lisensie-informasie, besoek asb. ons webwerf:',
+		copy		: 'Kopiereg &copy; $1. Alle regte voorbehou.'
+	},
+
+	maximize : 'Maksimaliseer',
+	minimize : 'Minimaliseer',
 
 	fakeobjects :
 	{
-		anchor		: 'Anchor', // MISSING
-		flash		: 'Flash Animation', // MISSING
-		iframe		: 'IFrame', // MISSING
-		hiddenfield	: 'Hidden Field', // MISSING
-		unknown		: 'Unknown Object' // MISSING
-	},
-
-	resize : 'Drag to resize', // MISSING
+		anchor		: 'Anker',
+		flash		: 'Flash animasie',
+		iframe		: 'IFrame',
+		hiddenfield	: 'Verborge veld',
+		unknown		: 'Onbekende objek'
+	},
+
+	resize : 'Sleep om te herskaal',
 
 	colordialog :
 	{
-		title		: 'Select color', // MISSING
-		options	:	'Color Options', // MISSING
-		highlight	: 'Highlight', // MISSING
-		selected	: 'Selected Color', // MISSING
-		clear		: 'Clear' // MISSING
-	},
-
-	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar', // MISSING
+		title		: 'Kies kleur',
+		options	:	'Kleuropsies',
+		highlight	: 'Aktief',
+		selected	: 'Geselekteer',
+		clear		: 'Herstel'
+	},
+
+	toolbarCollapse	: 'Verklein werkbalk',
+	toolbarExpand	: 'Vergroot werkbalk',
 
 	bidi :
 	{
-		ltr : 'Text direction from left to right', // MISSING
-		rtl : 'Text direction from right to left' // MISSING
+		ltr : 'Skryfrigting van links na regs',
+		rtl : 'Skryfrigting van regs na links'
 	}
 };
Index: /CKEditor/branches/versions/3.5.x/_source/lang/ar.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/ar.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/ar.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'مفاتيح الإختصار',
 		name			: 'الاسم',
-		langCode		: 'كود النص',
-		tabIndex		: 'الترتيب',
-		advisoryTitle	: 'عنوان التقرير',
+		langCode			: 'كود النص',
+		tabIndex			: 'الترتيب',
+		advisoryTitle		: 'عنوان التقرير',
 		advisoryContentType	: 'نوع التقرير',
 		cssClasses		: 'فئات التنسيق',
 		charset			: 'ترميز المادة المطلوبة',
 		styles			: 'نمط',
-		selectAnchor	: 'اختر علامة مرجعية',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'اختر علامة مرجعية',
 		anchorName		: 'حسب الاسم',
-		anchorId		: 'حسب رقم العنصر',
-		emailAddress	: 'عنوان البريد إلكتروني',
-		emailSubject	: 'موضوع الرسالة',
+		anchorId			: 'حسب رقم العنصر',
+		emailAddress		: 'عنوان البريد إلكتروني',
+		emailSubject		: 'موضوع الرسالة',
 		emailBody		: 'محتوى الرسالة',
 		noAnchors		: '(لا توجد علامات مرجعية في هذا المستند)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/bg.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/bg.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/bg.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Бърз клавиш',
 		name			: 'Име',
-		langCode		: 'посока на речта',
-		tabIndex		: 'Ред на достъп',
-		advisoryTitle	: 'Препоръчително заглавие',
+		langCode			: 'посока на речта',
+		tabIndex			: 'Ред на достъп',
+		advisoryTitle		: 'Препоръчително заглавие',
 		advisoryContentType	: 'Препоръчителен тип на съдържанието',
 		cssClasses		: 'Клас от стиловите таблици',
 		charset			: 'Тип на свързания ресурс',
 		styles			: 'Стил',
-		selectAnchor	: 'Изберете котва',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Изберете котва',
 		anchorName		: 'По име на котвата',
-		anchorId		: 'По идентификатор на елемент',
-		emailAddress	: 'Адрес за е-поща',
-		emailSubject	: 'Тема на писмото',
+		anchorId			: 'По идентификатор на елемент',
+		emailAddress		: 'Адрес за е-поща',
+		emailSubject		: 'Тема на писмото',
 		emailBody		: 'Текст на писмото',
 		noAnchors		: '(Няма котви в текущия документ)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/bn.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/bn.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/bn.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'এক্সেস কী',
 		name			: 'নাম',
-		langCode		: 'ভাষা লেখার দিক',
-		tabIndex		: 'ট্যাব ইন্ডেক্স',
-		advisoryTitle	: 'পরামর্শ শীর্ষক',
+		langCode			: 'ভাষা লেখার দিক',
+		tabIndex			: 'ট্যাব ইন্ডেক্স',
+		advisoryTitle		: 'পরামর্শ শীর্ষক',
 		advisoryContentType	: 'পরামর্শ কন্টেন্টের প্রকার',
 		cssClasses		: 'স্টাইল-শীট ক্লাস',
 		charset			: 'লিংক রিসোর্স ক্যারেক্টর সেট',
 		styles			: 'স্টাইল',
-		selectAnchor	: 'নোঙর বাছাই',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'নোঙর বাছাই',
 		anchorName		: 'নোঙরের নাম দিয়ে',
-		anchorId		: 'নোঙরের আইডি দিয়ে',
-		emailAddress	: 'ইমেইল ঠিকানা',
-		emailSubject	: 'মেসেজের বিষয়',
+		anchorId			: 'নোঙরের আইডি দিয়ে',
+		emailAddress		: 'ইমেইল ঠিকানা',
+		emailSubject		: 'মেসেজের বিষয়',
 		emailBody		: 'মেসেজের দেহ',
 		noAnchors		: '(No anchors available in the document)', // MISSING
Index: /CKEditor/branches/versions/3.5.x/_source/lang/bs.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/bs.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/bs.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Pristupna tipka',
 		name			: 'Naziv',
-		langCode		: 'Smjer pisanja',
-		tabIndex		: 'Tab indeks',
-		advisoryTitle	: 'Advisory title',
+		langCode			: 'Smjer pisanja',
+		tabIndex			: 'Tab indeks',
+		advisoryTitle		: 'Advisory title',
 		advisoryContentType	: 'Advisory vrsta sadržaja',
 		cssClasses		: 'Klase CSS stilova',
 		charset			: 'Linked Resource Charset',
 		styles			: 'Stil',
-		selectAnchor	: 'Izaberi sidro',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Izaberi sidro',
 		anchorName		: 'Po nazivu sidra',
-		anchorId		: 'Po Id-u elementa',
-		emailAddress	: 'E-Mail Adresa',
-		emailSubject	: 'Subjekt poruke',
+		anchorId			: 'Po Id-u elementa',
+		emailAddress		: 'E-Mail Adresa',
+		emailSubject		: 'Subjekt poruke',
 		emailBody		: 'Poruka',
 		noAnchors		: '(Nema dostupnih sidra na stranici)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/ca.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/ca.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/ca.js	(revision 6655)
@@ -57,5 +57,5 @@
 	horizontalrule	: 'Insereix línia horitzontal',
 	pagebreak		: 'Insereix salt de pàgina',
-	pagebreakAlt		: 'Page Break', // MISSING
+	pagebreakAlt		: 'Salt de pàgina',
 	unlink			: 'Elimina l\'enllaç',
 	undo			: 'Desfés',
@@ -107,8 +107,8 @@
 		targetSelf		: 'Mateixa finestra (_self)',
 		targetParent	: 'Finestra pare (_parent)',
-		langDirLTR		: 'Left to Right (LTR)', // MISSING
-		langDirRTL		: 'Right to Left (RTL)', // MISSING
-		styles			: 'Style', // MISSING
-		cssClasses		: 'Stylesheet Classes', // MISSING
+		langDirLTR		: 'D\'esquerra a dreta (LTR)',
+		langDirRTL		: 'De dreta a esquerra (RTL)',
+		styles			: 'Estil',
+		cssClasses		: 'Classes del full d\'estil',
 		width			: 'Amplada',
 		height			: 'Alçada',
@@ -117,7 +117,7 @@
 		alignRight		: 'Ajusta a la dreta',
 		alignCenter		: 'Centre',
-		alignTop		: 'Top', // MISSING
-		alignMiddle		: 'Middle', // MISSING
-		alignBottom		: 'Bottom', // MISSING
+		alignTop		: 'Superior',
+		alignMiddle		: 'Centre',
+		alignBottom		: 'Inferior',
 		invalidHeight	: 'L\'alçada ha de ser un nombre.',
 		invalidWidth	: 'L\'amplada ha de ser un nombre.',
@@ -129,5 +129,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Opcions del menú contextual'
 	},
 
@@ -137,5 +137,5 @@
 		toolbar		: 'Insereix caràcter especial',
 		title		: 'Selecciona el caràcter especial',
-		options : 'Special Character Options' // MISSING
+		options : 'Opcions de caràcters especials'
 	},
 
@@ -176,16 +176,17 @@
 		acccessKey		: 'Clau d\'accés',
 		name			: 'Nom',
-		langCode		: 'Direcció de l\'idioma',
-		tabIndex		: 'Index de Tab',
-		advisoryTitle	: 'Títol consultiu',
+		langCode			: 'Direcció de l\'idioma',
+		tabIndex			: 'Index de Tab',
+		advisoryTitle		: 'Títol consultiu',
 		advisoryContentType	: 'Tipus de contingut consultiu',
 		cssClasses		: 'Classes del full d\'estil',
 		charset			: 'Conjunt de caràcters font enllaçat',
 		styles			: 'Estil',
-		selectAnchor	: 'Selecciona una àncora',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Selecciona una àncora',
 		anchorName		: 'Per nom d\'àncora',
-		anchorId		: 'Per Id d\'element',
-		emailAddress	: 'Adreça de correu electrònic',
-		emailSubject	: 'Assumpte del missatge',
+		anchorId			: 'Per Id d\'element',
+		emailAddress		: 'Adreça de correu electrònic',
+		emailSubject		: 'Assumpte del missatge',
 		emailBody		: 'Cos del missatge',
 		noAnchors		: '(No hi ha àncores disponibles en aquest document)',
@@ -207,23 +208,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // MISSING
-		validateStartNumber				:'List start number must be a whole number.', // MISSING
-		circle				: 'Circle', // MISSING
-		disc				: 'Disc', // MISSING
-		square				: 'Square', // MISSING
-		none				: 'None', // MISSING
-		notset				: '<not set>', // MISSING
-		armenian			: 'Armenian numbering', // MISSING
-		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
-		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
-		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
-		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
-		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
-		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
-		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
-		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+		numberedTitle		: 'Numbered List Properties',
+		bulletedTitle		: 'Bulleted List Properties',
+		type				: 'Type',
+		start				: 'Start',
+		validateStartNumber				:'List start number must be a whole number.',
+		circle				: 'Circle',
+		disc				: 'Disc',
+		square				: 'Square',
+		none				: 'None',
+		notset				: '<not set>',
+		armenian			: 'Armenian numbering',
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)',
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)',
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)',
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)',
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)',
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)',
+		decimal				: 'Decimal (1, 2, 3, etc.)',
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)'
 	},
 
@@ -277,23 +278,23 @@
 		{
 			menu			: 'Cel·la',
-			insertBefore	: 'Insereix cel·la abans de',
-			insertAfter		: 'Insereix cel·la darrera',
-			deleteCell		: 'Suprimeix les cel·les',
-			merge			: 'Fusiona les cel·les',
-			mergeRight		: 'Fusiona cap a la dreta',
-			mergeDown		: 'Fusiona cap avall',
-			splitHorizontal	: 'Divideix la cel·la horitzontalment',
-			splitVertical	: 'Divideix la cel·la verticalment',
-			title			: 'Propertiat de la cel·la',
+			insertBefore	: 'Insereix abans',
+			insertAfter		: 'Insereix després',
+			deleteCell		: 'Suprimeix',
+			merge			: 'Fusiona',
+			mergeRight		: 'Fusiona a la dreta',
+			mergeDown		: 'Fusiona avall',
+			splitHorizontal	: 'Divideix horitzontalment',
+			splitVertical	: 'Divideix verticalment',
+			title			: 'Propietats de la cel·la',
 			cellType		: 'Tipus de cel·la',
 			rowSpan			: 'Expansió de files',
 			colSpan			: 'Expansió de columnes',
 			wordWrap		: 'Ajustar al contingut',
-			hAlign			: 'Aliniació Horizontal',
-			vAlign			: 'Aliniació Vertical',
+			hAlign			: 'Alineació Horizontal',
+			vAlign			: 'Alineació Vertical',
 			alignBaseline	: 'A la línia base',
 			bgColor			: 'Color de fons',
 			borderColor		: 'Color de la vora',
-			data			: 'Data',
+			data			: 'Dades',
 			header			: 'Capçalera',
 			yes				: 'Sí',
@@ -497,5 +498,5 @@
 		toolbar	: 'Icona',
 		title	: 'Insereix una icona',
-		options : 'Smiley Options' // MISSING
+		options : 'Opcions d\'emoticones'
 	},
 
@@ -513,7 +514,7 @@
 	justify :
 	{
-		left	: 'Alinia a l\'esquerra',
+		left	: 'Alinea a l\'esquerra',
 		center	: 'Centrat',
-		right	: 'Alinia a la dreta',
+		right	: 'Alinea a la dreta',
 		block	: 'Justificat'
 	},
@@ -548,8 +549,8 @@
 	{
 		button			: 'Plantilles',
-		title			: 'Contingut plantilles',
-		options : 'Template Options', // MISSING
+		title			: 'Plantilles de contingut',
+		options : 'Opcions de plantilla',
 		insertOption	: 'Reemplaça el contingut actual',
-		selectPromptMsg	: 'Si us plau, seleccioneu la plantilla per obrir a l\'editor<br>(el contingut actual no serà enregistrat):',
+		selectPromptMsg	: 'Seleccioneu una plantilla per usar a l\'editor<br>(per defecte s\'elimina el contingut actual):',
 		emptyListMsg	: '(No hi ha plantilles definides)'
 	},
@@ -602,9 +603,9 @@
 	iframe :
 	{
-		title		: 'IFrame Properties', // MISSING
-		toolbar		: 'IFrame', // MISSING
-		noUrl		: 'Please type the iframe URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border' // MISSING
+		title		: 'Propietats IFrame',
+		toolbar		: 'IFrame',
+		noUrl		: 'Si us plau, introduïu la URL de l\'iframe URL',
+		scrolling	: 'Activa les barrres de desplaçament',
+		border		: 'Mostra la vora del marc'
 	},
 
@@ -679,5 +680,5 @@
 	{
 		title			: 'Spell Check As You Type',
-		opera_title		: 'Not supported by Opera', // MISSING
+		opera_title		: 'No és compatible amb l\'Opera',
 		enable			: 'Habilitat l\'SCAYT',
 		disable			: 'Deshabilita SCAYT',
@@ -693,18 +694,18 @@
 
 		optionsTab		: 'Opcions',
-		allCaps			: 'Ignore All-Caps Words', // MISSING
-		ignoreDomainNames : 'Ignore Domain Names', // MISSING
-		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
-		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+		allCaps			: 'Ignora paraules en majúscules',
+		ignoreDomainNames : 'Ignora els noms de domini',
+		mixedCase		: 'Ignora paraules amb majúscules i minúscules',
+		mixedWithDigits	: 'Ignora paraules amb números ',
 
 		languagesTab	: 'Idiomes',
 
 		dictionariesTab	: 'Diccionaris',
-		dic_field_name	: 'Dictionary name', // MISSING
-		dic_create		: 'Create', // MISSING
-		dic_restore		: 'Restore', // MISSING
-		dic_delete		: 'Delete', // MISSING
-		dic_rename		: 'Rename', // MISSING
-		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+		dic_field_name	: 'Nom del diccionari',
+		dic_create		: 'Crea',
+		dic_restore		: 'Restaura',
+		dic_delete		: 'Elimina',
+		dic_rename		: 'Canvia el nom',
+		dic_info		: 'Inicialment el diccionari d\'usuari s\'emmagatzema en una galeta. De totes maneres, les galetes tenen la mida limitada. Quan el diccionari creix massa, llavors el diccionari es pot emmagatzemar al nostre servidor. Per desar el vostre diccionari personal al nostre servidor heu d.\'especificar un nom pel diccionari. Si ja heu desat un diccionari, teclegeu si us plau el seu nom i cliqueu el botó de restauració.',
 
 		aboutTab		: 'Quant a'
@@ -713,8 +714,8 @@
 	about :
 	{
-		title		: 'Quan al CKEditor',
-		dlgTitle	: 'Quan al CKEditor',
+		title		: 'Quant al CKEditor',
+		dlgTitle	: 'Quant al CKEditor',
 		moreInfo	: 'Per informació sobre llicències visiteu el web:',
-		copy		: 'Copyright &copy; $1. All rights reserved.'
+		copy		: 'Copyright &copy; $1. Tots els drets reservats.'
 	},
 
@@ -726,6 +727,6 @@
 		anchor		: 'Àncora',
 		flash		: 'Animació Flash',
-		iframe		: 'IFrame', // MISSING
-		hiddenfield	: 'Hidden Field', // MISSING
+		iframe		: 'IFrame',
+		hiddenfield	: 'Camp ocult',
 		unknown		: 'Objecte desconegut'
 	},
@@ -736,5 +737,5 @@
 	{
 		title		: 'Selecciona el color',
-		options	:	'Color Options', // MISSING
+		options	:	'Opcions del color',
 		highlight	: 'Destacat',
 		selected	: 'Seleccionat',
@@ -747,6 +748,6 @@
 	bidi :
 	{
-		ltr : 'Text direction from left to right', // MISSING
-		rtl : 'Text direction from right to left' // MISSING
+		ltr : 'Direcció del text d\'esquerra a dreta',
+		rtl : 'Direcció del text de dreta a esquerra'
 	}
 };
Index: /CKEditor/branches/versions/3.5.x/_source/lang/cs.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/cs.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/cs.js	(revision 6655)
@@ -32,9 +32,9 @@
 	 * of reading non-English words. So be careful while translating it.
 	 */
-	editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING
+	editorTitle : 'Textový editor, %1, nápovědu zobrazíte stiskem ALT 0.',
 
 	// ARIA descriptions.
-	toolbar	: 'Toolbar', // MISSING
-	editor	: 'Rich Text Editor', // MISSING
+	toolbar	: 'Panel nástrojů',
+	editor	: 'Textový editor',
 
 	// Toolbar buttons without dialogs.
@@ -57,5 +57,5 @@
 	horizontalrule	: 'Vložit vodorovnou linku',
 	pagebreak		: 'Vložit konec stránky',
-	pagebreakAlt		: 'Page Break', // MISSING
+	pagebreakAlt		: 'Konec stránky',
 	unlink			: 'Odstranit odkaz',
 	undo			: 'Zpět',
@@ -94,6 +94,6 @@
 		ok				: 'OK',
 		cancel			: 'Storno',
-		close			: 'Close', // MISSING
-		preview			: 'Preview', // MISSING
+		close			: 'Zavřít',
+		preview			: 'Náhled',
 		generalTab		: 'Obecné',
 		advancedTab		: 'Rozšířené',
@@ -101,14 +101,14 @@
 		confirmNewPage	: 'Jakékoliv neuložené změny obsahu budou ztraceny. Skutečně chete otevrít novou stránku?',
 		confirmCancel	: 'Některá z nastavení byla změněna. Skutečně chete zavřít dialogové okno?',
-		options			: 'Options', // MISSING
-		target			: 'Target', // MISSING
-		targetNew		: 'New Window (_blank)', // MISSING
-		targetTop		: 'Topmost Window (_top)', // MISSING
-		targetSelf		: 'Same Window (_self)', // MISSING
-		targetParent	: 'Parent Window (_parent)', // MISSING
-		langDirLTR		: 'Left to Right (LTR)', // MISSING
-		langDirRTL		: 'Right to Left (RTL)', // MISSING
-		styles			: 'Style', // MISSING
-		cssClasses		: 'Stylesheet Classes', // MISSING
+		options			: 'Nastavení',
+		target			: 'Cíl',
+		targetNew		: 'Nové okno (_blank)',
+		targetTop		: 'Okno nejvyšší úrovně (_top)',
+		targetSelf		: 'Stejné okno (_self)',
+		targetParent	: 'Rodičovské onko (_parent)',
+		langDirLTR		: 'Zleva doprava (LTR)',
+		langDirRTL		: 'Zprava doleva (RTL)',
+		styles			: 'Styly',
+		cssClasses		: 'Třídy stylů',
 		width			: 'Šířka',
 		height			: 'Výška',
@@ -129,5 +129,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Nastavení kontextové nabídky'
 	},
 
@@ -137,5 +137,5 @@
 		toolbar		: 'Vložit speciální znaky',
 		title		: 'Výběr speciálního znaku',
-		options : 'Special Character Options' // MISSING
+		options : 'Nastavení speciálních znaků'
 	},
 
@@ -152,5 +152,5 @@
 		advanced	: 'Rozšířené',
 		type		: 'Typ odkazu',
-		toUrl		: 'URL', // MISSING
+		toUrl		: 'URL',
 		toAnchor	: 'Kotva v této stránce',
 		toEmail		: 'E-Mail',
@@ -176,16 +176,17 @@
 		acccessKey		: 'Přístupový klíč',
 		name			: 'Jméno',
-		langCode		: 'Orientace jazyka',
-		tabIndex		: 'Pořadí prvku',
-		advisoryTitle	: 'Pomocný titulek',
+		langCode			: 'Orientace jazyka',
+		tabIndex			: 'Pořadí prvku',
+		advisoryTitle		: 'Pomocný titulek',
 		advisoryContentType	: 'Pomocný typ obsahu',
 		cssClasses		: 'Třída stylu',
 		charset			: 'Přiřazená znaková sada',
 		styles			: 'Styl',
-		selectAnchor	: 'Vybrat kotvu',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Vybrat kotvu',
 		anchorName		: 'Podle jména kotvy',
-		anchorId		: 'Podle Id objektu',
-		emailAddress	: 'E-Mailová adresa',
-		emailSubject	: 'Předmět zprávy',
+		anchorId			: 'Podle Id objektu',
+		emailAddress		: 'E-Mailová adresa',
+		emailSubject		: 'Předmět zprávy',
 		emailBody		: 'Tělo zprávy',
 		noAnchors		: '(Ve stránce není definována žádná kotva!)',
@@ -207,23 +208,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // MISSING
-		validateStartNumber				:'List start number must be a whole number.', // MISSING
-		circle				: 'Circle', // MISSING
-		disc				: 'Disc', // MISSING
-		square				: 'Square', // MISSING
-		none				: 'None', // MISSING
-		notset				: '<not set>', // MISSING
-		armenian			: 'Armenian numbering', // MISSING
-		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
-		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
-		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
-		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
-		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
-		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
-		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
-		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+		numberedTitle		: 'Vlastnosti číslování',
+		bulletedTitle		: 'Vlastnosti odrážek',
+		type				: 'Typ',
+		start				: 'Počátek',
+		validateStartNumber				:'Číslování musí začínat celým číslem.',
+		circle				: 'Kroužky',
+		disc				: 'Kolečka',
+		square				: 'Čtverce',
+		none				: 'Nic',
+		notset				: '<nenastaveno>',
+		armenian			: 'Arménské',
+		georgian			: 'Gruzínské (an, ban, gan, atd.)',
+		lowerRoman			: 'Malé římské (i, ii, iii, iv, v, atd.)',
+		upperRoman			: 'Velké římské (I, II, III, IV, V, atd.)',
+		lowerAlpha			: 'Malá latinka (a, b, c, d, e, atd.)',
+		upperAlpha			: 'Velká latinka (A, B, C, D, E, atd.)',
+		lowerGreek			: 'Malé řecké (alpha, beta, gamma, atd.)',
+		decimal				: 'Arabská čísla (1, 2, 3, atd.)',
+		decimalLeadingZero	: 'Arabská čísla uvozená nulou (01, 02, 03, atd.)'
 	},
 
@@ -256,5 +257,5 @@
 		widthPx		: 'bodů',
 		widthPc		: 'procent',
-		widthUnit	: 'width unit', // MISSING
+		widthUnit	: 'jednotka šířky',
 		cellSpace	: 'Vzdálenost buněk',
 		cellPad		: 'Odsazení obsahu v buňce',
@@ -413,5 +414,5 @@
 		alt			: 'Alternativní text',
 		lockRatio	: 'Zámek',
-		unlockRatio	: 'Unlock Ratio', // MISSING
+		unlockRatio	: 'Odemknout poměr',
 		resetSize	: 'Původní velikost',
 		border		: 'Okraje',
@@ -423,7 +424,7 @@
 		img2Button	: 'Skutečně chcete převést zvolený obrázek na obrázkové tlačítko?',
 		urlMissing	: 'Zadané URL zdroje obrázku nebylo nalezeno.',
-		validateBorder	: 'Border must be a whole number.', // MISSING
-		validateHSpace	: 'HSpace must be a whole number.', // MISSING
-		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+		validateBorder	: 'Okraj musí být nastaven v celých číslech.',
+		validateHSpace	: 'H-mezera musí být nastavena v celých číslech.',
+		validateVSpace	: 'V-mezera musí být nastavena v celých číslech.'
 	},
 
@@ -497,10 +498,10 @@
 		toolbar	: 'Smajlíky',
 		title	: 'Vkládání smajlíků',
-		options : 'Smiley Options' // MISSING
+		options : 'Nastavení smajlíků'
 	},
 
 	elementsPath :
 	{
-		eleLabel : 'Elements path', // MISSING
+		eleLabel : 'Cesta objektu',
 		eleTitle : '%1 objekt'
 	},
@@ -528,5 +529,5 @@
 		pasteMsg	: 'Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.',
 		securityMsg	: 'Z důvodů nastavení bezpečnosti Vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.',
-		pasteArea	: 'Paste Area' // MISSING
+		pasteArea	: 'Oblast vlkádání'
 	},
 
@@ -536,5 +537,5 @@
 		toolbar			: 'Vložit z Wordu',
 		title			: 'Vložit z Wordu',
-		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		error			: 'Z důvodu vnitřní chyby nebylo možné provést vyčištění vkládaného textu.'
 	},
 
@@ -549,5 +550,5 @@
 		button			: 'Šablony',
 		title			: 'Šablony obsahu',
-		options : 'Template Options', // MISSING
+		options : 'Nastavení šablon',
 		insertOption	: 'Nahradit aktuální obsah',
 		selectPromptMsg	: 'Prosím zvolte šablonu pro otevření v editoru<br>(aktuální obsah editoru bude ztracen):',
@@ -560,5 +561,5 @@
 	{
 		label		: 'Styl',
-		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle	: 'Formátovací styly',
 		panelTitle1	: 'Blokové styly',
 		panelTitle2	: 'Řádkové styly',
@@ -585,26 +586,26 @@
 	div :
 	{
-		title				: 'Create Div Container', // MISSING
-		toolbar				: 'Create Div Container', // MISSING
-		cssClassInputLabel	: 'Stylesheet Classes', // MISSING
-		styleSelectLabel	: 'Style', // MISSING
-		IdInputLabel		: 'Id', // MISSING
-		languageCodeInputLabel	: ' Language Code', // MISSING
-		inlineStyleInputLabel	: 'Inline Style', // MISSING
-		advisoryTitleInputLabel	: 'Advisory Title', // MISSING
-		langDirLabel		: 'Language Direction', // MISSING
-		langDirLTRLabel		: 'Left to Right (LTR)', // MISSING
-		langDirRTLLabel		: 'Right to Left (RTL)', // MISSING
-		edit				: 'Edit Div', // MISSING
-		remove				: 'Remove Div' // MISSING
+		title				: 'Vytvořit Div kontejner',
+		toolbar				: 'Vytvořit Div kontejner',
+		cssClassInputLabel	: 'Třídy stylů',
+		styleSelectLabel	: 'Styly',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Kód jazyka',
+		inlineStyleInputLabel	: 'Vnitřní styly',
+		advisoryTitleInputLabel	: 'Nápovědní titulek',
+		langDirLabel		: 'Orientace textu',
+		langDirLTRLabel		: 'Zleva doprava (LTR)',
+		langDirRTLLabel		: 'Zprava doleva (RTL)',
+		edit				: 'Změnit Div',
+		remove				: 'Odstranit Div'
   	},
 
 	iframe :
 	{
-		title		: 'IFrame Properties', // MISSING
-		toolbar		: 'IFrame', // MISSING
-		noUrl		: 'Please type the iframe URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border' // MISSING
+		title		: 'Vlastnosti IFrame',
+		toolbar		: 'IFrame',
+		noUrl		: 'Zadejte prosím URL obsahu pro IFrame',
+		scrolling	: 'Zapnout posuvníky',
+		border		: 'Zobrazit okraj'
 	},
 
@@ -627,5 +628,5 @@
 		textColorTitle	: 'Barva textu',
 		bgColorTitle	: 'Barva pozadí',
-		panelTitle		: 'Colors', // MISSING
+		panelTitle		: 'Barvy',
 		auto			: 'Automaticky',
 		more			: 'Více barev...'
@@ -634,44 +635,44 @@
 	colors :
 	{
-		'000' : 'Black', // MISSING
-		'800000' : 'Maroon', // MISSING
-		'8B4513' : 'Saddle Brown', // MISSING
-		'2F4F4F' : 'Dark Slate Gray', // MISSING
-		'008080' : 'Teal', // MISSING
-		'000080' : 'Navy', // MISSING
-		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dark Gray', // MISSING
-		'B22222' : 'Fire Brick', // MISSING
-		'A52A2A' : 'Brown', // MISSING
-		'DAA520' : 'Golden Rod', // MISSING
-		'006400' : 'Dark Green', // MISSING
-		'40E0D0' : 'Turquoise', // MISSING
-		'0000CD' : 'Medium Blue', // MISSING
-		'800080' : 'Purple', // MISSING
-		'808080' : 'Gray', // MISSING
-		'F00' : 'Red', // MISSING
-		'FF8C00' : 'Dark Orange', // MISSING
-		'FFD700' : 'Gold', // MISSING
-		'008000' : 'Green', // MISSING
-		'0FF' : 'Cyan', // MISSING
-		'00F' : 'Blue', // MISSING
-		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dim Gray', // MISSING
-		'FFA07A' : 'Light Salmon', // MISSING
-		'FFA500' : 'Orange', // MISSING
-		'FFFF00' : 'Yellow', // MISSING
-		'00FF00' : 'Lime', // MISSING
-		'AFEEEE' : 'Pale Turquoise', // MISSING
-		'ADD8E6' : 'Light Blue', // MISSING
-		'DDA0DD' : 'Plum', // MISSING
-		'D3D3D3' : 'Light Grey', // MISSING
-		'FFF0F5' : 'Lavender Blush', // MISSING
-		'FAEBD7' : 'Antique White', // MISSING
-		'FFFFE0' : 'Light Yellow', // MISSING
-		'F0FFF0' : 'Honeydew', // MISSING
-		'F0FFFF' : 'Azure', // MISSING
-		'F0F8FF' : 'Alice Blue', // MISSING
-		'E6E6FA' : 'Lavender', // MISSING
-		'FFF' : 'White' // MISSING
+		'000' : 'Černá',
+		'800000' : 'Kaštanová',
+		'8B4513' : 'Sedlová hněď',
+		'2F4F4F' : 'Tmavě bledě šedá',
+		'008080' : 'Čírka',
+		'000080' : 'Námořnická modř',
+		'4B0082' : 'Inkoustová',
+		'696969' : 'Tmavě šedá',
+		'B22222' : 'Pálená cihla',
+		'A52A2A' : 'Hnědá',
+		'DAA520' : 'Zlatý prut',
+		'006400' : 'Tmavě zelená',
+		'40E0D0' : 'Tyrkisová',
+		'0000CD' : 'Středně modrá',
+		'800080' : 'Purpurová',
+		'808080' : 'Šedá',
+		'F00' : 'Červená',
+		'FF8C00' : 'Tmavě oranžová',
+		'FFD700' : 'Zlatá',
+		'008000' : 'Zelená',
+		'0FF' : 'Kyanidová',
+		'00F' : 'Modrá',
+		'EE82EE' : 'Fialová',
+		'A9A9A9' : 'Kalně šedá',
+		'FFA07A' : 'Světle lososová',
+		'FFA500' : 'Oranžová',
+		'FFFF00' : 'Žlutá',
+		'00FF00' : 'Limetková',
+		'AFEEEE' : 'Bledě tyrkisová',
+		'ADD8E6' : 'Světle modrá',
+		'DDA0DD' : 'Švestková',
+		'D3D3D3' : 'Světle šedá',
+		'FFF0F5' : 'Levandulově ruměnná',
+		'FAEBD7' : 'Antická bílá',
+		'FFFFE0' : 'Světle žlutá',
+		'F0FFF0' : 'Medová rosa',
+		'F0FFFF' : 'Azurová',
+		'F0F8FF' : 'Alenčina modrá',
+		'E6E6FA' : 'Lavendulová',
+		'FFF' : 'Bílá'
 	},
 
@@ -693,18 +694,18 @@
 
 		optionsTab		: 'Nastavení',
-		allCaps			: 'Ignore All-Caps Words', // MISSING
-		ignoreDomainNames : 'Ignore Domain Names', // MISSING
-		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
-		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+		allCaps			: 'Ignorovat slova velkými písmeny',
+		ignoreDomainNames : 'Ignorovat doménová jména',
+		mixedCase		: 'Ignorovat slova obsahující různou velikost písma',
+		mixedWithDigits	: 'Ignorovat slova obsahující čísla',
 
 		languagesTab	: 'Jazyky',
 
 		dictionariesTab	: 'Slovníky',
-		dic_field_name	: 'Dictionary name', // MISSING
-		dic_create		: 'Create', // MISSING
-		dic_restore		: 'Restore', // MISSING
-		dic_delete		: 'Delete', // MISSING
-		dic_rename		: 'Rename', // MISSING
-		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+		dic_field_name	: 'Název slovníku',
+		dic_create		: 'vytvořit',
+		dic_restore		: 'Obnovit',
+		dic_delete		: 'Smazat',
+		dic_rename		: 'Přejmenovat',
+		dic_info		: 'Zpočátku se uživatelský slovník ukládá do cookies ve vašem prohlížeči. Ovšem cookies mají omezenou velikost, takže když slovník dosáhne velikosti, kdy se již do cookies nevejde, může být uložen na našem serveru. Chcete-li uložit Váš osobní slovník na našem serveru, je třeba slovník nejdříve pojmenovat. Máte-li již slovník pojmenován a uložen, zadejte jeho název a klepněte na tlačítko Obnovit.',
 
 		aboutTab		: 'O aplikaci'
@@ -726,6 +727,6 @@
 		anchor		: 'Záložka',
 		flash		: 'Flash animace',
-		iframe		: 'IFrame', // MISSING
-		hiddenfield	: 'Hidden Field', // MISSING
+		iframe		: 'IFrame',
+		hiddenfield	: 'Skryté pole',
 		unknown		: 'Neznámý objekt'
 	},
@@ -736,5 +737,5 @@
 	{
 		title		: 'Výběr barvy',
-		options	:	'Color Options', // MISSING
+		options	:	'Nastavení barvy',
 		highlight	: 'Zvýraznit',
 		selected	: 'Vybráno',
@@ -742,11 +743,11 @@
 	},
 
-	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar', // MISSING
+	toolbarCollapse	: 'Skrýt panel nástrojů',
+	toolbarExpand	: 'Zobrazit panel nástrojů',
 
 	bidi :
 	{
-		ltr : 'Text direction from left to right', // MISSING
-		rtl : 'Text direction from right to left' // MISSING
+		ltr : 'Orientace textu zleva doprava',
+		rtl : 'Orientace textu zprava do leva'
 	}
 };
Index: /CKEditor/branches/versions/3.5.x/_source/lang/cy.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/cy.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/cy.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Allwedd Mynediad',
 		name			: 'Enw',
-		langCode		: 'Cod Iaith',
-		tabIndex		: 'Indecs Tab',
-		advisoryTitle	: 'Teitl Cynghorol',
+		langCode			: 'Cod Iaith',
+		tabIndex			: 'Indecs Tab',
+		advisoryTitle		: 'Teitl Cynghorol',
 		advisoryContentType	: 'Math y Cynnwys Cynghorol',
 		cssClasses		: 'Dosbarthiadau Dalen Arddull',
 		charset			: 'Set nodau\'r Adnodd Cysylltiedig',
 		styles			: 'Arddull',
-		selectAnchor	: 'Dewiswch Angor',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Dewiswch Angor',
 		anchorName		: 'Gan Enw\'r Angor',
-		anchorId		: 'Gan Id yr Elfen',
-		emailAddress	: 'Cyfeiriad E-Bost',
-		emailSubject	: 'Testun y Message Subject',
+		anchorId			: 'Gan Id yr Elfen',
+		emailAddress		: 'Cyfeiriad E-Bost',
+		emailSubject		: 'Testun y Message Subject',
 		emailBody		: 'Pwnc y Neges',
 		noAnchors		: '(Dim angorau ar gael yn y ddogfen)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/da.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/da.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/da.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Genvejstast',
 		name			: 'Navn',
-		langCode		: 'Tekstretning',
-		tabIndex		: 'Tabulator indeks',
-		advisoryTitle	: 'Titel',
+		langCode			: 'Tekstretning',
+		tabIndex			: 'Tabulator indeks',
+		advisoryTitle		: 'Titel',
 		advisoryContentType	: 'Indholdstype',
 		cssClasses		: 'Typografiark',
 		charset			: 'Tegnsæt',
 		styles			: 'Typografi',
-		selectAnchor	: 'Vælg et anker',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Vælg et anker',
 		anchorName		: 'Efter anker navn',
-		anchorId		: 'Efter element Id',
-		emailAddress	: 'E-mail adresse',
-		emailSubject	: 'Emne',
+		anchorId			: 'Efter element Id',
+		emailAddress		: 'E-mail adresse',
+		emailSubject		: 'Emne',
 		emailBody		: 'Besked',
 		noAnchors		: '(Ingen bogmærker i dokumentet)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/de.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/de.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/de.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Zugriffstaste',
 		name			: 'Name',
-		langCode		: 'Sprachenkürzel',
-		tabIndex		: 'Tab-Index',
-		advisoryTitle	: 'Titel Beschreibung',
+		langCode			: 'Sprachenkürzel',
+		tabIndex			: 'Tab-Index',
+		advisoryTitle		: 'Titel Beschreibung',
 		advisoryContentType	: 'Inhaltstyp',
 		cssClasses		: 'Stylesheet Klasse',
 		charset			: 'Ziel-Zeichensatz',
 		styles			: 'Style',
-		selectAnchor	: 'Anker auswählen',
+		rel			: 'Beziehung',
+		selectAnchor		: 'Anker auswählen',
 		anchorName		: 'nach Anker Name',
-		anchorId		: 'nach Element Id',
-		emailAddress	: 'E-Mail Addresse',
-		emailSubject	: 'Betreffzeile',
+		anchorId			: 'nach Element Id',
+		emailAddress		: 'E-Mail Addresse',
+		emailSubject		: 'Betreffzeile',
 		emailBody		: 'Nachrichtentext',
 		noAnchors		: '(keine Anker im Dokument vorhanden)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/el.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/el.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/el.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Συντόμευση (Access Key)',
 		name			: 'Όνομα',
-		langCode		: 'Κατεύθυνση κειμένου',
-		tabIndex		: 'Tab Index',
-		advisoryTitle	: 'Συμβουλευτικός τίτλος',
+		langCode			: 'Κατεύθυνση κειμένου',
+		tabIndex			: 'Tab Index',
+		advisoryTitle		: 'Συμβουλευτικός τίτλος',
 		advisoryContentType	: 'Συμβουλευτικός τίτλος περιεχομένου',
 		cssClasses		: 'Stylesheet Classes',
 		charset			: 'Linked Resource Charset',
 		styles			: 'Στύλ',
-		selectAnchor	: 'Επιλέξτε μια άγκυρα',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Επιλέξτε μια άγκυρα',
 		anchorName		: 'Βάσει του Ονόματος (Name) της άγκυρας',
-		anchorId		: 'Βάσει του Element Id',
-		emailAddress	: 'Διεύθυνση Ηλεκτρονικού Ταχυδρομείου',
-		emailSubject	: 'Θέμα Μηνύματος',
+		anchorId			: 'Βάσει του Element Id',
+		emailAddress		: 'Διεύθυνση Ηλεκτρονικού Ταχυδρομείου',
+		emailSubject		: 'Θέμα Μηνύματος',
 		emailBody		: 'Κείμενο Μηνύματος',
 		noAnchors		: '(Δεν υπάρχουν άγκυρες στο κείμενο)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/en-au.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/en-au.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/en-au.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Access Key',
 		name			: 'Name',
-		langCode		: 'Language Code',
-		tabIndex		: 'Tab Index',
-		advisoryTitle	: 'Advisory Title',
+		langCode			: 'Language Code',
+		tabIndex			: 'Tab Index',
+		advisoryTitle		: 'Advisory Title',
 		advisoryContentType	: 'Advisory Content Type',
 		cssClasses		: 'Stylesheet Classes',
 		charset			: 'Linked Resource Charset',
 		styles			: 'Style',
-		selectAnchor	: 'Select an Anchor',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Select an Anchor',
 		anchorName		: 'By Anchor Name',
-		anchorId		: 'By Element Id',
-		emailAddress	: 'E-Mail Address',
-		emailSubject	: 'Message Subject',
+		anchorId			: 'By Element Id',
+		emailAddress		: 'E-Mail Address',
+		emailSubject		: 'Message Subject',
 		emailBody		: 'Message Body',
 		noAnchors		: '(No anchors available in the document)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/en-ca.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/en-ca.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/en-ca.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Access Key',
 		name			: 'Name',
-		langCode		: 'Language Code',
-		tabIndex		: 'Tab Index',
-		advisoryTitle	: 'Advisory Title',
+		langCode			: 'Language Code',
+		tabIndex			: 'Tab Index',
+		advisoryTitle		: 'Advisory Title',
 		advisoryContentType	: 'Advisory Content Type',
 		cssClasses		: 'Stylesheet Classes',
 		charset			: 'Linked Resource Charset',
 		styles			: 'Style',
-		selectAnchor	: 'Select an Anchor',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Select an Anchor',
 		anchorName		: 'By Anchor Name',
-		anchorId		: 'By Element Id',
-		emailAddress	: 'E-Mail Address',
-		emailSubject	: 'Message Subject',
+		anchorId			: 'By Element Id',
+		emailAddress		: 'E-Mail Address',
+		emailSubject		: 'Message Subject',
 		emailBody		: 'Message Body',
 		noAnchors		: '(No anchors available in the document)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/en-gb.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/en-gb.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/en-gb.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Access Key',
 		name			: 'Name',
-		langCode		: 'Language Code',
-		tabIndex		: 'Tab Index',
-		advisoryTitle	: 'Advisory Title',
+		langCode			: 'Language Code',
+		tabIndex			: 'Tab Index',
+		advisoryTitle		: 'Advisory Title',
 		advisoryContentType	: 'Advisory Content Type',
 		cssClasses		: 'Stylesheet Classes',
 		charset			: 'Linked Resource Charset',
 		styles			: 'Style',
-		selectAnchor	: 'Select an Anchor',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Select an Anchor',
 		anchorName		: 'By Anchor Name',
-		anchorId		: 'By Element Id',
-		emailAddress	: 'E-Mail Address',
-		emailSubject	: 'Message Subject',
+		anchorId			: 'By Element Id',
+		emailAddress		: 'E-Mail Address',
+		emailSubject		: 'Message Subject',
 		emailBody		: 'Message Body',
 		noAnchors		: '(No anchors available in the document)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/en.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/en.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/en.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Access Key',
 		name			: 'Name',
-		langCode		: 'Language Code',
-		tabIndex		: 'Tab Index',
-		advisoryTitle	: 'Advisory Title',
+		langCode			: 'Language Code',
+		tabIndex			: 'Tab Index',
+		advisoryTitle		: 'Advisory Title',
 		advisoryContentType	: 'Advisory Content Type',
 		cssClasses		: 'Stylesheet Classes',
 		charset			: 'Linked Resource Charset',
 		styles			: 'Style',
-		selectAnchor	: 'Select an Anchor',
+		rel			: 'Relationship',
+		selectAnchor		: 'Select an Anchor',
 		anchorName		: 'By Anchor Name',
-		anchorId		: 'By Element Id',
-		emailAddress	: 'E-Mail Address',
-		emailSubject	: 'Message Subject',
+		anchorId			: 'By Element Id',
+		emailAddress		: 'E-Mail Address',
+		emailSubject		: 'Message Subject',
 		emailBody		: 'Message Body',
 		noAnchors		: '(No anchors available in the document)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/eo.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/eo.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/eo.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Fulmoklavo',
 		name			: 'Nomo',
-		langCode		: 'Skribdirekto',
-		tabIndex		: 'Taba Ordo',
-		advisoryTitle	: 'Indika Titolo',
+		langCode			: 'Skribdirekto',
+		tabIndex			: 'Taba Ordo',
+		advisoryTitle		: 'Indika Titolo',
 		advisoryContentType	: 'Indika Enhavotipo',
 		cssClasses		: 'Klasoj de Stilfolioj',
 		charset			: 'Signaro de la Ligita Rimedo',
 		styles			: 'Stilo',
-		selectAnchor	: 'Elekti Ankron',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Elekti Ankron',
 		anchorName		: 'Per Ankronomo',
-		anchorId		: 'Per Elementidentigilo',
-		emailAddress	: 'Retadreso',
-		emailSubject	: 'Temlinio',
+		anchorId			: 'Per Elementidentigilo',
+		emailAddress		: 'Retadreso',
+		emailSubject		: 'Temlinio',
 		emailBody		: 'Mesaĝa korpo',
 		noAnchors		: '<Ne disponeblas ankroj en la dokumento>',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/es.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/es.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/es.js	(revision 6655)
@@ -176,20 +176,21 @@
 		acccessKey		: 'Clave de Acceso',
 		name			: 'Nombre',
-		langCode		: 'Código idioma',
-		tabIndex		: 'Indice de tabulación',
-		advisoryTitle	: 'Título',
+		langCode			: 'Código idioma',
+		tabIndex			: 'Indice de tabulación',
+		advisoryTitle		: 'Título',
 		advisoryContentType	: 'Tipo de Contenido',
 		cssClasses		: 'Clases de hojas de estilo',
 		charset			: 'Fuente de caracteres vinculado',
 		styles			: 'Estilo',
-		selectAnchor	: 'Seleccionar una referencia',
+		rel			: 'Relación',
+		selectAnchor		: 'Seleccionar una referencia',
 		anchorName		: 'Por Nombre de Referencia',
-		anchorId		: 'Por ID de elemento',
-		emailAddress	: 'Dirección de E-Mail',
-		emailSubject	: 'Título del Mensaje',
+		anchorId			: 'Por ID de elemento',
+		emailAddress		: 'Dirección de E-Mail',
+		emailSubject		: 'Título del Mensaje',
 		emailBody		: 'Cuerpo del Mensaje',
 		noAnchors		: '(No hay referencias disponibles en el documento)',
-		noUrl			: 'Por favor tipee el vínculo URL',
-		noEmail			: 'Por favor tipee la dirección de e-mail'
+		noUrl			: 'Por favor escriba el vínculo URL',
+		noEmail			: 'Por favor escriba la dirección de e-mail'
 	},
 
Index: /CKEditor/branches/versions/3.5.x/_source/lang/et.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/et.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/et.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Juurdepääsu võti',
 		name			: 'Nimi',
-		langCode		: 'Keele suund',
-		tabIndex		: 'Tab indeks',
-		advisoryTitle	: 'Juhendav tiitel',
+		langCode			: 'Keele suund',
+		tabIndex			: 'Tab indeks',
+		advisoryTitle		: 'Juhendav tiitel',
 		advisoryContentType	: 'Juhendava sisu tüüp',
 		cssClasses		: 'Stiilistiku klassid',
 		charset			: 'Lingitud ressurssi märgistik',
 		styles			: 'Laad',
-		selectAnchor	: 'Vali ankur',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Vali ankur',
 		anchorName		: 'Ankru nime järgi',
-		anchorId		: 'Elemendi id järgi',
-		emailAddress	: 'E-posti aadress',
-		emailSubject	: 'Sõnumi teema',
+		anchorId			: 'Elemendi id järgi',
+		emailAddress		: 'E-posti aadress',
+		emailSubject		: 'Sõnumi teema',
 		emailBody		: 'Sõnumi tekst',
 		noAnchors		: '(Selles dokumendis ei ole ankruid)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/eu.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/eu.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/eu.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Sarbide-gakoa',
 		name			: 'Izena',
-		langCode		: 'Hizkuntzaren Norabidea',
-		tabIndex		: 'Tabulazio Indizea',
-		advisoryTitle	: 'Izenburua',
+		langCode			: 'Hizkuntzaren Norabidea',
+		tabIndex			: 'Tabulazio Indizea',
+		advisoryTitle		: 'Izenburua',
 		advisoryContentType	: 'Eduki Mota (Content Type)',
 		cssClasses		: 'Estilo-orriko Klaseak',
 		charset			: 'Estekatutako Karaktere Multzoa',
 		styles			: 'Estiloa',
-		selectAnchor	: 'Aingura bat hautatu',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Aingura bat hautatu',
 		anchorName		: 'Aingura izenagatik',
-		anchorId		: 'Elementuaren ID-gatik',
-		emailAddress	: 'ePosta Helbidea',
-		emailSubject	: 'Mezuaren Gaia',
+		anchorId			: 'Elementuaren ID-gatik',
+		emailAddress		: 'ePosta Helbidea',
+		emailSubject		: 'Mezuaren Gaia',
 		emailBody		: 'Mezuaren Gorputza',
 		noAnchors		: '(Ez daude aingurak eskuragarri dokumentuan)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/fa.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/fa.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/fa.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'کلید دستیابی',
 		name			: 'نام',
-		langCode		: 'جهتنمای زبان',
-		tabIndex		: 'نمایهٴ دسترسی با Tab',
-		advisoryTitle	: 'عنوان کمکی',
+		langCode			: 'جهتنمای زبان',
+		tabIndex			: 'نمایهٴ دسترسی با Tab',
+		advisoryTitle		: 'عنوان کمکی',
 		advisoryContentType	: 'نوع محتوای کمکی',
 		cssClasses		: 'کلاسهای شیوهنامه(Stylesheet)',
 		charset			: 'نویسهگان منبع ِپیوندشده',
 		styles			: 'شیوه(style)',
-		selectAnchor	: 'یک لنگر برگزینید',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'یک لنگر برگزینید',
 		anchorName		: 'با نام لنگر',
-		anchorId		: 'با شناسهٴ المان',
-		emailAddress	: 'نشانی پست الکترونیکی',
-		emailSubject	: 'موضوع پیام',
+		anchorId			: 'با شناسهٴ المان',
+		emailAddress		: 'نشانی پست الکترونیکی',
+		emailSubject		: 'موضوع پیام',
 		emailBody		: 'متن پیام',
 		noAnchors		: '(در این سند لنگری دردسترس نیست)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/fi.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/fi.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/fi.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Pikanäppäin',
 		name			: 'Nimi',
-		langCode		: 'Kielen suunta',
-		tabIndex		: 'Tabulaattori indeksi',
-		advisoryTitle	: 'Avustava otsikko',
+		langCode			: 'Kielen suunta',
+		tabIndex			: 'Tabulaattori indeksi',
+		advisoryTitle		: 'Avustava otsikko',
 		advisoryContentType	: 'Avustava sisällön tyyppi',
 		cssClasses		: 'Tyyliluokat',
 		charset			: 'Linkitetty kirjaimisto',
 		styles			: 'Tyyli',
-		selectAnchor	: 'Valitse ankkuri',
+		rel			: 'Suhde',
+		selectAnchor		: 'Valitse ankkuri',
 		anchorName		: 'Ankkurin nimen mukaan',
-		anchorId		: 'Ankkurin ID:n mukaan',
-		emailAddress	: 'Sähköpostiosoite',
-		emailSubject	: 'Aihe',
+		anchorId			: 'Ankkurin ID:n mukaan',
+		emailAddress		: 'Sähköpostiosoite',
+		emailSubject		: 'Aihe',
 		emailBody		: 'Viesti',
 		noAnchors		: '(Ei ankkureita tässä dokumentissa)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/fo.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/fo.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/fo.js	(revision 6655)
@@ -32,9 +32,9 @@
 	 * of reading non-English words. So be careful while translating it.
 	 */
-	editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING
+	editorTitle : 'Rich text editor, %1, trýst ALT og 0 fyri vegleiðing.',
 
 	// ARIA descriptions.
-	toolbar	: 'Toolbar', // MISSING
-	editor	: 'Rich Text Editor', // MISSING
+	toolbar	: 'Toolbar',
+	editor	: 'Rich Text Editor',
 
 	// Toolbar buttons without dialogs.
@@ -57,5 +57,5 @@
 	horizontalrule	: 'Ger vatnrætta linju',
 	pagebreak		: 'Ger síðuskift',
-	pagebreakAlt		: 'Page Break', // MISSING
+	pagebreakAlt		: 'Síðuskift',
 	unlink			: 'Strika tilknýti',
 	undo			: 'Angra',
@@ -99,16 +99,16 @@
 		advancedTab		: 'Fjølbroytt',
 		validateNumberFailed : 'Hetta er ikki eitt tal.',
-		confirmNewPage	: 'Allar ikki goymdar broytingar í hesum innihaldi hvørva. Skal nýggj síða lesast kortini?',
+		confirmNewPage	: 'Allar ikki goymdar broytingar í hesum innihaldið hvørva. Skal nýggj síða lesast kortini?',
 		confirmCancel	: 'Nakrir valmøguleikar eru broyttir. Ert tú vísur í, at dialogurin skal latast aftur?',
-		options			: 'Options', // MISSING
-		target			: 'Target', // MISSING
+		options			: 'Options',
+		target			: 'Target',
 		targetNew		: 'Nýtt vindeyga (_blank)',
 		targetTop		: 'Vindeyga ovast (_top)',
 		targetSelf		: 'Sama vindeyga (_self)',
 		targetParent	: 'Upphavligt vindeyga (_parent)',
-		langDirLTR		: 'Left to Right (LTR)', // MISSING
-		langDirRTL		: 'Right to Left (RTL)', // MISSING
-		styles			: 'Style', // MISSING
-		cssClasses		: 'Stylesheet Classes', // MISSING
+		langDirLTR		: 'Frá vinstru til høgru (LTR)',
+		langDirRTL		: 'Frá høgru til vinstru (RTL)',
+		styles			: 'Style',
+		cssClasses		: 'Stylesheet Classes',
 		width			: 'Breidd',
 		height			: 'Hædd',
@@ -129,5 +129,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Context Menu Options'
 	},
 
@@ -137,5 +137,5 @@
 		toolbar		: 'Set inn sertekn',
 		title		: 'Vel sertekn',
-		options : 'Special Character Options' // MISSING
+		options : 'Møguleikar við serteknum'
 	},
 
@@ -144,9 +144,9 @@
 	{
 		toolbar		: 'Ger/broyt tilknýti',
-		other 		: '<other>', // MISSING
+		other 		: '<annað>',
 		menu		: 'Broyt tilknýti',
 		title		: 'Tilknýti',
 		info		: 'Tilknýtis upplýsingar',
-		target		: 'Target', // MISSING
+		target		: 'Target',
 		upload		: 'Send til ambætaran',
 		advanced	: 'Fjølbroytt',
@@ -160,5 +160,5 @@
 		targetPopupName	: 'Popup vindeygans navn',
 		popupFeatures	: 'Popup vindeygans víðkaðu eginleikar',
-		popupResizable	: 'Resizable', // MISSING
+		popupResizable	: 'Stødd kann broytast',
 		popupStatusBar	: 'Støðufrágreiðingarbjálki',
 		popupLocationBar: 'Adressulinja',
@@ -170,22 +170,23 @@
 		popupLeft		: 'Frástøða frá vinstru',
 		popupTop		: 'Frástøða frá íerva',
-		id				: 'Id', // MISSING
+		id				: 'Id',
 		langDir			: 'Tekstkós',
 		langDirLTR		: 'Frá vinstru til høgru (LTR)',
 		langDirRTL		: 'Frá høgru til vinstru (RTL)',
-		acccessKey		: 'Snarvegisknappur',
+		acccessKey		: 'Snarvegisknöttur',
 		name			: 'Navn',
-		langCode		: 'Tekstkós',
-		tabIndex		: 'Inntriv indeks',
-		advisoryTitle	: 'Vegleiðandi heiti',
+		langCode			: 'Tekstkós',
+		tabIndex			: 'Tabulator indeks',
+		advisoryTitle		: 'Vegleiðandi heiti',
 		advisoryContentType	: 'Vegleiðandi innihaldsslag',
 		cssClasses		: 'Typografi klassar',
 		charset			: 'Atknýtt teknsett',
 		styles			: 'Typografi',
-		selectAnchor	: 'Vel ein marknastein',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Vel ein marknastein',
 		anchorName		: 'Eftir navni á marknasteini',
-		anchorId		: 'Eftir element Id',
-		emailAddress	: 'Teldupost-adressa',
-		emailSubject	: 'Evni',
+		anchorId			: 'Eftir element Id',
+		emailAddress		: 'Teldupost-adressa',
+		emailSubject		: 'Evni',
 		emailBody		: 'Breyðtekstur',
 		noAnchors		: '(Eingir marknasteinar eru í hesum dokumentið)',
@@ -207,23 +208,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // MISSING
-		validateStartNumber				:'List start number must be a whole number.', // MISSING
-		circle				: 'Circle', // MISSING
-		disc				: 'Disc', // MISSING
-		square				: 'Square', // MISSING
-		none				: 'None', // MISSING
-		notset				: '<not set>', // MISSING
-		armenian			: 'Armenian numbering', // MISSING
-		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
-		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
-		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
-		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
-		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
-		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
-		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
-		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+		numberedTitle		: 'Eginleikar fyri lista við tølum',
+		bulletedTitle		: 'Eginleikar fyri lista við prikkum',
+		type				: 'Slag',
+		start				: 'Byrjan',
+		validateStartNumber				:'Byrjunartalið fyri lista má vera eitt heiltal.',
+		circle				: 'Sirkul',
+		disc				: 'Disc',
+		square				: 'Fýrkantur',
+		none				: 'Einki',
+		notset				: '<ikki sett>',
+		armenian			: 'Armensk talskipan',
+		georgian			: 'Georgisk talskipan (an, ban, gan, osv.)',
+		lowerRoman			: 'Lítil rómaratøl (i, ii, iii, iv, v, etc.)',
+		upperRoman			: 'Stór rómaratøl (I, II, III, IV, V, etc.)',
+		lowerAlpha			: 'Lítlir bókstavir (a, b, c, d, e, etc.)',
+		upperAlpha			: 'Stórir bókstavir (A, B, C, D, E, etc.)',
+		lowerGreek			: 'Grikskt við lítlum (alpha, beta, gamma, etc.)',
+		decimal				: 'Vanlig tøl (1, 2, 3, etc.)',
+		decimalLeadingZero	: 'Tøl við null frammanfyri (01, 02, 03, etc.)'
 	},
 
@@ -239,5 +240,5 @@
 		matchCase			: 'Munur á stórum og smáum bókstavum',
 		matchWord			: 'Bert heil orð',
-		matchCyclic			: 'Match cyclic', // MISSING
+		matchCyclic			: 'Match cyclic',
 		replaceAll			: 'Yvirskriva alt',
 		replaceSuccessMsg	: '%1 úrslit broytt.'
@@ -261,5 +262,5 @@
 		caption		: 'Tabellfrágreiðing',
 		summary		: 'Samandráttur',
-		headers		: 'Headers', // MISSING
+		headers		: 'Yvirskriftir',
 		headersNone		: 'Eingin',
 		headersColumn	: 'Fyrsta kolonna',
@@ -289,5 +290,5 @@
 			rowSpan			: 'Ræð spenni',
 			colSpan			: 'Kolonnu spenni',
-			wordWrap		: 'Word Wrap', // MISSING
+			wordWrap		: 'Orðkloyving',
 			hAlign			: 'Horisontal plasering',
 			vAlign			: 'Loddrøtt plasering',
@@ -350,5 +351,5 @@
 		action		: 'Hending',
 		method		: 'Háttur',
-		encoding	: 'Encoding' // MISSING
+		encoding	: 'Encoding'
 	},
 
@@ -420,6 +421,6 @@
 		alertUrl	: 'Rita slóðina til myndina',
 		linkTab		: 'Tilknýti',
-		button2Img	: 'Do you want to transform the selected image button on a simple image?', // MISSING
-		img2Button	: 'Do you want to transform the selected image on a image button?', // MISSING
+		button2Img	: 'Skal valdi myndaknøttur gerast til vanliga mynd?',
+		img2Button	: 'Skal valda mynd gerast til myndaknøtt?',
 		urlMissing	: 'URL til mynd manglar.',
 		validateBorder	: 'Bordi má vera eitt heiltal.',
@@ -457,8 +458,8 @@
 		qualityAutoLow	: 'Auto Lág',
 		qualityLow		: 'Lág',
-		windowModeWindow: 'Window', // MISSING
+		windowModeWindow: 'Rútur',
 		windowModeOpaque: 'Ikki transparent',
 		windowModeTransparent : 'Transparent',
-		windowMode		: 'Window mode', // MISSING
+		windowMode		: 'Slag av rúti',
 		flashvars		: 'Variablar fyri Flash',
 		bgcolor			: 'Bakgrundslitur',
@@ -497,5 +498,5 @@
 		toolbar	: 'Smiley',
 		title	: 'Vel Smiley',
-		options : 'Smiley Options' // MISSING
+		options : 'Møguleikar fyri Smiley'
 	},
 
@@ -528,5 +529,5 @@
 		pasteMsg	: 'Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>Ctrl/Cmd+V</strong>) og klikk á <strong>Góðtak</strong>.',
 		securityMsg	: 'Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.',
-		pasteArea	: 'Paste Area' // MISSING
+		pasteArea	: 'Avritingarumráði'
 	},
 
@@ -536,5 +537,5 @@
 		toolbar			: 'Innrita frá Word',
 		title			: 'Innrita frá Word',
-		error			: 'Tað eyðnaðist ikki at reinsa tekstin vegna ein internan feil'
+		error			: 'Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil'
 	},
 
@@ -549,5 +550,5 @@
 		button			: 'Skabelónir',
 		title			: 'Innihaldsskabelónir',
-		options : 'Template Options', // MISSING
+		options : 'Møguleikar fyri Template',
 		insertOption	: 'Yvirskriva núverandi innihald',
 		selectPromptMsg	: 'Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):',
@@ -580,5 +581,5 @@
 		tag_h5		: 'Yvirskrift 5',
 		tag_h6		: 'Yvirskrift 6',
-		tag_div		: 'Normal (DIV)' // MISSING
+		tag_div		: 'Vanligt (DIV)'
 	},
 
@@ -602,9 +603,9 @@
 	iframe :
 	{
-		title		: 'IFrame Properties', // MISSING
-		toolbar		: 'IFrame', // MISSING
-		noUrl		: 'Please type the iframe URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border' // MISSING
+		title		: 'Møguleikar fyri IFrame',
+		toolbar		: 'IFrame',
+		noUrl		: 'Vinarliga skriva URL til iframe',
+		scrolling	: 'Loyv scrollbars',
+		border		: 'Vís frame kant'
 	},
 
@@ -612,5 +613,5 @@
 	{
 		label		: 'Skrift',
-		voiceLabel	: 'Font', // MISSING
+		voiceLabel	: 'Skrift',
 		panelTitle	: 'Skrift'
 	},
@@ -619,5 +620,5 @@
 	{
 		label		: 'Skriftstødd',
-		voiceLabel	: 'Font Size', // MISSING
+		voiceLabel	: 'Skriftstødd',
 		panelTitle	: 'Skriftstødd'
 	},
@@ -627,5 +628,5 @@
 		textColorTitle	: 'Tekstlitur',
 		bgColorTitle	: 'Bakgrundslitur',
-		panelTitle		: 'Colors', // MISSING
+		panelTitle		: 'Litir',
 		auto			: 'Automatiskt',
 		more			: 'Fleiri litir...'
@@ -634,44 +635,44 @@
 	colors :
 	{
-		'000' : 'Black', // MISSING
-		'800000' : 'Maroon', // MISSING
-		'8B4513' : 'Saddle Brown', // MISSING
-		'2F4F4F' : 'Dark Slate Gray', // MISSING
-		'008080' : 'Teal', // MISSING
-		'000080' : 'Navy', // MISSING
-		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dark Gray', // MISSING
-		'B22222' : 'Fire Brick', // MISSING
-		'A52A2A' : 'Brown', // MISSING
-		'DAA520' : 'Golden Rod', // MISSING
-		'006400' : 'Dark Green', // MISSING
-		'40E0D0' : 'Turquoise', // MISSING
-		'0000CD' : 'Medium Blue', // MISSING
-		'800080' : 'Purple', // MISSING
-		'808080' : 'Gray', // MISSING
-		'F00' : 'Red', // MISSING
-		'FF8C00' : 'Dark Orange', // MISSING
-		'FFD700' : 'Gold', // MISSING
-		'008000' : 'Green', // MISSING
-		'0FF' : 'Cyan', // MISSING
-		'00F' : 'Blue', // MISSING
-		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dim Gray', // MISSING
-		'FFA07A' : 'Light Salmon', // MISSING
-		'FFA500' : 'Orange', // MISSING
-		'FFFF00' : 'Yellow', // MISSING
-		'00FF00' : 'Lime', // MISSING
-		'AFEEEE' : 'Pale Turquoise', // MISSING
-		'ADD8E6' : 'Light Blue', // MISSING
-		'DDA0DD' : 'Plum', // MISSING
-		'D3D3D3' : 'Light Grey', // MISSING
-		'FFF0F5' : 'Lavender Blush', // MISSING
-		'FAEBD7' : 'Antique White', // MISSING
-		'FFFFE0' : 'Light Yellow', // MISSING
-		'F0FFF0' : 'Honeydew', // MISSING
-		'F0FFFF' : 'Azure', // MISSING
-		'F0F8FF' : 'Alice Blue', // MISSING
-		'E6E6FA' : 'Lavender', // MISSING
-		'FFF' : 'White' // MISSING
+		'000' : 'Svart',
+		'800000' : 'Maroon',
+		'8B4513' : 'Saðilsbrúnt',
+		'2F4F4F' : 'Dark Slate Gray',
+		'008080' : 'Teal',
+		'000080' : 'Navy',
+		'4B0082' : 'Indigo',
+		'696969' : 'Myrkagrátt',
+		'B22222' : 'Fire Brick',
+		'A52A2A' : 'Brúnt',
+		'DAA520' : 'Gullstavur',
+		'006400' : 'Myrkagrønt',
+		'40E0D0' : 'Turquoise',
+		'0000CD' : 'Meðal blátt',
+		'800080' : 'Purple',
+		'808080' : 'Grátt',
+		'F00' : 'Reytt',
+		'FF8C00' : 'Myrkt appelsingult',
+		'FFD700' : 'Gull',
+		'008000' : 'Grønt',
+		'0FF' : 'Cyan',
+		'00F' : 'Blátt',
+		'EE82EE' : 'Violet',
+		'A9A9A9' : 'Døkt grátt',
+		'FFA07A' : 'Ljósur laksur',
+		'FFA500' : 'Appelsingult',
+		'FFFF00' : 'Gult',
+		'00FF00' : 'Lime',
+		'AFEEEE' : 'Pale Turquoise',
+		'ADD8E6' : 'Ljósablátt',
+		'DDA0DD' : 'Plum',
+		'D3D3D3' : 'Ljósagrátt',
+		'FFF0F5' : 'Lavender Blush',
+		'FAEBD7' : 'Klassiskt hvítt',
+		'FFFFE0' : 'Ljósagult',
+		'F0FFF0' : 'Hunangsdøggur',
+		'F0FFFF' : 'Azure',
+		'F0F8FF' : 'Alice Blátt',
+		'E6E6FA' : 'Lavender',
+		'FFF' : 'Hvítt'
 	},
 
@@ -679,7 +680,7 @@
 	{
 		title			: 'Kanna stavseting, meðan tú skrivar',
-		opera_title		: 'Not supported by Opera', // MISSING
-		enable			: 'Enable SCAYT',
-		disable			: 'Disable SCAYT',
+		opera_title		: 'Ikki stuðlað í Opera',
+		enable			: 'Loyv SCAYT',
+		disable			: 'Nokta SCAYT',
 		about			: 'Um SCAYT',
 		toggle			: 'Toggle SCAYT',
@@ -693,18 +694,18 @@
 
 		optionsTab		: 'Uppseting',
-		allCaps			: 'Ignore All-Caps Words', // MISSING
-		ignoreDomainNames : 'Ignore Domain Names', // MISSING
-		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
-		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+		allCaps			: 'Loyp orð við bert stórum stavum um',
+		ignoreDomainNames : 'loyp økisnøvn um',
+		mixedCase		: 'Loyp orð við blandaðum smáum og stórum stavum um',
+		mixedWithDigits	: 'Loyp orð við tølum um',
 
 		languagesTab	: 'Tungumál',
 
 		dictionariesTab	: 'Orðabøkur',
-		dic_field_name	: 'Dictionary name', // MISSING
-		dic_create		: 'Create', // MISSING
-		dic_restore		: 'Restore', // MISSING
-		dic_delete		: 'Delete', // MISSING
-		dic_rename		: 'Rename', // MISSING
-		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+		dic_field_name	: 'Orðabókanavn',
+		dic_create		: 'Upprætta nýggja',
+		dic_restore		: 'Endurskapa',
+		dic_delete		: 'Strika',
+		dic_rename		: 'Broyt',
+		dic_info		: 'Upprunaliga er brúkara-orðabókin goymd í eini cookie í tínum egna kaga. Men hesar eru avmarkaðar í stødd. Tá brúkara-orðabókin veksur seg ov stóra til eina cookie, so er møguligt at goyma hana á ambætara okkara. Fyri at goyma persónligu orðabókina á ambætaranum eigur tú at velja eitt navn til tína skuffu. Hevur tú longu goymt eina orðabók, so vinarliga skriva navnið og klikk á knøttin Endurskapa.',
 
 		aboutTab		: 'Um'
@@ -716,5 +717,5 @@
 		dlgTitle	: 'Um CKEditor',
 		moreInfo	: 'Licens upplýsingar finnast á heimasíðu okkara:',
-		copy		: 'Copyright &copy; $1. All rights reserved.' // MISSING
+		copy		: 'Copyright &copy; $1. All rights reserved.'
 	},
 
@@ -724,8 +725,8 @@
 	fakeobjects :
 	{
-		anchor		: 'Anchor', // MISSING
-		flash		: 'Flash Animation', // MISSING
-		iframe		: 'IFrame', // MISSING
-		hiddenfield	: 'Hidden Field', // MISSING
+		anchor		: 'Anchor',
+		flash		: 'Flash Animation',
+		iframe		: 'IFrame',
+		hiddenfield	: 'Fjaldur teigur',
 		unknown		: 'Ókent Object'
 	},
@@ -736,17 +737,17 @@
 	{
 		title		: 'Vel lit',
-		options	:	'Color Options', // MISSING
-		highlight	: 'Highlight', // MISSING
-		selected	: 'Selected Color', // MISSING
-		clear		: 'Clear' // MISSING
-	},
-
-	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar', // MISSING
+		options	:	'Litmøguleikar',
+		highlight	: 'Framheva',
+		selected	: 'Valdur litur',
+		clear		: 'Strika'
+	},
+
+	toolbarCollapse	: 'Lat Toolbar aftur',
+	toolbarExpand	: 'Vís Toolbar',
 
 	bidi :
 	{
-		ltr : 'Text direction from left to right', // MISSING
-		rtl : 'Text direction from right to left' // MISSING
+		ltr : 'Tekstkós frá vinstru til høgru',
+		rtl : 'Tekstkós frá høgru til vinstru'
 	}
 };
Index: /CKEditor/branches/versions/3.5.x/_source/lang/fr-ca.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/fr-ca.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/fr-ca.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Équivalent clavier',
 		name			: 'Nom',
-		langCode		: 'Sens d\'écriture',
-		tabIndex		: 'Ordre de tabulation',
-		advisoryTitle	: 'Titre',
+		langCode			: 'Sens d\'écriture',
+		tabIndex			: 'Ordre de tabulation',
+		advisoryTitle		: 'Titre',
 		advisoryContentType	: 'Type de contenu',
 		cssClasses		: 'Classes de feuilles de style',
 		charset			: 'Encodage de caractère',
 		styles			: 'Style',
-		selectAnchor	: 'Sélectionner une ancre',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Sélectionner une ancre',
 		anchorName		: 'Par nom',
-		anchorId		: 'Par id',
-		emailAddress	: 'Adresse E-Mail',
-		emailSubject	: 'Sujet du message',
+		anchorId			: 'Par id',
+		emailAddress		: 'Adresse E-Mail',
+		emailSubject		: 'Sujet du message',
 		emailBody		: 'Corps du message',
 		noAnchors		: '(Pas d\'ancre disponible dans le document)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/fr.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/fr.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/fr.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Touche d\'accessibilité',
 		name			: 'Nom',
-		langCode		: 'Code de langue',
-		tabIndex		: 'Index de tabulation',
-		advisoryTitle	: 'Description (title)',
+		langCode			: 'Code de langue',
+		tabIndex			: 'Index de tabulation',
+		advisoryTitle		: 'Description (title)',
 		advisoryContentType	: 'Type de contenu (ex: text/html)',
 		cssClasses		: 'Classe CSS',
 		charset			: 'Charset de la cible',
 		styles			: 'Style',
-		selectAnchor	: 'Sélectionner l\'ancre',
+		rel			: 'Relation',
+		selectAnchor		: 'Sélectionner l\'ancre',
 		anchorName		: 'Par nom d\'ancre',
-		anchorId		: 'Par ID d\'élément',
-		emailAddress	: 'Adresse E-Mail',
-		emailSubject	: 'Sujet du message',
+		anchorId			: 'Par ID d\'élément',
+		emailAddress		: 'Adresse E-Mail',
+		emailSubject		: 'Sujet du message',
 		emailBody		: 'Corps du message',
 		noAnchors		: '(Aucune ancre disponible dans ce document)',
@@ -678,5 +679,5 @@
 	scayt :
 	{
-		title			: 'Vérification de l\'Orthographe en Cours de Frappe (SCAYT: Spell Check As You Type)',
+		title			: 'Vérification de l\'Orthographe en Cours de Frappe (SCAYT)',
 		opera_title		: 'Non supporté par Opera',
 		enable			: 'Activer SCAYT',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/gl.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/gl.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/gl.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Chave de Acceso',
 		name			: 'Nome',
-		langCode		: 'Orientación do Idioma',
-		tabIndex		: 'Índice de Tabulación',
-		advisoryTitle	: 'Título',
+		langCode			: 'Orientación do Idioma',
+		tabIndex			: 'Índice de Tabulación',
+		advisoryTitle		: 'Título',
 		advisoryContentType	: 'Tipo de Contido',
 		cssClasses		: 'Clases da Folla de Estilos',
 		charset			: 'Fonte de Caracteres Vinculado',
 		styles			: 'Estilo',
-		selectAnchor	: 'Seleccionar unha Referencia',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Seleccionar unha Referencia',
 		anchorName		: 'Por Nome de Referencia',
-		anchorId		: 'Por Element Id',
-		emailAddress	: 'Enderezo de E-Mail',
-		emailSubject	: 'Asunto do Mensaxe',
+		anchorId			: 'Por Element Id',
+		emailAddress		: 'Enderezo de E-Mail',
+		emailSubject		: 'Asunto do Mensaxe',
 		emailBody		: 'Corpo do Mensaxe',
 		noAnchors		: '(Non hai referencias disponibles no documento)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/gu.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/gu.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/gu.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'ઍક્સેસ કી',
 		name			: 'નામ',
-		langCode		: 'ભાષા લેખવાની પદ્ધતિ',
-		tabIndex		: 'ટૅબ ઇન્ડેક્સ',
-		advisoryTitle	: 'મુખ્ય મથાળું',
+		langCode			: 'ભાષા લેખવાની પદ્ધતિ',
+		tabIndex			: 'ટૅબ ઇન્ડેક્સ',
+		advisoryTitle		: 'મુખ્ય મથાળું',
 		advisoryContentType	: 'મુખ્ય કન્ટેન્ટ પ્રકાર',
 		cssClasses		: 'સ્ટાઇલ-શીટ ક્લાસ',
 		charset			: 'લિંક રિસૉર્સ કૅરિક્ટર સેટ',
 		styles			: 'સ્ટાઇલ',
-		selectAnchor	: 'ઍંકર પસંદ કરો',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'ઍંકર પસંદ કરો',
 		anchorName		: 'ઍંકર નામથી પસંદ કરો',
-		anchorId		: 'ઍંકર એલિમન્ટ Id થી પસંદ કરો',
-		emailAddress	: 'ઈ-મેલ સરનામું',
-		emailSubject	: 'ઈ-મેલ વિષય',
+		anchorId			: 'ઍંકર એલિમન્ટ Id થી પસંદ કરો',
+		emailAddress		: 'ઈ-મેલ સરનામું',
+		emailSubject		: 'ઈ-મેલ વિષય',
 		emailBody		: 'સંદેશ',
 		noAnchors		: '(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/he.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/he.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/he.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'מקש גישה',
 		name			: 'שם',
-		langCode		: 'קוד שפה',
-		tabIndex		: 'מספר טאב',
-		advisoryTitle	: 'כותרת מוצעת',
+		langCode			: 'קוד שפה',
+		tabIndex			: 'מספר טאב',
+		advisoryTitle		: 'כותרת מוצעת',
 		advisoryContentType	: 'Content Type מוצע',
 		cssClasses		: 'גיליונות עיצוב קבוצות',
 		charset			: 'קידוד המשאב המקושר',
 		styles			: 'סגנון',
-		selectAnchor	: 'בחירת עוגן',
+		rel			: 'קשר גומלין',
+		selectAnchor		: 'בחירת עוגן',
 		anchorName		: 'עפ"י שם העוגן',
-		anchorId		: 'עפ"י זיהוי (ID) האלמנט',
-		emailAddress	: 'כתובת הדוא"ל',
-		emailSubject	: 'נושא ההודעה',
+		anchorId			: 'עפ"י זיהוי (ID) האלמנט',
+		emailAddress		: 'כתובת הדוא"ל',
+		emailSubject		: 'נושא ההודעה',
 		emailBody		: 'גוף ההודעה',
 		noAnchors		: '(אין עוגנים זמינים בדף)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/hi.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/hi.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/hi.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'ऍक्सॅस की',
 		name			: 'नाम',
-		langCode		: 'भाषा लिखने की दिशा',
-		tabIndex		: 'टैब इन्डॅक्स',
-		advisoryTitle	: 'परामर्श शीर्शक',
+		langCode			: 'भाषा लिखने की दिशा',
+		tabIndex			: 'टैब इन्डॅक्स',
+		advisoryTitle		: 'परामर्श शीर्शक',
 		advisoryContentType	: 'परामर्श कन्टॅन्ट प्रकार',
 		cssClasses		: 'स्टाइल-शीट क्लास',
 		charset			: 'लिंक रिसोर्स करॅक्टर सॅट',
 		styles			: 'स्टाइल',
-		selectAnchor	: 'ऐंकर चुनें',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'ऐंकर चुनें',
 		anchorName		: 'ऐंकर नाम से',
-		anchorId		: 'ऍलीमॅन्ट Id से',
-		emailAddress	: 'ई-मेल पता',
-		emailSubject	: 'संदेश विषय',
+		anchorId			: 'ऍलीमॅन्ट Id से',
+		emailAddress		: 'ई-मेल पता',
+		emailSubject		: 'संदेश विषय',
 		emailBody		: 'संदेश',
 		noAnchors		: '(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/hr.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/hr.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/hr.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Pristupna tipka',
 		name			: 'Naziv',
-		langCode		: 'Smjer jezika',
-		tabIndex		: 'Tab Indeks',
-		advisoryTitle	: 'Advisory naslov',
+		langCode			: 'Smjer jezika',
+		tabIndex			: 'Tab Indeks',
+		advisoryTitle		: 'Advisory naslov',
 		advisoryContentType	: 'Advisory vrsta sadržaja',
 		cssClasses		: 'Stylesheet klase',
 		charset			: 'Kodna stranica povezanih resursa',
 		styles			: 'Stil',
-		selectAnchor	: 'Odaberi sidro',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Odaberi sidro',
 		anchorName		: 'Po nazivu sidra',
-		anchorId		: 'Po Id elementa',
-		emailAddress	: 'E-Mail adresa',
-		emailSubject	: 'Naslov',
+		anchorId			: 'Po Id elementa',
+		emailAddress		: 'E-Mail adresa',
+		emailSubject		: 'Naslov',
 		emailBody		: 'Sadržaj poruke',
 		noAnchors		: '(Nema dostupnih sidra)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/hu.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/hu.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/hu.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Billentyűkombináció',
 		name			: 'Név',
-		langCode		: 'Írás iránya',
-		tabIndex		: 'Tabulátor index',
-		advisoryTitle	: 'Súgócimke',
+		langCode			: 'Írás iránya',
+		tabIndex			: 'Tabulátor index',
+		advisoryTitle		: 'Súgócimke',
 		advisoryContentType	: 'Súgó tartalomtípusa',
 		cssClasses		: 'Stíluskészlet',
 		charset			: 'Hivatkozott tartalom kódlapja',
 		styles			: 'Stílus',
-		selectAnchor	: 'Horgony választása',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Horgony választása',
 		anchorName		: 'Horgony név szerint',
-		anchorId		: 'Azonosító szerint',
-		emailAddress	: 'E-Mail cím',
-		emailSubject	: 'Üzenet tárgya',
+		anchorId			: 'Azonosító szerint',
+		emailAddress		: 'E-Mail cím',
+		emailSubject		: 'Üzenet tárgya',
 		emailBody		: 'Üzenet',
 		noAnchors		: '(Nincs horgony a dokumentumban)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/is.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/is.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/is.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Skammvalshnappur',
 		name			: 'Nafn',
-		langCode		: 'Lesstefna',
-		tabIndex		: 'Raðnúmer innsláttarreits',
-		advisoryTitle	: 'Titill',
+		langCode			: 'Lesstefna',
+		tabIndex			: 'Raðnúmer innsláttarreits',
+		advisoryTitle		: 'Titill',
 		advisoryContentType	: 'Tegund innihalds',
 		cssClasses		: 'Stílsniðsflokkur',
 		charset			: 'Táknróf',
 		styles			: 'Stíll',
-		selectAnchor	: 'Veldu akkeri',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Veldu akkeri',
 		anchorName		: 'Eftir akkerisnafni',
-		anchorId		: 'Eftir auðkenni einingar',
-		emailAddress	: 'Netfang',
-		emailSubject	: 'Efni',
+		anchorId			: 'Eftir auðkenni einingar',
+		emailAddress		: 'Netfang',
+		emailSubject		: 'Efni',
 		emailBody		: 'Meginmál',
 		noAnchors		: '<Engin bókamerki á skrá>',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/it.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/it.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/it.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Scorciatoia<br />da tastiera',
 		name			: 'Nome',
-		langCode		: 'Direzione scrittura',
-		tabIndex		: 'Ordine di tabulazione',
-		advisoryTitle	: 'Titolo',
+		langCode			: 'Direzione scrittura',
+		tabIndex			: 'Ordine di tabulazione',
+		advisoryTitle		: 'Titolo',
 		advisoryContentType	: 'Tipo della risorsa collegata',
 		cssClasses		: 'Nome classe CSS',
 		charset			: 'Set di caretteri della risorsa collegata',
 		styles			: 'Stile',
-		selectAnchor	: 'Scegli Ancora',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Scegli Ancora',
 		anchorName		: 'Per Nome',
-		anchorId		: 'Per id elemento',
-		emailAddress	: 'Indirizzo E-Mail',
-		emailSubject	: 'Oggetto del messaggio',
+		anchorId			: 'Per id elemento',
+		emailAddress		: 'Indirizzo E-Mail',
+		emailSubject		: 'Oggetto del messaggio',
 		emailBody		: 'Corpo del messaggio',
 		noAnchors		: '(Nessuna ancora disponibile nel documento)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/ja.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/ja.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/ja.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'アクセスキー',
 		name			: 'Name属性',
-		langCode		: '言語コード',
-		tabIndex		: 'タブインデックス',
-		advisoryTitle	: 'Title属性',
+		langCode			: '言語コード',
+		tabIndex			: 'タブインデックス',
+		advisoryTitle		: 'Title属性',
 		advisoryContentType	: 'Content Type属性',
 		cssClasses		: 'スタイルシートクラス',
 		charset			: 'リンクcharset属性',
 		styles			: 'スタイルシート',
-		selectAnchor	: 'アンカーを選択',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'アンカーを選択',
 		anchorName		: 'アンカー名',
-		anchorId		: 'エレメントID',
-		emailAddress	: 'E-Mail アドレス',
-		emailSubject	: '件名',
+		anchorId			: 'エレメントID',
+		emailAddress		: 'E-Mail アドレス',
+		emailSubject		: '件名',
 		emailBody		: '本文',
 		noAnchors		: '(ドキュメントにおいて利用可能なアンカーはありません。)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/km.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/km.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/km.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'ឃី សំរាប់ចូល',
 		name			: 'ឈ្មោះ',
-		langCode		: 'ទិសដៅភាសា',
-		tabIndex		: 'លេខ Tab',
-		advisoryTitle	: 'ចំណងជើង ប្រឹក្សា',
+		langCode			: 'ទិសដៅភាសា',
+		tabIndex			: 'លេខ Tab',
+		advisoryTitle		: 'ចំណងជើង ប្រឹក្សា',
 		advisoryContentType	: 'ប្រភេទអត្ថបទ ប្រឹក្សា',
 		cssClasses		: 'Stylesheet Classes',
 		charset			: 'លេខកូតអក្សររបស់ឈ្នាប់',
 		styles			: 'ម៉ូត',
-		selectAnchor	: 'ជ្រើសរើសយុថ្កា',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'ជ្រើសរើសយុថ្កា',
 		anchorName		: 'តាមឈ្មោះរបស់យុថ្កា',
-		anchorId		: 'តាម Id',
-		emailAddress	: 'អ៊ីមែល',
-		emailSubject	: 'ចំណងជើងអត្ថបទ',
+		anchorId			: 'តាម Id',
+		emailAddress		: 'អ៊ីមែល',
+		emailSubject		: 'ចំណងជើងអត្ថបទ',
 		emailBody		: 'អត្ថបទ',
 		noAnchors		: '(No anchors available in the document)', // MISSING
Index: /CKEditor/branches/versions/3.5.x/_source/lang/ko.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/ko.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/ko.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: '엑세스 키',
 		name			: 'Name',
-		langCode		: '쓰기 방향',
-		tabIndex		: '탭 순서',
-		advisoryTitle	: 'Advisory Title',
+		langCode			: '쓰기 방향',
+		tabIndex			: '탭 순서',
+		advisoryTitle		: 'Advisory Title',
 		advisoryContentType	: 'Advisory Content Type',
 		cssClasses		: 'Stylesheet Classes',
 		charset			: 'Linked Resource Charset',
 		styles			: 'Style',
-		selectAnchor	: '책갈피 선택',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: '책갈피 선택',
 		anchorName		: '책갈피 이름',
-		anchorId		: '책갈피 ID',
-		emailAddress	: '이메일 주소',
-		emailSubject	: '제목',
+		anchorId			: '책갈피 ID',
+		emailAddress		: '이메일 주소',
+		emailSubject		: '제목',
 		emailBody		: '내용',
 		noAnchors		: '(문서에 책갈피가 없습니다.)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/lt.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/lt.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/lt.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Prieigos raktas',
 		name			: 'Vardas',
-		langCode		: 'Teksto kryptis',
-		tabIndex		: 'Tabuliavimo indeksas',
-		advisoryTitle	: 'Konsultacinė antraštė',
+		langCode			: 'Teksto kryptis',
+		tabIndex			: 'Tabuliavimo indeksas',
+		advisoryTitle		: 'Konsultacinė antraštė',
 		advisoryContentType	: 'Konsultacinio turinio tipas',
 		cssClasses		: 'Stilių lentelės klasės',
 		charset			: 'Susietų išteklių simbolių lentelė',
 		styles			: 'Stilius',
-		selectAnchor	: 'Pasirinkite žymę',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Pasirinkite žymę',
 		anchorName		: 'Pagal žymės vardą',
-		anchorId		: 'Pagal žymės Id',
-		emailAddress	: 'El.pašto adresas',
-		emailSubject	: 'Žinutės tema',
+		anchorId			: 'Pagal žymės Id',
+		emailAddress		: 'El.pašto adresas',
+		emailSubject		: 'Žinutės tema',
 		emailBody		: 'Žinutės turinys',
 		noAnchors		: '(Šiame dokumente žymių nėra)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/lv.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/lv.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/lv.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Pieejas kods',
 		name			: 'Nosaukums',
-		langCode		: 'Valodas lasīšanas virziens',
-		tabIndex		: 'Ciļņu indekss',
-		advisoryTitle	: 'Konsultatīvs virsraksts',
+		langCode			: 'Valodas lasīšanas virziens',
+		tabIndex			: 'Ciļņu indekss',
+		advisoryTitle		: 'Konsultatīvs virsraksts',
 		advisoryContentType	: 'Konsultatīvs satura tips',
 		cssClasses		: 'Stilu saraksta klases',
 		charset			: 'Pievienotā resursa kodu tabula',
 		styles			: 'Stils',
-		selectAnchor	: 'Izvēlēties iezīmi',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Izvēlēties iezīmi',
 		anchorName		: 'Pēc iezīmes nosaukuma',
-		anchorId		: 'Pēc elementa ID',
-		emailAddress	: 'E-pasta adrese',
-		emailSubject	: 'Ziņas tēma',
+		anchorId			: 'Pēc elementa ID',
+		emailAddress		: 'E-pasta adrese',
+		emailSubject		: 'Ziņas tēma',
 		emailBody		: 'Ziņas saturs',
 		noAnchors		: '(Šajā dokumentā nav iezīmju)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/mn.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/mn.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/mn.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Холбох түлхүүр',
 		name			: 'Нэр',
-		langCode		: 'Хэлний чиглэл',
-		tabIndex		: 'Tab индекс',
-		advisoryTitle	: 'Зөвлөлдөх гарчиг',
+		langCode			: 'Хэлний чиглэл',
+		tabIndex			: 'Tab индекс',
+		advisoryTitle		: 'Зөвлөлдөх гарчиг',
 		advisoryContentType	: 'Зөвлөлдөх төрлийн агуулга',
 		cssClasses		: 'Stylesheet классууд',
 		charset			: 'Тэмдэгт оноох нөөцөд холбогдсон',
 		styles			: 'Загвар',
-		selectAnchor	: 'Холбоос сонгох',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Холбоос сонгох',
 		anchorName		: 'Холбоосын нэрээр',
-		anchorId		: 'Элемэнт Id-гаар',
-		emailAddress	: 'E-Mail Хаяг',
-		emailSubject	: 'Message гарчиг',
+		anchorId			: 'Элемэнт Id-гаар',
+		emailAddress		: 'E-Mail Хаяг',
+		emailSubject		: 'Message гарчиг',
 		emailBody		: 'Message-ийн агуулга',
 		noAnchors		: '(Баримт бичиг холбоосгүй байна)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/ms.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/ms.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/ms.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Kunci Akses',
 		name			: 'Nama',
-		langCode		: 'Arah Tulisan',
-		tabIndex		: 'Indeks Tab ',
-		advisoryTitle	: 'Tajuk Makluman',
+		langCode			: 'Arah Tulisan',
+		tabIndex			: 'Indeks Tab ',
+		advisoryTitle		: 'Tajuk Makluman',
 		advisoryContentType	: 'Jenis Kandungan Makluman',
 		cssClasses		: 'Kelas-kelas Stylesheet',
 		charset			: 'Linked Resource Charset',
 		styles			: 'Stail',
-		selectAnchor	: 'Sila pilih pautan',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Sila pilih pautan',
 		anchorName		: 'dengan menggunakan nama pautan',
-		anchorId		: 'dengan menggunakan ID elemen',
-		emailAddress	: 'Alamat E-Mail',
-		emailSubject	: 'Subjek Mesej',
+		anchorId			: 'dengan menggunakan ID elemen',
+		emailAddress		: 'Alamat E-Mail',
+		emailSubject		: 'Subjek Mesej',
 		emailBody		: 'Isi Kandungan Mesej',
 		noAnchors		: '(Tiada pautan terdapat dalam dokumen ini)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/nb.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/nb.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/nb.js	(revision 6655)
@@ -40,5 +40,5 @@
 	// Toolbar buttons without dialogs.
 	source			: 'Kilde',
-	newPage			: 'Ny Side',
+	newPage			: 'Ny side',
 	save			: 'Lagre',
 	preview			: 'Forhåndsvis',
@@ -47,15 +47,15 @@
 	paste			: 'Lim inn',
 	print			: 'Skriv ut',
-	underline		: 'Understrek',
+	underline		: 'Understreking',
 	bold			: 'Fet',
 	italic			: 'Kursiv',
 	selectAll		: 'Merk alt',
-	removeFormat	: 'Fjern format',
-	strike			: 'Gjennomstrek',
+	removeFormat	: 'Fjern formatering',
+	strike			: 'Gjennomstreking',
 	subscript		: 'Senket skrift',
 	superscript		: 'Hevet skrift',
 	horizontalrule	: 'Sett inn horisontal linje',
-	pagebreak		: 'Sett inn sideskift',
-	pagebreakAlt		: 'Page Break', // MISSING
+	pagebreak		: 'Sett inn sideskift for utskrift',
+	pagebreakAlt		: 'Sideskift',
 	unlink			: 'Fjern lenke',
 	undo			: 'Angre',
@@ -98,6 +98,6 @@
 		generalTab		: 'Generelt',
 		advancedTab		: 'Avansert',
-		validateNumberFailed : 'Denne verdien er ikke ett nummer',
-		confirmNewPage	: 'Alle endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?',
+		validateNumberFailed : 'Denne verdien er ikke et tall.',
+		confirmNewPage	: 'Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?',
 		confirmCancel	: 'Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?',
 		options			: 'Valg',
@@ -107,8 +107,8 @@
 		targetSelf		: 'Samme vindu (_self)',
 		targetParent	: 'Foreldrevindu (_parent)',
-		langDirLTR		: 'Left to Right (LTR)', // MISSING
-		langDirRTL		: 'Right to Left (RTL)', // MISSING
-		styles			: 'Style', // MISSING
-		cssClasses		: 'Stylesheet Classes', // MISSING
+		langDirLTR		: 'Venstre til høyre (VTH)',
+		langDirRTL		: 'Høyre til venstre (HTV)',
+		styles			: 'Stil',
+		cssClasses		: 'Stilarkklasser',
 		width			: 'Bredde',
 		height			: 'Høyde',
@@ -120,6 +120,6 @@
 		alignMiddle		: 'Midten',
 		alignBottom		: 'Bunn',
-		invalidHeight	: 'Høyde må være ett nummer',
-		invalidWidth	: 'Bredde må være ett nummer.',
+		invalidHeight	: 'Høyde må være et tall.',
+		invalidWidth	: 'Bredde må være et tall.',
 
 		// Put the voice-only part of the label in the span.
@@ -129,5 +129,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Alternativer for høyreklikkmeny'
 	},
 
@@ -135,7 +135,7 @@
 	specialChar		:
 	{
-		toolbar		: 'Sett inn spesielt tegn',
-		title		: 'Velg spesielt tegn',
-		options : 'Special Character Options' // MISSING
+		toolbar		: 'Sett inn spesialtegn',
+		title		: 'Velg spesialtegn',
+		options : 'Alternativer for spesialtegn'
 	},
 
@@ -144,5 +144,5 @@
 	{
 		toolbar		: 'Sett inn/Rediger lenke',
-		other 		: '<other>', // MISSING
+		other 		: '<annen>',
 		menu		: 'Rediger lenke',
 		title		: 'Lenke',
@@ -156,14 +156,14 @@
 		toEmail		: 'E-post',
 		targetFrame		: '<ramme>',
-		targetPopup		: '<popup vindu>',
+		targetPopup		: '<popup-vindu>',
 		targetFrameName	: 'Målramme',
-		targetPopupName	: 'Navn på popup-vindus',
+		targetPopupName	: 'Navn på popup-vindu',
 		popupFeatures	: 'Egenskaper for popup-vindu',
-		popupResizable	: 'Skalérbar',
+		popupResizable	: 'Skalerbar',
 		popupStatusBar	: 'Statuslinje',
 		popupLocationBar: 'Adresselinje',
 		popupToolbar	: 'Verktøylinje',
 		popupMenuBar	: 'Menylinje',
-		popupFullScreen	: 'Full skjerm (IE)',
+		popupFullScreen	: 'Fullskjerm (IE)',
 		popupScrollBars	: 'Scrollbar',
 		popupDependent	: 'Avhenging (Netscape)',
@@ -176,19 +176,20 @@
 		acccessKey		: 'Aksessknapp',
 		name			: 'Navn',
-		langCode		: 'Språkretning',
-		tabIndex		: 'Tab Indeks',
-		advisoryTitle	: 'Tittel',
+		langCode			: 'Språkkode',
+		tabIndex			: 'Tabindeks',
+		advisoryTitle		: 'Tittel',
 		advisoryContentType	: 'Type',
 		cssClasses		: 'Stilarkklasser',
-		charset			: 'Lenket språkkart',
+		charset			: 'Lenket tegnsett',
 		styles			: 'Stil',
-		selectAnchor	: 'Velg et anker',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Velg et anker',
 		anchorName		: 'Anker etter navn',
-		anchorId		: 'Element etter ID',
-		emailAddress	: 'E-postadresse',
-		emailSubject	: 'Meldingsemne',
+		anchorId			: 'Element etter ID',
+		emailAddress		: 'E-postadresse',
+		emailSubject		: 'Meldingsemne',
 		emailBody		: 'Melding',
 		noAnchors		: '(Ingen anker i dokumentet)',
-		noUrl			: 'Vennligst skriv inn lenkens url',
+		noUrl			: 'Vennligst skriv inn lenkens URL',
 		noEmail			: 'Vennligst skriv inn e-postadressen'
 	},
@@ -207,23 +208,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // MISSING
-		validateStartNumber				:'List start number must be a whole number.', // MISSING
-		circle				: 'Circle', // MISSING
-		disc				: 'Disc', // MISSING
-		square				: 'Square', // MISSING
-		none				: 'None', // MISSING
-		notset				: '<not set>', // MISSING
-		armenian			: 'Armenian numbering', // MISSING
-		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
-		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
-		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
-		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
-		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
-		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
-		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
-		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+		numberedTitle		: 'Egenskaper for nummerert liste',
+		bulletedTitle		: 'Egenskaper for punktmerket liste',
+		type				: 'Type',
+		start				: 'Start',
+		validateStartNumber				:'Starten på listen må være et heltall.',
+		circle				: 'Sirkel',
+		disc				: 'Disk',
+		square				: 'Firkant',
+		none				: 'Ingen',
+		notset				: '<ikke satt>',
+		armenian			: 'Armensk nummerering',
+		georgian			: 'Georgisk nummerering (an, ban, gan, osv.)',
+		lowerRoman			: 'Romertall, små (i, ii, iii, iv, v, osv.)',
+		upperRoman			: 'Romertall, store (I, II, III, IV, V, osv.)',
+		lowerAlpha			: 'Alfabetisk, små (a, b, c, d, e, osv.)',
+		upperAlpha			: 'Alfabetisk, store (A, B, C, D, E, osv.)',
+		lowerGreek			: 'Gresk, små (alpha, beta, gamma, osv.)',
+		decimal				: 'Tall (1, 2, 3, osv.)',
+		decimalLeadingZero	: 'Tall, med førstesiffer null (01, 02, 03, osv.)'
 	},
 
@@ -241,5 +242,5 @@
 		matchCyclic			: 'Søk i hele dokumentet',
 		replaceAll			: 'Erstatt alle',
-		replaceSuccessMsg	: '%1 tilfelle erstattet.'
+		replaceSuccessMsg	: '%1 tilfelle(r) erstattet.'
 	},
 
@@ -266,11 +267,11 @@
 		headersRow		: 'Første rad',
 		headersBoth		: 'Begge',
-		invalidRows		: 'Antall rader må være ett tall større enn 0.',
-		invalidCols		: 'Antall kolonner må være ett tall større enn 0.',
-		invalidBorder	: 'Rammestørrelse må være ett tall.',
-		invalidWidth	: 'Tabellbredde må være ett nummer.',
-		invalidHeight	: 'Tabellhøyde må være ett nummer.',
-		invalidCellSpacing	: 'Cellemellomrom må være ett nummer.',
-		invalidCellPadding	: 'Cellefyll må være ett nummer.',
+		invalidRows		: 'Antall rader må være et tall større enn 0.',
+		invalidCols		: 'Antall kolonner må være et tall større enn 0.',
+		invalidBorder	: 'Rammestørrelse må være et tall.',
+		invalidWidth	: 'Tabellbredde må være et tall.',
+		invalidHeight	: 'Tabellhøyde må være et tall.',
+		invalidCellSpacing	: 'Cellemarg må være et tall.',
+		invalidCellPadding	: 'Cellepolstring må være et tall.',
 
 		cell :
@@ -299,8 +300,8 @@
 			yes				: 'Ja',
 			no				: 'Nei',
-			invalidWidth	: 'Cellebredde må være ett nummer',
-			invalidHeight	: 'Cellehøyde må være ett nummer',
-			invalidRowSpan	: 'Radspenn må være ett nummer.',
-			invalidColSpan	: 'Kolonnespenn må være ett nummer.',
+			invalidWidth	: 'Cellebredde må være et tall.',
+			invalidHeight	: 'Cellehøyde må være et tall.',
+			invalidRowSpan	: 'Radspenn må være et heltall.',
+			invalidColSpan	: 'Kolonnespenn må være et heltall.',
 			chooseColor		: 'Velg'
 		},
@@ -420,10 +421,10 @@
 		alertUrl	: 'Vennligst skriv bilde-urlen',
 		linkTab		: 'Lenke',
-		button2Img	: 'Vil du endre den valgte bildeknappen til ett vanlig bilde?',
+		button2Img	: 'Vil du endre den valgte bildeknappen til et vanlig bilde?',
 		img2Button	: 'Vil du endre det valgte bildet til en bildeknapp?',
 		urlMissing	: 'Bildets adresse mangler.',
-		validateBorder	: 'Ramme må være ett nummer.',
-		validateHSpace	: 'HSpace må være ett nummer.',
-		validateVSpace	: 'VSpace må være ett nummer.'
+		validateBorder	: 'Ramme må være et heltall.',
+		validateHSpace	: 'HMarg må være et heltall.',
+		validateVSpace	: 'VMarg må være et heltall.'
 	},
 
@@ -453,19 +454,19 @@
 		qualityBest		: 'Best',
 		qualityHigh		: 'Høy',
-		qualityAutoHigh	: 'Auto Høy',
+		qualityAutoHigh	: 'Auto høy',
 		qualityMedium	: 'Medium',
-		qualityAutoLow	: 'Auto Lav',
+		qualityAutoLow	: 'Auto lav',
 		qualityLow		: 'Lav',
 		windowModeWindow: 'Vindu',
 		windowModeOpaque: 'Opaque',
 		windowModeTransparent : 'Gjennomsiktig',
-		windowMode		: 'Vindu modus',
+		windowMode		: 'Vindumodus',
 		flashvars		: 'Variabler for flash',
 		bgcolor			: 'Bakgrunnsfarge',
 		hSpace			: 'HMarg',
 		vSpace			: 'VMarg',
-		validateSrc		: 'Vennligst skriv inn lenkens url',
-		validateHSpace	: 'HSpace må være ett nummer.',
-		validateVSpace	: 'VSpace må være ett nummer.'
+		validateSrc		: 'Vennligst skriv inn lenkens url.',
+		validateHSpace	: 'HMarg må være et tall.',
+		validateVSpace	: 'VMarg må være et tall.'
 	},
 
@@ -476,5 +477,5 @@
 		title			: 'Stavekontroll',
 		notAvailable	: 'Beklager, tjenesten er utilgjenglig nå.',
-		errorLoading	: 'Feil under lasting av applicationstjeneste tjener: %s.',
+		errorLoading	: 'Feil under lasting av applikasjonstjenestetjener: %s.',
 		notInDic		: 'Ikke i ordboken',
 		changeTo		: 'Endre til',
@@ -497,5 +498,5 @@
 		toolbar	: 'Smil',
 		title	: 'Sett inn smil',
-		options : 'Smiley Options' // MISSING
+		options : 'Alternativer for smil'
 	},
 
@@ -506,26 +507,26 @@
 	},
 
-	numberedlist	: 'Nummerert liste',
-	bulletedlist	: 'Uordnet liste',
-	indent			: 'Øk nivå',
-	outdent			: 'Senk nivå',
+	numberedlist	: 'Legg til/Fjern nummerert liste',
+	bulletedlist	: 'Legg til/Fjern punktmerket liste',
+	indent			: 'Øk innrykk',
+	outdent			: 'Reduser innrykk',
 
 	justify :
 	{
 		left	: 'Venstrejuster',
-		center	: 'Midtjuster',
+		center	: 'Midtstill',
 		right	: 'Høyrejuster',
 		block	: 'Blokkjuster'
 	},
 
-	blockquote : 'Blockquote',
+	blockquote : 'Sitatblokk',
 
 	clipboard :
 	{
 		title		: 'Lim inn',
-		cutError	: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl+X).',
-		copyError	: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl+C).',
-		pasteMsg	: 'Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.',
-		securityMsg	: 'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må lime det igjen i dette vinduet.',
+		cutError	: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl/Cmd+X).',
+		copyError	: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl/Cmd+C).',
+		pasteMsg	: 'Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.',
+		securityMsg	: 'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.',
 		pasteArea	: 'Innlimingsområde'
 	},
@@ -549,7 +550,7 @@
 		button			: 'Maler',
 		title			: 'Innholdsmaler',
-		options : 'Template Options', // MISSING
-		insertOption	: 'Erstatt faktisk innold',
-		selectPromptMsg	: 'Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):',
+		options : 'Alternativer for mal',
+		insertOption	: 'Erstatt gjeldende innhold',
+		selectPromptMsg	: 'Velg malen du vil åpne i redigeringsverktøyet:',
 		emptyListMsg	: '(Ingen maler definert)'
 	},
@@ -569,15 +570,15 @@
 	{
 		label		: 'Format',
-		panelTitle	: 'Format',
+		panelTitle	: 'Avsnittsformat',
 
 		tag_p		: 'Normal',
 		tag_pre		: 'Formatert',
 		tag_address	: 'Adresse',
-		tag_h1		: 'Tittel 1',
-		tag_h2		: 'Tittel 2',
-		tag_h3		: 'Tittel 3',
-		tag_h4		: 'Tittel 4',
-		tag_h5		: 'Tittel 5',
-		tag_h6		: 'Tittel 6',
+		tag_h1		: 'Overskrift 1',
+		tag_h2		: 'Overskrift 2',
+		tag_h3		: 'Overskrift 3',
+		tag_h4		: 'Overskrift 4',
+		tag_h5		: 'Overskrift 5',
+		tag_h6		: 'Overskrift 6',
 		tag_div		: 'Normal (DIV)'
 	},
@@ -590,7 +591,7 @@
 		styleSelectLabel	: 'Stil',
 		IdInputLabel		: 'Id',
-		languageCodeInputLabel	: ' Språk-kode',
+		languageCodeInputLabel	: ' Språkkode',
 		inlineStyleInputLabel	: 'Inlinestiler',
-		advisoryTitleInputLabel	: 'Advisory Title', // MISSING
+		advisoryTitleInputLabel	: 'Tittel',
 		langDirLabel		: 'Språkretning',
 		langDirLTRLabel		: 'Venstre til høyre (VTH)',
@@ -602,9 +603,9 @@
 	iframe :
 	{
-		title		: 'IFrame Properties', // MISSING
-		toolbar		: 'IFrame', // MISSING
-		noUrl		: 'Please type the iframe URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border' // MISSING
+		title		: 'Egenskaper for IFrame',
+		toolbar		: 'IFrame',
+		noUrl		: 'Vennligst skriv inn URL for iframe',
+		scrolling	: 'Aktiver scrollefelt',
+		border		: 'Viss ramme rundt iframe'
 	},
 
@@ -635,42 +636,42 @@
 	{
 		'000' : 'Svart',
-		'800000' : 'Maroon', // MISSING
-		'8B4513' : 'Saddle Brown', // MISSING
-		'2F4F4F' : 'Dark Slate Gray', // MISSING
-		'008080' : 'Teal', // MISSING
-		'000080' : 'Marine',
-		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Svak grå',
-		'B22222' : 'Fire Brick', // MISSING
+		'800000' : 'Rødbrun',
+		'8B4513' : 'Salbrun',
+		'2F4F4F' : 'Grønnsvart',
+		'008080' : 'Blågrønn',
+		'000080' : 'Marineblått',
+		'4B0082' : 'Indigo',
+		'696969' : 'Mørk grå',
+		'B22222' : 'Mørkerød',
 		'A52A2A' : 'Brun',
-		'DAA520' : 'Golden Rod', // MISSING
-		'006400' : 'Mørk grå',
+		'DAA520' : 'Lys brun',
+		'006400' : 'Mørk grønn',
 		'40E0D0' : 'Turkis',
-		'0000CD' : 'Medium Blå',
-		'800080' : 'Purple', // MISSING
+		'0000CD' : 'Medium blå',
+		'800080' : 'Purpur',
 		'808080' : 'Grå',
-		'F00' : 'Red', // MISSING
+		'F00' : 'Rød',
 		'FF8C00' : 'Mørk oransje',
-		'FFD700' : 'gull',
+		'FFD700' : 'Gull',
 		'008000' : 'Grønn',
-		'0FF' : 'Cyan', // MISSING
+		'0FF' : 'Cyan',
 		'00F' : 'Blå',
 		'EE82EE' : 'Fiolett',
-		'A9A9A9' : 'Mørk grå',
-		'FFA07A' : 'Light Salmon', // MISSING
+		'A9A9A9' : 'Svak grå',
+		'FFA07A' : 'Rosa-oransje',
 		'FFA500' : 'Oransje',
-		'FFFF00' : 'gul',
-		'00FF00' : 'Lime', // MISSING
-		'AFEEEE' : 'Pale Turquoise', // MISSING
+		'FFFF00' : 'Gul',
+		'00FF00' : 'Lime',
+		'AFEEEE' : 'Svak turkis',
 		'ADD8E6' : 'Lys Blå',
 		'DDA0DD' : 'Plomme',
 		'D3D3D3' : 'Lys grå',
-		'FFF0F5' : 'Lavender Blush', // MISSING
+		'FFF0F5' : 'Svak lavendelrosa',
 		'FAEBD7' : 'Antikk-hvit',
 		'FFFFE0' : 'Lys gul',
-		'F0FFF0' : 'Honeydew', // MISSING
-		'F0FFFF' : 'Azure', // MISSING
-		'F0F8FF' : 'Alice Blue', // MISSING
-		'E6E6FA' : 'Lavender', // MISSING
+		'F0FFF0' : 'Honningmelon',
+		'F0FFFF' : 'Svakt asurblått',
+		'F0F8FF' : 'Svak cyan',
+		'E6E6FA' : 'Lavendel',
 		'FFF' : 'Hvit'
 	},
@@ -679,5 +680,5 @@
 	{
 		title			: 'Stavekontroll mens du skriver',
-		opera_title		: 'Not supported by Opera', // MISSING
+		opera_title		: 'Ikke støttet av Opera',
 		enable			: 'Slå på SCAYT',
 		disable			: 'Slå av SCAYT',
@@ -690,21 +691,21 @@
 		ignoreAll		: 'Ignorer Alle',
 		addWord			: 'Legg til ord',
-		emptyDic		: 'Ordboknavn skal ikke være tom',
+		emptyDic		: 'Ordboknavn bør ikke være tom.',
 
 		optionsTab		: 'Valg',
-		allCaps			: 'Ignore All-Caps Words', // MISSING
-		ignoreDomainNames : 'Ignore Domain Names', // MISSING
-		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
-		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+		allCaps			: 'Ikke kontroller ord med kun store bokstaver',
+		ignoreDomainNames : 'Ikke kontroller domenenavn',
+		mixedCase		: 'Ikke kontroller ord med blandet små og store bokstaver',
+		mixedWithDigits	: 'Ikke kontroller ord som inneholder tall',
 
 		languagesTab	: 'Språk',
 
 		dictionariesTab	: 'Ordbøker',
-		dic_field_name	: 'Dictionary name', // MISSING
-		dic_create		: 'Create', // MISSING
-		dic_restore		: 'Restore', // MISSING
-		dic_delete		: 'Delete', // MISSING
-		dic_rename		: 'Rename', // MISSING
-		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+		dic_field_name	: 'Ordboknavn',
+		dic_create		: 'Opprett',
+		dic_restore		: 'Gjenopprett',
+		dic_delete		: 'Slett',
+		dic_rename		: 'Gi nytt navn',
+		dic_info		: 'Brukerordboken lagres først i en informasjonskapsel på din maskin, men det er en begrensning på hvor mye som kan lagres her. Når ordboken blir for stor til å lagres i en informasjonskapsel, vil vi i stedet lagre ordboken på vår server. For å lagre din personlige ordbok på vår server, burde du velge et navn for ordboken din. Hvis du allerede har lagret en ordbok, vennligst skriv inn ordbokens navn og klikk på Gjenopprett-knappen.',
 
 		aboutTab		: 'Om'
@@ -715,5 +716,5 @@
 		title		: 'Om CKEditor',
 		dlgTitle	: 'Om CKEditor',
-		moreInfo	: 'For lisensieringsinformasjon vennligst besøk vårt nettsted:',
+		moreInfo	: 'For lisensieringsinformasjon, vennligst besøk vårt nettsted:',
 		copy		: 'Copyright &copy; $1. Alle rettigheter reservert.'
 	},
@@ -725,7 +726,7 @@
 	{
 		anchor		: 'Anker',
-		flash		: 'Flash Animasjon',
-		iframe		: 'IFrame', // MISSING
-		hiddenfield	: 'Hidden Field', // MISSING
+		flash		: 'Flash-animasjon',
+		iframe		: 'IFrame',
+		hiddenfield	: 'Skjult felt',
 		unknown		: 'Ukjent objekt'
 	},
@@ -736,5 +737,5 @@
 	{
 		title		: 'Velg farge',
-		options	:	'Color Options', // MISSING
+		options	:	'Alternativer for farge',
 		highlight	: 'Merk',
 		selected	: 'Valgt',
@@ -742,11 +743,11 @@
 	},
 
-	toolbarCollapse	: 'Slå sammen verktøylinje',
+	toolbarCollapse	: 'Skjul verktøylinje',
 	toolbarExpand	: 'Vis verktøylinje',
 
 	bidi :
 	{
-		ltr : 'Text direction from left to right', // MISSING
-		rtl : 'Text direction from right to left' // MISSING
+		ltr : 'Tekstretning fra venstre til høyre',
+		rtl : 'Tekstretning fra høyre til venstre'
 	}
 };
Index: /CKEditor/branches/versions/3.5.x/_source/lang/nl.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/nl.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/nl.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Toegangstoets',
 		name			: 'Naam',
-		langCode		: 'Schrijfrichting',
-		tabIndex		: 'Tabvolgorde',
-		advisoryTitle	: 'Aanbevolen titel',
+		langCode			: 'Schrijfrichting',
+		tabIndex			: 'Tabvolgorde',
+		advisoryTitle		: 'Aanbevolen titel',
 		advisoryContentType	: 'Aanbevolen content-type',
 		cssClasses		: 'Stylesheet-klassen',
 		charset			: 'Karakterset van gelinkte bron',
 		styles			: 'Stijl',
-		selectAnchor	: 'Kies een interne link',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Kies een interne link',
 		anchorName		: 'Op naam interne link',
-		anchorId		: 'Op kenmerk interne link',
-		emailAddress	: 'E-mailadres',
-		emailSubject	: 'Onderwerp bericht',
+		anchorId			: 'Op kenmerk interne link',
+		emailAddress		: 'E-mailadres',
+		emailSubject		: 'Onderwerp bericht',
 		emailBody		: 'Inhoud bericht',
 		noAnchors		: '(Geen interne links in document gevonden)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/no.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/no.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/no.js	(revision 6655)
@@ -40,5 +40,5 @@
 	// Toolbar buttons without dialogs.
 	source			: 'Kilde',
-	newPage			: 'Ny Side',
+	newPage			: 'Ny side',
 	save			: 'Lagre',
 	preview			: 'Forhåndsvis',
@@ -47,15 +47,15 @@
 	paste			: 'Lim inn',
 	print			: 'Skriv ut',
-	underline		: 'Understrek',
+	underline		: 'Understreking',
 	bold			: 'Fet',
 	italic			: 'Kursiv',
 	selectAll		: 'Merk alt',
-	removeFormat	: 'Fjern format',
-	strike			: 'Gjennomstrek',
+	removeFormat	: 'Fjern formatering',
+	strike			: 'Gjennomstreking',
 	subscript		: 'Senket skrift',
 	superscript		: 'Hevet skrift',
 	horizontalrule	: 'Sett inn horisontal linje',
-	pagebreak		: 'Sett inn sideskift',
-	pagebreakAlt		: 'Page Break', // MISSING
+	pagebreak		: 'Sett inn sideskift for utskrift',
+	pagebreakAlt		: 'Sideskift',
 	unlink			: 'Fjern lenke',
 	undo			: 'Angre',
@@ -98,6 +98,6 @@
 		generalTab		: 'Generelt',
 		advancedTab		: 'Avansert',
-		validateNumberFailed : 'Denne verdien er ikke ett nummer',
-		confirmNewPage	: 'Alle endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?',
+		validateNumberFailed : 'Denne verdien er ikke et tall.',
+		confirmNewPage	: 'Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?',
 		confirmCancel	: 'Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?',
 		options			: 'Valg',
@@ -107,8 +107,8 @@
 		targetSelf		: 'Samme vindu (_self)',
 		targetParent	: 'Foreldrevindu (_parent)',
-		langDirLTR		: 'Left to Right (LTR)', // MISSING
-		langDirRTL		: 'Right to Left (RTL)', // MISSING
-		styles			: 'Style', // MISSING
-		cssClasses		: 'Stylesheet Classes', // MISSING
+		langDirLTR		: 'Venstre til høyre (VTH)',
+		langDirRTL		: 'Høyre til venstre (HTV)',
+		styles			: 'Stil',
+		cssClasses		: 'Stilarkklasser',
 		width			: 'Bredde',
 		height			: 'Høyde',
@@ -120,6 +120,6 @@
 		alignMiddle		: 'Midten',
 		alignBottom		: 'Bunn',
-		invalidHeight	: 'Høyde må være ett nummer',
-		invalidWidth	: 'Bredde må være ett nummer.',
+		invalidHeight	: 'Høyde må være et tall.',
+		invalidWidth	: 'Bredde må være et tall.',
 
 		// Put the voice-only part of the label in the span.
@@ -129,5 +129,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Alternativer for høyreklikkmeny'
 	},
 
@@ -135,7 +135,7 @@
 	specialChar		:
 	{
-		toolbar		: 'Sett inn spesielt tegn',
-		title		: 'Velg spesielt tegn',
-		options : 'Special Character Options' // MISSING
+		toolbar		: 'Sett inn spesialtegn',
+		title		: 'Velg spesialtegn',
+		options : 'Alternativer for spesialtegn'
 	},
 
@@ -144,5 +144,5 @@
 	{
 		toolbar		: 'Sett inn/Rediger lenke',
-		other 		: '<other>', // MISSING
+		other 		: '<annen>',
 		menu		: 'Rediger lenke',
 		title		: 'Lenke',
@@ -156,14 +156,14 @@
 		toEmail		: 'E-post',
 		targetFrame		: '<ramme>',
-		targetPopup		: '<popup vindu>',
+		targetPopup		: '<popup-vindu>',
 		targetFrameName	: 'Målramme',
-		targetPopupName	: 'Navn på popup-vindus',
+		targetPopupName	: 'Navn på popup-vindu',
 		popupFeatures	: 'Egenskaper for popup-vindu',
-		popupResizable	: 'Skalérbar',
+		popupResizable	: 'Skalerbar',
 		popupStatusBar	: 'Statuslinje',
 		popupLocationBar: 'Adresselinje',
 		popupToolbar	: 'Verktøylinje',
 		popupMenuBar	: 'Menylinje',
-		popupFullScreen	: 'Full skjerm (IE)',
+		popupFullScreen	: 'Fullskjerm (IE)',
 		popupScrollBars	: 'Scrollbar',
 		popupDependent	: 'Avhenging (Netscape)',
@@ -176,19 +176,20 @@
 		acccessKey		: 'Aksessknapp',
 		name			: 'Navn',
-		langCode		: 'Språkretning',
-		tabIndex		: 'Tab Indeks',
-		advisoryTitle	: 'Tittel',
+		langCode			: 'Språkkode',
+		tabIndex			: 'Tabindeks',
+		advisoryTitle		: 'Tittel',
 		advisoryContentType	: 'Type',
 		cssClasses		: 'Stilarkklasser',
-		charset			: 'Lenket språkkart',
+		charset			: 'Lenket tegnsett',
 		styles			: 'Stil',
-		selectAnchor	: 'Velg et anker',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Velg et anker',
 		anchorName		: 'Anker etter navn',
-		anchorId		: 'Element etter ID',
-		emailAddress	: 'E-postadresse',
-		emailSubject	: 'Meldingsemne',
+		anchorId			: 'Element etter ID',
+		emailAddress		: 'E-postadresse',
+		emailSubject		: 'Meldingsemne',
 		emailBody		: 'Melding',
 		noAnchors		: '(Ingen anker i dokumentet)',
-		noUrl			: 'Vennligst skriv inn lenkens url',
+		noUrl			: 'Vennligst skriv inn lenkens URL',
 		noEmail			: 'Vennligst skriv inn e-postadressen'
 	},
@@ -207,23 +208,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // MISSING
-		validateStartNumber				:'List start number must be a whole number.', // MISSING
-		circle				: 'Circle', // MISSING
-		disc				: 'Disc', // MISSING
-		square				: 'Square', // MISSING
-		none				: 'None', // MISSING
-		notset				: '<not set>', // MISSING
-		armenian			: 'Armenian numbering', // MISSING
-		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
-		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
-		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
-		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
-		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
-		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
-		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
-		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+		numberedTitle		: 'Egenskaper for nummerert liste',
+		bulletedTitle		: 'Egenskaper for punktmerket liste',
+		type				: 'Type',
+		start				: 'Start',
+		validateStartNumber				:'Starten på listen må være et heltall.',
+		circle				: 'Sirkel',
+		disc				: 'Disk',
+		square				: 'Firkant',
+		none				: 'Ingen',
+		notset				: '<ikke satt>',
+		armenian			: 'Armensk nummerering',
+		georgian			: 'Georgisk nummerering (an, ban, gan, osv.)',
+		lowerRoman			: 'Romertall, små (i, ii, iii, iv, v, osv.)',
+		upperRoman			: 'Romertall, store (I, II, III, IV, V, osv.)',
+		lowerAlpha			: 'Alfabetisk, små (a, b, c, d, e, osv.)',
+		upperAlpha			: 'Alfabetisk, store (A, B, C, D, E, osv.)',
+		lowerGreek			: 'Gresk, små (alpha, beta, gamma, osv.)',
+		decimal				: 'Tall (1, 2, 3, osv.)',
+		decimalLeadingZero	: 'Tall, med førstesiffer null (01, 02, 03, osv.)'
 	},
 
@@ -241,5 +242,5 @@
 		matchCyclic			: 'Søk i hele dokumentet',
 		replaceAll			: 'Erstatt alle',
-		replaceSuccessMsg	: '%1 tilfelle erstattet.'
+		replaceSuccessMsg	: '%1 tilfelle(r) erstattet.'
 	},
 
@@ -266,11 +267,11 @@
 		headersRow		: 'Første rad',
 		headersBoth		: 'Begge',
-		invalidRows		: 'Antall rader må være ett tall større enn 0.',
-		invalidCols		: 'Antall kolonner må være ett tall større enn 0.',
-		invalidBorder	: 'Rammestørrelse må være ett tall.',
-		invalidWidth	: 'Tabellbredde må være ett nummer.',
-		invalidHeight	: 'Tabellhøyde må være ett nummer.',
-		invalidCellSpacing	: 'Cellemellomrom må være ett nummer.',
-		invalidCellPadding	: 'Cellefyll må være ett nummer.',
+		invalidRows		: 'Antall rader må være et tall større enn 0.',
+		invalidCols		: 'Antall kolonner må være et tall større enn 0.',
+		invalidBorder	: 'Rammestørrelse må være et tall.',
+		invalidWidth	: 'Tabellbredde må være et tall.',
+		invalidHeight	: 'Tabellhøyde må være et tall.',
+		invalidCellSpacing	: 'Cellemarg må være et tall.',
+		invalidCellPadding	: 'Cellepolstring må være et tall.',
 
 		cell :
@@ -299,8 +300,8 @@
 			yes				: 'Ja',
 			no				: 'Nei',
-			invalidWidth	: 'Cellebredde må være ett nummer',
-			invalidHeight	: 'Cellehøyde må være ett nummer',
-			invalidRowSpan	: 'Radspenn må være ett nummer.',
-			invalidColSpan	: 'Kolonnespenn må være ett nummer.',
+			invalidWidth	: 'Cellebredde må være et tall.',
+			invalidHeight	: 'Cellehøyde må være et tall.',
+			invalidRowSpan	: 'Radspenn må være et heltall.',
+			invalidColSpan	: 'Kolonnespenn må være et heltall.',
 			chooseColor		: 'Velg'
 		},
@@ -420,10 +421,10 @@
 		alertUrl	: 'Vennligst skriv bilde-urlen',
 		linkTab		: 'Lenke',
-		button2Img	: 'Vil du endre den valgte bildeknappen til ett vanlig bilde?',
+		button2Img	: 'Vil du endre den valgte bildeknappen til et vanlig bilde?',
 		img2Button	: 'Vil du endre det valgte bildet til en bildeknapp?',
 		urlMissing	: 'Bildets adresse mangler.',
-		validateBorder	: 'Ramme må være ett nummer.',
-		validateHSpace	: 'HSpace må være ett nummer.',
-		validateVSpace	: 'VSpace må være ett nummer.'
+		validateBorder	: 'Ramme må være et heltall.',
+		validateHSpace	: 'HMarg må være et heltall.',
+		validateVSpace	: 'VMarg må være et heltall.'
 	},
 
@@ -453,19 +454,19 @@
 		qualityBest		: 'Best',
 		qualityHigh		: 'Høy',
-		qualityAutoHigh	: 'Auto Høy',
+		qualityAutoHigh	: 'Auto høy',
 		qualityMedium	: 'Medium',
-		qualityAutoLow	: 'Auto Lav',
+		qualityAutoLow	: 'Auto lav',
 		qualityLow		: 'Lav',
 		windowModeWindow: 'Vindu',
 		windowModeOpaque: 'Opaque',
 		windowModeTransparent : 'Gjennomsiktig',
-		windowMode		: 'Vindu modus',
+		windowMode		: 'Vindumodus',
 		flashvars		: 'Variabler for flash',
 		bgcolor			: 'Bakgrunnsfarge',
 		hSpace			: 'HMarg',
 		vSpace			: 'VMarg',
-		validateSrc		: 'Vennligst skriv inn lenkens url',
-		validateHSpace	: 'HSpace må være ett nummer.',
-		validateVSpace	: 'VSpace må være ett nummer.'
+		validateSrc		: 'Vennligst skriv inn lenkens url.',
+		validateHSpace	: 'HMarg må være et tall.',
+		validateVSpace	: 'VMarg må være et tall.'
 	},
 
@@ -476,5 +477,5 @@
 		title			: 'Stavekontroll',
 		notAvailable	: 'Beklager, tjenesten er utilgjenglig nå.',
-		errorLoading	: 'Feil under lasting av applicationstjeneste tjener: %s.',
+		errorLoading	: 'Feil under lasting av applikasjonstjenestetjener: %s.',
 		notInDic		: 'Ikke i ordboken',
 		changeTo		: 'Endre til',
@@ -497,5 +498,5 @@
 		toolbar	: 'Smil',
 		title	: 'Sett inn smil',
-		options : 'Smiley Options' // MISSING
+		options : 'Alternativer for smil'
 	},
 
@@ -506,26 +507,26 @@
 	},
 
-	numberedlist	: 'Nummerert liste',
-	bulletedlist	: 'Uordnet liste',
-	indent			: 'Øk nivå',
-	outdent			: 'Senk nivå',
+	numberedlist	: 'Legg til/Fjern nummerert liste',
+	bulletedlist	: 'Legg til/Fjern punktmerket liste',
+	indent			: 'Øk innrykk',
+	outdent			: 'Reduser innrykk',
 
 	justify :
 	{
 		left	: 'Venstrejuster',
-		center	: 'Midtjuster',
+		center	: 'Midtstill',
 		right	: 'Høyrejuster',
 		block	: 'Blokkjuster'
 	},
 
-	blockquote : 'Blockquote',
+	blockquote : 'Sitatblokk',
 
 	clipboard :
 	{
 		title		: 'Lim inn',
-		cutError	: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl+X).',
-		copyError	: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl+C).',
-		pasteMsg	: 'Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.',
-		securityMsg	: 'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må lime det igjen i dette vinduet.',
+		cutError	: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl/Cmd+X).',
+		copyError	: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl/Cmd+C).',
+		pasteMsg	: 'Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.',
+		securityMsg	: 'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.',
 		pasteArea	: 'Innlimingsområde'
 	},
@@ -549,7 +550,7 @@
 		button			: 'Maler',
 		title			: 'Innholdsmaler',
-		options : 'Template Options', // MISSING
-		insertOption	: 'Erstatt faktisk innold',
-		selectPromptMsg	: 'Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):',
+		options : 'Alternativer for mal',
+		insertOption	: 'Erstatt gjeldende innhold',
+		selectPromptMsg	: 'Velg malen du vil åpne i redigeringsverktøyet:',
 		emptyListMsg	: '(Ingen maler definert)'
 	},
@@ -569,15 +570,15 @@
 	{
 		label		: 'Format',
-		panelTitle	: 'Format',
+		panelTitle	: 'Avsnittsformat',
 
 		tag_p		: 'Normal',
 		tag_pre		: 'Formatert',
 		tag_address	: 'Adresse',
-		tag_h1		: 'Tittel 1',
-		tag_h2		: 'Tittel 2',
-		tag_h3		: 'Tittel 3',
-		tag_h4		: 'Tittel 4',
-		tag_h5		: 'Tittel 5',
-		tag_h6		: 'Tittel 6',
+		tag_h1		: 'Overskrift 1',
+		tag_h2		: 'Overskrift 2',
+		tag_h3		: 'Overskrift 3',
+		tag_h4		: 'Overskrift 4',
+		tag_h5		: 'Overskrift 5',
+		tag_h6		: 'Overskrift 6',
 		tag_div		: 'Normal (DIV)'
 	},
@@ -590,7 +591,7 @@
 		styleSelectLabel	: 'Stil',
 		IdInputLabel		: 'Id',
-		languageCodeInputLabel	: ' Språk-kode',
+		languageCodeInputLabel	: ' Språkkode',
 		inlineStyleInputLabel	: 'Inlinestiler',
-		advisoryTitleInputLabel	: 'Advisory Title', // MISSING
+		advisoryTitleInputLabel	: 'Tittel',
 		langDirLabel		: 'Språkretning',
 		langDirLTRLabel		: 'Venstre til høyre (VTH)',
@@ -602,9 +603,9 @@
 	iframe :
 	{
-		title		: 'IFrame Properties', // MISSING
-		toolbar		: 'IFrame', // MISSING
-		noUrl		: 'Please type the iframe URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border' // MISSING
+		title		: 'Egenskaper for IFrame',
+		toolbar		: 'IFrame',
+		noUrl		: 'Vennligst skriv inn URL for iframe',
+		scrolling	: 'Aktiver scrollefelt',
+		border		: 'Viss ramme rundt iframe'
 	},
 
@@ -635,42 +636,42 @@
 	{
 		'000' : 'Svart',
-		'800000' : 'Maroon', // MISSING
-		'8B4513' : 'Saddle Brown', // MISSING
-		'2F4F4F' : 'Dark Slate Gray', // MISSING
-		'008080' : 'Teal', // MISSING
-		'000080' : 'Marine',
-		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Svak grå',
-		'B22222' : 'Fire Brick', // MISSING
+		'800000' : 'Rødbrun',
+		'8B4513' : 'Salbrun',
+		'2F4F4F' : 'Grønnsvart',
+		'008080' : 'Blågrønn',
+		'000080' : 'Marineblått',
+		'4B0082' : 'Indigo',
+		'696969' : 'Mørk grå',
+		'B22222' : 'Mørkerød',
 		'A52A2A' : 'Brun',
-		'DAA520' : 'Golden Rod', // MISSING
-		'006400' : 'Mørk grå',
+		'DAA520' : 'Lys brun',
+		'006400' : 'Mørk grønn',
 		'40E0D0' : 'Turkis',
-		'0000CD' : 'Medium Blå',
-		'800080' : 'Purple', // MISSING
+		'0000CD' : 'Medium blå',
+		'800080' : 'Purpur',
 		'808080' : 'Grå',
-		'F00' : 'Red', // MISSING
+		'F00' : 'Rød',
 		'FF8C00' : 'Mørk oransje',
-		'FFD700' : 'gull',
+		'FFD700' : 'Gull',
 		'008000' : 'Grønn',
-		'0FF' : 'Cyan', // MISSING
+		'0FF' : 'Cyan',
 		'00F' : 'Blå',
 		'EE82EE' : 'Fiolett',
-		'A9A9A9' : 'Mørk grå',
-		'FFA07A' : 'Light Salmon', // MISSING
+		'A9A9A9' : 'Svak grå',
+		'FFA07A' : 'Rosa-oransje',
 		'FFA500' : 'Oransje',
-		'FFFF00' : 'gul',
-		'00FF00' : 'Lime', // MISSING
-		'AFEEEE' : 'Pale Turquoise', // MISSING
+		'FFFF00' : 'Gul',
+		'00FF00' : 'Lime',
+		'AFEEEE' : 'Svak turkis',
 		'ADD8E6' : 'Lys Blå',
 		'DDA0DD' : 'Plomme',
 		'D3D3D3' : 'Lys grå',
-		'FFF0F5' : 'Lavender Blush', // MISSING
+		'FFF0F5' : 'Svak lavendelrosa',
 		'FAEBD7' : 'Antikk-hvit',
 		'FFFFE0' : 'Lys gul',
-		'F0FFF0' : 'Honeydew', // MISSING
-		'F0FFFF' : 'Azure', // MISSING
-		'F0F8FF' : 'Alice Blue', // MISSING
-		'E6E6FA' : 'Lavender', // MISSING
+		'F0FFF0' : 'Honningmelon',
+		'F0FFFF' : 'Svakt asurblått',
+		'F0F8FF' : 'Svak cyan',
+		'E6E6FA' : 'Lavendel',
 		'FFF' : 'Hvit'
 	},
@@ -679,5 +680,5 @@
 	{
 		title			: 'Stavekontroll mens du skriver',
-		opera_title		: 'Not supported by Opera', // MISSING
+		opera_title		: 'Ikke støttet av Opera',
 		enable			: 'Slå på SCAYT',
 		disable			: 'Slå av SCAYT',
@@ -690,21 +691,21 @@
 		ignoreAll		: 'Ignorer Alle',
 		addWord			: 'Legg til ord',
-		emptyDic		: 'Ordboknavn skal ikke være tom',
+		emptyDic		: 'Ordboknavn bør ikke være tom.',
 
 		optionsTab		: 'Valg',
-		allCaps			: 'Ignore All-Caps Words', // MISSING
-		ignoreDomainNames : 'Ignore Domain Names', // MISSING
-		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
-		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+		allCaps			: 'Ikke kontroller ord med kun store bokstaver',
+		ignoreDomainNames : 'Ikke kontroller domenenavn',
+		mixedCase		: 'Ikke kontroller ord med blandet små og store bokstaver',
+		mixedWithDigits	: 'Ikke kontroller ord som inneholder tall',
 
 		languagesTab	: 'Språk',
 
 		dictionariesTab	: 'Ordbøker',
-		dic_field_name	: 'Dictionary name', // MISSING
-		dic_create		: 'Create', // MISSING
-		dic_restore		: 'Restore', // MISSING
-		dic_delete		: 'Delete', // MISSING
-		dic_rename		: 'Rename', // MISSING
-		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+		dic_field_name	: 'Ordboknavn',
+		dic_create		: 'Opprett',
+		dic_restore		: 'Gjenopprett',
+		dic_delete		: 'Slett',
+		dic_rename		: 'Gi nytt navn',
+		dic_info		: 'Brukerordboken lagres først i en informasjonskapsel på din maskin, men det er en begrensning på hvor mye som kan lagres her. Når ordboken blir for stor til å lagres i en informasjonskapsel, vil vi i stedet lagre ordboken på vår server. For å lagre din personlige ordbok på vår server, burde du velge et navn for ordboken din. Hvis du allerede har lagret en ordbok, vennligst skriv inn ordbokens navn og klikk på Gjenopprett-knappen.',
 
 		aboutTab		: 'Om'
@@ -715,5 +716,5 @@
 		title		: 'Om CKEditor',
 		dlgTitle	: 'Om CKEditor',
-		moreInfo	: 'For lisensieringsinformasjon vennligst besøk vårt nettsted:',
+		moreInfo	: 'For lisensieringsinformasjon, vennligst besøk vårt nettsted:',
 		copy		: 'Copyright &copy; $1. Alle rettigheter reservert.'
 	},
@@ -725,7 +726,7 @@
 	{
 		anchor		: 'Anker',
-		flash		: 'Flash Animasjon',
-		iframe		: 'IFrame', // MISSING
-		hiddenfield	: 'Hidden Field', // MISSING
+		flash		: 'Flash-animasjon',
+		iframe		: 'IFrame',
+		hiddenfield	: 'Skjult felt',
 		unknown		: 'Ukjent objekt'
 	},
@@ -736,5 +737,5 @@
 	{
 		title		: 'Velg farge',
-		options	:	'Color Options', // MISSING
+		options	:	'Alternativer for farge',
 		highlight	: 'Merk',
 		selected	: 'Valgt',
@@ -742,11 +743,11 @@
 	},
 
-	toolbarCollapse	: 'Slå sammen verktøylinje',
+	toolbarCollapse	: 'Skjul verktøylinje',
 	toolbarExpand	: 'Vis verktøylinje',
 
 	bidi :
 	{
-		ltr : 'Text direction from left to right', // MISSING
-		rtl : 'Text direction from right to left' // MISSING
+		ltr : 'Tekstretning fra venstre til høyre',
+		rtl : 'Tekstretning fra høyre til venstre'
 	}
 };
Index: /CKEditor/branches/versions/3.5.x/_source/lang/pl.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/pl.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/pl.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Klawisz dostępu',
 		name			: 'Nazwa',
-		langCode		: 'Kod języka',
-		tabIndex		: 'Indeks kolejności',
-		advisoryTitle	: 'Opis obiektu docelowego',
+		langCode			: 'Kod języka',
+		tabIndex			: 'Indeks kolejności',
+		advisoryTitle		: 'Opis obiektu docelowego',
 		advisoryContentType	: 'Typ MIME obiektu docelowego',
 		cssClasses		: 'Nazwa klasy CSS',
 		charset			: 'Kodowanie znaków obiektu docelowego',
 		styles			: 'Styl',
-		selectAnchor	: 'Wybierz kotwicę',
+		rel			: 'Relacja',
+		selectAnchor		: 'Wybierz kotwicę',
 		anchorName		: 'Wg nazwy',
-		anchorId		: 'Wg identyfikatora',
-		emailAddress	: 'Adres e-mail',
-		emailSubject	: 'Temat',
+		anchorId			: 'Wg identyfikatora',
+		emailAddress		: 'Adres e-mail',
+		emailSubject		: 'Temat',
 		emailBody		: 'Treść',
 		noAnchors		: '(W dokumencie nie zdefiniowano żadnych kotwic)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/pt-br.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/pt-br.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/pt-br.js	(revision 6655)
@@ -175,16 +175,17 @@
 		acccessKey		: 'Chave de Acesso',
 		name			: 'Nome',
-		langCode		: 'Direção do idioma',
-		tabIndex		: 'Índice de Tabulação',
-		advisoryTitle	: 'Título',
+		langCode			: 'Direção do idioma',
+		tabIndex			: 'Índice de Tabulação',
+		advisoryTitle		: 'Título',
 		advisoryContentType	: 'Tipo de Conteúdo',
 		cssClasses		: 'Classe de CSS',
 		charset			: 'Charset do Link',
 		styles			: 'Estilos',
-		selectAnchor	: 'Selecione uma âncora',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Selecione uma âncora',
 		anchorName		: 'Nome da âncora',
-		anchorId		: 'Id da âncora',
-		emailAddress	: 'Endereço E-Mail',
-		emailSubject	: 'Assunto da Mensagem',
+		anchorId			: 'Id da âncora',
+		emailAddress		: 'Endereço E-Mail',
+		emailSubject		: 'Assunto da Mensagem',
 		emailBody		: 'Corpo da Mensagem',
 		noAnchors		: '(Não há âncoras no documento)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/pt.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/pt.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/pt.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Chave de Acesso',
 		name			: 'Nome',
-		langCode		: 'Orientação de idioma',
-		tabIndex		: 'Índice de Tubulação',
-		advisoryTitle	: 'Título',
+		langCode			: 'Orientação de idioma',
+		tabIndex			: 'Índice de Tubulação',
+		advisoryTitle		: 'Título',
 		advisoryContentType	: 'Tipo de Conteúdo',
 		cssClasses		: 'Classes de Estilo de Folhas Classes',
 		charset			: 'Fonte de caracteres vinculado',
 		styles			: 'Estilo',
-		selectAnchor	: 'Seleccionar una referência',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Seleccionar una referência',
 		anchorName		: 'Por Nome de Referência',
-		anchorId		: 'Por ID de elemento',
-		emailAddress	: 'Endereço de E-Mail',
-		emailSubject	: 'Título de Mensagem',
+		anchorId			: 'Por ID de elemento',
+		emailAddress		: 'Endereço de E-Mail',
+		emailSubject		: 'Título de Mensagem',
 		emailBody		: 'Corpo da Mensagem',
 		noAnchors		: '(Não há referências disponíveis no documento)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/ro.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/ro.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/ro.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Tasta de acces',
 		name			: 'Nume',
-		langCode		: 'Direcţia cuvintelor',
-		tabIndex		: 'Indexul tabului',
-		advisoryTitle	: 'Titlul consultativ',
+		langCode			: 'Direcţia cuvintelor',
+		tabIndex			: 'Indexul tabului',
+		advisoryTitle		: 'Titlul consultativ',
 		advisoryContentType	: 'Tipul consultativ al titlului',
 		cssClasses		: 'Clasele cu stilul paginii (CSS)',
 		charset			: 'Setul de caractere al resursei legate',
 		styles			: 'Stil',
-		selectAnchor	: 'Selectaţi o ancoră',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Selectaţi o ancoră',
 		anchorName		: 'după numele ancorei',
-		anchorId		: 'după Id-ul elementului',
-		emailAddress	: 'Adresă de e-mail',
-		emailSubject	: 'Subiectul mesajului',
+		anchorId			: 'după Id-ul elementului',
+		emailAddress		: 'Adresă de e-mail',
+		emailSubject		: 'Subiectul mesajului',
 		emailBody		: 'Conţinutul mesajului',
 		noAnchors		: '(Nicio ancoră disponibilă în document)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/ru.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/ru.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/ru.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Горячая клавиша',
 		name			: 'Имя',
-		langCode		: 'Код языка',
-		tabIndex		: 'Последовательность перехода',
-		advisoryTitle	: 'Заголовок',
+		langCode			: 'Код языка',
+		tabIndex			: 'Последовательность перехода',
+		advisoryTitle		: 'Заголовок',
 		advisoryContentType	: 'Тип содержимого',
 		cssClasses		: 'Класс CSS',
 		charset			: 'Кодировка',
 		styles			: 'Стиль CSS',
-		selectAnchor	: 'Выберите якорь',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Выберите якорь',
 		anchorName		: 'По имени якоря',
-		anchorId		: 'По идентификатору элемента',
-		emailAddress	: 'Адрес эл. почты',
-		emailSubject	: 'Заголовок сообщения',
+		anchorId			: 'По идентификатору элемента',
+		emailAddress		: 'Адрес эл. почты',
+		emailSubject		: 'Заголовок сообщения',
 		emailBody		: 'Тело сообщения',
 		noAnchors		: '(Нет якорей доступных в этом документе)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/sk.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/sk.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/sk.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Prístupový kľúč',
 		name			: 'Meno',
-		langCode		: 'Orientácia jazyka',
-		tabIndex		: 'Poradie prvku',
-		advisoryTitle	: 'Pomocný titulok',
+		langCode			: 'Orientácia jazyka',
+		tabIndex			: 'Poradie prvku',
+		advisoryTitle		: 'Pomocný titulok',
 		advisoryContentType	: 'Pomocný typ obsahu',
 		cssClasses		: 'Trieda štýlu',
 		charset			: 'Priradená znaková sada',
 		styles			: 'Štýl',
-		selectAnchor	: 'Vybrať kotvu',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Vybrať kotvu',
 		anchorName		: 'Podľa mena kotvy',
-		anchorId		: 'Podľa Id objektu',
-		emailAddress	: 'E-Mailová adresa',
-		emailSubject	: 'Predmet správy',
+		anchorId			: 'Podľa Id objektu',
+		emailAddress		: 'E-Mailová adresa',
+		emailSubject		: 'Predmet správy',
 		emailBody		: 'Telo správy',
 		noAnchors		: '(V stránke nie je definovaná žiadna kotva)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/sl.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/sl.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/sl.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Vstopno geslo',
 		name			: 'Ime',
-		langCode		: 'Smer jezika',
-		tabIndex		: 'Številka tabulatorja',
-		advisoryTitle	: 'Predlagani naslov',
+		langCode			: 'Smer jezika',
+		tabIndex			: 'Številka tabulatorja',
+		advisoryTitle		: 'Predlagani naslov',
 		advisoryContentType	: 'Predlagani tip vsebine (content-type)',
 		cssClasses		: 'Razred stilne predloge',
 		charset			: 'Kodna tabela povezanega vira',
 		styles			: 'Slog',
-		selectAnchor	: 'Izberi zaznamek',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Izberi zaznamek',
 		anchorName		: 'Po imenu zaznamka',
-		anchorId		: 'Po ID-ju elementa',
-		emailAddress	: 'Elektronski naslov',
-		emailSubject	: 'Predmet sporočila',
+		anchorId			: 'Po ID-ju elementa',
+		emailAddress		: 'Elektronski naslov',
+		emailSubject		: 'Predmet sporočila',
 		emailBody		: 'Vsebina sporočila',
 		noAnchors		: '(V tem dokumentu ni zaznamkov)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/sr-latn.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/sr-latn.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/sr-latn.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Pristupni taster',
 		name			: 'Naziv',
-		langCode		: 'Smer jezika',
-		tabIndex		: 'Tab indeks',
-		advisoryTitle	: 'Advisory naslov',
+		langCode			: 'Smer jezika',
+		tabIndex			: 'Tab indeks',
+		advisoryTitle		: 'Advisory naslov',
 		advisoryContentType	: 'Advisory vrsta sadržaja',
 		cssClasses		: 'Stylesheet klase',
 		charset			: 'Linked Resource Charset',
 		styles			: 'Stil',
-		selectAnchor	: 'Odaberi sidro',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Odaberi sidro',
 		anchorName		: 'Po nazivu sidra',
-		anchorId		: 'Po Id-ju elementa',
-		emailAddress	: 'E-Mail adresa',
-		emailSubject	: 'Naslov',
+		anchorId			: 'Po Id-ju elementa',
+		emailAddress		: 'E-Mail adresa',
+		emailSubject		: 'Naslov',
 		emailBody		: 'Sadržaj poruke',
 		noAnchors		: '(Nema dostupnih sidra)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/sr.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/sr.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/sr.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Приступни тастер',
 		name			: 'Назив',
-		langCode		: 'Смер језика',
-		tabIndex		: 'Таб индекс',
-		advisoryTitle	: 'Advisory наслов',
+		langCode			: 'Смер језика',
+		tabIndex			: 'Таб индекс',
+		advisoryTitle		: 'Advisory наслов',
 		advisoryContentType	: 'Advisory врста садржаја',
 		cssClasses		: 'Stylesheet класе',
 		charset			: 'Linked Resource Charset',
 		styles			: 'Стил',
-		selectAnchor	: 'Одабери сидро',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Одабери сидро',
 		anchorName		: 'По називу сидра',
-		anchorId		: 'Пo Ид-jу елемента',
-		emailAddress	: 'Адреса електронске поште',
-		emailSubject	: 'Наслов',
+		anchorId			: 'Пo Ид-jу елемента',
+		emailAddress		: 'Адреса електронске поште',
+		emailSubject		: 'Наслов',
 		emailBody		: 'Садржај поруке',
 		noAnchors		: '(Нема доступних сидра)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/sv.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/sv.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/sv.js	(revision 6655)
@@ -5,7 +5,6 @@
 
 /**
- * @fileOverview Defines the {@link CKEDITOR.lang} object, for the
- * Swedish language.
- */
+* @fileOverview
+*/
 
 /**#@+
@@ -32,9 +31,9 @@
 	 * of reading non-English words. So be careful while translating it.
 	 */
-	editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING
+	editorTitle : 'Rich text editor, %1, tryck ALT 0 för hjälp.',
 
 	// ARIA descriptions.
-	toolbar	: 'Toolbar', // MISSING
-	editor	: 'Rich Text Editor', // MISSING
+	toolbar	: 'Verktygsfält',
+	editor	: 'Rich Text Editor',
 
 	// Toolbar buttons without dialogs.
@@ -57,5 +56,5 @@
 	horizontalrule	: 'Infoga horisontal linje',
 	pagebreak		: 'Infoga sidbrytning',
-	pagebreakAlt		: 'Page Break', // MISSING
+	pagebreakAlt		: 'Sidbrytning',
 	unlink			: 'Radera länk',
 	undo			: 'Ångra',
@@ -89,26 +88,26 @@
 		langCode		: 'Språkkod',
 		longDescr		: 'URL-beskrivning',
-		cssClass		: 'Stylesheet class',
+		cssClass		: 'Stilmall',
 		advisoryTitle	: 'Titel',
-		cssStyle		: 'Style',
+		cssStyle		: 'Stilmall',
 		ok				: 'OK',
 		cancel			: 'Avbryt',
-		close			: 'Close', // MISSING
-		preview			: 'Preview', // MISSING
-		generalTab		: 'General', // MISSING
+		close			: 'Stäng',
+		preview			: 'Förhandsgranska',
+		generalTab		: 'Allmänt',
 		advancedTab		: 'Avancerad',
-		validateNumberFailed : 'This value is not a number.', // MISSING
-		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING
-		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING
-		options			: 'Options', // MISSING
-		target			: 'Target', // MISSING
-		targetNew		: 'New Window (_blank)', // MISSING
-		targetTop		: 'Topmost Window (_top)', // MISSING
-		targetSelf		: 'Same Window (_self)', // MISSING
-		targetParent	: 'Parent Window (_parent)', // MISSING
-		langDirLTR		: 'Left to Right (LTR)', // MISSING
-		langDirRTL		: 'Right to Left (RTL)', // MISSING
-		styles			: 'Style', // MISSING
-		cssClasses		: 'Stylesheet Classes', // MISSING
+		validateNumberFailed : 'Värdet är inte ett nummer.',
+		confirmNewPage	: 'Alla ändringar i innehållet kommer att förloras. Är du säker på att du vill ladda en ny sida?',
+		confirmCancel	: 'Några av de alternativ har ändrats. Är du säker på att stänga dialogrutan?',
+		options			: 'Alternativ',
+		target			: 'Mål',
+		targetNew		: 'Nytt fönster (_blank)',
+		targetTop		: 'Översta fönstret (_top)',
+		targetSelf		: 'Samma fönster (_self)',
+		targetParent	: 'Föregående fönster (_parent)',
+		langDirLTR		: 'Vänster till höger (LTR)',
+		langDirRTL		: 'Höger till vänster (RTL)',
+		styles			: 'Stil',
+		cssClasses		: 'Stilmallar',
 		width			: 'Bredd',
 		height			: 'Höjd',
@@ -120,14 +119,14 @@
 		alignMiddle		: 'Mitten',
 		alignBottom		: 'Nederkant',
-		invalidHeight	: 'Height must be a number.', // MISSING
-		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidHeight	: 'Höjd måste vara ett nummer.',
+		invalidWidth	: 'Bredd måste vara ett nummer.',
 
 		// Put the voice-only part of the label in the span.
-		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+		unavailable		: '%1<span class="cke_accessibility">, Ej tillgänglig</span>'
 	},
 
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Context Menu Options'
 	},
 
@@ -137,5 +136,5 @@
 		toolbar		: 'Klistra in utökat tecken',
 		title		: 'Välj utökat tecken',
-		options : 'Special Character Options' // MISSING
+		options : 'Special Character Options'
 	},
 
@@ -152,5 +151,5 @@
 		advanced	: 'Avancerad',
 		type		: 'Länktyp',
-		toUrl		: 'URL', // MISSING
+		toUrl		: 'URL',
 		toAnchor	: 'Ankare i sidan',
 		toEmail		: 'E-post',
@@ -160,5 +159,5 @@
 		targetPopupName	: 'Popup-fönstrets namn',
 		popupFeatures	: 'Popup-fönstrets egenskaper',
-		popupResizable	: 'Resizable', // MISSING
+		popupResizable	: 'Resizable',
 		popupStatusBar	: 'Statusfält',
 		popupLocationBar: 'Adressfält',
@@ -167,25 +166,26 @@
 		popupFullScreen	: 'Helskärm (endast IE)',
 		popupScrollBars	: 'Scrolllista',
-		popupDependent	: 'Beroende (endest Netscape)',
+		popupDependent	: 'Beroende (endast Netscape)',
 		popupLeft		: 'Position från vänster',
 		popupTop		: 'Position från sidans topp',
-		id				: 'Id', // MISSING
+		id				: 'Id',
 		langDir			: 'Språkriktning',
-		langDirLTR		: 'Vänster till Höger (VTH)',
-		langDirRTL		: 'Höger till Vänster (HTV)',
+		langDirLTR		: 'Vänster till höger (VTH)',
+		langDirRTL		: 'Höger till vänster (HTV)',
 		acccessKey		: 'Behörighetsnyckel',
 		name			: 'Namn',
-		langCode		: 'Språkriktning',
-		tabIndex		: 'Tabindex',
-		advisoryTitle	: 'Titel',
+		langCode			: 'Språkriktning',
+		tabIndex			: 'Tabindex',
+		advisoryTitle		: 'Titel',
 		advisoryContentType	: 'Innehållstyp',
 		cssClasses		: 'Stylesheet class',
 		charset			: 'Teckenuppställning',
-		styles			: 'Style',
-		selectAnchor	: 'Välj ett ankare',
+		styles			: 'Stilmall',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Välj ett ankare',
 		anchorName		: 'efter ankarnamn',
-		anchorId		: 'efter objektid',
-		emailAddress	: 'E-postadress',
-		emailSubject	: 'Ämne',
+		anchorId			: 'efter objektid',
+		emailAddress		: 'E-postadress',
+		emailSubject		: 'Ämne',
 		emailBody		: 'Innehåll',
 		noAnchors		: '(Inga ankare kunde hittas)',
@@ -207,23 +207,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // MISSING
-		validateStartNumber				:'List start number must be a whole number.', // MISSING
-		circle				: 'Circle', // MISSING
-		disc				: 'Disc', // MISSING
-		square				: 'Square', // MISSING
-		none				: 'None', // MISSING
-		notset				: '<not set>', // MISSING
-		armenian			: 'Armenian numbering', // MISSING
-		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
-		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
-		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
-		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
-		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
-		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
-		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
-		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+		numberedTitle		: 'Egenskaper för punktlista',
+		bulletedTitle		: 'Egenskaper för punktlista',
+		type				: 'Typ',
+		start				: 'Start',
+		validateStartNumber				:'List start number must be a whole number.',
+		circle				: 'Cirkel',
+		disc				: 'Disk',
+		square				: 'Fyrkant',
+		none				: 'Ingen',
+		notset				: '<ej angiven>',
+		armenian			: 'Armenisk numrering',
+		georgian			: 'Georgisk numrering (an, ban, gan, etc.)',
+		lowerRoman			: 'Romerska gemener (i, ii, iii, iv, v, etc.)',
+		upperRoman			: 'Romerska versaler (I, II, III, IV, V, etc.)',
+		lowerAlpha			: 'Alpha gemener (a, b, c, d, e, etc.)',
+		upperAlpha			: 'Alpha versaler (A, B, C, D, E, etc.)',
+		lowerGreek			: 'Grekiska gemener (alpha, beta, gamma, etc.)',
+		decimal				: 'Decimal (1, 2, 3, etc.)',
+		decimalLeadingZero	: 'Decimal nolla (01, 02, 03, etc.)'
 	},
 
@@ -239,7 +239,7 @@
 		matchCase			: 'Skiftläge',
 		matchWord			: 'Inkludera hela ord',
-		matchCyclic			: 'Match cyclic', // MISSING
+		matchCyclic			: 'Matcha cykliska',
 		replaceAll			: 'Ersätt alla',
-		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+		replaceSuccessMsg	: '%1 förekomst(er) ersatta.'
 	},
 
@@ -256,52 +256,52 @@
 		widthPx		: 'pixlar',
 		widthPc		: 'procent',
-		widthUnit	: 'width unit', // MISSING
+		widthUnit	: 'enhet bredd',
 		cellSpace	: 'Cellavstånd',
 		cellPad		: 'Cellutfyllnad',
 		caption		: 'Rubrik',
 		summary		: 'Sammanfattning',
-		headers		: 'Headers', // MISSING
-		headersNone		: 'None', // MISSING
-		headersColumn	: 'First column', // MISSING
-		headersRow		: 'First Row', // MISSING
-		headersBoth		: 'Both', // MISSING
-		invalidRows		: 'Number of rows must be a number greater than 0.', // MISSING
-		invalidCols		: 'Number of columns must be a number greater than 0.', // MISSING
-		invalidBorder	: 'Border size must be a number.', // MISSING
-		invalidWidth	: 'Table width must be a number.', // MISSING
-		invalidHeight	: 'Table height must be a number.', // MISSING
-		invalidCellSpacing	: 'Cell spacing must be a number.', // MISSING
-		invalidCellPadding	: 'Cell padding must be a number.', // MISSING
+		headers		: 'Ruberiker',
+		headersNone		: 'Ingen',
+		headersColumn	: 'Första kolumnen',
+		headersRow		: 'Första raden',
+		headersBoth		: 'Båda',
+		invalidRows		: 'Antal rader måste vara större än 0.',
+		invalidCols		: 'Antal kolumner måste vara ett nummer större än 0.',
+		invalidBorder	: 'Ram måste vara ett nummer.',
+		invalidWidth	: 'Tabell måste vara ett nummer.',
+		invalidHeight	: 'Tabellens höjd måste vara ett nummer.',
+		invalidCellSpacing	: 'Luft i cell måste vara ett nummer.',
+		invalidCellPadding	: 'Luft i cell måste vara ett nummer.',
 
 		cell :
 		{
 			menu			: 'Cell',
-			insertBefore	: 'Lägg till Cell Före',
-			insertAfter		: 'Lägg till Cell Efter',
+			insertBefore	: 'Lägg till cell före',
+			insertAfter		: 'Lägg till cell efter',
 			deleteCell		: 'Radera celler',
 			merge			: 'Sammanfoga celler',
-			mergeRight		: 'Sammanfoga Höger',
-			mergeDown		: 'Sammanfoga Ner',
-			splitHorizontal	: 'Dela Cell Horisontellt',
-			splitVertical	: 'Dela Cell Vertikalt',
-			title			: 'Cell Properties', // MISSING
-			cellType		: 'Cell Type', // MISSING
-			rowSpan			: 'Rows Span', // MISSING
-			colSpan			: 'Columns Span', // MISSING
-			wordWrap		: 'Word Wrap', // MISSING
-			hAlign			: 'Horizontal Alignment', // MISSING
-			vAlign			: 'Vertical Alignment', // MISSING
-			alignBaseline	: 'Baseline', // MISSING
-			bgColor			: 'Background Color', // MISSING
-			borderColor		: 'Border Color', // MISSING
-			data			: 'Data', // MISSING
-			header			: 'Header', // MISSING
-			yes				: 'Yes', // MISSING
-			no				: 'No', // MISSING
-			invalidWidth	: 'Cell width must be a number.', // MISSING
-			invalidHeight	: 'Cell height must be a number.', // MISSING
-			invalidRowSpan	: 'Rows span must be a whole number.', // MISSING
-			invalidColSpan	: 'Columns span must be a whole number.', // MISSING
-			chooseColor		: 'Choose' // MISSING
+			mergeRight		: 'Sammanfoga höger',
+			mergeDown		: 'Sammanfoga ner',
+			splitHorizontal	: 'Dela cell horisontellt',
+			splitVertical	: 'Dela cell vertikalt',
+			title			: 'Egenskaper för cell',
+			cellType		: 'Celltyp',
+			rowSpan			: 'Rad spann',
+			colSpan			: 'Kolumnen spann',
+			wordWrap		: 'Radbrytning',
+			hAlign			: 'Horisontell justering',
+			vAlign			: 'Vertikal justering',
+			alignBaseline	: 'Baslinje',
+			bgColor			: 'Bakgrundsfärg',
+			borderColor		: 'Ramfärg',
+			data			: 'Data',
+			header			: 'Rubrik',
+			yes				: 'Ja',
+			no				: 'Nej',
+			invalidWidth	: 'Cellens bredd måste vara ett nummer.',
+			invalidHeight	: 'Cellens höjd måste vara ett nummer.',
+			invalidRowSpan	: 'Radutvidgning måste vara ett heltal.',
+			invalidColSpan	: 'Kolumn måste vara ett heltal.',
+			chooseColor		: 'Välj'
 		},
 
@@ -310,5 +310,5 @@
 			menu			: 'Rad',
 			insertBefore	: 'Lägg till Rad Före',
-			insertAfter		: 'Lägg till Rad Efter',
+			insertAfter		: 'Lägg till rad efter',
 			deleteRow		: 'Radera rad'
 		},
@@ -317,6 +317,6 @@
 		{
 			menu			: 'Kolumn',
-			insertBefore	: 'Lägg till Kolumn Före',
-			insertAfter		: 'Lägg till Kolumn Efter',
+			insertBefore	: 'Lägg till kolumn före',
+			insertAfter		: 'Lägg till kolumn efter',
 			deleteColumn	: 'Radera kolumn'
 		}
@@ -327,5 +327,5 @@
 	{
 		title		: 'Egenskaper för knapp',
-		text		: 'Text (Värde)',
+		text		: 'Text (värde)',
 		type		: 'Typ',
 		typeBtn		: 'Knapp',
@@ -350,5 +350,5 @@
 		action		: 'Funktion',
 		method		: 'Metod',
-		encoding	: 'Encoding' // MISSING
+		encoding	: 'Kodning'
 	},
 
@@ -413,5 +413,5 @@
 		alt			: 'Alternativ text',
 		lockRatio	: 'Lås höjd/bredd förhållanden',
-		unlockRatio	: 'Unlock Ratio', // MISSING
+		unlockRatio	: 'Lås upp förhållanden',
 		resetSize	: 'Återställ storlek',
 		border		: 'Kant',
@@ -420,10 +420,10 @@
 		alertUrl	: 'Var god och ange bildens URL',
 		linkTab		: 'Länk',
-		button2Img	: 'Do you want to transform the selected image button on a simple image?', // MISSING
-		img2Button	: 'Do you want to transform the selected image on a image button?', // MISSING
-		urlMissing	: 'Image source URL is missing.', // MISSING
-		validateBorder	: 'Border must be a whole number.', // MISSING
-		validateHSpace	: 'HSpace must be a whole number.', // MISSING
-		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+		button2Img	: 'Vill du omvandla den valda bildknappen på en enkel bild?',
+		img2Button	: 'Vill du omvandla den valda bildknappen på en enkel bild?',
+		urlMissing	: 'Bildkällans URL saknas.',
+		validateBorder	: 'Kantlinje måste vara ett heltal.',
+		validateHSpace	: 'HSpace måste vara ett heltal.',
+		validateVSpace	: 'VSpace måste vara ett heltal.'
 	},
 
@@ -432,40 +432,40 @@
 	{
 		properties		: 'Flashegenskaper',
-		propertiesTab	: 'Properties', // MISSING
+		propertiesTab	: 'Egenskaper',
 		title			: 'Flashegenskaper',
 		chkPlay			: 'Automatisk uppspelning',
 		chkLoop			: 'Upprepa/Loopa',
 		chkMenu			: 'Aktivera Flashmeny',
-		chkFull			: 'Allow Fullscreen', // MISSING
+		chkFull			: 'Tillåt helskärm',
  		scale			: 'Skala',
 		scaleAll		: 'Visa allt',
 		scaleNoBorder	: 'Ingen ram',
 		scaleFit		: 'Exakt passning',
-		access			: 'Script Access', // MISSING
-		accessAlways	: 'Always', // MISSING
-		accessSameDomain: 'Same domain', // MISSING
-		accessNever		: 'Never', // MISSING
+		access			: 'Script-tillgång',
+		accessAlways	: 'Alltid',
+		accessSameDomain: 'Samma domän',
+		accessNever		: 'Aldrig',
 		alignAbsBottom	: 'Absolut nederkant',
 		alignAbsMiddle	: 'Absolut centrering',
 		alignBaseline	: 'Baslinje',
 		alignTextTop	: 'Text överkant',
-		quality			: 'Quality', // MISSING
-		qualityBest		: 'Best', // MISSING
-		qualityHigh		: 'High', // MISSING
-		qualityAutoHigh	: 'Auto High', // MISSING
-		qualityMedium	: 'Medium', // MISSING
-		qualityAutoLow	: 'Auto Low', // MISSING
-		qualityLow		: 'Low', // MISSING
-		windowModeWindow: 'Window', // MISSING
-		windowModeOpaque: 'Opaque', // MISSING
-		windowModeTransparent : 'Transparent', // MISSING
-		windowMode		: 'Window mode', // MISSING
-		flashvars		: 'Variables for Flash', // MISSING
+		quality			: 'Kvalitet',
+		qualityBest		: 'Bäst',
+		qualityHigh		: 'Hög',
+		qualityAutoHigh	: 'Auto Hög',
+		qualityMedium	: 'Medium',
+		qualityAutoLow	: 'Auto Låg',
+		qualityLow		: 'Låg',
+		windowModeWindow: 'Fönster',
+		windowModeOpaque: 'Opaque',
+		windowModeTransparent : 'Transparent',
+		windowMode		: 'Fönsterläge',
+		flashvars		: 'Variabler för Flash',
 		bgcolor			: 'Bakgrundsfärg',
 		hSpace			: 'Horis. marginal',
 		vSpace			: 'Vert. marginal',
 		validateSrc		: 'Var god ange länkens URL',
-		validateHSpace	: 'HSpace must be a number.', // MISSING
-		validateVSpace	: 'VSpace must be a number.' // MISSING
+		validateHSpace	: 'HSpace måste vara ett nummer.',
+		validateVSpace	: 'VSpace måste vara ett nummer.'
 	},
 
@@ -474,7 +474,7 @@
 	{
 		toolbar			: 'Stavningskontroll',
-		title			: 'Spell Check', // MISSING
-		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
-		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		title			: 'Kontrollera stavning',
+		notAvailable	: 'Tyvärr är tjänsten ej tillgänglig nu',
+		errorLoading	: 'Tjänsten är ej tillgänglig: %s.',
 		notInDic		: 'Saknas i ordlistan',
 		changeTo		: 'Ändra till',
@@ -497,11 +497,11 @@
 		toolbar	: 'Smiley',
 		title	: 'Infoga smiley',
-		options : 'Smiley Options' // MISSING
+		options : 'Smileyinställningar'
 	},
 
 	elementsPath :
 	{
-		eleLabel : 'Elements path', // MISSING
-		eleTitle : '%1 element' // MISSING
+		eleLabel : 'Elementets sökväg',
+		eleTitle : '%1 element'
 	},
 
@@ -519,5 +519,5 @@
 	},
 
-	blockquote : 'Block Quote', // MISSING
+	blockquote : 'Blockcitat',
 
 	clipboard :
@@ -527,14 +527,14 @@
 		copyError	: 'Säkerhetsinställningar i Er webläsare tillåter inte åtgården Kopiera. Använd (Ctrl/Cmd+C) istället',
 		pasteMsg	: 'Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl/Cmd+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.',
-		securityMsg	: 'På grund av din webläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.',
-		pasteArea	: 'Paste Area' // MISSING
+		securityMsg	: 'På grund av din webbläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.',
+		pasteArea	: 'Paste Area'
 	},
 
 	pastefromword :
 	{
-		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		confirmCleanup	: 'Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa innan du klistrar?',
 		toolbar			: 'Klistra in från Word',
 		title			: 'Klistra in från Word',
-		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		error			: 'Det var inte möjligt att städa upp den inklistrade data på grund av ett internt fel'
 	},
 
@@ -549,5 +549,5 @@
 		button			: 'Sidmallar',
 		title			: 'Sidmallar',
-		options : 'Template Options', // MISSING
+		options : 'Inställningar för mall',
 		insertOption	: 'Ersätt aktuellt innehåll',
 		selectPromptMsg	: 'Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):',
@@ -555,13 +555,13 @@
 	},
 
-	showBlocks : 'Show Blocks', // MISSING
+	showBlocks : 'Visa block',
 
 	stylesCombo :
 	{
 		label		: 'Anpassad stil',
-		panelTitle	: 'Formatting Styles', // MISSING
-		panelTitle1	: 'Block Styles', // MISSING
-		panelTitle2	: 'Inline Styles', // MISSING
-		panelTitle3	: 'Object Styles' // MISSING
+		panelTitle	: 'Formatmallar',
+		panelTitle1	: 'Blockstil',
+		panelTitle2	: 'Inbäddad stil',
+		panelTitle3	: 'Objektets stil'
 	},
 
@@ -585,26 +585,26 @@
 	div :
 	{
-		title				: 'Create Div Container', // MISSING
-		toolbar				: 'Create Div Container', // MISSING
-		cssClassInputLabel	: 'Stylesheet Classes', // MISSING
-		styleSelectLabel	: 'Style', // MISSING
-		IdInputLabel		: 'Id', // MISSING
-		languageCodeInputLabel	: ' Language Code', // MISSING
-		inlineStyleInputLabel	: 'Inline Style', // MISSING
-		advisoryTitleInputLabel	: 'Advisory Title', // MISSING
-		langDirLabel		: 'Language Direction', // MISSING
-		langDirLTRLabel		: 'Left to Right (LTR)', // MISSING
-		langDirRTLLabel		: 'Right to Left (RTL)', // MISSING
-		edit				: 'Edit Div', // MISSING
-		remove				: 'Remove Div' // MISSING
+		title				: 'Skapa Div container',
+		toolbar				: 'Skapa Div container',
+		cssClassInputLabel	: 'Stilmallar',
+		styleSelectLabel	: 'Stil',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Språkkod',
+		inlineStyleInputLabel	: 'Inline Style',
+		advisoryTitleInputLabel	: 'Rådgivande titel',
+		langDirLabel		: 'Språkriktning',
+		langDirLTRLabel		: 'Vänster till Höger (LTR)',
+		langDirRTLLabel		: 'Höger till vänster (RTL)',
+		edit				: 'Redigera Div',
+		remove				: 'Ta bort Div'
   	},
 
 	iframe :
 	{
-		title		: 'IFrame Properties', // MISSING
-		toolbar		: 'IFrame', // MISSING
-		noUrl		: 'Please type the iframe URL', // MISSING
-		scrolling	: 'Enable scrollbars', // MISSING
-		border		: 'Show frame border' // MISSING
+		title		: 'iFrame Egenskaper',
+		toolbar		: 'iFrame',
+		noUrl		: 'Skriv in URL för iFrame',
+		scrolling	: 'Aktivera rullningslister',
+		border		: 'Visa ramkant'
 	},
 
@@ -612,5 +612,5 @@
 	{
 		label		: 'Typsnitt',
-		voiceLabel	: 'Font', // MISSING
+		voiceLabel	: 'Typsnitt',
 		panelTitle	: 'Typsnitt'
 	},
@@ -619,5 +619,5 @@
 	{
 		label		: 'Storlek',
-		voiceLabel	: 'Font Size', // MISSING
+		voiceLabel	: 'Teckenstorlek',
 		panelTitle	: 'Storlek'
 	},
@@ -627,5 +627,5 @@
 		textColorTitle	: 'Textfärg',
 		bgColorTitle	: 'Bakgrundsfärg',
-		panelTitle		: 'Colors', // MISSING
+		panelTitle		: 'Färger',
 		auto			: 'Automatisk',
 		more			: 'Fler färger...'
@@ -634,119 +634,119 @@
 	colors :
 	{
-		'000' : 'Black', // MISSING
-		'800000' : 'Maroon', // MISSING
-		'8B4513' : 'Saddle Brown', // MISSING
-		'2F4F4F' : 'Dark Slate Gray', // MISSING
-		'008080' : 'Teal', // MISSING
-		'000080' : 'Navy', // MISSING
-		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dark Gray', // MISSING
-		'B22222' : 'Fire Brick', // MISSING
-		'A52A2A' : 'Brown', // MISSING
-		'DAA520' : 'Golden Rod', // MISSING
-		'006400' : 'Dark Green', // MISSING
-		'40E0D0' : 'Turquoise', // MISSING
-		'0000CD' : 'Medium Blue', // MISSING
-		'800080' : 'Purple', // MISSING
-		'808080' : 'Gray', // MISSING
-		'F00' : 'Red', // MISSING
-		'FF8C00' : 'Dark Orange', // MISSING
-		'FFD700' : 'Gold', // MISSING
-		'008000' : 'Green', // MISSING
-		'0FF' : 'Cyan', // MISSING
-		'00F' : 'Blue', // MISSING
-		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dim Gray', // MISSING
-		'FFA07A' : 'Light Salmon', // MISSING
-		'FFA500' : 'Orange', // MISSING
-		'FFFF00' : 'Yellow', // MISSING
-		'00FF00' : 'Lime', // MISSING
-		'AFEEEE' : 'Pale Turquoise', // MISSING
-		'ADD8E6' : 'Light Blue', // MISSING
-		'DDA0DD' : 'Plum', // MISSING
-		'D3D3D3' : 'Light Grey', // MISSING
-		'FFF0F5' : 'Lavender Blush', // MISSING
-		'FAEBD7' : 'Antique White', // MISSING
-		'FFFFE0' : 'Light Yellow', // MISSING
-		'F0FFF0' : 'Honeydew', // MISSING
-		'F0FFFF' : 'Azure', // MISSING
-		'F0F8FF' : 'Alice Blue', // MISSING
-		'E6E6FA' : 'Lavender', // MISSING
-		'FFF' : 'White' // MISSING
+		'000' : 'Svart',
+		'800000' : 'Rödbrun',
+		'8B4513' : 'Mörkbrun',
+		'2F4F4F' : 'Skiffergrå',
+		'008080' : 'Kricka',
+		'000080' : 'Marinblå',
+		'4B0082' : 'Indigo',
+		'696969' : 'Mörkgrå',
+		'B22222' : 'Tegelsten',
+		'A52A2A' : 'Brun',
+		'DAA520' : 'Mörk guld',
+		'006400' : 'Mörkgrön',
+		'40E0D0' : 'Turkos',
+		'0000CD' : 'Medium blå',
+		'800080' : 'Lila',
+		'808080' : 'Grå',
+		'F00' : 'Röd',
+		'FF8C00' : 'Mörkorange',
+		'FFD700' : 'Guld',
+		'008000' : 'Grön',
+		'0FF' : 'Turkos',
+		'00F' : 'Blå',
+		'EE82EE' : 'Violett',
+		'A9A9A9' : 'Matt grå',
+		'FFA07A' : 'Laxrosa',
+		'FFA500' : 'Orange',
+		'FFFF00' : 'Gul',
+		'00FF00' : 'Lime',
+		'AFEEEE' : 'Ljusturkos',
+		'ADD8E6' : 'Ljusblå',
+		'DDA0DD' : 'Plommon',
+		'D3D3D3' : 'Ljusgrå',
+		'FFF0F5' : 'Ljus lavender',
+		'FAEBD7' : 'Antikvit',
+		'FFFFE0' : 'Ljusgul',
+		'F0FFF0' : 'Honung',
+		'F0FFFF' : 'Azurblå',
+		'F0F8FF' : 'Aliceblå',
+		'E6E6FA' : 'Lavender',
+		'FFF' : 'Vit'
 	},
 
 	scayt :
 	{
-		title			: 'Spell Check As You Type', // MISSING
-		opera_title		: 'Not supported by Opera', // MISSING
-		enable			: 'Enable SCAYT', // MISSING
-		disable			: 'Disable SCAYT', // MISSING
-		about			: 'About SCAYT', // MISSING
-		toggle			: 'Toggle SCAYT', // MISSING
-		options			: 'Options', // MISSING
-		langs			: 'Languages', // MISSING
-		moreSuggestions	: 'More suggestions', // MISSING
-		ignore			: 'Ignore', // MISSING
-		ignoreAll		: 'Ignore All', // MISSING
-		addWord			: 'Add Word', // MISSING
-		emptyDic		: 'Dictionary name should not be empty.', // MISSING
-
-		optionsTab		: 'Options', // MISSING
-		allCaps			: 'Ignore All-Caps Words', // MISSING
-		ignoreDomainNames : 'Ignore Domain Names', // MISSING
-		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
-		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
-
-		languagesTab	: 'Languages', // MISSING
-
-		dictionariesTab	: 'Dictionaries', // MISSING
-		dic_field_name	: 'Dictionary name', // MISSING
-		dic_create		: 'Create', // MISSING
-		dic_restore		: 'Restore', // MISSING
-		dic_delete		: 'Delete', // MISSING
-		dic_rename		: 'Rename', // MISSING
-		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
-
-		aboutTab		: 'About' // MISSING
+		title			: 'Stavningskontroll medan du skriver',
+		opera_title		: 'Stöds ej av Opera',
+		enable			: 'Aktivera SCAYT',
+		disable			: 'Inaktivera SCAYT',
+		about			: 'Om SCAYT',
+		toggle			: 'Växla SCAYT',
+		options			: 'Inställningar',
+		langs			: 'Språk',
+		moreSuggestions	: 'Fler förslag',
+		ignore			: 'Ignorera',
+		ignoreAll		: 'Ignorera alla',
+		addWord			: 'Lägg till ord',
+		emptyDic		: 'Ordlistans namn får ej vara tomt.',
+
+		optionsTab		: 'Inställningar',
+		allCaps			: 'Ignorera alla ord med enbart versaler',
+		ignoreDomainNames : 'Ignorera domännamn',
+		mixedCase		: 'Ignorera ord med blandat shiftläge',
+		mixedWithDigits	: 'Ignorera ord med nummer',
+
+		languagesTab	: 'Språk',
+
+		dictionariesTab	: 'Ordlistor',
+		dic_field_name	: 'Ordlistans namn',
+		dic_create		: 'Skapa',
+		dic_restore		: 'Återställ',
+		dic_delete		: 'Ta bort',
+		dic_rename		: 'Byt namn',
+		dic_info		: 'Inledningsvis lagras ordlistan i en cookie. När ordlista växer till en punkt där det inte kan lagras i en cookie, lagras den på vår server. För att lagra din personliga ordlista på vår server du ska ange ett namn för din ordbok. Om du redan har en lagrad ordbok, skriv namnet och klicka på knappen Återställ.',
+
+		aboutTab		: 'Om'
 	},
 
 	about :
 	{
-		title		: 'About CKEditor', // MISSING
-		dlgTitle	: 'About CKEditor', // MISSING
-		moreInfo	: 'For licensing information please visit our web site:', // MISSING
-		copy		: 'Copyright &copy; $1. All rights reserved.' // MISSING
-	},
-
-	maximize : 'Maximize', // MISSING
-	minimize : 'Minimize', // MISSING
+		title		: 'Om CKEditor',
+		dlgTitle	: 'Om CKEditor',
+		moreInfo	: 'För information av licenciering besök vår hemsida:',
+		copy		: 'Copyright &copy; $1. Alla rättigheter reserverade.'
+	},
+
+	maximize : 'Maximera',
+	minimize : 'Minimera',
 
 	fakeobjects :
 	{
-		anchor		: 'Anchor', // MISSING
-		flash		: 'Flash Animation', // MISSING
-		iframe		: 'IFrame', // MISSING
-		hiddenfield	: 'Hidden Field', // MISSING
-		unknown		: 'Unknown Object' // MISSING
-	},
-
-	resize : 'Drag to resize', // MISSING
+		anchor		: 'Ankare',
+		flash		: 'Flashanimation',
+		iframe		: 'iFrame',
+		hiddenfield	: 'Gömt fält',
+		unknown		: 'Okänt objekt'
+	},
+
+	resize : 'Dra för att ändra storlek',
 
 	colordialog :
 	{
-		title		: 'Select color', // MISSING
-		options	:	'Color Options', // MISSING
-		highlight	: 'Highlight', // MISSING
-		selected	: 'Selected Color', // MISSING
-		clear		: 'Clear' // MISSING
-	},
-
-	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar', // MISSING
+		title		: 'Välj färg',
+		options	:	'Färgalternativ',
+		highlight	: 'Markera',
+		selected	: 'Vald färg',
+		clear		: 'Rensa'
+	},
+
+	toolbarCollapse	: 'Dölj verktygsfält',
+	toolbarExpand	: 'Visa verktygsfält',
 
 	bidi :
 	{
-		ltr : 'Text direction from left to right', // MISSING
-		rtl : 'Text direction from right to left' // MISSING
+		ltr : 'Text riktning från vänster till höger',
+		rtl : 'Text riktning från höger till vänster'
 	}
 };
Index: /CKEditor/branches/versions/3.5.x/_source/lang/th.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/th.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/th.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'แอคเซส คีย์',
 		name			: 'ชื่อ',
-		langCode		: 'การเขียน-อ่านภาษา',
-		tabIndex		: 'ลำดับของ แท็บ',
-		advisoryTitle	: 'คำเกริ่นนำ',
+		langCode			: 'การเขียน-อ่านภาษา',
+		tabIndex			: 'ลำดับของ แท็บ',
+		advisoryTitle		: 'คำเกริ่นนำ',
 		advisoryContentType	: 'ชนิดของคำเกริ่นนำ',
 		cssClasses		: 'คลาสของไฟล์กำหนดลักษณะการแสดงผล',
 		charset			: 'ลิงค์เชื่อมโยงไปยังชุดตัวอักษร',
 		styles			: 'ลักษณะการแสดงผล',
-		selectAnchor	: 'ระบุข้อมูลของจุดเชื่อมโยง (Anchor)',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'ระบุข้อมูลของจุดเชื่อมโยง (Anchor)',
 		anchorName		: 'ชื่อ',
-		anchorId		: 'ไอดี',
-		emailAddress	: 'อีเมล์ (E-Mail)',
-		emailSubject	: 'หัวเรื่อง',
+		anchorId			: 'ไอดี',
+		emailAddress		: 'อีเมล์ (E-Mail)',
+		emailSubject		: 'หัวเรื่อง',
 		emailBody		: 'ข้อความ',
 		noAnchors		: '(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/tr.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/tr.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/tr.js	(revision 6655)
@@ -175,16 +175,17 @@
 		acccessKey		: 'Erişim Tuşu',
 		name			: 'Ad',
-		langCode		: 'Dil Yönü',
-		tabIndex		: 'Sekme İndeksi',
-		advisoryTitle	: 'Danışma Başlığı',
+		langCode			: 'Dil Yönü',
+		tabIndex			: 'Sekme İndeksi',
+		advisoryTitle		: 'Danışma Başlığı',
 		advisoryContentType	: 'Danışma İçerik Türü',
 		cssClasses		: 'Biçem Sayfası Sınıfları',
 		charset			: 'Bağlı Kaynak Karakter Gurubu',
 		styles			: 'Biçem',
-		selectAnchor	: 'Bağlantı Seç',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Bağlantı Seç',
 		anchorName		: 'Bağlantı Adı ile',
-		anchorId		: 'Eleman Kimlik Numarası ile',
-		emailAddress	: 'E-Posta Adresi',
-		emailSubject	: 'İleti Konusu',
+		anchorId			: 'Eleman Kimlik Numarası ile',
+		emailAddress		: 'E-Posta Adresi',
+		emailSubject		: 'İleti Konusu',
 		emailBody		: 'İleti Gövdesi',
 		noAnchors		: '(Bu belgede hiç çapa yok)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/uk.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/uk.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/uk.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Гаряча клавіша',
 		name			: 'Ім\'я',
-		langCode		: 'Код мови',
-		tabIndex		: 'Послідовність переходу',
-		advisoryTitle	: 'Заголовок',
+		langCode			: 'Код мови',
+		tabIndex			: 'Послідовність переходу',
+		advisoryTitle		: 'Заголовок',
 		advisoryContentType	: 'Тип вмісту',
 		cssClasses		: 'Клас CSS',
 		charset			: 'Кодування',
 		styles			: 'Стиль CSS',
-		selectAnchor	: 'Оберіть якір',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Оберіть якір',
 		anchorName		: 'За ім\'ям елементу',
-		anchorId		: 'За ідентифікатором елементу',
-		emailAddress	: 'Адреса ел. пошти',
-		emailSubject	: 'Тема листа',
+		anchorId			: 'За ідентифікатором елементу',
+		emailAddress		: 'Адреса ел. пошти',
+		emailSubject		: 'Тема листа',
 		emailBody		: 'Тіло повідомлення',
 		noAnchors		: '(В цьому документі немає якорів)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/vi.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/vi.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/vi.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: 'Phím hỗ trợ truy cập',
 		name			: 'Tên',
-		langCode		: 'Mã ngôn ngữ',
-		tabIndex		: 'Chỉ số của Tab',
-		advisoryTitle	: 'Nhan đề hướng dẫn',
+		langCode			: 'Mã ngôn ngữ',
+		tabIndex			: 'Chỉ số của Tab',
+		advisoryTitle		: 'Nhan đề hướng dẫn',
 		advisoryContentType	: 'Nội dung hướng dẫn',
 		cssClasses		: 'Lớp Stylesheet',
 		charset			: 'Bảng mã của tài nguyên được liên kết đến',
 		styles			: 'Kiểu (style)',
-		selectAnchor	: 'Chọn một điểm neo',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Chọn một điểm neo',
 		anchorName		: 'Theo tên điểm neo',
-		anchorId		: 'Theo định danh thành phần',
-		emailAddress	: 'Thư điện tử',
-		emailSubject	: 'Tiêu đề thông điệp',
+		anchorId			: 'Theo định danh thành phần',
+		emailAddress		: 'Thư điện tử',
+		emailSubject		: 'Tiêu đề thông điệp',
 		emailBody		: 'Nội dung thông điệp',
 		noAnchors		: '(Không có điểm neo nào trong tài liệu)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/zh-cn.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/zh-cn.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/zh-cn.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: '访问键',
 		name			: '名称',
-		langCode		: '语言代码',
-		tabIndex		: 'Tab 键次序',
-		advisoryTitle	: '标题',
+		langCode			: '语言代码',
+		tabIndex			: 'Tab 键次序',
+		advisoryTitle		: '标题',
 		advisoryContentType	: '内容类型',
 		cssClasses		: '样式类名称',
 		charset			: '字符编码',
 		styles			: '行内样式',
-		selectAnchor	: '选择一个锚点',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: '选择一个锚点',
 		anchorName		: '按锚点名称',
-		anchorId		: '按锚点 ID',
-		emailAddress	: '地址',
-		emailSubject	: '主题',
+		anchorId			: '按锚点 ID',
+		emailAddress		: '地址',
+		emailSubject		: '主题',
 		emailBody		: '内容',
 		noAnchors		: '(此文档没有可用的锚点)',
Index: /CKEditor/branches/versions/3.5.x/_source/lang/zh.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/zh.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/zh.js	(revision 6655)
@@ -176,16 +176,17 @@
 		acccessKey		: '存取鍵',
 		name			: '名稱',
-		langCode		: '語言方向',
-		tabIndex		: '定位順序',
-		advisoryTitle	: '標題',
+		langCode			: '語言方向',
+		tabIndex			: '定位順序',
+		advisoryTitle		: '標題',
 		advisoryContentType	: '內容類型',
 		cssClasses		: '樣式表類別',
 		charset			: '連結資源之編碼',
 		styles			: '樣式',
-		selectAnchor	: '請選擇錨點',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: '請選擇錨點',
 		anchorName		: '依錨點名稱',
-		anchorId		: '依元件 ID',
-		emailAddress	: '電子郵件',
-		emailSubject	: '郵件主旨',
+		anchorId			: '依元件 ID',
+		emailAddress		: '電子郵件',
+		emailSubject		: '郵件主旨',
 		emailBody		: '郵件內容',
 		noAnchors		: '(本文件尚無可用之錨點)',
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/a11yhelp/dialogs/a11yhelp.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/a11yhelp/dialogs/a11yhelp.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/a11yhelp/dialogs/a11yhelp.js	(revision 6655)
@@ -171,4 +171,5 @@
 						type : 'html',
 						id : 'legends',
+						style : 'white-space:normal;',
 						focus : function() {},
 						html : buildHelpContents() +
@@ -182,4 +183,15 @@
 								'overflow-x:hidden;' +
 							'}' +
+							// Some adjustments are to be done for IE6 and Quirks to work "properly" (#5757)
+							'.cke_browser_quirks .cke_accessibility_legend,' +
+							'.cke_browser_ie6 .cke_accessibility_legend' +
+							'{' +
+								'height:390px' +
+							'}' +
+							// Override non-wrapping white-space rule in reset css.
+							'.cke_accessibility_legend *' +
+							'{' +
+								'white-space:normal;' +
+							'}' +
 							'.cke_accessibility_legend h1' +
 							'{' +
@@ -199,5 +211,4 @@
 							'.cke_accessibility_legend dd' +
 							'{' +
-								'white-space:normal;' +
 								'margin:10px' +
 							'}' +
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/a11yhelp/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/a11yhelp/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/a11yhelp/plugin.js	(revision 6655)
@@ -33,5 +33,5 @@
 								function()
 								{
-									CKEDITOR.tools.extend( editor.lang, plugin.lang[ langCode ] );
+									CKEDITOR.tools.extend( editor.lang, plugin.langEntries[ langCode ] );
 									editor.openDialog( commandName );
 								});
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/ajax/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/ajax/plugin.js	(revision 6655)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/ajax/plugin.js	(revision 6655)
@@ -0,0 +1,152 @@
+﻿/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.ajax} object, which holds ajax methods for
+ *		data loading.
+ */
+
+(function()
+{
+	CKEDITOR.plugins.add( 'ajax',
+		{
+			requires : [ 'xml' ]
+		});
+
+	/**
+	 * Ajax methods for data loading.
+	 * @namespace
+	 * @example
+	 */
+	CKEDITOR.ajax = (function()
+	{
+		var createXMLHttpRequest = function()
+		{
+			// In IE, using the native XMLHttpRequest for local files may throw
+			// "Access is Denied" errors.
+			if ( !CKEDITOR.env.ie || location.protocol != 'file:' )
+				try { return new XMLHttpRequest(); } catch(e) {}
+
+			try { return new ActiveXObject( 'Msxml2.XMLHTTP' ); } catch (e) {}
+			try { return new ActiveXObject( 'Microsoft.XMLHTTP' ); } catch (e) {}
+
+			return null;
+		};
+
+		var checkStatus = function( xhr )
+		{
+			// HTTP Status Codes:
+			//	 2xx : Success
+			//	 304 : Not Modified
+			//	   0 : Returned when running locally (file://)
+			//	1223 : IE may change 204 to 1223 (see http://dev.jquery.com/ticket/1450)
+
+			return ( xhr.readyState == 4 &&
+					(	( xhr.status >= 200 && xhr.status < 300 ) ||
+						xhr.status == 304 ||
+						xhr.status === 0 ||
+						xhr.status == 1223 ) );
+		};
+
+		var getResponseText = function( xhr )
+		{
+			if ( checkStatus( xhr ) )
+				return xhr.responseText;
+			return null;
+		};
+
+		var getResponseXml = function( xhr )
+		{
+			if ( checkStatus( xhr ) )
+			{
+				var xml = xhr.responseXML;
+				return new CKEDITOR.xml( xml && xml.firstChild ? xml : xhr.responseText );
+			}
+			return null;
+		};
+
+		var load = function( url, callback, getResponseFn )
+		{
+			var async = !!callback;
+
+			var xhr = createXMLHttpRequest();
+
+			if ( !xhr )
+				return null;
+
+			xhr.open( 'GET', url, async );
+
+			if ( async )
+			{
+				// TODO: perform leak checks on this closure.
+				/** @ignore */
+				xhr.onreadystatechange = function()
+				{
+					if ( xhr.readyState == 4 )
+					{
+						callback( getResponseFn( xhr ) );
+						xhr = null;
+					}
+				};
+			}
+
+			xhr.send(null);
+
+			return async ? '' : getResponseFn( xhr );
+		};
+
+		return 	/** @lends CKEDITOR.ajax */ {
+
+			/**
+			 * Loads data from an URL as plain text.
+			 * @param {String} url The URL from which load data.
+			 * @param {Function} [callback] A callback function to be called on
+			 *		data load. If not provided, the data will be loaded
+			 *		synchronously.
+			 * @returns {String} The loaded data. For asynchronous requests, an
+			 *		empty string. For invalid requests, null.
+			 * @example
+			 * // Load data synchronously.
+			 * var data = CKEDITOR.ajax.load( 'somedata.txt' );
+			 * alert( data );
+			 * @example
+			 * // Load data asynchronously.
+			 * var data = CKEDITOR.ajax.load( 'somedata.txt', function( data )
+			 *     {
+			 *         alert( data );
+			 *     } );
+			 */
+			load : function( url, callback )
+			{
+				return load( url, callback, getResponseText );
+			},
+
+			/**
+			 * Loads data from an URL as XML.
+			 * @param {String} url The URL from which load data.
+			 * @param {Function} [callback] A callback function to be called on
+			 *		data load. If not provided, the data will be loaded
+			 *		synchronously.
+			 * @returns {CKEDITOR.xml} An XML object holding the loaded data. For asynchronous requests, an
+			 *		empty string. For invalid requests, null.
+			 * @example
+			 * // Load XML synchronously.
+			 * var xml = CKEDITOR.ajax.loadXml( 'somedata.xml' );
+			 * alert( xml.getInnerXml( '//' ) );
+			 * @example
+			 * // Load XML asynchronously.
+			 * var data = CKEDITOR.ajax.loadXml( 'somedata.xml', function( xml )
+			 *     {
+			 *         alert( xml.getInnerXml( '//' ) );
+			 *     } );
+			 */
+			loadXml : function( url, callback )
+			{
+				return load( url, callback, getResponseXml );
+			}
+		};
+	})();
+
+})();
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/autogrow/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/autogrow/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/autogrow/plugin.js	(revision 6655)
@@ -10,4 +10,6 @@
 	var resizeEditor = function( editor )
 	{
+		if ( !editor.window )
+			return;
 		var doc = editor.document,
 			currentHeight = editor.window.getViewPaneSize().height,
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/bidi/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/bidi/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/bidi/plugin.js	(revision 6655)
@@ -52,11 +52,7 @@
 	{
 		var editor = evt.editor,
-			chromeRoot = editor.container.getChild( 1 ),
 			directionNode = evt.data.path.block || evt.data.path.blockLimit;
 
-		if ( directionNode && editor.lang.dir != directionNode.getComputedStyle( 'direction' ) )
-			chromeRoot.addClass( 'cke_mixed_dir_content' );
-		else
-			chromeRoot.removeClass( 'cke_mixed_dir_content' );
+		editor.fire( 'contentDirChanged', directionNode ? directionNode.getComputedStyle( 'direction' ) : editor.lang.dir );
 	}
 
@@ -81,4 +77,7 @@
 	function switchDir( element, dir, editor, database )
 	{
+		if ( element.isReadOnly() )
+			return;
+
 		// Mark this element as processed by switchDir.
 		CKEDITOR.dom.element.setMarker( database, element, 'bidi_processed', 1 );
@@ -93,5 +92,5 @@
 				element.removeStyle( 'direction' );
 				element.removeAttribute( 'dir' );
-				return null;
+				return;
 			}
 		}
@@ -104,8 +103,5 @@
 		// Stop if direction is same as present.
 		if ( elementDir == dir )
-			return null;
-
-		// Reuse computedState if we already have it.
-		var dirBefore = useComputedState ? elementDir : element.getComputedStyle( 'direction' );
+			return;
 
 		// Clear direction on this element.
@@ -124,19 +120,7 @@
 			element.setAttribute( 'dir', dir );
 
-		// If the element direction changed, we need to switch the margins of
-		// the element and all its children, so it will get really reflected
-		// like a mirror. (#5910)
-		if ( dir != dirBefore )
-		{
-			editor.fire( 'dirChanged',
-				{
-					node : element,
-					dir : dir
-				} );
-		}
-
 		editor.forceNextSelectionCheck();
 
-		return null;
+		return;
 	}
 
@@ -196,6 +180,5 @@
 						selectedElement = getFullySelected( range, guardElements, enterMode );
 
-					if ( selectedElement && !selectedElement.isReadOnly() )
-						switchDir( selectedElement, dir, editor, database );
+					selectedElement && switchDir( selectedElement, dir, editor, database );
 
 					var iterator,
@@ -227,5 +210,5 @@
 
 					while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) )
-						!block.isReadOnly() && switchDir( block, dir, editor, database );
+						switchDir( block, dir, editor, database );
 					}
 
@@ -266,7 +249,64 @@
 
 			editor.on( 'selectionChange', onSelectionChange );
+			editor.on( 'contentDom', function()
+			{
+				editor.document.on( 'dirChanged', function( evt )
+				{
+					editor.fire( 'dirChanged',
+						{
+							node : evt.data,
+							dir : evt.data.getDirection( 1 )
+						} );
+				});
+			});
 		}
 	});
 
+	// If the element direction changed, we need to switch the margins of
+	// the element and all its children, so it will get really reflected
+	// like a mirror. (#5910)
+	function isOffline( el )
+	{
+		var html = el.getDocument().getBody().getParent();
+		while ( el )
+		{
+			if ( el.equals( html ) )
+				return false;
+			el = el.getParent();
+		}
+		return true;
+	}
+	function dirChangeNotifier( org )
+	{
+		var isAttribute = org == elementProto.setAttribute,
+			isRemoveAttribute = org == elementProto.removeAttribute,
+			dirStyleRegexp = /\bdirection\s*:\s*(.*?)\s*(:?$|;)/;
+
+		return function( name, val )
+		{
+			if ( !this.getDocument().equals( CKEDITOR.document ) )
+			{
+				var orgDir;
+				if ( ( name == ( isAttribute || isRemoveAttribute ? 'dir' : 'direction' ) ||
+					 name == 'style' && ( isRemoveAttribute || dirStyleRegexp.test( val ) ) ) && !isOffline( this ) )
+				{
+					orgDir = this.getDirection( 1 );
+					var retval = org.apply( this, arguments );
+					if ( orgDir != this.getDirection( 1 ) )
+					{
+						this.getDocument().fire( 'dirChanged', this );
+						return retval;
+					}
+				}
+			}
+
+			return org.apply( this, arguments );
+		};
+	}
+
+	var elementProto = CKEDITOR.dom.element.prototype,
+		methods = [ 'setStyle', 'removeStyle', 'setAttribute', 'removeAttribute' ];
+	for ( var i = 0; i < methods.length; i++ )
+		elementProto[ methods[ i ] ] = CKEDITOR.tools.override( elementProto[ methods [ i ] ], dirChangeNotifier );
 })();
 
@@ -279,2 +319,9 @@
  * @param {String} eventData.dir The new direction.
  */
+
+/**
+ * Fired when the language direction in the specific cursor position is changed
+ * @name CKEDITOR.editor#contentDirChanged
+ * @event
+ * @param {String} eventData The direction in the current position.
+ */
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/clipboard/dialogs/paste.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/clipboard/dialogs/paste.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/clipboard/dialogs/paste.js	(revision 6655)
@@ -165,5 +165,10 @@
 				iframe = container.getElementsByTag( 'iframe' ).getItem( 0 ),
 				editor = this.getParentEditor(),
-				html = iframe.$.contentWindow.document.body.innerHTML;
+				body = iframe.getFrameDocument().getBody(),
+				bogus = body.getBogus(),
+				html;
+			bogus && bogus.remove();
+			// Saving the contents in variable so changes until paste is complete will not take place (#7500)
+			html = body.getHtml();
 
 			setTimeout( function(){
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/clipboard/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/clipboard/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/clipboard/plugin.js	(revision 6655)
@@ -159,4 +159,6 @@
 	};
 
+	function cancel( evt ) { evt.cancel(); }
+
 	// Allow to peek clipboard content by redirecting the
 	// pasting content into a temporary bin and grab the content of it.
@@ -209,4 +211,6 @@
 		var bms = sel.createBookmarks();
 
+		this.on( 'selectionChange', cancel, null, null, 0 );
+
 		// Turn off design mode temporarily before give focus to the paste bin.
 		if ( mode == 'text' )
@@ -235,4 +239,5 @@
 			mode == 'text' && CKEDITOR.env.gecko && editor.focusGrabber.focus();
 			pastebin.remove();
+			editor.removeListener( 'selectionChange', cancel );
 
 			// Grab the HTML contents.
@@ -323,4 +328,6 @@
 							editor.insertText( data[ 'text' ] );
 
+						setTimeout( function () { editor.fire( 'afterPaste' ); }, 0 );
+
 					}, null, null, 1000 );
 
@@ -389,5 +396,5 @@
 								// The very last guard to make sure the
 								// paste has successfully happened.
-								if ( !data )
+								if ( !CKEDITOR.tools.trim( data.toLowerCase().replace( /<span[^>]+data-cke-bookmark[^<]*?<\/span>/g,'' ) ) )
 									return;
 
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/colorbutton/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/colorbutton/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/colorbutton/plugin.js	(revision 6655)
@@ -67,5 +67,5 @@
 
 						// Find the closest block element.
-						block = path.block || path.blockLimit;
+						block = path.block || path.blockLimit || editor.document.getBody();
 
 						// The background color might be transparent. In that case, look up the color in the DOM tree.
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/dialog/dialogDefinition.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/dialog/dialogDefinition.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/dialog/dialogDefinition.js	(revision 6655)
@@ -10,7 +10,10 @@
 
 /**
+ * The definition of a dialog window.
+ * <div class="notapi">
  * This class is not really part of the API. It just illustrates the properties
  * that developers can use to define and create dialogs.
- * @name CKEDITOR.dialog.dialogDefinition
+ * </div>
+ * @name CKEDITOR.dialog.definition
  * @constructor
  * @example
@@ -47,5 +50,5 @@
 /**
  * The dialog title, displayed in the dialog's header. Required.
- * @name CKEDITOR.dialog.dialogDefinition.prototype.title
+ * @name CKEDITOR.dialog.definition.prototype.title
  * @field
  * @type String
@@ -60,5 +63,5 @@
  * <strong>CKEDITOR.DIALOG_RESIZE_HEIGHT</strong><br />
  * <strong>CKEDITOR.DIALOG_RESIZE_BOTH</strong><br />
- * @name CKEDITOR.dialog.dialogDefinition.prototype.resizable
+ * @name CKEDITOR.dialog.definition.prototype.resizable
  * @field
  * @type Number
@@ -69,5 +72,5 @@
 /**
  * The minimum width of the dialog, in pixels.
- * @name CKEDITOR.dialog.dialogDefinition.prototype.minWidth
+ * @name CKEDITOR.dialog.definition.prototype.minWidth
  * @field
  * @type Number
@@ -78,5 +81,5 @@
 /**
  * The minimum height of the dialog, in pixels.
- * @name CKEDITOR.dialog.dialogDefinition.prototype.minHeight
+ * @name CKEDITOR.dialog.definition.prototype.minHeight
  * @field
  * @type Number
@@ -85,8 +88,29 @@
  */
 
+
+/**
+ * The initial width of the dialog, in pixels.
+ * @name CKEDITOR.dialog.definition.prototype.width
+ * @field
+ * @type Number
+ * @default @CKEDITOR.dialog.definition.prototype.minWidth
+ * @since 3.5.3
+ * @example
+ */
+
+/**
+ * The initial height of the dialog, in pixels.
+ * @name CKEDITOR.dialog.definition.prototype.height
+ * @field
+ * @type Number
+ * @default @CKEDITOR.dialog.definition.prototype.minHeight
+ * @since 3.5.3
+ * @example
+ */
+
 /**
  * The buttons in the dialog, defined as an array of
- * {@link CKEDITOR.dialog.buttonDefinition} objects.
- * @name CKEDITOR.dialog.dialogDefinition.prototype.buttons
+ * {@link CKEDITOR.dialog.definition.button} objects.
+ * @name CKEDITOR.dialog.definition.prototype.buttons
  * @field
  * @type Array
@@ -97,6 +121,6 @@
 /**
  * The contents in the dialog, defined as an array of
- * {@link CKEDITOR.dialog.contentDefinition} objects. Required.
- * @name CKEDITOR.dialog.dialogDefinition.prototype.contents
+ * {@link CKEDITOR.dialog.definition.content} objects. Required.
+ * @name CKEDITOR.dialog.definition.prototype.contents
  * @field
  * @type Array
@@ -106,5 +130,5 @@
 /**
  * The function to execute when OK is pressed.
- * @name CKEDITOR.dialog.dialogDefinition.prototype.onOk
+ * @name CKEDITOR.dialog.definition.prototype.onOk
  * @field
  * @type Function
@@ -114,5 +138,5 @@
 /**
  * The function to execute when Cancel is pressed.
- * @name CKEDITOR.dialog.dialogDefinition.prototype.onCancel
+ * @name CKEDITOR.dialog.definition.prototype.onCancel
  * @field
  * @type Function
@@ -122,14 +146,22 @@
 /**
  * The function to execute when the dialog is displayed for the first time.
- * @name CKEDITOR.dialog.dialogDefinition.prototype.onLoad
- * @field
- * @type Function
- * @example
- */
-
-/**
- * This class is not really part of the API. It just illustrates the properties
- * that developers can use to define and create dialog content pages.
- * @name CKEDITOR.dialog.contentDefinition
+ * @name CKEDITOR.dialog.definition.prototype.onLoad
+ * @field
+ * @type Function
+ * @example
+ */
+
+/**
+ * The function to execute when the dialog is loaded (executed every time the dialog is opened).
+ * @name CKEDITOR.dialog.definition.prototype.onShow
+ * @field
+ * @type Function
+ * @example
+ */
+
+/**
+ * <div class="notapi">This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create dialog content pages.</div>
+ * @name CKEDITOR.dialog.definition.content
  * @constructor
  * @example
@@ -140,5 +172,5 @@
 /**
  * The id of the content page.
- * @name CKEDITOR.dialog.contentDefinition.prototype.id
+ * @name CKEDITOR.dialog.definition.content.prototype.id
  * @field
  * @type String
@@ -148,5 +180,5 @@
 /**
  * The tab label of the content page.
- * @name CKEDITOR.dialog.contentDefinition.prototype.label
+ * @name CKEDITOR.dialog.definition.content.prototype.label
  * @field
  * @type String
@@ -156,5 +188,5 @@
 /**
  * The popup message of the tab label.
- * @name CKEDITOR.dialog.contentDefinition.prototype.title
+ * @name CKEDITOR.dialog.definition.content.prototype.title
  * @field
  * @type String
@@ -164,5 +196,5 @@
 /**
  * The CTRL hotkey for switching to the tab.
- * @name CKEDITOR.dialog.contentDefinition.prototype.accessKey
+ * @name CKEDITOR.dialog.definition.content.prototype.accessKey
  * @field
  * @type String
@@ -173,6 +205,6 @@
 /**
  * The UI elements contained in this content page, defined as an array of
- * {@link CKEDITOR.dialog.uiElementDefinition} objects.
- * @name CKEDITOR.dialog.contentDefinition.prototype.elements
+ * {@link CKEDITOR.dialog.definition.uiElement} objects.
+ * @name CKEDITOR.dialog.definition.content.prototype.elements
  * @field
  * @type Array
@@ -181,135 +213,869 @@
 
 /**
- * This class is not really part of the API. It just illustrates the properties
- * that developers can use to define and create dialog buttons.
- * @name CKEDITOR.dialog.buttonDefinition
- * @constructor
- * @example
- * // There is no constructor for this class, the user just has to define an
- * // object with the appropriate properties.
- */
-
-/**
- * The id of the dialog button. Required.
- * @name CKEDITOR.dialog.buttonDefinition.prototype.id
- * @type String
- * @field
- * @example
- */
-
-/**
- * The label of the dialog button. Required.
- * @name CKEDITOR.dialog.buttonDefinition.prototype.label
- * @type String
- * @field
- * @example
- */
-
-/**
- * The popup message of the dialog button.
- * @name CKEDITOR.dialog.buttonDefinition.prototype.title
- * @type String
- * @field
- * @example
- */
-
-/**
- * The CTRL hotkey for the button.
- * @name CKEDITOR.dialog.buttonDefinition.prototype.accessKey
- * @type String
- * @field
- * @example
- * exitButton.accessKey = 'X';		// Button will be pressed when user presses CTRL-X
+ * The definition of user interface element (textarea, radio etc).
+ * <div class="notapi">This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create dialog UI elements.</div>
+ * @name CKEDITOR.dialog.definition.uiElement
+ * @constructor
+ * @see CKEDITOR.ui.dialog.uiElement
+ * @example
+ * // There is no constructor for this class, the user just has to define an
+ * // object with the appropriate properties.
+ */
+
+/**
+ * The id of the UI element.
+ * @name CKEDITOR.dialog.definition.uiElement.prototype.id
+ * @field
+ * @type String
+ * @example
+ */
+
+/**
+ * The type of the UI element. Required.
+ * @name CKEDITOR.dialog.definition.uiElement.prototype.type
+ * @field
+ * @type String
+ * @example
+ */
+
+/**
+ * The popup label of the UI element.
+ * @name CKEDITOR.dialog.definition.uiElement.prototype.title
+ * @field
+ * @type String
+ * @example
+ */
+
+/**
+ * CSS class names to append to the UI element.
+ * @name CKEDITOR.dialog.definition.uiElement.prototype.className
+ * @field
+ * @type String
+ * @example
+ */
+
+/**
+ * Inline CSS classes to append to the UI element.
+ * @name CKEDITOR.dialog.definition.uiElement.prototype.style
+ * @field
+ * @type String
+ * @example
+ */
+
+/**
+ * Function to execute the first time the UI element is displayed.
+ * @name CKEDITOR.dialog.definition.uiElement.prototype.onLoad
+ * @field
+ * @type Function
+ * @example
+ */
+
+/**
+ * Function to execute whenever the UI element's parent dialog is displayed.
+ * @name CKEDITOR.dialog.definition.uiElement.prototype.onShow
+ * @field
+ * @type Function
+ * @example
+ */
+
+/**
+ * Function to execute whenever the UI element's parent dialog is closed.
+ * @name CKEDITOR.dialog.definition.uiElement.prototype.onHide
+ * @field
+ * @type Function
+ * @example
+ */
+
+// ----- hbox -----
+
+/**
+ * Horizontal layout box for dialog UI elements, auto-expends to available width of container.
+ * <div class="notapi">
+ * This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create horizontal layouts.
+ * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.hbox} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}.
+ * </div>
+ * @name CKEDITOR.dialog.definition.hbox
+ * @extends CKEDITOR.dialog.definition.uiElement
+ * @constructor
+ * @example
+ * // There is no constructor for this class, the user just has to define an
+ * // object with the appropriate properties.
+ *
+ * // Example:
+ * {
+ * 	<b>type : 'hbox',</b>
+ * 	widths : [ '25%', '25%', '50%' ],
+ * 	children :
+ * 	[
+ * 		{
+ * 			type : 'text',
+ * 			id : 'id1',
+ * 			width : '40px',
+ * 		},
+ * 		{
+ * 			type : 'text',
+ * 			id : 'id2',
+ * 			width : '40px',
+ * 		},
+ * 		{
+ * 			type : 'text',
+ * 			id : 'id3'
+ * 		}
+ * 	]
+ * }
+ */
+
+/**
+ * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container.
+ * @name CKEDITOR.dialog.definition.hbox.prototype.children
+ * @field
+ * @type Array
+ * @example
+ */
+
+/**
+ * (Optional) The widths of child cells.
+ * @name CKEDITOR.dialog.definition.hbox.prototype.widths
+ * @field
+ * @type Array
+ * @example
+ */
+
+/**
+ * (Optional) The height of the layout.
+ * @name CKEDITOR.dialog.definition.hbox.prototype.height
+ * @field
+ * @type Number
+ * @example
+ */
+
+/**
+ * The CSS styles to apply to this element.
+ * @name CKEDITOR.dialog.definition.hbox.prototype.styles
+ * @field
+ * @type String
+ * @example
+ */
+
+/**
+ * (Optional) The padding width inside child cells. Example: 0, 1.
+ * @name CKEDITOR.dialog.definition.hbox.prototype.padding
+ * @field
+ * @type Number
+ * @example
+ */
+
+/**
+ * (Optional) The alignment of the whole layout. Example: center, top.
+ * @name CKEDITOR.dialog.definition.hbox.prototype.align
+ * @field
+ * @type String
+ * @example
+ */
+
+// ----- vbox -----
+
+/**
+ * Vertical layout box for dialog UI elements.
+ * <div class="notapi">
+ * This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create vertical layouts.
+ * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.vbox} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}.
+ * </div>
+ * <style type="text/css">.details .detailList {display:none;} </style>
+ * @name CKEDITOR.dialog.definition.vbox
+ * @extends CKEDITOR.dialog.definition.uiElement
+ * @constructor
+ * @example
+ * // There is no constructor for this class, the user just has to define an
+ * // object with the appropriate properties.
+ *
+ * // Example:
+ * {
+ * 	<b>type : 'vbox',</b>
+ * 	align : 'right',
+ * 	width : '200px',
+ * 	children :
+ * 	[
+ * 		{
+ * 			type : 'text',
+ * 			id : 'age',
+ * 			label : 'Age'
+ * 		},
+ * 		{
+ * 			type : 'text',
+ * 			id : 'sex',
+ * 			label : 'Sex'
+ * 		},
+ * 		{
+ * 			type : 'text',
+ * 			id : 'nationality',
+ * 			label : 'Nationality'
+ * 		}
+ * 	]
+ * }
+ */
+
+/**
+ * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container.
+ * @name CKEDITOR.dialog.definition.vbox.prototype.children
+ * @field
+ * @type Array
+ * @example
+ */
+
+/**
+ * (Optional) The width of the layout.
+ * @name CKEDITOR.dialog.definition.vbox.prototype.width
+ * @field
+ * @type Array
+ * @example
+ */
+
+/**
+ * (Optional) The heights of individual cells.
+ * @name CKEDITOR.dialog.definition.vbox.prototype.heights
+ * @field
+ * @type Number
+ * @example
+ */
+
+/**
+ * The CSS styles to apply to this element.
+ * @name CKEDITOR.dialog.definition.vbox.prototype.styles
+ * @field
+ * @type String
+ * @example
+ */
+
+/**
+ * (Optional) The padding width inside child cells. Example: 0, 1.
+ * @name CKEDITOR.dialog.definition.vbox.prototype.padding
+ * @field
+ * @type Number
+ * @example
+ */
+
+/**
+ * (Optional) The alignment of the whole layout. Example: center, top.
+ * @name CKEDITOR.dialog.definition.vbox.prototype.align
+ * @field
+ * @type String
+ * @example
+ */
+
+/**
+ * (Optional) Whether the layout should expand vertically to fill its container.
+ * @name CKEDITOR.dialog.definition.vbox.prototype.expand
+ * @field
+ * @type Boolean
+ * @example
+ */
+
+// ----- button ------
+
+/**
+ * The definition of a button.
+ * <div class="notapi">
+ * This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create buttons.
+ * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.button} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}.
+ * </div>
+ * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}.
+ * @name CKEDITOR.dialog.definition.button
+ * @extends CKEDITOR.dialog.definition.uiElement
+ * @constructor
+ * @example
+ * // There is no constructor for this class, the user just has to define an
+ * // object with the appropriate properties.
+ *
+ * // Example:
+ * {
+ * 	<b>type : 'button',</b>
+ * 	id : 'buttonId',
+ * 	label : 'Click me',
+ * 	title : 'My title',
+ * 	onClick : function() {
+ * 		// this = CKEDITOR.ui.dialog.button
+ * 		alert( 'Clicked: ' + this.id );
+ * 	}
+ * }
  */
 
 /**
  * Whether the button is disabled.
- * @name CKEDITOR.dialog.buttonDefinition.prototype.disabled
+ * @name CKEDITOR.dialog.definition.button.prototype.disabled
  * @type Boolean
  * @field
+ * @example
+ */
+
+/**
+ * The label of the UI element.
+ * @name CKEDITOR.dialog.definition.button.prototype.label
+ * @type String
+ * @field
+ * @example
+ */
+
+// ----- checkbox ------
+
+/**
+ * The definition of a checkbox element.
+ * <div class="notapi">
+ * This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create groups of checkbox buttons.
+ * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.checkbox} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}.
+ * </div>
+ * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}.
+ * @name CKEDITOR.dialog.definition.checkbox
+ * @extends CKEDITOR.dialog.definition.uiElement
+ * @constructor
+ * @example
+ * // There is no constructor for this class, the user just has to define an
+ * // object with the appropriate properties.
+ *
+ * // Example:
+ * {
+ * 	<b>type : 'checkbox',</b>
+ * 	id : 'agree',
+ * 	label : 'I agree',
+ * 	'default' : 'checked',
+ * 	onClick : function() {
+ * 		// this = CKEDITOR.ui.dialog.checkbox
+ * 		alert( 'Checked: ' + this.getValue() );
+ * 	}
+ * }
+ */
+
+/**
+ * (Optional) The validation function.
+ * @name CKEDITOR.dialog.definition.checkbox.prototype.validate
+ * @field
+ * @type Function
+ * @example
+ */
+
+/**
+ * The label of the UI element.
+ * @name CKEDITOR.dialog.definition.checkbox.prototype.label
+ * @type String
+ * @field
+ * @example
+ */
+
+/**
+ * The default state.
+ * @name CKEDITOR.dialog.definition.checkbox.prototype.default
+ * @type String
+ * @field
+ * @default
+ * '' (unchecked)
+ * @example
+ */
+
+// ----- file -----
+
+/**
+ * The definition of a file upload input.
+ * <div class="notapi">
+ * This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create file upload elements.
+ * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.file} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}.
+ * </div>
+ * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}.
+ * @name CKEDITOR.dialog.definition.file
+ * @extends CKEDITOR.dialog.definition.uiElement
+ * @constructor
+ * @example
+ * // There is no constructor for this class, the user just has to define an
+ * // object with the appropriate properties.
+ *
+ * // Example:
+ * {
+ * 	<b>type : 'file'</b>,
+ * 	id : 'upload',
+ * 	label : 'Select file from your computer',
+ * 	size : 38
+ * },
+ * {
+ * 	type : 'fileButton',
+ * 	id : 'fileId',
+ * 	label : 'Upload file',
+ * 	'for' : [ 'tab1', 'upload' ]
+ * 	filebrowser : {
+ * 		onSelect : function( fileUrl, data ) {
+ * 			alert( 'Successfully uploaded: ' + fileUrl );
+ * 		}
+ * 	}
+ * }
+ */
+
+/**
+ * (Optional) The validation function.
+ * @name CKEDITOR.dialog.definition.file.prototype.validate
+ * @field
+ * @type Function
+ * @example
+ */
+
+/**
+ * The label of the UI element.
+ * @name CKEDITOR.dialog.definition.file.prototype.label
+ * @type String
+ * @field
+ * @example
+ */
+
+/**
+ * (Optional) The action attribute of the form element associated with this file upload input.
+ * If empty, CKEditor will use path to server connector for currently opened folder.
+ * @name CKEDITOR.dialog.definition.file.prototype.action
+ * @type String
+ * @field
+ * @example
+ */
+
+/**
+ * The size of the UI element.
+ * @name CKEDITOR.dialog.definition.file.prototype.size
+ * @type Number
+ * @field
+ * @example
+ */
+
+// ----- fileButton -----
+
+/**
+ * The definition of a button for submitting the file in a file upload input.
+ * <div class="notapi">
+ * This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create a button for submitting the file in a file upload input.
+ * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.fileButton} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}.
+ * </div>
+ * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}.
+ * @name CKEDITOR.dialog.definition.fileButton
+ * @extends CKEDITOR.dialog.definition.uiElement
+ * @constructor
+ * @example
+ * // There is no constructor for this class, the user just has to define an
+ * // object with the appropriate properties.
+ *
+ * // Example:
+ * {
+ * 	type : 'file',
+ * 	id : 'upload',
+ * 	label : 'Select file from your computer',
+ * 	size : 38
+ * },
+ * {
+ * 	<b>type : 'fileButton'</b>,
+ * 	id : 'fileId',
+ * 	label : 'Upload file',
+ * 	'for' : [ 'tab1', 'upload' ]
+ * 	filebrowser : {
+ * 		onSelect : function( fileUrl, data ) {
+ * 			alert( 'Successfully uploaded: ' + fileUrl );
+ * 		}
+ * 	}
+ * }
+ */
+
+/**
+ * (Optional) The validation function.
+ * @name CKEDITOR.dialog.definition.fileButton.prototype.validate
+ * @field
+ * @type Function
+ * @example
+ */
+
+/**
+ * The label of the UI element.
+ * @name CKEDITOR.dialog.definition.fileButton.prototype.label
+ * @type String
+ * @field
+ * @example
+ */
+
+/**
+ * The instruction for CKEditor how to deal with file upload.
+ * By default, the file and fileButton elements will not work "as expected" if this attribute is not set.
+ * @name CKEDITOR.dialog.definition.fileButton.prototype.filebrowser
+ * @type String|Object
+ * @field
+ * @example
+ * // Update field with id 'txtUrl' in the 'tab1' tab when file is uploaded.
+ * filebrowser : 'tab1:txtUrl'
+ *
+ * // Call custom onSelect function when file is successfully uploaded.
+ * filebrowser : {
+ * 	onSelect : function( fileUrl, data ) {
+ * 		alert( 'Successfully uploaded: ' + fileUrl );
+ * 	}
+ * }
+ */
+
+/**
+ * An array that contains pageId and elementId of the file upload input element for which this button is created.
+ * @name CKEDITOR.dialog.definition.fileButton.prototype.for
+ * @type String
+ * @field
+ * @example
+ * [ pageId, elementId ]
+ */
+
+// ----- html -----
+
+/**
+ * The definition of a raw HTML element.
+ * <div class="notapi">
+ * This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create elements made from raw HTML code.
+ * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.html} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}.
+ * </div>
+ * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}.<br />
+ * To access HTML elements use {@link CKEDITOR.dom.document#getById}
+ * @name CKEDITOR.dialog.definition.html
+ * @extends CKEDITOR.dialog.definition.uiElement
+ * @constructor
+ * @example
+ * // There is no constructor for this class, the user just has to define an
+ * // object with the appropriate properties.
+ *
+ * // Example 1:
+ * {
+ * 	<b>type : 'html',</b>
+ * 	html : '&lt;h3>This is some sample HTML content.&lt;/h3>'
+ * }
+ * @example
+ * // Example 2:
+ * // Complete sample with document.getById() call when the "Ok" button is clicked.
+ * var dialogDefinition =
+ * {
+ * 	title : 'Sample dialog',
+ * 	minWidth : 300,
+ * 	minHeight : 200,
+ * 	onOk : function() {
+ * 		// "this" is now a CKEDITOR.dialog object.
+ * 		var document = this.getElement().getDocument();
+ * 		// document = CKEDITOR.dom.document
+ * 		var element = <b>document.getById( 'myDiv' );</b>
+ * 		if ( element )
+ * 			alert( element.getHtml() );
+ * 	},
+ * 	contents : [
+ * 		{
+ * 			id : 'tab1',
+ * 			label : '',
+ * 			title : '',
+ * 			elements :
+ * 			[
+ * 				{
+ * 					<b>type : 'html',</b>
+ * 					html : '<b>&lt;div id="myDiv">Sample &lt;b>text&lt;/b>.&lt;/div></b>&lt;div id="otherId">Another div.&lt;/div>'
+ * 				},
+ * 			]
+ * 		}
+ * 	],
+ * 	buttons : [ CKEDITOR.dialog.cancelButton, CKEDITOR.dialog.okButton ]
+ * };
+ */
+
+/**
+ * (Required) HTML code of this element.
+ * @name CKEDITOR.dialog.definition.html.prototype.html
+ * @type String
+ * @field
+ * @example
+ */
+
+// ----- radio ------
+
+/**
+ * The definition of a radio group.
+ * <div class="notapi">
+ * This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create groups of radio buttons.
+ * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.radio} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}.
+ * </div>
+ * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}.
+ * @name CKEDITOR.dialog.definition.radio
+ * @extends CKEDITOR.dialog.definition.uiElement
+ * @constructor
+ * @example
+ * // There is no constructor for this class, the user just has to define an
+ * // object with the appropriate properties.
+ *
+ * // Example:
+ * {
+ * 	<b>type : 'radio',</b>
+ * 	id : 'country',
+ * 	label : 'Which country is bigger',
+ * 	items : [ [ 'France', 'FR' ], [ 'Germany', 'DE' ] ] ,
+ * 	style : 'color:green',
+ * 	'default' : 'DE',
+ * 	onClick : function() {
+ * 		// this = CKEDITOR.ui.dialog.radio
+ * 		alert( 'Current value: ' + this.getValue() );
+ * 	}
+ * }
+ */
+
+/**
+ * The default value.
+ * @name CKEDITOR.dialog.definition.radio.prototype.default
+ * @type String
+ * @field
+ * @example
+ */
+
+/**
+ * (Optional) The validation function.
+ * @name CKEDITOR.dialog.definition.radio.prototype.validate
+ * @field
+ * @type Function
+ * @example
+ */
+
+/**
+ *  An array of options. Each option is a 1- or 2-item array of format [ 'Description', 'Value' ]. If 'Value' is missing, then the value would be assumed to be the same as the description.
+ * @name CKEDITOR.dialog.definition.radio.prototype.items
+ * @field
+ * @type Array
+ * @example
+ */
+
+/**
+ * The label of the UI element.
+ * @name CKEDITOR.dialog.definition.radio.prototype.label
+ * @type String
+ * @field
+ * @example
+ */
+
+// ----- selectElement ------
+
+/**
+ * The definition of a select element.
+ * <div class="notapi">
+ * This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create select elements.
+ * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.select} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}.
+ * </div>
+ * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}.
+ * @name CKEDITOR.dialog.definition.select
+ * @extends CKEDITOR.dialog.definition.uiElement
+ * @constructor
+ * @example
+ * // There is no constructor for this class, the user just has to define an
+ * // object with the appropriate properties.
+ *
+ * // Example:
+ * {
+ * 	<b>type : 'select',</b>
+ * 	id : 'sport',
+ * 	label : 'Select your favourite sport',
+ * 	items : [ [ 'Basketball' ], [ 'Baseball' ], [ 'Hockey' ], [ 'Football' ] ],
+ * 	'default' : 'Football',
+ * 	onChange : function( api ) {
+ * 		// this = CKEDITOR.ui.dialog.select
+ * 		alert( 'Current value: ' + this.getValue() );
+ * 	}
+ * }
+ */
+
+/**
+ * The default value.
+ * @name CKEDITOR.dialog.definition.select.prototype.default
+ * @type String
+ * @field
+ * @example
+ */
+
+/**
+ * (Optional) The validation function.
+ * @name CKEDITOR.dialog.definition.select.prototype.validate
+ * @field
+ * @type Function
+ * @example
+ */
+
+/**
+ *  An array of options. Each option is a 1- or 2-item array of format [ 'Description', 'Value' ]. If 'Value' is missing, then the value would be assumed to be the same as the description.
+ * @name CKEDITOR.dialog.definition.select.prototype.items
+ * @field
+ * @type Array
+ * @example
+ */
+
+/**
+ * (Optional) Set this to true if you'd like to have a multiple-choice select box.
+ * @name CKEDITOR.dialog.definition.select.prototype.multiple
+ * @type Boolean
+ * @field
+ * @example
  * @default false
- * @example
- */
-
-/**
- * The function to execute when the button is clicked.
- * @name CKEDITOR.dialog.buttonDefinition.prototype.onClick
- * @type Function
- * @field
- * @example
- */
-
-/**
- * This class is not really part of the API. It just illustrates the properties
- * that developers can use to define and create dialog UI elements.
- * @name CKEDITOR.dialog.uiElementDefinition
- * @constructor
- * @see CKEDITOR.ui.dialog.uiElement
- * @example
- * // There is no constructor for this class, the user just has to define an
- * // object with the appropriate properties.
- */
-
-/**
- * The id of the UI element.
- * @name CKEDITOR.dialog.uiElementDefinition.prototype.id
- * @field
- * @type String
- * @example
- */
-
-/**
- * The type of the UI element. Required.
- * @name CKEDITOR.dialog.uiElementDefinition.prototype.type
- * @field
- * @type String
- * @example
- */
-
-/**
- * The popup label of the UI element.
- * @name CKEDITOR.dialog.uiElementDefinition.prototype.title
- * @field
- * @type String
- * @example
- */
-
-/**
- * CSS class names to append to the UI element.
- * @name CKEDITOR.dialog.uiElementDefinition.prototype.className
- * @field
- * @type String
- * @example
- */
-
-/**
- * Inline CSS classes to append to the UI element.
- * @name CKEDITOR.dialog.uiElementDefinition.prototype.style
- * @field
- * @type String
- * @example
- */
-
-/**
- * Function to execute the first time the UI element is displayed.
- * @name CKEDITOR.dialog.uiElementDefinition.prototype.onLoad
- * @field
- * @type Function
- * @example
- */
-
-/**
- * Function to execute whenever the UI element's parent dialog is displayed.
- * @name CKEDITOR.dialog.uiElementDefinition.prototype.onShow
- * @field
- * @type Function
- * @example
- */
-
-/**
- * Function to execute whenever the UI element's parent dialog is closed.
- * @name CKEDITOR.dialog.uiElementDefinition.prototype.onHide
- * @field
- * @type Function
- * @example
- */
+ */
+
+/**
+ * (Optional) The number of items to display in the select box.
+ * @name CKEDITOR.dialog.definition.select.prototype.size
+ * @type Number
+ * @field
+ * @example
+ */
+
+/**
+ * The label of the UI element.
+ * @name CKEDITOR.dialog.definition.select.prototype.label
+ * @type String
+ * @field
+ * @example
+ */
+
+// ----- textInput -----
+
+/**
+ * The definition of a text field (single line).
+ * <div class="notapi">
+ * This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create text fields.
+ * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.textInput} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}.
+ * </div>
+ * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}.
+ * @name CKEDITOR.dialog.definition.textInput
+ * @extends CKEDITOR.dialog.definition.uiElement
+ * @constructor
+ * @example
+ * // There is no constructor for this class, the user just has to define an
+ * // object with the appropriate properties.
+ *
+ * {
+ * 	<b>type : 'text',</b>
+ * 	id : 'name',
+ * 	label : 'Your name',
+ * 	'default' : '',
+ * 	validate : function() {
+ * 		if ( !this.getValue() )
+ * 		{
+ * 			api.openMsgDialog( '', 'Name cannot be empty.' );
+ * 			return false;
+ * 		}
+ * 	}
+ * }
+ */
+
+/**
+ * The default value.
+ * @name CKEDITOR.dialog.definition.textInput.prototype.default
+ * @type String
+ * @field
+ * @example
+ */
+
+/**
+ * (Optional) The maximum length.
+ * @name CKEDITOR.dialog.definition.textInput.prototype.maxLength
+ * @type Number
+ * @field
+ * @example
+ */
+
+/**
+ * (Optional) The size of the input field.
+ * @name CKEDITOR.dialog.definition.textInput.prototype.size
+ * @type Number
+ * @field
+ * @example
+ */
+
+/**
+ * (Optional) The validation function.
+ * @name CKEDITOR.dialog.definition.textInput.prototype.validate
+ * @field
+ * @type Function
+ * @example
+ */
+
+/**
+ * The label of the UI element.
+ * @name CKEDITOR.dialog.definition.textInput.prototype.label
+ * @type String
+ * @field
+ * @example
+ */
+
+// ----- textarea ------
+
+/**
+ * The definition of a text field (multiple lines).
+ * <div class="notapi">
+ * This class is not really part of the API. It just illustrates the properties
+ * that developers can use to define and create textarea.
+ * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.textarea} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}.
+ * </div>
+ * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}.
+ * @name CKEDITOR.dialog.definition.textarea
+ * @extends CKEDITOR.dialog.definition.uiElement
+ * @constructor
+ * @example
+ * // There is no constructor for this class, the user just has to define an
+ * // object with the appropriate properties.
+ *
+ * // Example:
+ * {
+ * 	<b>type : 'textarea',</b>
+ * 	id : 'message',
+ * 	label : 'Your comment',
+ * 	'default' : '',
+ * 	validate : function() {
+ * 		if ( this.getValue().length < 5 )
+ * 		{
+ * 			api.openMsgDialog( 'The comment is too short.' );
+ * 			return false;
+ * 		}
+ * 	}
+ * }
+ */
+
+/**
+ * The number of rows.
+ * @name CKEDITOR.dialog.definition.textarea.prototype.rows
+ * @type Number
+ * @field
+ * @example
+ */
+
+/**
+ * The number of columns.
+ * @name CKEDITOR.dialog.definition.textarea.prototype.cols
+ * @type Number
+ * @field
+ * @example
+ */
+
+/**
+ * (Optional) The validation function.
+ * @name CKEDITOR.dialog.definition.textarea.prototype.validate
+ * @field
+ * @type Function
+ * @example
+ */
+
+/**
+ * The default value.
+ * @name CKEDITOR.dialog.definition.textarea.prototype.default
+ * @type String
+ * @field
+ * @example
+ */
+
+/**
+ * The label of the UI element.
+ * @name CKEDITOR.dialog.definition.textarea.prototype.label
+ * @type String
+ * @field
+ * @example
+ */
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/dialog/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/dialog/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/dialog/plugin.js	(revision 6655)
@@ -168,11 +168,13 @@
 		// Set the startup styles for the dialog, avoiding it enlarging the
 		// page size on the dialog creation.
-		this.parts.dialog.setStyles(
-			{
+		var startStyles = {
 				position : CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed',
 				top : 0,
-				left: 0,
 				visibility : 'hidden'
-			});
+		};
+
+		startStyles[ dir == 'rtl' ? 'right' : 'left' ] = 0;
+		this.parts.dialog.setStyles( startStyles );
+
 
 		// Call the CKEDITOR.event constructor to initialize this instance.
@@ -636,4 +638,16 @@
 					}, this._.editor );
 
+				this.fire( 'resize',
+					{
+						skin : this._.editor.skinName,
+						width : width,
+						height : height
+					}, this._.editor );
+
+				// Update dialog position when dimension get changed in RTL.
+				if ( this._.editor.lang.dir == 'rtl' && this._.position )
+					this._.position.x = CKEDITOR.document.getWindow().getViewPaneSize().width -
+						this._.contentSize.width - parseInt( this._.element.getFirst().getStyle( 'right' ), 10 );
+
 				this._.contentSize = { width : width, height : height };
 			};
@@ -668,5 +682,7 @@
 				// The dialog may be fixed positioned or absolute positioned. Ask the
 				// browser what is the current situation first.
-				var element = this._.element.getFirst();
+				var element = this._.element.getFirst(),
+					rtl = this._.editor.lang.dir == 'rtl';
+
 				if ( isFixed === undefined )
 					isFixed = element.getComputedStyle( 'position' ) == 'fixed';
@@ -686,9 +702,16 @@
 				}
 
-				element.setStyles(
-						{
-							'left'	: ( x > 0 ? x : 0 ) + 'px',
-							'top'	: ( y > 0 ? y : 0 ) + 'px'
-						});
+				// Translate coordinate for RTL.
+				if ( rtl )
+				{
+					var dialogSize = this.getSize(),
+						viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize();
+					x = viewPaneSize.width - dialogSize.width - x;
+				}
+
+				var styles = { 'top'	: ( y > 0 ? y : 0 ) + 'px' };
+				styles[ rtl ? 'right' : 'left' ] = ( x > 0 ? x : 0 ) + 'px';
+
+				element.setStyles( styles );
 
 				save && ( this._.moved = 1 );
@@ -732,6 +755,6 @@
 
 			// 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( this._.contentSize && this._.contentSize.width || definition.width || definition.minWidth,
+					this._.contentSize && this._.contentSize.height || definition.height || definition.minHeight );
 
 			// Reset all inputs back to their default value.
@@ -936,5 +959,5 @@
 							expand : !!contents.expand,
 							padding : contents.padding,
-							style : contents.style || 'width: 100%;'
+							style : contents.style || 'width: 100%;height:100%'
 						}, pageHtml );
 
@@ -1250,7 +1273,75 @@
 			 * A function returning the dialog's definition, or the URL to the .js file holding the function.
 			 * The function should accept an argument "editor" which is the current editor instance, and
-			 * return an object conforming to {@link CKEDITOR.dialog.dialogDefinition}.
+			 * return an object conforming to {@link CKEDITOR.dialog.definition}.
+			 * @see CKEDITOR.dialog.definition
 			 * @example
-			 * @see CKEDITOR.dialog.dialogDefinition
+			 * // Full sample plugin, which does not only register a dialog window but also adds an item to the context menu.
+			 * // To open the dialog window, choose "Open dialog" in the context menu.
+			 * CKEDITOR.plugins.add( 'myplugin',
+			 * {
+			 * 	init: function( editor )
+			 * 	{
+			 * 		editor.addCommand( 'mydialog',new CKEDITOR.dialogCommand( 'mydialog' ) );
+			 *
+			 * 		if ( editor.contextMenu )
+			 * 		{
+			 * 			editor.addMenuGroup( 'mygroup', 10 );
+			 * 			editor.addMenuItem( 'My Dialog',
+			 * 			{
+			 * 				label : 'Open dialog',
+			 * 				command : 'mydialog',
+			 * 				group : 'mygroup'
+			 * 			});
+			 * 			editor.contextMenu.addListener( function( element )
+			 * 			{
+			 *  				return { 'My Dialog' : CKEDITOR.TRISTATE_OFF };
+			 * 			});
+			 * 		}
+			 *
+			 * 		<strong>CKEDITOR.dialog.add</strong>( 'mydialog', function( api )
+			 * 		{
+			 * 			// CKEDITOR.dialog.definition
+			 * 			var <strong>dialogDefinition</strong> =
+			 * 			{
+			 * 				title : 'Sample dialog',
+			 * 				minWidth : 390,
+			 * 				minHeight : 130,
+			 * 				contents : [
+			 * 					{
+			 * 						id : 'tab1',
+			 * 						label : 'Label',
+			 * 						title : 'Title',
+			 * 						expand : true,
+			 * 						padding : 0,
+			 * 						elements :
+			 * 						[
+			 * 							{
+			 * 								type : 'html',
+			 * 								html : '&lt;p&gt;This is some sample HTML content.&lt;/p&gt;'
+			 * 							},
+			 * 							{
+			 * 								type : 'textarea',
+			 * 								id : 'textareaId',
+			 * 								rows : 4,
+			 * 								cols : 40
+			 * 							}
+			 * 						]
+			 * 					}
+			 * 				],
+			 * 				buttons : [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ],
+			 * 				onOk : function() {
+			 * 					// "this" is now a CKEDITOR.dialog object.
+			 * 					// Accessing dialog elements:
+			 * 					var textareaObj = this.<strong>getContentElement</strong>( 'tab1', 'textareaId' );
+			 * 					alert( "You have entered: " + textareaObj.getValue() );
+			 * 				}
+			 * 			};
+			 *
+			 * 			return dialogDefinition;
+			 * 		} );
+			 * 	}
+			 * } );
+			 *
+			 * CKEDITOR.replace( 'editor1', { extraPlugins : 'myplugin' } );
 			 */
 			add : function( name, dialogDefinition )
@@ -1443,6 +1534,6 @@
 	 * passed to "dialogDefinition" event handlers.
 	 * @constructor
-	 * @name CKEDITOR.dialog.dialogDefinitionObject
-	 * @extends CKEDITOR.dialog.dialogDefinition
+	 * @name CKEDITOR.dialog.definitionObject
+	 * @extends CKEDITOR.dialog.definition
 	 * @example
 	 * CKEDITOR.on( 'dialogDefinition', function( evt )
@@ -1467,10 +1558,10 @@
 
 	definitionObject.prototype =
-	/** @lends CKEDITOR.dialog.dialogDefinitionObject.prototype */
+	/** @lends CKEDITOR.dialog.definitionObject.prototype */
 	{
 		/**
 		 * Gets a content definition.
 		 * @param {String} id The id of the content definition.
-		 * @returns {CKEDITOR.dialog.contentDefinition} The content definition
+		 * @returns {CKEDITOR.dialog.definition.content} The content definition
 		 *		matching id.
 		 */
@@ -1483,5 +1574,5 @@
 		 * Gets a button definition.
 		 * @param {String} id The id of the button definition.
-		 * @returns {CKEDITOR.dialog.buttonDefinition} The button definition
+		 * @returns {CKEDITOR.dialog.definition.button} The button definition
 		 *		matching id.
 		 */
@@ -1493,5 +1584,5 @@
 		/**
 		 * Adds a content definition object under this dialog definition.
-		 * @param {CKEDITOR.dialog.contentDefinition} contentDefinition The
+		 * @param {CKEDITOR.dialog.definition.content} contentDefinition The
 		 *		content definition.
 		 * @param {String} [nextSiblingId] The id of an existing content
@@ -1499,5 +1590,5 @@
 		 *		before. Omit if the new content definition is to be inserted as
 		 *		the last item.
-		 * @returns {CKEDITOR.dialog.contentDefinition} The inserted content
+		 * @returns {CKEDITOR.dialog.definition.content} The inserted content
 		 *		definition.
 		 */
@@ -1509,5 +1600,5 @@
 		/**
 		 * Adds a button definition object under this dialog definition.
-		 * @param {CKEDITOR.dialog.buttonDefinition} buttonDefinition The
+		 * @param {CKEDITOR.dialog.definition.button} buttonDefinition The
 		 *		button definition.
 		 * @param {String} [nextSiblingId] The id of an existing button
@@ -1515,5 +1606,5 @@
 		 *		before. Omit if the new button definition is to be inserted as
 		 *		the last item.
-		 * @returns {CKEDITOR.dialog.buttonDefinition} The inserted button
+		 * @returns {CKEDITOR.dialog.definition.button} The inserted button
 		 *		definition.
 		 */
@@ -1526,5 +1617,5 @@
 		 * Removes a content definition from this dialog definition.
 		 * @param {String} id The id of the content definition to be removed.
-		 * @returns {CKEDITOR.dialog.contentDefinition} The removed content
+		 * @returns {CKEDITOR.dialog.definition.content} The removed content
 		 *		definition.
 		 */
@@ -1537,5 +1628,5 @@
 		 * Removes a button definition from the dialog definition.
 		 * @param {String} id The id of the button definition to be removed.
-		 * @returns {CKEDITOR.dialog.buttonDefinition} The removed button
+		 * @returns {CKEDITOR.dialog.definition.button} The removed button
 		 *		definition.
 		 */
@@ -1549,7 +1640,7 @@
 	 * This class is not really part of the API. It is the template of the
 	 * objects representing content pages inside the
-	 * CKEDITOR.dialog.dialogDefinitionObject.
+	 * CKEDITOR.dialog.definitionObject.
 	 * @constructor
-	 * @name CKEDITOR.dialog.contentDefinitionObject
+	 * @name CKEDITOR.dialog.definition.contentObject
 	 * @example
 	 * CKEDITOR.on( 'dialogDefinition', function( evt )
@@ -1572,10 +1663,10 @@
 
 	contentObject.prototype =
-	/** @lends CKEDITOR.dialog.contentDefinitionObject.prototype */
+	/** @lends CKEDITOR.dialog.definition.contentObject.prototype */
 	{
 		/**
 		 * Gets a UI element definition under the content definition.
 		 * @param {String} id The id of the UI element definition.
-		 * @returns {CKEDITOR.dialog.uiElementDefinition}
+		 * @returns {CKEDITOR.dialog.definition.uiElement}
 		 */
 		get : function( id )
@@ -1586,5 +1677,5 @@
 		/**
 		 * Adds a UI element definition to the content definition.
-		 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition The
+		 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition The
 		 *		UI elemnet definition to be added.
 		 * @param {String} nextSiblingId The id of an existing UI element
@@ -1592,5 +1683,5 @@
 		 *		before. Omit if the new button definition is to be inserted as
 		 *		the last item.
-		 * @returns {CKEDITOR.dialog.uiElementDefinition} The element
+		 * @returns {CKEDITOR.dialog.definition.uiElement} The element
 		 *		definition inserted.
 		 */
@@ -1604,5 +1695,5 @@
 		 * @param {String} id The id of the UI element definition to be
 		 *		removed.
-		 * @returns {CKEDITOR.dialog.uiElementDefinition} The element
+		 * @returns {CKEDITOR.dialog.definition.uiElement} The element
 		 *		definition removed.
 		 * @example
@@ -1704,17 +1795,4 @@
 				dialogCover;
 
-		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 )
 		{
@@ -1760,5 +1838,6 @@
 			else if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT )
 				direction = ' cke_resizer_vertical';
-			var resizer = CKEDITOR.dom.element.createFromHtml( '<div class="cke_resizer' + direction + '"' +
+			var resizer = CKEDITOR.dom.element.createFromHtml( '<div' +
+					' class="cke_resizer' + direction + ' cke_resizer_' + editor.lang.dir + '"' +
 					' title="' + CKEDITOR.tools.htmlEncode( editor.lang.resize ) + '"' +
 					' onmousedown="CKEDITOR.tools.callFunction(' + mouseDownFn + ', event )"></div>' );
@@ -1780,8 +1859,4 @@
 				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;
@@ -1791,5 +1866,5 @@
 
 			// 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 ) )
+			if ( ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) )
 				width = Math.max( def.minWidth || 0, internalWidth - wrapperWidth );
 
@@ -1798,6 +1873,7 @@
 
 			dialog.resize( width, height );
-			// The right property might get broken during resizing, so computing it before the resizing.
-			positionDialog( right );
+
+			if ( !dialog._.moved )
+				dialog.layout();
 
 			evt.data.preventDefault();
@@ -1820,22 +1896,4 @@
 				coverDoc.removeListener( 'mouseup', mouseUpHandler );
 				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 );
 			}
 		}
@@ -2087,5 +2145,5 @@
 			 * @constructor
 			 * @param {CKEDITOR.dialog} dialog Parent dialog object.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition Element
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element
 			 * definition. Accepted fields:
 			 * <ul>
@@ -2252,5 +2310,5 @@
 			 * @param {Array} htmlList
 			 * Array of HTML code that this element will output to.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
@@ -2336,5 +2394,5 @@
 			 * @param {Array} htmlList
 			 * Array of HTML code that this element will output to.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
@@ -2533,5 +2591,5 @@
 		 * This function is only called at UI element instantiation, but can
 		 * be overridded in child classes if they require more flexibility.
-		 * @param {CKEDITOR.dialog.uiElementDefinition} definition The UI element
+		 * @param {CKEDITOR.dialog.definition.uiElement} definition The UI element
 		 * definition.
 		 * @returns {CKEDITOR.dialog.uiElement} The current UI element.
@@ -2958,5 +3016,8 @@
 				}
 				else if ( dialogDefinitions == 'failed' )
+				{
+					hideCover();
 					throw new Error( '[CKEDITOR.dialog.openDialog] Dialog "' + dialogName + '" failed when loading definition.' );
+				}
 
 				var me = this;
@@ -3074,5 +3135,5 @@
  * @name CKEDITOR#dialogDefinition
  * @event
- * @param {CKEDITOR.dialog.dialogDefinition} data The dialog defination that
+ * @param {CKEDITOR.dialog.definition} data The dialog defination that
  *		is being loaded.
  * @param {CKEDITOR.editor} editor The editor instance that will use the
@@ -3128,9 +3189,11 @@
 /**
  * Fired when a dialog is being resized. The event is fired on
- * the 'CKEDITOR.dialog' object, not a dialog instance.
+ * both the 'CKEDITOR.dialog' object and the dialog instance
+ * since 3.5.3, previously it's available only in the global object.
  * @name CKEDITOR.dialog#resize
  * @since 3.5
  * @event
- * @param {CKEDITOR.dialog} dialog The dialog being resized.
+ * @param {CKEDITOR.dialog} dialog The dialog being resized (if
+ * it's fired on the dialog itself, this parameter isn't sent).
  * @param {String} skin The skin name.
  * @param {Number} width The new width.
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/dialogadvtab/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/dialogadvtab/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/dialogadvtab/plugin.js	(revision 6655)
@@ -36,12 +36,4 @@
 		var attrName = this.att,
 			value = this.getValue();
-
-		// Broadcast Lang Dir change
-		if ( attrName == 'dir' )
-		{
-			var dir = element.getAttribute( attrName );
-			if ( dir != value && element.getParent() )
-				this._.dialog._.editor.fire( 'dirChanged', { node : element, dir : value || element.getDirection( 1 ) } );
-		}
 
 		if ( value )
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/dialogui/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/dialogui/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/dialogui/plugin.js	(revision 6655)
@@ -125,5 +125,5 @@
 			 * @param {CKEDITOR.dialog} dialog
 			 * Parent dialog object.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
@@ -205,5 +205,5 @@
 			 * @param {CKEDITOR.dialog} dialog
 			 * Parent dialog object.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
@@ -294,5 +294,5 @@
 			 * @param {CKEDITOR.dialog} dialog
 			 * Parent dialog object.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
@@ -345,5 +345,5 @@
 			 * @param {CKEDITOR.dialog} dialog
 			 * Parent dialog object.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
@@ -401,5 +401,5 @@
 			 * @param {CKEDITOR.dialog} dialog
 			 * Parent dialog object.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
@@ -487,5 +487,5 @@
 			 * @param {CKEDITOR.dialog} dialog
 			 * Parent dialog object.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
@@ -570,5 +570,5 @@
 			 * @param {CKEDITOR.dialog} dialog
 			 * Parent dialog object.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
@@ -640,5 +640,5 @@
 			 * @param {CKEDITOR.dialog} dialog
 			 * Parent dialog object.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
@@ -713,5 +713,5 @@
 			 * @param {CKEDITOR.dialog} dialog
 			 * Parent dialog object.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
@@ -766,5 +766,5 @@
 				 * @name CKEDITOR.ui.dialog.html
 				 * @param {CKEDITOR.dialog} dialog Parent dialog object.
-				 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition Element definition.
+				 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element definition.
 				 * Accepted fields:
 				 * <ul>
@@ -838,5 +838,5 @@
 			 * @param {Array} htmlList
 			 * Array of HTML code that this element will output to.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/domiterator/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/domiterator/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/domiterator/plugin.js	(revision 6655)
@@ -32,5 +32,7 @@
 	var beginWhitespaceRegex = /^[\r\n\t ]+$/,
 		// Ignore bookmark nodes.(#3783)
-		bookmarkGuard = CKEDITOR.dom.walker.bookmark( false, true );
+		bookmarkGuard = CKEDITOR.dom.walker.bookmark( false, true ),
+		whitespacesGuard = CKEDITOR.dom.walker.whitespaces( true ),
+		skipGuard = function( node ) { return bookmarkGuard( node ) && whitespacesGuard( node ); };
 
 	// Get a reference for the next element, bookmark nodes are skipped.
@@ -208,5 +210,5 @@
 				if ( range && !closeRange )
 				{
-					while ( !currentNode.getNext( bookmarkGuard ) && !isLast )
+					while ( !currentNode.getNext( skipGuard ) && !isLast )
 					{
 						var parentNode = currentNode.getParent();
@@ -216,5 +218,8 @@
 						{
 							closeRange = 1;
+							includeNode = 0;
 							isLast = isLast || ( parentNode.equals( lastNode) );
+							// Make sure range includes bookmarks at the end of the block. (#7359)
+							range.setEndAt( parentNode, CKEDITOR.POSITION_BEFORE_END );
 							break;
 						}
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/editingblock/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/editingblock/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/editingblock/plugin.js	(revision 6655)
@@ -154,4 +154,6 @@
 	CKEDITOR.editor.prototype.setMode = function( mode )
 	{
+		this.fire( 'beforeSetMode', { newMode : mode } );
+
 		var data,
 			holderElement = this.getThemeSpace( 'contents' ),
@@ -196,4 +198,5 @@
 	CKEDITOR.editor.prototype.focus = function()
 	{
+		this.forceNextSelectionCheck();
 		var mode = getMode( this );
 		if ( mode )
@@ -214,4 +217,5 @@
 /**
  * Sets whether the editor should have the focus when the page loads.
+ * @name CKEDITOR.config.startupFocus
  * @type Boolean
  * @default false
@@ -243,6 +247,14 @@
 
 /**
- * Fired before changing the editing mode
+ * Fired before changing the editing mode.
  * @name CKEDITOR.editor#beforeModeUnload
  * @event
  */
+
+ /**
+ * Fired before the editor mode is set.
+ * @name CKEDITOR.editor#beforeSetMode
+ * @event
+ * @since 3.5.3
+ * @param {String} newMode The name of the mode which is about to be set.
+ */
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/elementspath/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/elementspath/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/elementspath/plugin.js	(revision 6655)
@@ -15,4 +15,5 @@
 		toolbarFocus :
 		{
+			editorFocus : false,
 			exec : function( editor )
 			{
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/enterkey/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/enterkey/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/enterkey/plugin.js	(revision 6655)
@@ -76,5 +76,6 @@
 			{
 				previousBlock.breakParent( node );
-				range.moveToElementEditStart( previousBlock.getNext() );
+				node = previousBlock.getNext();
+				range.moveToElementEditStart( node );
 				previousBlock.move( previousBlock.getPrevious() );
 			}
@@ -111,4 +112,6 @@
 						// Otherwise, duplicate the previous block.
 						newBlock = previousBlock.clone();
+						// Value attribute of list item should not be duplicated (#7330).
+						newBlock.is( 'li' ) && newBlock.removeAttribute( 'value' );
 					}
 				}
@@ -118,7 +121,13 @@
 				if ( !newBlock )
 				{
-					newBlock = doc.createElement( blockTag );
-					if ( previousBlock && ( newBlockDir = previousBlock.getDirection() ) )
-						newBlock.setAttribute( 'dir', newBlockDir );
+					// We have already created a new list item. (#6849)
+					if ( node && node.is( 'li' ) )
+						newBlock = node;
+					else
+					{
+						newBlock = doc.createElement( blockTag );
+						if ( previousBlock && ( newBlockDir = previousBlock.getDirection() ) )
+							newBlock.setAttribute( 'dir', newBlockDir );
+					}
 				}
 				// Force the enter block unless we're talking of a list item.
@@ -151,5 +160,6 @@
 					newBlock.appendBogus();
 
-				range.insertNode( newBlock );
+				if ( !newBlock.getParent() )
+					range.insertNode( newBlock );
 
 				// This is tricky, but to make the new block visible correctly
@@ -266,27 +276,25 @@
 				range.insertNode( lineBreak );
 
-				// A text node is required by Gecko only to make the cursor blink.
-				// We need some text inside of it, so the bogus <br> is properly
-				// created.
-				if ( !CKEDITOR.env.ie )
-					doc.createText( '\ufeff' ).insertAfter( lineBreak );
-
-				// If we are at the end of a block, we must be sure the bogus node is available in that block.
-				if ( isEndOfBlock && !CKEDITOR.env.ie )
-					lineBreak.getParent().appendBogus();
-
-				// Now we can remove the text node contents, so the caret doesn't
-				// stop on it.
-				if ( !CKEDITOR.env.ie )
-					lineBreak.getNext().$.nodeValue = '';
 				// IE has different behavior regarding position.
 				if ( CKEDITOR.env.ie )
 					range.setStartAt( lineBreak, CKEDITOR.POSITION_AFTER_END );
 				else
+				{
+					// A text node is required by Gecko only to make the cursor blink.
+					// We need some text inside of it, so the bogus <br> is properly
+					// created.
+					doc.createText( '\ufeff' ).insertAfter( lineBreak );
+
+					// If we are at the end of a block, we must be sure the bogus node is available in that block.
+					if ( isEndOfBlock )
+						lineBreak.getParent().appendBogus();
+
+					// Now we can remove the text node contents, so the caret doesn't
+					// stop on it.
+					lineBreak.getNext().$.nodeValue = '';
+
 					range.setStartAt( lineBreak.getNext(), CKEDITOR.POSITION_AFTER_START );
 
-				// Scroll into view, for non IE.
-				if ( !CKEDITOR.env.ie )
-				{
+					// Scroll into view, for non IE.
 					var dummy = null;
 
@@ -364,5 +372,4 @@
 	}
 
-
 	function getRange( editor )
 	{
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/filebrowser/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/filebrowser/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/filebrowser/plugin.js	(revision 6655)
@@ -113,5 +113,5 @@
 ( function()
 {
-	/**
+	/*
 	 * Adds (additional) arguments to given url.
 	 *
@@ -136,5 +136,5 @@
 	}
 
-	/**
+	/*
 	 * Make a string's first character uppercase.
 	 *
@@ -149,5 +149,5 @@
 	}
 
-	/**
+	/*
 	 * The onlick function assigned to the 'Browse Server' button. Opens the
 	 * file browser and updates target field when file is selected.
@@ -178,5 +178,5 @@
 	}
 
-	/**
+	/*
 	 * The onlick function assigned to the 'Upload' button. Makes the final
 	 * decision whether form is really submitted and updates target field when
@@ -203,5 +203,5 @@
 	}
 
-	/**
+	/*
 	 * Setups the file element.
 	 *
@@ -224,5 +224,5 @@
 	}
 
-	/**
+	/*
 	 * Traverse through the content definition and attach filebrowser to
 	 * elements with 'filebrowser' attribute.
@@ -230,8 +230,8 @@
 	 * @param String
 	 *            dialogName Dialog name.
-	 * @param {CKEDITOR.dialog.dialogDefinitionObject}
+	 * @param {CKEDITOR.dialog.definitionObject}
 	 *            definition Dialog definition.
 	 * @param {Array}
-	 *            elements Array of {@link CKEDITOR.dialog.contentDefinition}
+	 *            elements Array of {@link CKEDITOR.dialog.definition.content}
 	 *            objects.
 	 */
@@ -309,5 +309,5 @@
 	}
 
-	/**
+	/*
 	 * Updates the target element with the url of uploaded/selected file.
 	 *
@@ -334,8 +334,8 @@
 	}
 
-	/**
+	/*
 	 * Returns true if filebrowser is configured in one of the elements.
 	 *
-	 * @param {CKEDITOR.dialog.dialogDefinitionObject}
+	 * @param {CKEDITOR.dialog.definitionObject}
 	 *            definition Dialog definition.
 	 * @param String
@@ -501,2 +501,24 @@
  * config.filebrowserWindowFeatures = 'resizable=yes,scrollbars=no';
  */
+
+/**
+ * The width of the file browser popup window. It can be a number or a percent string.
+ * @name CKEDITOR.config.filebrowserWindowWidth
+ * @type Number|String
+ * @default '80%'
+ * @example
+ * config.filebrowserWindowWidth = 750;
+ * @example
+ * config.filebrowserWindowWidth = '50%';
+ */
+
+/**
+ * The height of the file browser popup window. It can be a number or a percent string.
+ * @name CKEDITOR.config.filebrowserWindowHeight
+ * @type Number|String
+ * @default '70%'
+ * @example
+ * config.filebrowserWindowHeight = 580;
+ * @example
+ * config.filebrowserWindowHeight = '50%';
+ */
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/flash/dialogs/flash.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/flash/dialogs/flash.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/flash/dialogs/flash.js	(revision 6655)
@@ -29,5 +29,5 @@
 		codebase : [ { type : ATTRTYPE_OBJECT, name : 'codebase'} ],
 		pluginspage : [ { type : ATTRTYPE_EMBED, name : 'pluginspage' } ],
-		src : [ { type : ATTRTYPE_PARAM, name : 'movie' }, { type : ATTRTYPE_EMBED, name : 'src' } ],
+		src : [ { type : ATTRTYPE_PARAM, name : 'movie' }, { type : ATTRTYPE_EMBED, name : 'src' }, { type : ATTRTYPE_OBJECT, name :  'data' } ],
 		name : [ { type : ATTRTYPE_EMBED, name : 'name' } ],
 		align : [ { type : ATTRTYPE_OBJECT, name : 'align' } ],
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/flash/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/flash/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/flash/plugin.js	(revision 6655)
@@ -108,5 +108,5 @@
 									classId = attributes.classid && String( attributes.classid ).toLowerCase();
 
-								if ( !classId )
+								if ( !classId && !isFlashEmbed( element ) )
 								{
 									// Look for the inner <embed>
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/forms/dialogs/hiddenfield.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/forms/dialogs/hiddenfield.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/forms/dialogs/hiddenfield.js	(revision 6655)
@@ -31,5 +31,7 @@
 				value = this.getValueOf( 'info', 'value' ),
 				editor = this.getParentEditor(),
-				element = CKEDITOR.env.ie ? editor.document.createElement( '<input name="' + CKEDITOR.tools.htmlEncode( name ) + '">' ) : editor.document.createElement( 'input' );
+				element = CKEDITOR.env.ie && !( CKEDITOR.document.$.documentMode >= 8 ) ?
+					editor.document.createElement( '<input name="' + CKEDITOR.tools.htmlEncode( name ) + '">' )
+					: editor.document.createElement( 'input' );
 
 			element.setAttribute( 'type', 'hidden' );
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/htmldataprocessor/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/htmldataprocessor/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/htmldataprocessor/plugin.js	(revision 6655)
@@ -80,4 +80,7 @@
 
 	var dtd = CKEDITOR.dtd;
+
+	// Define orders of table elements.
+	var tableOrder = [ 'caption', 'colgroup', 'col', 'thead', 'tfoot', 'tbody' ];
 
 	// Find out the list of block-like tags that can contain <br>.
@@ -161,4 +164,15 @@
 				},
 
+				// The contents of table should be in correct order (#4809).
+				table : function( element )
+				{
+					var children = element.children;
+					children.sort( function ( node1, node2 )
+								   {
+									   return node1.type == CKEDITOR.NODE_ELEMENT && node2.type == node1.type ?
+											CKEDITOR.tools.indexOf( tableOrder, node1.name )  > CKEDITOR.tools.indexOf( tableOrder, node2.name ) ? 1 : -1 : 0;
+								   } );
+				},
+
 				embed : function( element )
 				{
@@ -239,21 +253,4 @@
 					return CKEDITOR.tools.ltrim( value.replace( /(?:^|\s+)cke_[^\s]*/g, '' ) ) || false;
 				}
-			},
-
-			comment : function( contents )
-			{
-				// If this is a comment for protected source.
-				if ( contents.substr( 0, protectedSourceMarker.length ) == protectedSourceMarker )
-				{
-					// Remove the extra marker for real comments from it.
-					if ( contents.substr( protectedSourceMarker.length, 3 ) == '{C}' )
-						contents = contents.substr( protectedSourceMarker.length + 3 );
-					else
-						contents = contents.substr( protectedSourceMarker.length );
-
-					return new CKEDITOR.htmlParser.cdata( decodeURIComponent( contents ) );
-				}
-
-				return contents;
 			}
 		};
@@ -380,7 +377,22 @@
 	}
 
-	function protectSource( data, protectRegexes )
+	function unprotectSource( html, editor )
+	{
+		var store = editor._.dataStore;
+
+		return html.replace( /<!--\{cke_protected\}([\s\S]+?)-->/g, function( match, data )
+			{
+				return decodeURIComponent( data );
+			}).replace( /\{cke_protected_(\d+)\}/g, function( match, id )
+			{
+				return store && store[ id ] || '';
+			});
+	}
+
+	function protectSource( data, editor )
 	{
 		var protectedHtml = [],
+			protectRegexes = editor.config.protectedSource,
+			store = editor._.dataStore || ( editor._.dataStore = { id : 1 } ),
 			tempRegex = /<\!--\{cke_temp(comment)?\}(\d*?)-->/g;
 
@@ -415,5 +427,8 @@
 						}
 					);
-					return  '<!--{cke_temp}' + ( protectedHtml.push( match ) - 1 ) + '-->';
+
+					// Avoid protecting over protected, e.g. /\{.*?\}/
+					return ( /cke_temp(comment)?/ ).test( match ) ? match
+						: '<!--{cke_temp}' + ( protectedHtml.push( match ) - 1 ) + '-->';
 				});
 		}
@@ -426,5 +441,15 @@
 			}
 		);
-		return data;
+
+		// Different protection pattern is used for those that
+		// live in attributes to avoid from being HTML encoded.
+		return data.replace( /(['"]).*?\1/g, function ( match )
+		{
+			return match.replace( /<!--\{cke_protected\}([\s\S]+?)-->/g, function( match, data )
+			{
+				store[ store.id ] = decodeURIComponent( data );
+				return '{cke_protected_'+ ( store.id++ )  + '}';
+			});
+		});
 	}
 
@@ -472,5 +497,5 @@
 			// it up and apply the filter.
 
-			data = protectSource( data, this.editor.config.protectedSource );
+			data = protectSource( data, this.editor );
 
 			// Before anything, we must protect the URL attributes as the
@@ -534,5 +559,11 @@
 			fragment.writeHtml( writer, this.htmlFilter );
 
-			return writer.getHtml( true );
+			var data = writer.getHtml( true );
+
+			// Restore those non-HTML protected source. (#4475,#4880)
+			data = unprotectRealComments( data );
+			data = unprotectSource( data, this.editor );
+
+			return data;
 		}
 	};
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/iframedialog/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/iframedialog/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/iframedialog/plugin.js	(revision 6655)
@@ -54,5 +54,5 @@
 			 * @param {CKEDITOR.dialog} dialog
 			 * Parent dialog object.
-			 * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition
+			 * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition
 			 * The element definition. Accepted fields:
 			 * <ul>
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/image/dialogs/image.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/image/dialogs/image.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/image/dialogs/image.js	(revision 6655)
@@ -122,9 +122,8 @@
 				return null;
 
-			var ratioButton = CKEDITOR.document.getById( btnLockSizesId );
-
-			if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )
+			// Check image ratio and original image ratio, but respecting user's preference.
+			if ( value == 'check' )
 			{
-				if ( value == 'check' )			// Check image ratio and original image ratio.
+				if ( !dialog.userlockRatio && oImageOriginal.getCustomData( 'isReady' ) == 'true'  )
 				{
 					var width = dialog.getValueOf( 'info', 'txtWidth' ),
@@ -142,12 +141,14 @@
 					}
 				}
-				else if ( value != undefined )
-					dialog.lockRatio = value;
-				else
-					dialog.lockRatio = !dialog.lockRatio;
 			}
-			else if ( value != 'check' )		// I can't lock ratio if ratio is unknown.
-				dialog.lockRatio = false;
-
+			else if ( value != undefined )
+				dialog.lockRatio = value;
+			else
+			{
+				dialog.userlockRatio = 1;
+				dialog.lockRatio = !dialog.lockRatio;
+			}
+
+			var ratioButton = CKEDITOR.document.getById( btnLockSizesId );
 			if ( dialog.lockRatio )
 				ratioButton.removeClass( 'cke_btn_unlocked' );
@@ -197,5 +198,5 @@
 			var dialog = this.getDialog(),
 				value = '',
-				dimension = (( this.id == 'txtWidth' )? 'width' : 'height' ),
+				dimension = this.id == 'txtWidth' ? 'width' : 'height',
 				size = element.getAttribute( dimension );
 
@@ -276,4 +277,5 @@
 
 				this.lockRatio = true;
+				this.userlockRatio = 0;
 				this.dontResetSize = false;
 				this.firstLoad = true;
@@ -336,10 +338,10 @@
 					// Fill out all fields.
 					this.setupContent( IMAGE, this.imageElement );
-
-					// Refresh LockRatio button
-					switchLockRatio ( this, true );
 				}
 				else
 					this.imageElement =  editor.document.createElement( 'img' );
+
+				// Refresh LockRatio button
+				switchLockRatio ( this, true );
 
 				// Dont show preview if no URL given.
@@ -420,9 +422,9 @@
 						if ( !this.linkEditMode )
 						{
-							editor.insertElement(this.linkElement);
-							this.linkElement.append(this.imageElement, false);
+							editor.insertElement( this.linkElement );
+							this.linkElement.append( this.imageElement, false );
 						}
 						else	 //Link already exists, image not.
-							editor.insertElement(this.imageElement );
+							editor.insertElement( this.imageElement );
 					}
 					else
@@ -636,8 +638,9 @@
 															validate : function()
 															{
-																var aMatch  =  this.getValue().match( regexGetSizeOrEmpty );
-																if ( !aMatch )
+																var aMatch  =  this.getValue().match( regexGetSizeOrEmpty ),
+																	isValid = !!( aMatch && parseInt( aMatch[1], 10 ) !== 0 );
+																if ( !isValid )
 																	alert( editor.lang.common.invalidWidth );
-																return !!aMatch;
+																return isValid;
 															},
 															setup : setupDimension,
@@ -649,5 +652,5 @@
 																	if ( value )
 																		element.setStyle( 'width', CKEDITOR.tools.cssLength( value ) );
-																	else if ( !value && this.isChanged( ) )
+																	else
 																		element.removeStyle( 'width' );
 
@@ -685,8 +688,9 @@
 															validate : function()
 															{
-																var aMatch = this.getValue().match( regexGetSizeOrEmpty );
-																if ( !aMatch )
+																var aMatch = this.getValue().match( regexGetSizeOrEmpty ),
+																	isValid = !!( aMatch && parseInt( aMatch[1], 10 ) !== 0 );
+																if ( !isValid )
 																	alert( editor.lang.common.invalidHeight );
-																return !!aMatch;
+																return isValid;
 															},
 															setup : setupDimension,
@@ -698,9 +702,8 @@
 																	if ( value )
 																		element.setStyle( 'height', CKEDITOR.tools.cssLength( value ) );
-																	else if ( !value && this.isChanged( ) )
+																	else
 																		element.removeStyle( 'height' );
 
-																	if ( !internalCommit && type == IMAGE )
-																		element.removeAttribute( 'height' );
+																	!internalCommit && element.removeAttribute( 'height' );
 																}
 																else if ( type == PREVIEW )
@@ -735,8 +738,8 @@
 														if ( resetButton )
 														{
-															resetButton.on( 'click', function(evt)
+															resetButton.on( 'click', function( evt )
 																{
 																	resetSize( this );
-																	evt.data.preventDefault();
+																	evt.data && evt.data.preventDefault();
 																}, this.getDialog() );
 															resetButton.on( 'mouseover', function()
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/image/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/image/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/image/plugin.js	(revision 6655)
@@ -31,5 +31,5 @@
 				var element = evt.data.element;
 
-				if ( element.is( 'img' ) && !element.data( 'cke-realelement' ) )
+				if ( element.is( 'img' ) && !element.data( 'cke-realelement' ) && !element.isReadOnly() )
 					evt.data.dialog = 'image';
 			});
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/indent/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/indent/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/indent/plugin.js	(revision 6655)
@@ -16,8 +16,8 @@
 	function onSelectionChange( evt )
 	{
-		var editor = evt.editor;
-
-		var elementPath = evt.data.path,
-				list = elementPath && elementPath.contains( listNodeNames );
+		var editor = evt.editor,
+			elementPath = evt.data.path,
+			list = elementPath && elementPath.contains( listNodeNames ),
+			firstBlock = elementPath.block || elementPath.blockLimit;
 
 		if ( list )
@@ -27,6 +27,4 @@
 			return this.setState( CKEDITOR.TRISTATE_OFF );
 
-		var path = evt.data.path,
-			firstBlock = path.block || path.blockLimit;
 		if ( !firstBlock )
 			return this.setState( CKEDITOR.TRISTATE_DISABLED );
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/keystrokes/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/keystrokes/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/keystrokes/plugin.js	(revision 6655)
@@ -211,5 +211,5 @@
 	[ CKEDITOR.CTRL + 85 /*U*/, 'underline' ],
 
-	[ CKEDITOR.ALT + 109 /*-*/, 'toolbarCollapse' ],
+	[ CKEDITOR.ALT + ( CKEDITOR.env.ie || CKEDITOR.env.webkit ? 189 : 109 ) /*-*/, 'toolbarCollapse' ],
 	[ CKEDITOR.ALT + 48 /*0*/, 'a11yHelp' ]
 ];
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/link/dialogs/anchor.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/link/dialogs/anchor.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/link/dialogs/anchor.js	(revision 6655)
@@ -27,5 +27,5 @@
 			// Always create a new anchor, because of IE BUG.
 			var name = this.getValueOf( 'info', 'txtName' ),
-				element = CKEDITOR.env.ie ?
+				element = CKEDITOR.env.ie && !( CKEDITOR.document.$.documentMode >= 8 ) ?
 				editor.document.createElement( '<a name="' + CKEDITOR.tools.htmlEncode( name ) + '">' ) :
 				editor.document.createElement( 'a' );
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/link/dialogs/link.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/link/dialogs/link.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/link/dialogs/link.js	(revision 6655)
@@ -197,5 +197,6 @@
 					while ( ( featureMatch = popupFeaturesRegex.exec( onclickMatch[2] ) ) )
 					{
-						if ( featureMatch[2] == 'yes' || featureMatch[2] == '1' )
+						// Some values should remain numbers (#7300)
+						if ( ( featureMatch[2] == 'yes' || featureMatch[2] == '1' ) && !( featureMatch[1] in { height:1, width:1, top:1, left:1 } ) )
 							retval.target[ featureMatch[1] ] = true;
 						else if ( isFinite( featureMatch[2] ) )
@@ -238,4 +239,5 @@
 			advAttr( 'advCharset', 'charset' );
 			advAttr( 'advStyles', 'style' );
+			advAttr( 'advRel', 'rel' );
 		}
 
@@ -1122,6 +1124,15 @@
 							{
 								type : 'hbox',
+								widths : [ '45%', '55%' ],
 								children :
 								[
+									{
+										type : 'text',
+										label : linkLang.rel,
+										'default' : '',
+										id : 'advRel',
+										setup : setupAdvParams,
+										commit : commitAdvParams
+									},
 									{
 										type : 'text',
@@ -1131,5 +1142,4 @@
 										setup : setupAdvParams,
 										commit : commitAdvParams
-
 									}
 								]
@@ -1307,4 +1317,5 @@
 				advAttr( 'advCharset', 'charset' );
 				advAttr( 'advStyles', 'style' );
+				advAttr( 'advRel', 'rel' );
 			}
 
@@ -1342,5 +1353,5 @@
 				// IE BUG: Setting the name attribute to an existing link doesn't work.
 				// Must re-create the link from weired syntax to workaround.
-				if ( CKEDITOR.env.ie && attributes.name != element.getAttribute( 'name' ) )
+				if ( CKEDITOR.env.ie && !( CKEDITOR.document.$.documentMode >= 8 ) && attributes.name != element.getAttribute( 'name' ) )
 				{
 					var newElement = new CKEDITOR.dom.element( '<a name="' + CKEDITOR.tools.htmlEncode( attributes.name ) + '">',
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/list/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/list/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/list/plugin.js	(revision 6655)
@@ -38,4 +38,8 @@
 			{
 				var listItem = listNode.getChild( i );
+
+				// Fixing malformed nested lists by moving it into a previous list item. (#6236)
+				if( listItem.type == CKEDITOR.NODE_ELEMENT && listItem.getName() in CKEDITOR.dtd.$list )
+					CKEDITOR.plugins.list.listToArray( listItem, database, baseArray, baseIndentLevel + 1 );
 
 				// It may be a text node or some funny stuff.
@@ -84,4 +88,5 @@
 				indentLevel = Math.max( listArray[ baseIndex ].indent, 0 ),
 				currentListItem = null,
+				itemDir,
 				paragraphName = ( paragraphMode == CKEDITOR.ENTER_P ? 'p' : 'div' );
 			while ( 1 )
@@ -103,5 +108,9 @@
 				else if ( item.indent == Math.max( indentLevel, 0 ) + 1 )
 				{
-					var listData = CKEDITOR.plugins.list.arrayToList( listArray, null, currentIndex, paragraphMode );
+					// Maintain original direction (#6861).
+					var orgDir = item.element.getDirection( 1 ),
+						currDir = listArray[ currentIndex - 1 ].element.getDirection( 1 ),
+						listData = CKEDITOR.plugins.list.arrayToList( listArray, null, currentIndex, paragraphMode,
+						currDir != orgDir ? orgDir: null );
 
 					// If the next block is an <li> with another list tree as the first
@@ -115,7 +124,11 @@
 				else if ( item.indent == -1 && !baseIndex && item.grandparent )
 				{
-					currentListItem;
 					if ( listNodeNames[ item.grandparent.getName() ] )
+					{
 						currentListItem = item.element.clone( false, true );
+						itemDir = item.element.getDirection( 1 );
+						item.grandparent.getDirection( 1 ) != itemDir &&
+							currentListItem.setAttribute( 'dir', itemDir );
+					}
 					else
 					{
@@ -125,5 +138,5 @@
 							currentListItem = doc.createElement( paragraphName );
 							item.element.copyAttributes( currentListItem, { type:1, value:1 } );
-							var itemDir = item.element.getDirection() || dir;
+							itemDir = item.element.getDirection() || dir;
 							itemDir &&
 								currentListItem.setAttribute( 'dir', itemDir );
@@ -445,7 +458,6 @@
 		exec : function( editor )
 		{
-			editor.focus();
-
 			var doc = editor.document,
+				config = editor.config,
 				selection = editor.getSelection(),
 				ranges = selection && selection.getRanges( true );
@@ -461,19 +473,10 @@
 			{
 				var body = doc.getBody();
-				body.trim();
-				if ( !body.getFirst() )
-				{
-					var paragraph = doc.createElement( editor.config.enterMode == CKEDITOR.ENTER_P ? 'p' :
-							( editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'br' ) );
-					paragraph.appendTo( body );
-					ranges = new CKEDITOR.dom.rangeList( [ new CKEDITOR.dom.range( doc ) ] );
-					// IE exception on inserting anything when anchor inside <br>.
-					if ( paragraph.is( 'br' ) )
-					{
-						ranges[ 0 ].setStartBefore( paragraph );
-						ranges[ 0 ].setEndAfter( paragraph );
-					}
-					else
-						ranges[ 0 ].selectNodeContents( paragraph );
+				if ( !body.getFirst( nonEmpty ) )
+				{
+					config.enterMode == CKEDITOR.ENTER_BR ?
+						body.appendBogus() :
+						ranges[ 0 ].fixBlock( 1, config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' );
+
 					selection.selectRanges( ranges );
 				}
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/maximize/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/maximize/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/maximize/plugin.js	(revision 6655)
@@ -204,5 +204,5 @@
 							mainDocument.getDocumentElement().setStyles( styles );
 							!CKEDITOR.env.gecko && mainDocument.getDocumentElement().setStyle( 'position', 'fixed' );
-							mainDocument.getBody().setStyles( styles );
+							!( CKEDITOR.env.gecko && CKEDITOR.env.quirks ) && mainDocument.getBody().setStyles( styles );
 
 							// Scroll to the top left (IE needs some time for it - #4923).
@@ -212,5 +212,6 @@
 
 							// Resize and move to top left.
-							container.setStyle( 'position', 'absolute' );
+							// Special treatment for FF Quirks (#7284)
+							container.setStyle( 'position', CKEDITOR.env.gecko && CKEDITOR.env.quirks ? 'fixed' : 'absolute' );
 							container.$.offsetLeft;			// SAFARI BUG: See #2066.
 							container.setStyles(
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/newpage/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/newpage/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/newpage/plugin.js	(revision 6655)
@@ -30,4 +30,5 @@
 								command: command
 							} );
+							editor.selectionChange();
 
 						}, 200 );
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/pastefromword/filter/default.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/pastefromword/filter/default.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/pastefromword/filter/default.js	(revision 6655)
@@ -119,4 +119,54 @@
 	};
 
+	// 1. move consistent list item styles up to list root.
+	// 2. clear out unnecessary list item numbering.
+	function postProcessList( list )
+	{
+		var children = list.children,
+			child,
+			attrs,
+			count = list.children.length,
+			match,
+			mergeStyle,
+			styleTypeRegexp = /list-style-type:(.*?)(?:;|$)/,
+			stylesFilter = CKEDITOR.plugins.pastefromword.filters.stylesFilter;
+
+		attrs = list.attributes;
+		if ( styleTypeRegexp.exec( attrs.style ) )
+			return;
+
+		for ( var i = 0; i < count; i++ )
+		{
+			child = children[ i ];
+
+			if ( child.attributes.value && Number( child.attributes.value ) == i + 1 )
+				delete child.attributes.value;
+
+			match = styleTypeRegexp.exec( child.attributes.style );
+
+			if ( match )
+			{
+				if ( match[ 1 ] == mergeStyle || !mergeStyle )
+					mergeStyle = match[ 1 ];
+				else
+				{
+					mergeStyle = null;
+					break;
+				}
+			}
+		}
+
+		if ( mergeStyle )
+		{
+			for ( i = 0; i < count; i++ )
+			{
+				attrs = children[ i ].attributes;
+				attrs.style && ( attrs.style = stylesFilter( [ [ 'list-style-type'] ] )( attrs.style ) || '' );
+			}
+
+			list.addStyle( 'list-style-type', mergeStyle );
+		}
+	}
+
 	var cssLengthRelativeUnit = /^([.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz){1}?/i;
 	var emptyMarginRegex = /^(?:\b0[^\s]*\s*){1,4}$/;		// e.g. 0px 0pt 0px
@@ -125,62 +175,49 @@
 		upperRomanLiteralRegex = new RegExp( romanLiternalPattern.toUpperCase() );
 
+	var orderedPatterns = { 'decimal' : /\d+/, 'lower-roman': lowerRomanLiteralRegex, 'upper-roman': upperRomanLiteralRegex, 'lower-alpha' : /^[a-z]+$/, 'upper-alpha': /^[A-Z]+$/ },
+		unorderedPatterns = { 'disc' : /[l\u00B7\u2002]/, 'circle' : /[\u006F\u00D8]/,'square' : /[\u006E\u25C6]/},
+		listMarkerPatterns = { 'ol' : orderedPatterns, 'ul' : unorderedPatterns },
+		romans = [ [1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'], [50, 'L'], [40, 'XL'], [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I'] ],
+		alpahbets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+	// Convert roman numbering back to decimal.
+	function fromRoman( str )
+	 {
+		 str = str.toUpperCase();
+		 var l = romans.length, retVal = 0;
+		 for ( var i = 0; i < l; ++i )
+		 {
+			 for ( var j = romans[i], k = j[1].length; str.substr( 0, k ) == j[1]; str = str.substr( k ) )
+				 retVal += j[ 0 ];
+		 }
+		 return retVal;
+	 }
+
+	// Convert alphabet numbering back to decimal.
+	function fromAlphabet( str )
+	{
+		str = str.toUpperCase();
+		var l = alpahbets.length, retVal = 1;
+		for ( var x = 1; str.length > 0; x *= l )
+		{
+			retVal += alpahbets.indexOf( str.charAt( str.length - 1 ) ) * x;
+			str = str.substr( 0, str.length - 1 );
+		}
+		return retVal;
+	}
+
 	var listBaseIndent = 0,
-		 previousListItemMargin;
-
-	CKEDITOR.plugins.pastefromword =
+		previousListItemMargin = null,
+		previousListId;
+
+	var plugin = ( CKEDITOR.plugins.pastefromword =
 	{
 		utils :
 		{
 			// Create a <cke:listbullet> which indicate an list item type.
-			createListBulletMarker : function ( bulletStyle, bulletText )
+			createListBulletMarker : function ( bullet, bulletText )
 			{
-				var marker = new CKEDITOR.htmlParser.element( 'cke:listbullet' ),
-					listType;
-
-				// TODO: Support more list style type from MS-Word.
-				if ( !bulletStyle )
-				{
-					bulletStyle = 'decimal';
-					listType = 'ol';
-				}
-				else if ( bulletStyle[ 2 ] )
-				{
-					if ( !isNaN( bulletStyle[ 1 ] ) )
-						bulletStyle = 'decimal';
-					else if ( lowerRomanLiteralRegex.test( bulletStyle[ 1 ] ) )
-						bulletStyle = 'lower-roman';
-					else if ( upperRomanLiteralRegex.test( bulletStyle[ 1 ] ) )
-						bulletStyle = 'upper-roman';
-					else if ( /^[a-z]+$/.test( bulletStyle[ 1 ] ) )
-						bulletStyle = 'lower-alpha';
-					else if ( /^[A-Z]+$/.test( bulletStyle[ 1 ] ) )
-						bulletStyle = 'upper-alpha';
-					// Simply use decimal for the rest forms of unrepresentable
-					// numerals, e.g. Chinese...
-					else
-						bulletStyle = 'decimal';
-
-					listType = 'ol';
-				}
-				else
-				{
-					if ( /[l\u00B7\u2002]/.test( bulletStyle[ 1 ] ) )
-						bulletStyle = 'disc';
-					else if ( /[\u006F\u00D8]/.test( bulletStyle[ 1 ] ) )
-						bulletStyle = 'circle';
-					else if ( /[\u006E\u25C6]/.test( bulletStyle[ 1 ] ) )
-						bulletStyle = 'square';
-					else
-						bulletStyle = 'disc';
-
-					listType = 'ul';
-				}
-
-				// Represent list type as CSS style.
-				marker.attributes =
-				{
-					'cke:listtype' : listType,
-					'style' : 'list-style-type:' + bulletStyle + ';'
-				};
+				var marker = new CKEDITOR.htmlParser.element( 'cke:listbullet' );
+				marker.attributes = { 'cke:listsymbol' : bullet[ 0 ] };
 				marker.add( new CKEDITOR.htmlParser.text( bulletText ) );
 				return marker;
@@ -208,6 +245,6 @@
 
 				if ( ( listMarker = element.removeAnyChildWithName( 'cke:listbullet' ) )
-					  && listMarker.length
-					  && ( listMarker = listMarker[ 0 ] ) )
+						&& listMarker.length
+						&& ( listMarker = listMarker[ 0 ] ) )
 				{
 					element.name = 'cke:li';
@@ -215,34 +252,56 @@
 					if ( attrs.style )
 					{
-						attrs.style = CKEDITOR.plugins.pastefromword.filters.stylesFilter(
+						attrs.style = plugin.filters.stylesFilter(
 								[
 									// Text-indent is not representing list item level any more.
 									[ 'text-indent' ],
 									[ 'line-height' ],
-									// Resolve indent level from 'margin-left' value.
+									// First attempt is to resolve indent level from on a constant margin increment.
 									[ ( /^margin(:?-left)?$/ ), null, function( margin )
 									{
-										// Be able to deal with component/short-hand form style.
+										// Deal with component/short-hand form.
 										var values = margin.split( ' ' );
-										margin = CKEDITOR.plugins.pastefromword.utils.convertToPx( values[ 3 ] || values[ 1 ] || values [ 0 ] );
+										margin = plugin.utils.convertToPx( values[ 3 ] || values[ 1 ] || values [ 0 ] );
 										margin = parseInt( margin, 10 );
 
-										// Figure out the indent unit by looking at the first increament.
-										if ( !listBaseIndent && previousListItemMargin && margin > previousListItemMargin )
+										// Figure out the indent unit by checking the first time of incrementation.
+										if ( !listBaseIndent && previousListItemMargin !== null && margin > previousListItemMargin )
 											listBaseIndent = margin - previousListItemMargin;
 
-										attrs[ 'cke:margin' ] = previousListItemMargin = margin;
+										previousListItemMargin = margin;
+
+										attrs[ 'cke:indent' ] = listBaseIndent && ( Math.ceil( margin / listBaseIndent ) + 1 ) || 1;
+									} ],
+									// The best situation: "mso-list:l0 level1 lfo2" tells the belonged list root, list item indentation, etc.
+									[ ( /^mso-list$/ ), null, function( val )
+									{
+										val = val.split( ' ' );
+										var listId = Number( val[ 0 ].match( /\d+/ ) ),
+											indent = Number( val[ 1 ].match( /\d+/ ) );
+
+										listId !== previousListId && ( attrs[ 'cke:reset' ] = 1 );
+										previousListId = listId;
+										attrs[ 'cke:indent' ] = indent;
 									} ]
-							] )( attrs.style, element ) || '' ;
+								] )( attrs.style, element ) || '';
 					}
 
-					// Inherit list-type-style from bullet.
-					var listBulletAttrs = listMarker.attributes,
-						listBulletStyle = listBulletAttrs.style;
-
-					element.addStyle( listBulletStyle );
-					CKEDITOR.tools.extend( attrs, listBulletAttrs );
+					// First level list item might be presented without a margin.
+
+
+					// In case all above doesn't apply.
+					if ( !attrs[ 'cke:indent' ] )
+					{
+						previousListItemMargin = 0;
+						attrs[ 'cke:indent' ] = 1;
+					}
+
+					// Inherit attributes from bullet.
+					CKEDITOR.tools.extend( attrs, listMarker.attributes );
 					return true;
 				}
+				// Current list disconnected.
+				else
+					previousListId = previousListItemMargin = listBaseIndent = null;
 
 				return false;
@@ -310,5 +369,5 @@
 					while ( parent )
 					{
-						parent.attributes && parent.attributes[ 'cke:list'] && indentLevel++;
+						parent.attributes && parent.attributes[ 'cke:list' ] && indentLevel++;
 						parent = parent.parent;
 					}
@@ -349,8 +408,27 @@
 
 							child.name = 'cke:li';
+
+							// Inherit numbering from list root on the first list item.
+							attrs.start && !i && ( attributes.value = attrs.start );
+
+							plugin.filters.stylesFilter(
+								[
+								    [ 'tab-stops', null, function( val )
+									{
+										var margin = val.split( ' ' )[ 1 ].match( cssLengthRelativeUnit );
+										margin && ( previousListItemMargin = parseInt( plugin.utils.convertToPx( margin[ 0 ] ), 10 ) );
+									} ],
+									[ 'mso-list', null, function( val )
+									{
+										val = val.split( ' ' );
+										var listId = Number( val[ 0 ].match( /\d+/ ) );
+										listId !== previousListId && ( attributes[ 'cke:reset' ] = 1 );
+										previousListId = listId;
+									} ]
+								] )( attributes.style );
+
 							attributes[ 'cke:indent' ] = indentLevel;
-							previousListItemMargin = 0;
 							attributes[ 'cke:listtype' ] = element.name;
-							listStyleType && child.addStyle( 'list-style-type', listStyleType, true );
+							attributes[ 'cke:list-style-type' ] = listStyleType;
 						}
 					}
@@ -372,9 +450,17 @@
 							listItem,   // The current processing cke:li element.
 							listItemAttrs,
-							listType,   // Determine the root type of the list.
 							listItemIndent, // Indent level of current list item.
+							lastIndent,
 							lastListItem, // The previous one just been added to the list.
-							list, parentList, // Current staging list and it's parent list if any.
-							indent;
+							list, // Current staging list and it's parent list if any.
+							openedLists = [],
+							previousListStyleType,
+							previousListType;
+
+					// Properties of the list item are to be resolved from the list bullet.
+					var bullet,
+						listType,
+						listStyleType,
+						itemNumeric;
 
 					for ( var i = 0; i < children.length; i++ )
@@ -387,25 +473,110 @@
 							listItem = child;
 							listItemAttrs = listItem.attributes;
-							listType = listItem.attributes[ 'cke:listtype' ];
+							bullet = listItemAttrs[ 'cke:listsymbol' ];
+							bullet = bullet && bullet.match( /^(?:[(]?)([^\s]+?)([.)]?)$/ );
+							listType = listStyleType = itemNumeric = null;
+
+							if ( listItemAttrs[ 'cke:ignored' ] )
+							{
+								children.splice( i--, 1 );
+								continue;
+							}
+
+
+							// This's from a new list root.
+							listItemAttrs[ 'cke:reset' ] && ( list = lastIndent = lastListItem = null );
 
 							// List item indent level might come from a real list indentation or
 							// been resolved from a pseudo list item's margin value, even get
 							// no indentation at all.
-							listItemIndent = parseInt( listItemAttrs[ 'cke:indent' ], 10 )
-													|| listBaseIndent && ( Math.ceil( listItemAttrs[ 'cke:margin' ] / listBaseIndent ) )
-													|| 1;
-
-							// Ignore the 'list-style-type' attribute if it's matched with
-							// the list root element's default style type.
-							listItemAttrs.style && ( listItemAttrs.style =
-							        CKEDITOR.plugins.pastefromword.filters.stylesFilter(
-									[
-										[ 'list-style-type', listType == 'ol' ? 'decimal' : 'disc' ]
-									] )( listItemAttrs.style )
-									|| '' );
-
+							listItemIndent = Number( listItemAttrs[ 'cke:indent' ] );
+
+							// We're moving out of the current list, cleaning up.
+							if ( listItemIndent != lastIndent )
+								previousListType = previousListStyleType = null;
+
+							// List type and item style are already resolved.
+							if ( !bullet )
+							{
+								listType = listItemAttrs[ 'cke:listtype' ] || 'ol';
+								listStyleType = listItemAttrs[ 'cke:list-style-type' ];
+							}
+							else
+							{
+								// Probably share the same list style type with previous list item,
+								// give it priority to avoid ambiguous between C(Alpha) and C.(Roman).
+								if ( previousListType && listMarkerPatterns[ previousListType ] [ previousListStyleType ].test( bullet[ 1 ] ) )
+								{
+									listType = previousListType;
+									listStyleType = previousListStyleType;
+								}
+								else
+								{
+									for ( var type in listMarkerPatterns )
+									{
+										for ( var style in listMarkerPatterns[ type ] )
+										{
+											if ( listMarkerPatterns[ type ][ style ].test( bullet[ 1 ] ) )
+											{
+												// Small numbering has higher priority, when dealing with ambiguous
+												// between C(Alpha) and C.(Roman).
+												if ( type == 'ol' && ( /alpha|roman/ ).test( style ) )
+												{
+													var num = /roman/.test( style ) ? fromRoman( bullet[ 1 ] ) : fromAlphabet( bullet[ 1 ] );
+													if ( !itemNumeric || num < itemNumeric )
+													{
+														itemNumeric = num;
+														listType = type;
+														listStyleType = style;
+													}
+												}
+												else
+												{
+													listType = type;
+													listStyleType = style;
+													break;
+												}
+											}
+										}
+									}
+								}
+
+								// Simply use decimal/disc for the rest forms of unrepresentable
+								// numerals, e.g. Chinese..., but as long as there a second part
+								// included, it has a bigger chance of being a order list ;)
+								!listType && ( listType = bullet[ 2 ] ? 'ol' : 'ul' );
+							}
+
+							previousListType = listType;
+							previousListStyleType = listStyleType || ( listType == 'ol' ? 'decimal' : 'disc' );
+							if ( listStyleType && listStyleType != ( listType == 'ol' ? 'decimal' : 'disc' ) )
+								listItem.addStyle( 'list-style-type', listStyleType );
+
+							// Figure out start numbering.
+							if ( listType == 'ol' && bullet )
+							{
+								switch ( listStyleType )
+								{
+									case 'decimal' :
+										itemNumeric = Number( bullet[ 1 ] );
+										break;
+									case 'lower-roman':
+									case 'upper-roman':
+										itemNumeric = fromRoman( bullet[ 1 ] );
+										break;
+									case 'lower-alpha':
+									case 'upper-alpha':
+										itemNumeric = fromAlphabet( bullet[ 1 ] );
+										break;
+								}
+
+								// Always create the numbering, swipe out unnecessary ones later.
+								listItem.attributes.value = itemNumeric;
+							}
+
+							// Start the list construction.
 							if ( !list )
 							{
-								list = new CKEDITOR.htmlParser.element( listType );
+								openedLists.push( list = new CKEDITOR.htmlParser.element( listType ) );
 								list.add( listItem );
 								children[ i ] = list;
@@ -413,15 +584,15 @@
 							else
 							{
-								if ( listItemIndent > indent )
+								if ( listItemIndent > lastIndent )
 								{
-									list = new CKEDITOR.htmlParser.element( listType );
+									openedLists.push( list = new CKEDITOR.htmlParser.element( listType ) );
 									list.add( listItem );
 									lastListItem.add( list );
 								}
-								else if ( listItemIndent < indent )
+								else if ( listItemIndent < lastIndent )
 								{
 									// There might be a negative gap between two list levels. (#4944)
-									var diff = indent - listItemIndent,
-										parent;
+									var diff = lastIndent - listItemIndent,
+											parent;
 									while ( diff-- && ( parent = list.parent ) )
 										list = parent.parent;
@@ -436,11 +607,14 @@
 
 							lastListItem = listItem;
-							indent = listItemIndent;
-						}
-						else
-							list = null;
+							lastIndent = listItemIndent;
+						}
+						else if ( list )
+							list = lastIndent = lastListItem = null;
 					}
 
-					listBaseIndent = 0;
+					for ( i = 0; i < openedLists.length; i++ )
+						postProcessList( openedLists[ i ] );
+
+					list = lastIndent = lastListItem = previousListId = previousListItemMargin = listBaseIndent = null;
 				},
 
@@ -468,5 +642,5 @@
 						// from MS-Word which confused the following regexp. e.g.
 						//'font-family: &quot;Lucida, Console&quot;'
-						 styleText
+						( styleText || '' )
 							.replace( /&quot;/g, '"' )
 							.replace( /\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,
@@ -756,4 +930,18 @@
 					'p' : function( element )
 					{
+						// This's a fall-back approach to recognize list item in FF3.6,
+						// as it's not perfect as not all list style (e.g. "heading list") is shipped
+						// with this pattern. (#6662)
+						if ( /MsoListParagraph/.exec( element.attributes[ 'class' ] ) )
+						{
+							var bulletText = element.firstChild( function( node )
+							{
+								return node.type == CKEDITOR.NODE_TEXT && !containsNothingButSpaces( node.parent );
+							});
+							var bullet = bulletText && bulletText.parent,
+								bulletAttrs = bullet && bullet.attributes;
+							bulletAttrs && !bulletAttrs.style && ( bulletAttrs.style = 'mso-list: Ignore;' );
+						}
+
 						element.filterChildren();
 
@@ -808,6 +996,6 @@
 					'font' : function( element )
 					{
-						// IE/Safari: drop the font tag if it comes from list bullet text.
-						if ( !CKEDITOR.env.gecko && isListBulletIndicator( element.parent ) )
+						// Drop the font tag if it comes from list bullet text.
+						if ( isListBulletIndicator( element.parent ) )
 						{
 							delete element.name;
@@ -860,6 +1048,6 @@
 					'span' : function( element )
 					{
-						// IE/Safari: remove the span if it comes from list bullet text.
-						if ( !CKEDITOR.env.gecko && isListBulletIndicator( element.parent ) )
+						// Remove the span if it comes from list bullet text.
+						if ( isListBulletIndicator( element.parent ) )
 							return false;
 
@@ -871,7 +1059,7 @@
 						}
 
-						// For IE/Safari: List item bullet type is supposed to be indicated by
+						// List item bullet type is supposed to be indicated by
 						// the text of a span with style 'mso-list : Ignore' or an image.
-						if ( !CKEDITOR.env.gecko && isListBulletIndicator( element ) )
+						if ( isListBulletIndicator( element ) )
 						{
 							var listSymbolNode = element.firstChild( function( node )
@@ -881,6 +1069,16 @@
 
 							var listSymbol =  listSymbolNode && ( listSymbolNode.value || 'l.' ),
-								listType = listSymbol.match( /^([^\s]+?)([.)]?)$/ );
-							return createListBulletMarker( listType, listSymbol );
+								listType = listSymbol && listSymbol.match( /^(?:[(]?)([^\s]+?)([.)]?)$/ );
+
+							if ( listType )
+							{
+								var marker = createListBulletMarker( listType, listSymbol );
+								// Some non-existed list items might be carried by an inconsequential list, indicate by "mso-hide:all/display:none",
+								// those are to be removed later, now mark it with "cke:ignored".
+								var ancestor = element.getAncestor( 'span' );
+								if ( ancestor && (/ mso-hide:\s*all|display:\s*none /).test( ancestor.attributes.style ) )
+									marker.attributes[ 'cke:ignored' ] = 1;
+								return marker;
+							}
 						}
 
@@ -928,5 +1126,5 @@
 						if ( element.getAncestor( /h\d/ ) && !config.pasteFromWordNumberedHeadingToList )
 							delete element.name;
-						}
+					}
 				},
 
@@ -950,4 +1148,7 @@
 					// be the ones that could later be altered with editor tools.
 					[
+						// Leave list-style-type
+						[ ( /^list-style-type$/ ), null ],
+
 						// Preserve margin-left/right which used as default indent style in the editor.
 						[ ( /^margin$|^margin-(?!bottom|top)/ ), null, function( value, element, name )
@@ -1056,5 +1257,5 @@
 								// Bullet symbol could be either text or an image.
 								var listSymbol = listInfo[ 1 ] || ( imageInfo && 'l.' ),
-									listType = listSymbol && listSymbol.match( />([^\s]+?)([.)]?)</ );
+									listType = listSymbol && listSymbol.match( />(?:[(]?)([^\s]+?)([.)]?)</ );
 								return createListBulletMarker( listType, listSymbol );
 							}
@@ -1079,5 +1280,5 @@
 			};
 		}
-	};
+	});
 
 	// The paste processor here is just a reduced copy of html data processor.
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/pastefromword/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/pastefromword/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/pastefromword/plugin.js	(revision 6655)
@@ -13,7 +13,8 @@
 			// pasting.
 			var forceFromWord = 0;
-			var resetFromWord = function()
+			var resetFromWord = function( evt )
 				{
-					setTimeout( function() { forceFromWord = 0; }, 0 );
+					evt && evt.removeListener();
+					forceFromWord && setTimeout( function() { forceFromWord = 0; }, 0 );
 				};
 
@@ -30,12 +31,17 @@
 					if ( editor.execCommand( 'paste' ) === false )
 					{
-						editor.on( 'dialogHide', function ( evt )
-							{
-								evt.removeListener();
-								resetFromWord();
-							});
+						editor.on( 'dialogShow', function ( evt )
+						{
+							evt.removeListener();
+							evt.data.on( 'cancel', resetFromWord );
+						});
+
+						editor.on( 'dialogHide', function( evt )
+						{
+							evt.data.removeListener( 'cancel', resetFromWord );
+						} );
 					}
-					else
-						resetFromWord();
+
+					editor.on( 'afterPaste', resetFromWord );
 				}
 			});
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/placeholder/lang/he.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/placeholder/lang/he.js	(revision 6655)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/placeholder/lang/he.js	(revision 6655)
@@ -0,0 +1,16 @@
+﻿/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang( 'placeholder', 'he',
+{
+	placeholder :
+	{
+		title		: 'מאפייני שומר מקום',
+		toolbar		: 'צור שומר מקום',
+		text		: 'תוכן שומר המקום',
+		edit		: 'ערוך שומר מקום',
+		textMissing	: 'שומר המקום חייב להכיל טקסט.'
+	}
+});
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/placeholder/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/placeholder/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/placeholder/plugin.js	(revision 6655)
@@ -15,5 +15,5 @@
 	{
 		requires : [ 'dialog' ],
-		lang : [ 'en' ],
+		lang : [ 'en', 'he' ],
 		init : function( editor )
 		{
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/resize/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/resize/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/resize/plugin.js	(revision 6655)
@@ -9,4 +9,8 @@
 	{
 		var config = editor.config;
+
+		// Resize in the same direction of chrome,
+		// which is identical to dir of editor element. (#6614)
+		var resizeDir = editor.element.getDirection( 1 );
 
 		!config.resize_dir && ( config.resize_dir = 'both' );
@@ -32,5 +36,5 @@
 					width = startSize.width,
 					height = startSize.height,
-					internalWidth = width + dx * ( editor.lang.dir == 'rtl' ? -1 : 1 ),
+					internalWidth = width + dx * ( resizeDir == 'rtl' ? -1 : 1 ),
 					internalHeight = height + dy;
 
@@ -89,8 +93,15 @@
 							direction = ' cke_resizer_vertical';
 
-						event.data.html += '<div class="cke_resizer' + direction + '"' +
+						var resizerHtml =
+							'<div' +
+							' class="cke_resizer' + direction + ' cke_resizer_' + resizeDir + '"' +
 							' title="' + CKEDITOR.tools.htmlEncode( editor.lang.resize ) + '"' +
 							' onmousedown="CKEDITOR.tools.callFunction(' + mouseDownFn + ', event)"' +
 							'></div>';
+
+						// Always sticks the corner of botttom space.
+						resizeDir == 'ltr' && direction == 'ltr' ?
+							event.data.html += resizerHtml :
+							event.data.html = resizerHtml + event.data.html;
 					}
 				}, editor, null, 100 );
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/richcombo/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/richcombo/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/richcombo/plugin.js	(revision 6655)
@@ -198,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><span class=cke_icon>' + ( CKEDITOR.env.hc ? '&#9660;' : CKEDITOR.env.air ?  '&nbsp;' : '' ) + '</span></span>' +	// BLACK DOWN-POINTING TRIANGLE
 					'</a>' +
 				'</span>' +
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/scayt/dialogs/options.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/scayt/dialogs/options.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/scayt/dialogs/options.js	(revision 6655)
@@ -9,5 +9,6 @@
 		captions,
 		doc = CKEDITOR.document,
-		tags = [],
+		editorName = editor.name,
+		tags = CKEDITOR.plugins.scayt.getUiTabs( editor ),
 		i,
 		contents = [],
@@ -15,7 +16,7 @@
 		dic_buttons = [
 			// [0] contains buttons for creating
-			"dic_create,dic_restore",
+			"dic_create_" + editorName + ",dic_restore_" + editorName,
 			// [1] contains buton for manipulation
-			"dic_rename,dic_delete"
+			"dic_rename_" + editorName + ",dic_delete_" + editorName
 		],
 		optionsIds = [ 'mixedCase', 'mixedWithDigits', 'allCaps', 'ignoreDomainNames' ];
@@ -25,9 +26,13 @@
 	function getBOMAllOptions()
 	{
-		 return document.forms.optionsbar["options"];
+		if (typeof document.forms["optionsbar_" + editorName] != "undefined")
+			return document.forms["optionsbar_" + editorName]["options"];
+		return [];
 	}
 	function getBOMAllLangs()
 	{
-		 return document.forms.languagesbar["scayt_lang"];
+		if (typeof document.forms["languagesbar_" + editorName] != "undefined")
+			return document.forms["languagesbar_" + editorName]["scayt_lang"];
+		return [];
 	}
 
@@ -59,21 +64,21 @@
 							type : 'html',
 							id : 'options',
-							html : 	'<form name="optionsbar"><div class="inner_options">' +
+							html : 	'<form name="optionsbar_' + editorName + '"><div class="inner_options">' +
 									'	<div class="messagebox"></div>' +
 									'	<div style="display:none;">' +
-									'		<input type="checkbox" name="options"  id="allCaps" />' +
-									'		<label for="allCaps" id="label_allCaps"></label>' +
+									'		<input type="checkbox" name="options"  id="allCaps_' + editorName + '" />' +
+									'		<label for="allCaps" id="label_allCaps_' + editorName + '"></label>' +
 									'	</div>' +
 									'	<div style="display:none;">' +
-									'		<input name="options" type="checkbox"  id="ignoreDomainNames" />' +
-									'		<label for="ignoreDomainNames" id="label_ignoreDomainNames"></label>' +
+									'		<input name="options" type="checkbox"  id="ignoreDomainNames_' + editorName + '" />' +
+									'		<label for="ignoreDomainNames" id="label_ignoreDomainNames_' + editorName + '"></label>' +
 									'	</div>' +
 									'	<div style="display:none;">' +
-									'	<input name="options" type="checkbox"  id="mixedCase" />' +
-									'		<label for="mixedCase" id="label_mixedCase"></label>' +
+									'	<input name="options" type="checkbox"  id="mixedCase_' + editorName + '" />' +
+									'		<label for="mixedCase" id="label_mixedCase_' + editorName + '"></label>' +
 									'	</div>' +
 									'	<div style="display:none;">' +
-									'		<input name="options" type="checkbox"  id="mixedWithDigits" />' +
-									'		<label for="mixedWithDigits" id="label_mixedWithDigits"></label>' +
+									'		<input name="options" type="checkbox"  id="mixedWithDigits_' + editorName + '" />' +
+									'		<label for="mixedWithDigits" id="label_mixedWithDigits_' + editorName + '"></label>' +
 									'	</div>' +
 									'</div></form>'
@@ -88,8 +93,8 @@
 							type : 'html',
 							id : 'langs',
-							html : 	'<form name="languagesbar"><div class="inner_langs">' +
+							html : 	'<form name="languagesbar_' + editorName + '"><div class="inner_langs">' +
 									'	<div class="messagebox"></div>	' +
-									'   <div style="float:left;width:45%;margin-left:5px;" id="scayt_lcol" ></div>' +
-									'   <div style="float:left;width:45%;margin-left:15px;" id="scayt_rcol"></div>' +
+									'   <div style="float:left;width:45%;margin-left:5px;" id="scayt_lcol_' + editorName + '" ></div>' +
+									'   <div style="float:left;width:45%;margin-left:15px;" id="scayt_rcol_' + editorName + '"></div>' +
 									'</div></form>'
 						}
@@ -104,23 +109,23 @@
 							style: '',
 							id : 'dictionaries',
-							html : 	'<form name="dictionarybar"><div class="inner_dictionary" style="text-align:left; white-space:normal; width:320px; overflow: hidden;">' +
-									'	<div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message"> </div>' +
+							html : 	'<form name="dictionarybar_' + editorName + '"><div class="inner_dictionary" style="text-align:left; white-space:normal; width:320px; overflow: hidden;">' +
+									'	<div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message_' + editorName + '"> </div>' +
 									'	<div style="margin:5px auto; width:80%;white-space:normal;"> ' +
 									'       <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>'+
 									'		<span class="cke_dialog_ui_labeled_content" >'+
 									'			<div class="cke_dialog_ui_input_text">'+
-									'				<input id="dic_name" type="text" class="cke_dialog_ui_input_text"/>'+
+									'				<input id="dic_name_' + editorName + '" type="text" class="cke_dialog_ui_input_text"/>'+
 									'		</div></span></div>'+
 									'		<div style="margin:5px auto; width:80%;white-space:normal;">'+
-									'			<a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_create">'+
+									'			<a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_create_' + editorName + '">'+
 									'				</a>' +
-									'			<a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete">'+
+									'			<a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete_' + editorName + '">'+
 									'				</a>' +
-									'			<a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename">'+
+									'			<a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename_' + editorName + '">'+
 									'				</a>' +
-									'			<a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore">'+
+									'			<a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore_' + editorName + '">'+
 									'				</a>' +
 									'		</div>' +
-									'	<div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info"></div>' +
+									'	<div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info_' + editorName + '"></div>' +
 									'</div></form>'
 						}
@@ -135,5 +140,5 @@
 							id : 'about',
 							style : 'margin: 5px 5px;',
-							html : '<div id="scayt_about"></div>'
+							html : '<div id="scayt_about_' + editorName + '"></div>'
 						}
 					]
@@ -150,5 +155,5 @@
 			dialog.data = editor.fire( 'scaytDialog', {} );
 			dialog.options = dialog.data.scayt_control.option();
-			dialog.sLang = dialog.data.scayt_control.sLang;
+			dialog.chosed_lang = dialog.sLang = dialog.data.scayt_control.sLang;
 
 			if ( !dialog.data || !dialog.data.scayt || !dialog.data.scayt_control )
@@ -181,5 +186,5 @@
 			var scayt_control =  this.data.scayt_control;
 			scayt_control.option( this.options );
-			// Setup languge if it was changed.
+			// Setup language if it was changed.
 			var csLang = this.chosed_lang;
 			scayt_control.setLang( csLang );
@@ -199,7 +204,5 @@
 	var scayt_control = CKEDITOR.plugins.scayt.getScayt( editor );
 
-	tags = CKEDITOR.plugins.scayt.uiTabs;
-
-	for ( i in tags )
+	for ( i = 0; i < tags.length; i++ )
 	{
 		if ( tags[ i ] == 1 )
@@ -209,10 +212,11 @@
 		userDicActive = 1;
 
-
 	var init_with_captions = function()
 	{
 		var dialog = this,
 			lang_list = dialog.data.scayt.getLangList(),
-			buttons = [ 'dic_create', 'dic_delete', 'dic_rename', 'dic_restore' ],
+			buttonCaptions = [ 'dic_create', 'dic_delete', 'dic_rename', 'dic_restore' ],
+			buttonIds = [],
+			langList = [],
 			labels = optionsIds,
 			i;
@@ -221,12 +225,11 @@
 		if ( userDicActive )
 		{
-			for ( i = 0; i < buttons.length; i++ )
-			{
-				var button = buttons[ i ];
-				doc.getById( button ).setHtml( '<span class="cke_dialog_ui_button">' + captions[ 'button_' + button]  +'</span>' );
-			}
-			doc.getById( 'dic_info' ).setHtml( captions[ 'dic_info' ] );
-		}
-
+			for ( i = 0; i < buttonCaptions.length; i++ )
+			{
+				buttonIds[ i ] = buttonCaptions[ i ] + "_" + editorName;
+				doc.getById( buttonIds[ i ] ).setHtml( '<span class="cke_dialog_ui_button">' + captions[ 'button_' + buttonCaptions[ i ]]  +'</span>' );
+			}
+			doc.getById( 'dic_info_' + editorName ).setHtml( captions[ 'dic_info' ] );
+		}
 
 		// Fill options and dictionary labels.
@@ -235,12 +238,13 @@
 			for ( i in labels )
 			{
-				var label = 'label_' + labels[ i ],
-					labelElement = doc.getById( label );
+				var labelCaption = 'label_' + labels[ i ],
+					labelId = labelCaption + '_' + editorName,
+					labelElement = doc.getById( labelId );
 
 				if (  'undefined' != typeof labelElement
-				   && 'undefined' != typeof captions[ label ]
+				   && 'undefined' != typeof captions[ labelCaption ]
 				   && 'undefined' != typeof dialog.options[labels[ i ]] )
 				{
-					labelElement.setHtml( captions[ label ] );
+					labelElement.setHtml( captions[ labelCaption ] );
 					var labelParent = labelElement.getParent();
 					labelParent.$.style.display = "block";
@@ -253,5 +257,5 @@
 				'<p>' + captions[ 'about_throwt_copy' ] + '</p>';
 
-		doc.getById( 'scayt_about' ).setHtml( about );
+		doc.getById( 'scayt_about_' + editorName ).setHtml( about );
 
 		// Create languages tab.
@@ -287,5 +291,4 @@
 		};
 
-		var langList = [];
 		if ( tags[1] ==1 )
 		{
@@ -301,6 +304,6 @@
 				});
 
-			var fieldL = doc.getById( 'scayt_lcol' ),
-				fieldR = doc.getById( 'scayt_rcol' );
+			var fieldL = doc.getById( 'scayt_lcol_' + editorName ),
+				fieldR = doc.getById( 'scayt_rcol_' + editorName );
 			for ( i=0; i < langList.length; i++ )
 			{
@@ -404,5 +407,5 @@
 		function onDicButtonClick( ev )
 		{
-			var dic_name = doc.getById('dic_name').getValue();
+			var dic_name = doc.getById('dic_name_' + editorName).getValue();
 			if ( !dic_name )
 			{
@@ -411,6 +414,6 @@
 			}
 			try{
-				var el = id = ev.data.getTarget().getParent();
-				var id = el.getId();
+				var el = ev.data.getTarget().getParent();
+				var id = /(dic_\w+)_[\w\d]+/.exec(el.getId())[1];
 				dic[ id ].apply( null, [ el, dic_name, dic_buttons ] );
 			}
@@ -453,5 +456,5 @@
 					opto[k].checked = false;
 					//alert (opto[k].removeAttribute)
-					if ( dialog.options[ i ] == 1 )
+					if ( dialog.options[ i.split("_")[0] ] == 1 )
 					{
 						opto[k].checked = true;
@@ -464,5 +467,5 @@
 						checkbox.on( 'click', function()
 						{
-							dialog.options[ this.getId() ] = this.$.checked ? 1 : 0 ;
+							dialog.options[ this.getId().split("_")[0] ] = this.$.checked ? 1 : 0 ;
 						});
 					}
@@ -488,5 +491,5 @@
 					if ( dic_name )
 					{
-						doc.getById( 'dic_name' ).setValue(dic_name);
+						doc.getById( 'dic_name_' + editorName ).setValue(dic_name);
 						display_dic_buttons( dic_buttons[1] );
 					}
@@ -497,5 +500,5 @@
 				function()
 				{
-					doc.getById( 'dic_name' ).setValue("");
+					doc.getById( 'dic_name_' + editorName ).setValue("");
 				});
 			dic_success_message("");
@@ -506,9 +509,9 @@
 	function dic_error_message( m )
 	{
-		doc.getById('dic_message').setHtml('<span style="color:red;">' + m + '</span>' );
+		doc.getById('dic_message_' + editorName).setHtml('<span style="color:red;">' + m + '</span>' );
 	}
 	function dic_success_message( m )
 	{
-		doc.getById('dic_message').setHtml('<span style="color:blue;">' + m + '</span>') ;
+		doc.getById('dic_message_' + editorName).setHtml('<span style="color:blue;">' + m + '</span>') ;
 	}
 	function display_dic_buttons( sIds )
@@ -528,5 +531,5 @@
 	function set_dic_name( dic_name )
 	{
-		doc.getById('dic_name').$.value= dic_name;
+		doc.getById('dic_name_' + editorName).$.value= dic_name;
 	}
 
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/scayt/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/scayt/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/scayt/plugin.js	(revision 6655)
@@ -96,13 +96,4 @@
 			plugin.instances[ editor.name ] = scayt_control;
 
-			//window.scayt.uiTags
-			var menuGroup = 'scaytButton';
-			var uiTabs = window.scayt.uiTags;
-			var fTabs  = [];
-
-			for ( var i = 0, l=4; i < l; i++ )
-			    fTabs.push( uiTabs[i] && plugin.uiTabs[i] );
-
-			plugin.uiTabs = fTabs;
 			try {
 				scayt_control.setDisabled( plugin.isPaused( editor ) === false );
@@ -357,4 +348,24 @@
 			return ( scayt_instance ) ? scayt_instance.disabled === false : false;
 		},
+		getUiTabs : function( editor )
+		{
+			var uiTabs = [];
+
+			// read UI tabs value from config
+			var configUiTabs = editor.config.scayt_uiTabs || "1,1,1";
+
+			// convert string to array
+			configUiTabs = configUiTabs.split( ',' );
+
+			// "About us" should be always shown for standard config
+			configUiTabs[3] = "1";
+
+			for ( var i = 0; i < 4; i++ ) {
+				uiTabs[i] = (typeof window.scayt != "undefined" && typeof window.scayt.uiTags != "undefined")
+								? (parseInt(configUiTabs[i],10) && window.scayt.uiTags[i])
+								: parseInt(configUiTabs[i],10);
+			}
+			return uiTabs;
+		},
 		loadEngine : function( editor )
 		{
@@ -505,4 +516,20 @@
 		init : function( editor )
 		{
+			// Delete span[data-scaytid] when text pasting in editor (#6921)
+			var dataFilter = editor.dataProcessor && editor.dataProcessor.dataFilter;
+			var dataFilterRules =
+			{
+					elements :
+					{
+							span : function( element )
+							{
+									var attrs = element.attributes;
+									if ( attrs && attrs[ 'data-scaytid' ] )
+											delete element.name;
+							}
+					}
+			};
+			dataFilter && dataFilter.addRules( dataFilterRules );
+
 			var moreSuggestions = {},
 				mainSuggestions = {};
@@ -513,25 +540,16 @@
 			// Add Options dialog.
 			CKEDITOR.dialog.add( commandName, CKEDITOR.getUrl( this.path + 'dialogs/options.js' ) );
-			// read ui tags
-			var confuiTabs = editor.config.scayt_uiTabs || '1,1,1';
-			var uiTabs =[];
-			// string to array convert
-			confuiTabs = confuiTabs.split( ',' );
-			// check array length ! always must be 3 filled with 1 or 0
-			for ( var i=0, l=3; i < l; i++ )
-			{
-				var flag = parseInt( confuiTabs[i] || '1', 10 );
-				uiTabs.push( flag );
-			}
+
+			var uiTabs = plugin.getUiTabs( editor );
 
 			var menuGroup = 'scaytButton';
 			editor.addMenuGroup( menuGroup );
 			// combine menu items to render
-			var uiMuneItems = {};
+			var uiMenuItems = {};
 
 			var lang = editor.lang.scayt;
 
 			// always added
-			uiMuneItems.scaytToggle =
+			uiMenuItems.scaytToggle =
 				{
 					label : lang.enable,
@@ -541,5 +559,5 @@
 
 			if ( uiTabs[0] == 1 )
-				uiMuneItems.scaytOptions =
+				uiMenuItems.scaytOptions =
 				{
 					label : lang.options,
@@ -553,5 +571,5 @@
 
 			if ( uiTabs[1] == 1 )
-				uiMuneItems.scaytLangs =
+				uiMenuItems.scaytLangs =
 				{
 					label : lang.langs,
@@ -564,5 +582,5 @@
 				};
 			if ( uiTabs[2] == 1 )
-				uiMuneItems.scaytDict =
+				uiMenuItems.scaytDict =
 				{
 					label : lang.dictionariesTab,
@@ -575,5 +593,5 @@
 				};
 			// always added
-			uiMuneItems.scaytAbout =
+			uiMenuItems.scaytAbout =
 				{
 					label : editor.lang.scayt.about,
@@ -586,8 +604,5 @@
 				};
 
-			uiTabs[3] = 1; // about us tab is always on
-			plugin.uiTabs = uiTabs;
-
-			editor.addMenuItems( uiMuneItems );
+			editor.addMenuItems( uiMenuItems );
 
 				editor.ui.add( 'Scayt', CKEDITOR.UI_MENUBUTTON,
@@ -611,10 +626,12 @@
 							editor.getMenuItem( 'scaytToggle' ).label = lang[ isEnabled ? 'disable' : 'enable' ];
 
+							var uiTabs = plugin.getUiTabs( editor );
+
 							return {
 								scaytToggle  : CKEDITOR.TRISTATE_OFF,
-								scaytOptions : isEnabled && plugin.uiTabs[0] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
-								scaytLangs   : isEnabled && plugin.uiTabs[1] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
-								scaytDict    : isEnabled && plugin.uiTabs[2] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
-								scaytAbout   : isEnabled && plugin.uiTabs[3] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED
+								scaytOptions : isEnabled && uiTabs[0] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
+								scaytLangs   : isEnabled && uiTabs[1] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
+								scaytDict    : isEnabled && uiTabs[2] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
+								scaytAbout   : isEnabled && uiTabs[3] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED
 							};
 						}
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/selection/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/selection/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/selection/plugin.js	(revision 6655)
@@ -70,4 +70,23 @@
 
 	// #### checkSelectionChange : END
+
+	function rangeRequiresFix( range )
+	{
+		function isInlineCt( node )
+		{
+			return node && node.type == CKEDITOR.NODE_ELEMENT
+					&& node.getName() in CKEDITOR.dtd.$removeEmpty;
+		}
+
+		var start = range.startContainer,
+			offset = range.startOffset;
+
+		if ( start.type == CKEDITOR.NODE_TEXT )
+			return false;
+
+		// 1. Empty inline element. <span>^</span>
+		// 2. Adjoin to inline element. <p><strong>text</strong>^</p>
+		return !CKEDITOR.tools.trim( start.getHtml() ) ? isInlineCt( start ) : isInlineCt( start.getChild( offset - 1 ) ) || isInlineCt( start.getChild( offset ) );
+	}
 
 	var selectAllCmd =
@@ -100,8 +119,114 @@
 	};
 
+	function createFillingChar( doc )
+	{
+		removeFillingChar( doc );
+
+		var fillingChar = doc.createText( '\u200B' );
+		doc.setCustomData( 'cke-fillingChar', fillingChar );
+
+		return fillingChar;
+	}
+
+	function getFillingChar( doc )
+	{
+		return doc && doc.getCustomData( 'cke-fillingChar' );
+	}
+
+	// Checks if a filling char has been used, eventualy removing it (#1272).
+	function checkFillingChar( doc )
+	{
+		var fillingChar = doc && getFillingChar( doc );
+		if ( fillingChar )
+		{
+			// Use this flag to avoid removing the filling char right after
+			// creating it.
+			if ( fillingChar.getCustomData( 'ready' ) )
+				removeFillingChar( doc );
+			else
+				fillingChar.setCustomData( 'ready', 1 );
+		}
+	}
+
+	function removeFillingChar( doc )
+	{
+		var fillingChar = doc && doc.removeCustomData( 'cke-fillingChar' );
+		if ( fillingChar )
+		{
+			// We can't simply remove the filling node because the user
+			// will actually enlarge it when typing, so we just remove the
+			// invisible char from it.
+			fillingChar.setText( fillingChar.getText().replace( /\u200B/g, '' ) );
+			fillingChar = 0;
+		}
+	}
+
 	CKEDITOR.plugins.add( 'selection',
 	{
 		init : function( editor )
 		{
+			// On WebKit only, we need a special "filling" char on some situations
+			// (#1272). Here we set the events that should invalidate that char.
+			if ( CKEDITOR.env.webkit )
+			{
+				editor.on( 'selectionChange', function() { checkFillingChar( editor.document ); } );
+				editor.on( 'beforeSetMode', function() { removeFillingChar( editor.document ); } );
+				editor.on( 'key', function( e )
+					{
+						// Remove the filling char before some keys get
+						// executed, so they'll not get blocked by it.
+						switch ( e.data.keyCode )
+						{
+							case 13 :	// ENTER
+							case CKEDITOR.SHIFT + 13 :	// SHIFT-ENTER
+							case 37 :	// LEFT-ARROW
+							case 39 :	// RIGHT-ARROW
+							case 8 :	// BACKSPACE
+								removeFillingChar( editor.document );
+						}
+					}, null, null, 10 );
+
+				var fillingCharBefore,
+					resetSelection;
+
+				function beforeData()
+				{
+					var doc = editor.document,
+						fillingChar = getFillingChar( doc );
+
+					if ( fillingChar )
+					{
+						// If cursor is right blinking by side of the filler node, save it for restoring,
+						// as the following text substitution will blind it. (#7437)
+						var sel = doc.$.defaultView.getSelection();
+						if ( sel.type == 'Caret' && sel.anchorNode == fillingChar.$ )
+							resetSelection = 1;
+
+						fillingCharBefore = fillingChar.getText();
+						fillingChar.setText( fillingCharBefore.replace( /\u200B/g, '' ) );
+					}
+				}
+				function afterData()
+				{
+					var doc = editor.document,
+						fillingChar = getFillingChar( doc );
+
+					if ( fillingChar )
+					{
+						fillingChar.setText( fillingCharBefore );
+
+						if ( resetSelection )
+						{
+							doc.$.defaultView.getSelection().setPosition( fillingChar.$,fillingChar.getLength() );
+							resetSelection = 0;
+						}
+					}
+				}
+				editor.on( 'beforeUndoImage', beforeData );
+				editor.on( 'afterUndoImage', afterData );
+				editor.on( 'beforeGetData', beforeData, null, null, 0 );
+				editor.on( 'getData', afterData );
+			}
+
 			editor.on( 'contentDom', function()
 				{
@@ -135,8 +260,5 @@
 								if ( savedRange )
 								{
-									// Range restored here might invalidate the DOM structure thus break up
-									// the locked selection, give it up. (#6083)
-									var lockedSelection = doc.getCustomData( 'cke_locked_selection' );
-									if ( restoreEnabled && !lockedSelection )
+									if ( restoreEnabled )
 									{
 										// Well not break because of this.
@@ -147,4 +269,12 @@
 										catch (e)
 										{}
+
+										// Update locked selection because of the normalized text nodes. (#6083, #6987)
+										var lockedSelection = doc.getCustomData( 'cke_locked_selection' );
+										if ( lockedSelection )
+										{
+											lockedSelection.unlock();
+											lockedSelection.lock();
+										}
 									}
 
@@ -572,5 +702,6 @@
 
 						// Gets the element that encloses the range entirely.
-						var parent = range.parentElement();
+						var parent = range.parentElement(),
+							doc = parent.ownerDocument;
 
 						// Empty parent element, e.g. <i>^</i>
@@ -580,4 +711,5 @@
 						var siblings = parent.children,
 							child,
+							sibling,
 							testRange = range.duplicate(),
 							startIndex = 0,
@@ -601,5 +733,19 @@
 								startIndex = index + 1;
 							else
-								return { container : parent, offset : getNodeIndex( child ) };
+							{
+								// IE9 report wrong measurement with compareEndPoints when range anchors between two BRs.
+								// e.g. <p>text<br />^<br /></p> (#7433)
+								if ( CKEDITOR.env.ie9Compat && child.tagName == 'BR' )
+								{
+									var bmId = 'cke_range_marker';
+									range.execCommand( 'CreateBookmark', false, bmId );
+									child = doc.getElementsByName( bmId )[ 0 ];
+									var offset = getNodeIndex( child );
+									parent.removeChild( child );
+									return { container : parent, offset : offset };
+								}
+								else
+									return { container : parent, offset : getNodeIndex( child ) };
+							}
 						}
 
@@ -657,8 +803,9 @@
 							while ( distance > 0 )
 							{
-								child = child[ position > 0 ? 'previousSibling' : 'nextSibling' ];
 								try
 								{
-									distance -= child.nodeValue.length;
+									sibling = child[ position > 0 ? 'previousSibling' : 'nextSibling' ];
+									distance -= sibling.nodeValue.length;
+									child = sibling;
 								}
 								// Measurement in IE could be somtimes wrong because of <select> element. (#4611)
@@ -1065,42 +1212,12 @@
 			}
 
-			if ( CKEDITOR.env.ie )
-			{
-				this.getNative().empty();
-
-				try
-				{
-					// Try to select the node as a control.
-					range = this.document.$.body.createControlRange();
-					range.addElement( element.$ );
-					range.select();
-				}
-				catch( e )
-				{
-					// If failed, select it as a text range.
-					range = this.document.$.body.createTextRange();
-					range.moveToElementText( element.$ );
-					range.select();
-				}
-				finally
-				{
-					this.document.fire( 'selectionchange' );
-				}
-
-				this.reset();
-			}
-			else
-			{
-				// Create the range for the element.
-				range = this.document.$.createRange();
-				range.selectNode( element.$ );
-
-				// Select the range.
-				var sel = this.getNative();
-				sel.removeAllRanges();
-				sel.addRange( range );
-
-				this.reset();
-			}
+			range = new CKEDITOR.dom.range( element.getDocument() );
+			range.setStartBefore( element );
+			range.setEndAfter( element );
+			range.select();
+
+			this.document.fire( 'selectionchange' );
+			this.reset();
+
 		},
 
@@ -1141,6 +1258,14 @@
 				var sel = this.getNative();
 
+				// getNative() returns null if iframe is "display:none" in FF. (#6577)
+				if ( !sel )
+					return;
+
 				if ( ranges.length )
+				{
 					sel.removeAllRanges();
+					// Remove any existing filling char first.
+					CKEDITOR.env.webkit && removeFillingChar( this.document );
+				}
 
 				for ( var i = 0 ; i < ranges.length ; i++ )
@@ -1192,6 +1317,46 @@
 					}
 
-					nativeRange.setStart( startContainer.$, range.startOffset );
-					nativeRange.setEnd( range.endContainer.$, range.endOffset );
+					if ( range.collapsed
+							&& CKEDITOR.env.webkit
+							&& rangeRequiresFix( range ) )
+					{
+						// Append a zero-width space so WebKit will not try to
+						// move the selection by itself (#1272).
+						var fillingChar = createFillingChar( this.document );
+						range.insertNode( fillingChar ) ;
+
+						var next = fillingChar.getNext();
+
+						// If the filling char is followed by a <br>, whithout
+						// having something before it, it'll not blink.
+						// Let's remove it in this case.
+						if ( next && !fillingChar.getPrevious() && next.type == CKEDITOR.NODE_ELEMENT && next.getName() == 'br' )
+						{
+							removeFillingChar( this.document );
+							range.moveToPosition( next, CKEDITOR.POSITION_BEFORE_START );
+						}
+						else
+							range.moveToPosition( fillingChar, CKEDITOR.POSITION_AFTER_END );
+					}
+
+					nativeRange.setStart( range.startContainer.$, range.startOffset );
+
+					try
+					{
+						nativeRange.setEnd( range.endContainer.$, range.endOffset );
+					}
+					catch ( e )
+					{
+						// There is a bug in Firefox implementation (it would be too easy
+						// otherwise). The new start can't be after the end (W3C says it can).
+						// So, let's create a new range and collapse it to the desired point.
+						if ( e.toString().indexOf( 'NS_ERROR_ILLEGAL_VALUE' ) >= 0 )
+						{
+							range.collapse( 1 );
+							nativeRange.setEnd( range.endContainer.$, range.endOffset );
+						}
+						else
+							throw e;
+					}
 
 					// Select the range.
@@ -1277,7 +1442,20 @@
 			function( forceExpand )
 			{
-				var collapsed = this.collapsed;
-				var isStartMarkerAlone;
-				var dummySpan;
+				var collapsed = this.collapsed,
+					isStartMarkerAlone, dummySpan, ieRange;
+
+				// Try to make a object selection.
+				var selected = this.getEnclosedNode();
+				if ( selected )
+				{
+					try
+					{
+						ieRange = this.document.$.body.createControlRange();
+						ieRange.addElement( selected.$ );
+						ieRange.select();
+						return;
+					}
+					catch( er ) {}
+				}
 
 				// IE doesn't support selecting the entire table row/cell, move the selection into cells, e.g.
@@ -1299,5 +1477,5 @@
 
 				// Create the main range which will be used for the selection.
-				var ieRange = this.document.$.body.createTextRange();
+				ieRange = this.document.$.body.createTextRange();
 
 				// Position the range at the start boundary.
@@ -1380,39 +1558,5 @@
 			function()
 			{
-				var startContainer = this.startContainer;
-
-				// If we have a collapsed range, inside an empty element, we must add
-				// something to it, otherwise the caret will not be visible.
-				if ( this.collapsed && startContainer.type == CKEDITOR.NODE_ELEMENT && !startContainer.getChildCount() )
-					startContainer.append( new CKEDITOR.dom.text( '' ) );
-
-				var nativeRange = this.document.$.createRange();
-				nativeRange.setStart( startContainer.$, this.startOffset );
-
-				try
-				{
-					nativeRange.setEnd( this.endContainer.$, this.endOffset );
-				}
-				catch ( e )
-				{
-					// There is a bug in Firefox implementation (it would be too easy
-					// otherwise). The new start can't be after the end (W3C says it can).
-					// So, let's create a new range and collapse it to the desired point.
-					if ( e.toString().indexOf( 'NS_ERROR_ILLEGAL_VALUE' ) >= 0 )
-					{
-						this.collapse( true );
-						nativeRange.setEnd( this.endContainer.$, this.endOffset );
-					}
-					else
-						throw( e );
-				}
-
-				var selection = this.document.getSelection().getNative();
-				// getSelection() returns null in case when iframe is "display:none" in FF. (#6577)
-				if ( selection )
-				{
-					selection.removeAllRanges();
-					selection.addRange( nativeRange );
-				}
+				this.document.getSelection().selectRanges( [ this ] );
 			};
 } )();
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/specialchar/dialogs/specialchar.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/specialchar/dialogs/specialchar.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/specialchar/dialogs/specialchar.js	(revision 6655)
@@ -26,5 +26,8 @@
 			dialog.hide();
 
-			editor.insertHtml( value );
+			// We must use "insertText" here to keep text styled.
+			var span = editor.document.createElement( 'span' );
+			span.setHtml( value );
+			editor.insertText( span.getText() );
 		}
 	};
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/specialchar/lang/en.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/specialchar/lang/en.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/specialchar/lang/en.js	(revision 6655)
@@ -2,88 +2,88 @@
 CKEDITOR.plugins.setLang( 'specialchar', 'en',
 {
-	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",
-	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",
-	frac14: "VULGAR FRACTION ONE QUARTER",
-	frac12: "VULGAR FRACTION ONE HALF",
-	frac34: "VULGAR FRACTION THREE QUARTERS",
-	iquest: "INVERTED QUESTION MARK",
-	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",
-	times: "MULTIPLICATION 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",
-	yacute: "LATIN SMALL LETTER Y WITH ACUTE",
-	thorn: "LATIN SMALL LETTER THORN",
-	szlig: "LATIN SMALL LETTER SHARP S",
-	divide: "DIVISION SIGN",
-	yuml: "LATIN SMALL LETTER Y WITH DIAERESIS",
-	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",
-	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 DOUBLE ARROW",
-	harr: "LEFT RIGHT DOUBLE ARROW",
-	diams: "BLACK DIAMOND SUIT",
-	asymp: "ALMOST EQUAL TO",
-	sbquo: 'SINGLE LOW-9 QUOTATION MARK'
+	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",
+	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",
+	frac14: "Vulgar fraction one quarter",
+	frac12: "Vulgar fraction one half",
+	frac34: "Vulgar fraction three quarters",
+	iquest: "Inverted question mark",
+	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",
+	times: "Multiplication 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",
+	yacute: "Latin small letter y with acute",
+	thorn: "Latin small letter thorn",
+	szlig: "Latin small letter sharp s",
+	divide: "Division sign",
+	yuml: "Latin small letter y with diaeresis",
+	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",
+	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 double arrow",
+	harr: "Left right double arrow",
+	diams: "Black diamond suit",
+	asymp: "Almost equal to",
+	sbquo: "Single low-9 quotation mark"
 });
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/specialchar/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/specialchar/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/specialchar/plugin.js	(revision 6655)
@@ -32,5 +32,5 @@
 							function()
 							{
-								CKEDITOR.tools.extend( editor.lang.specialChar, plugin.lang[ langCode ] );
+								CKEDITOR.tools.extend( editor.lang.specialChar, plugin.langEntries[ langCode ] );
 								editor.openDialog( pluginName );
 							});
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/styles/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/styles/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/styles/plugin.js	(revision 6655)
@@ -20,9 +20,9 @@
 
 /**
- * Registers a function to be called whenever a style changes its state in the
+ * Registers a function to be called whenever the selection position changes in the
  * editing area. The current state is passed to the function. The possible
  * states are {@link CKEDITOR.TRISTATE_ON} and {@link CKEDITOR.TRISTATE_OFF}.
  * @param {CKEDITOR.style} style The style to be watched.
- * @param {Function} callback The function to be called when the style state changes.
+ * @param {Function} callback The function to be called.
  * @example
  * // Create a style object for the &lt;b&gt; element.
@@ -62,15 +62,7 @@
 					var currentState = callback.style.checkActive( ev.data.path ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF;
 
-					// If the state changed since the last check.
-					if ( callback.state !== currentState )
-					{
-						// Call the callback function, passing the current
-						// state to it.
-						callback.fn.call( this, currentState );
-
-						// Save the current state, so it can be compared next
-						// time.
-						callback.state = currentState;
-					}
+					// Call the callback function, passing the current
+					// state to it.
+					callback.fn.call( this, currentState );
 				}
 			});
@@ -88,10 +80,12 @@
 (function()
 {
-	var blockElements	= { address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 };
-	var objectElements	= { a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1};
-
-	var semicolonFixRegex = /\s*(?:;\s*|$)/;
-
-	var notBookmark = CKEDITOR.dom.walker.bookmark( 0, 1 );
+	var blockElements	= { address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },
+		objectElements	= { a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1};
+
+	var semicolonFixRegex = /\s*(?:;\s*|$)/,
+		varRegex = /#\((.+?)\)/g;
+
+	var notBookmark = CKEDITOR.dom.walker.bookmark( 0, 1 ),
+		nonWhitespaces = CKEDITOR.dom.walker.whitespaces( 1 );
 
 	CKEDITOR.style = function( styleDefinition, variablesValues )
@@ -108,5 +102,5 @@
 
 		this.type =
-			( element == '#' || blockElements[ element ] ) ?
+			blockElements[ element ] ?
 				CKEDITOR.STYLE_BLOCK
 			: objectElements[ element ] ?
@@ -704,6 +698,8 @@
 						 */
 						element.mergeSiblings();
-						removeFromElement( this, element );
-
+						if ( element.getName() == this.element )
+							removeFromElement( this, element );
+						else
+							removeOverrides( element, getOverrides( this )[ element.getName() ] );
 					}
 				}
@@ -814,10 +810,10 @@
 
 		range.moveToBookmark( bookmark );
-}
+	}
 
 	function applyObjectStyle( range )
 	{
 		var root = range.getCommonAncestor( true, true ),
-				element = root.getAscendant( this.element, true );
+			element = root.getAscendant( this.element, true );
 		element && setupElement( element, this );
 	}
@@ -826,12 +822,12 @@
 	{
 		var root = range.getCommonAncestor( true, true ),
-				element = root.getAscendant( this.element, true );
+			element = root.getAscendant( this.element, true );
 
 		if ( !element )
 			return;
 
-		var style = this;
-		var def = style._.definition;
-		var attributes = def.attributes;
+		var style = this,
+			def = style._.definition,
+			attributes = def.attributes;
 		var styles = CKEDITOR.style.getStyleText( def );
 
@@ -957,5 +953,4 @@
 	}
 
-	var nonWhitespaces = CKEDITOR.dom.walker.whitespaces( 1 );
 	/**
 	 * Merge a <pre> block with a previous sibling if available.
@@ -1026,4 +1021,5 @@
 		return headBookmark + str.replace( regexp, replacement ) + tailBookmark;
 	}
+
 	/**
 	 * Converting a list of <pre> into blocks with format well preserved.
@@ -1161,7 +1157,6 @@
 			attribs = def.attributes,
 			styles = def.styles,
-			overrides = getOverrides( style );
-
-		var innerElements = element.getElementsByTag( style.element );
+			overrides = getOverrides( style ),
+			innerElements = element.getElementsByTag( style.element );
 
 		for ( var i = innerElements.count(); --i >= 0 ; )
@@ -1182,5 +1177,4 @@
 			}
 		}
-
 	}
 
@@ -1266,9 +1260,7 @@
 	function getElement( style, targetDocument, element )
 	{
-		var el;
-
-		var def = style._.definition;
-
-		var elementName = style.element;
+		var el,
+			def = style._.definition,
+			elementName = style.element;
 
 		// The "*" element name will always be a span for this function.
@@ -1296,7 +1288,7 @@
 	function setupElement( el, style )
 	{
-		var def = style._.definition;
-		var attributes = def.attributes;
-		var styles = CKEDITOR.style.getStyleText( def );
+		var def = style._.definition,
+			attributes = def.attributes,
+			styles = CKEDITOR.style.getStyleText( def );
 
 		// Assign all defined attributes.
@@ -1316,5 +1308,4 @@
 	}
 
-	var varRegex = /#\((.+?)\)/g;
 	function replaceVariables( list, variablesValues )
 	{
@@ -1327,5 +1318,4 @@
 		}
 	}
-
 
 	// Returns an object that can be used for style matching comparison.
@@ -1544,4 +1534,35 @@
 };
 
+/**
+ * Manages styles registration and loading. See also {@link CKEDITOR.config.stylesSet}.
+ * @namespace
+ * @augments CKEDITOR.resourceManager
+ * @constructor
+ * @since 3.2
+ * @example
+ * // The set of styles for the <b>Styles</b> combo
+ * CKEDITOR.stylesSet.add( 'default',
+ * [
+ * 	// Block Styles
+ * 	{ name : 'Blue Title'		, element : 'h3', styles : { 'color' : 'Blue' } },
+ * 	{ name : 'Red Title'		, element : 'h3', styles : { 'color' : 'Red' } },
+ *
+ * 	// Inline Styles
+ * 	{ name : 'Marker: Yellow'	, element : 'span', styles : { 'background-color' : 'Yellow' } },
+ * 	{ name : 'Marker: Green'	, element : 'span', styles : { 'background-color' : 'Lime' } },
+ *
+ * 	// Object Styles
+ * 	{
+ * 		name : 'Image on Left',
+ * 		element : 'img',
+ * 		attributes :
+ * 		{
+ * 			'style' : 'padding: 5px; margin-right: 5px',
+ * 			'border' : '2',
+ * 			'align' : 'left'
+ * 		}
+ * 	}
+ * ]);
+ */
 CKEDITOR.stylesSet = new CKEDITOR.resourceManager( '', 'stylesSet' );
 
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/stylescombo/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/stylescombo/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/stylescombo/plugin.js	(revision 6655)
@@ -67,15 +67,18 @@
 						loadStylesSet( function()
 							{
-								var style, styleName;
+								var style,
+									styleName,
+									lastType,
+									type,
+									i,
+									count;
 
 								// Loop over the Array, adding all items to the
 								// combo.
-								var lastType;
-								for ( var i = 0, count = stylesList.length ; i < count ; i++ )
+								for ( i = 0, count = stylesList.length ; i < count ; i++ )
 								{
 									style = stylesList[ i ];
 									styleName = style._name;
-
-									var type = style.type;
+									type = style.type;
 
 									if ( type != lastType )
@@ -103,7 +106,6 @@
 
 						var style = styles[ value ],
-							selection = editor.getSelection();
-
-						var elementPath = new CKEDITOR.dom.elementPath( selection.getStartElement() );
+							selection = editor.getSelection(),
+							elementPath = new CKEDITOR.dom.elementPath( selection.getStartElement() );
 
 						style[ style.checkActive( elementPath ) ? 'remove' : 'apply' ]( editor.document );
@@ -116,7 +118,6 @@
 						editor.on( 'selectionChange', function( ev )
 							{
-								var currentValue = this.getValue();
-
-								var elementPath = ev.data.path,
+								var currentValue = this.getValue(),
+									elementPath = ev.data.path,
 									elements = elementPath.elements;
 
@@ -152,7 +153,7 @@
 						var selection = editor.getSelection(),
 							element = selection.getSelectedElement(),
-							elementPath = new CKEDITOR.dom.elementPath( element || selection.getStartElement() );
-
-						var counter = [ 0, 0, 0, 0 ];
+							elementPath = new CKEDITOR.dom.elementPath( element || selection.getStartElement() ),
+							counter = [ 0, 0, 0, 0 ];
+
 						this.showAll();
 						this.unmarkAll();
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/tabletools/dialogs/tableCell.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/tabletools/dialogs/tableCell.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/tabletools/dialogs/tableCell.js	(revision 6655)
@@ -74,5 +74,5 @@
 			title : langCell.title,
 			minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks? 450 : 410,
-			minHeight : CKEDITOR.env.ie && CKEDITOR.env.quirks?  230 : 200,
+			minHeight : CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks )?  230 : 200,
 			contents : [
 				{
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/tabletools/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/tabletools/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/tabletools/plugin.js	(revision 6655)
@@ -796,16 +796,13 @@
 							return;
 
-						// Maintain the selection point at where the table was deleted.
-						selection.selectElement( table );
-						var range = selection.getRanges()[0];
-						range.collapse();
-						selection.selectRanges( [ range ] );
-
 						// If the table's parent has only one child remove it as well (unless it's the body or a table cell) (#5416, #6289)
 						var parent = table.getParent();
 						if ( parent.getChildCount() == 1 && !parent.is( 'body', 'td', 'th' ) )
-							parent.remove();
-						else
-							table.remove();
+							table = parent;
+
+						var range = new CKEDITOR.dom.range( editor.document );
+						range.moveToPosition( table, CKEDITOR.POSITION_BEFORE_START );
+						table.remove();
+						range.select();
 					}
 				} );
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/undo/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/undo/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/undo/plugin.js	(revision 6655)
@@ -149,4 +149,7 @@
 	{
 		this.editor = editor;
+
+		editor.fire( 'beforeUndoImage' );
+
 		var contents = editor.getSnapshot(),
 			selection	= contents && editor.getSelection();
@@ -157,4 +160,6 @@
 		this.contents	= contents;
 		this.bookmarks	= selection && selection.createBookmarks2( true );
+
+		editor.fire( 'afterUndoImage' );
 	};
 
@@ -553,2 +558,22 @@
  * @event
  */
+
+/**
+ * Fired before an undo image is to be taken. An undo image represents the
+ * editor state at some point. It's saved into an undo store, so the editor is
+ * able to recover the editor state on undo and redo operations.
+ * @name CKEDITOR.editor#beforeUndoImage
+ * @since 3.5.3
+ * @see CKEDITOR.editor#afterUndoImage
+ * @event
+ */
+
+/**
+ * Fired after an undo image is taken. An undo image represents the
+ * editor state at some point. It's saved into an undo store, so the editor is
+ * able to recover the editor state on undo and redo operations.
+ * @name CKEDITOR.editor#afterUndoImage
+ * @since 3.5.3
+ * @see CKEDITOR.editor#beforeUndoImage
+ * @event
+ */
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/wysiwygarea/plugin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/wysiwygarea/plugin.js	(revision 6655)
@@ -314,7 +314,11 @@
 			doc = editor.document,
 			body = editor.document.getBody(),
+			bodyFirstChild = body.getFirst(),
 			bodyChildsNum = body.getChildren().count();
 
-		if ( !bodyChildsNum || ( bodyChildsNum == 1&& body.getFirst().hasAttribute( '_moz_editor_bogus_node' ) ) )
+		if ( !bodyChildsNum
+			|| bodyChildsNum == 1
+				&& bodyFirstChild.type == CKEDITOR.NODE_ELEMENT
+				&& bodyFirstChild.hasAttribute( '_moz_editor_bogus_node' ) )
 		{
 			restoreDirty( editor );
@@ -363,6 +367,12 @@
 
 			// Ensure bogus br could help to move cursor (out of styles) to the end of block. (#7041)
-			var pathBlock = path.block || path.blockLimit;
-			if ( pathBlock && !pathBlock.getBogus() )
+			var pathBlock = path.block || path.blockLimit,
+				lastNode = pathBlock && pathBlock.getLast( isNotEmpty );
+
+			// In case it's not ended with block element and doesn't have bogus yet. (#7467)
+			if ( pathBlock
+					&& !( lastNode && lastNode.type == CKEDITOR.NODE_ELEMENT && lastNode.isBlockBoundary() )
+					&& !pathBlock.is( 'pre' )
+					&& !pathBlock.getBogus() )
 			{
 				editor.fire( 'updateSnapshot' );
@@ -419,11 +429,6 @@
 
 			range.select();
-			// Notify non-IE that selection has changed.
-			if ( !CKEDITOR.env.ie )
-			{
-				// Make sure next selection change is correct.  (#6811)
-				editor.forceNextSelectionCheck();
-				editor.selectionChange();
-			}
+			// Cancel this selection change in favor of the next (correct).  (#6811)
+			evt.cancel();
 		}
 
@@ -688,4 +693,6 @@
 						if ( CKEDITOR.env.webkit )
 						{
+							// Mark that cursor will right blinking (#7113).
+							domDocument.on( 'mousedown', function() { wasFocused = 1; } );
 							// Prevent from tick checkbox/radiobox/select
 							domDocument.on( 'click', function( ev )
@@ -808,4 +815,28 @@
 								} );
 							}
+
+							// Prevent IE from leaving new paragraph after deleting all contents in body. (#6966)
+							editor.config.enterMode != CKEDITOR.ENTER_P
+								&& domDocument.on( 'selectionchange', function()
+								{
+									var body = domDocument.getBody(),
+										range = editor.getSelection().getRanges()[ 0 ];
+
+									if ( body.getHtml().match( /^<p>&nbsp;<\/p>$/i )
+										&& range.startContainer.equals( body ) )
+									{
+										// Avoid the ambiguity from a real user cursor position.
+										setTimeout( function ()
+										{
+											range = editor.getSelection().getRanges()[ 0 ];
+											if ( !range.startContainer.equals ( 'body' ) )
+											{
+												body.getFirst().remove( 1 );
+												range.moveToElementEditEnd( body );
+												range.select( 1 );
+											}
+										}, 0 );
+									}
+								});
 						}
 
@@ -903,4 +934,5 @@
 							{
 								isLoadingData = true;
+								editor._.dataStore = { id : 1 };
 
 								var config = editor.config,
@@ -982,4 +1014,8 @@
 								}
 
+								// Distinguish bogus to normal BR at the end of document for Mozilla. (#5293).
+								if ( CKEDITOR.env.gecko )
+									data = data.replace( /<br \/>(?=\s*<\/(:?html|body)>)/, '$&<br type="_moz" />' );
+
 								data += activationScript;
 
@@ -1000,4 +1036,8 @@
 									? doc.getDocumentElement().getOuterHtml()
 									: doc.getBody().getHtml();
+
+								// BR at the end of document is bogus node for Mozilla. (#5293).
+								if ( CKEDITOR.env.gecko )
+									data = data.replace( /<br>(?=\s*(:?$|<\/body>))/, '' );
 
 								if ( editor.dataProcessor )
@@ -1237,12 +1277,10 @@
 
 /**
- * Disables the built-in spell checker while typing natively available in the
- * browser (currently Firefox and Safari only).<br /><br />
+ * Disables the built-in words spell checker if browser provides one.<br /><br />
  *
- * Even if word suggestions will not appear in the CKEditor context menu, this
- * feature is useful to help quickly identifying misspelled words.<br /><br />
+ * <strong>Note:</strong> Although word suggestions provided by browsers (natively) will not appear in CKEditor's default context menu,
+ * users can always reach the native context menu by holding the <em>Ctrl</em> key when right-clicking if {@link CKEDITOR.config.browserContextMenuOnCtrl}
+ * is enabled or you're simply not using the context menu plugin.
  *
- * This setting is currently compatible with Firefox only due to limitations in
- * other browsers.
  * @type Boolean
  * @default true
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/xml/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/xml/plugin.js	(revision 6655)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/xml/plugin.js	(revision 6655)
@@ -0,0 +1,170 @@
+﻿/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.xml} class, which represents a
+ *		loaded XML document.
+ */
+
+(function()
+{
+	CKEDITOR.plugins.add( 'xml', {});
+
+	/**
+	 * Represents a loaded XML document.
+	 * @constructor
+	 * @param {object|string} xmlObjectOrData A native XML (DOM document) object or
+	 *		a string containing the XML definition to be loaded.
+	 * @example
+	 * var xml = <b>new CKEDITOR.xml( '<books><book title="My Book" /></books>' )</b>;
+	 */
+	CKEDITOR.xml = function( xmlObjectOrData )
+	{
+		var baseXml = null;
+
+		if ( typeof xmlObjectOrData == 'object' )
+			baseXml = xmlObjectOrData;
+		else
+		{
+			var data = ( xmlObjectOrData || '' ).replace( /&nbsp;/g, '\xA0' );
+			if ( window.DOMParser )
+				baseXml = (new DOMParser()).parseFromString( data, 'text/xml' );
+			else if ( window.ActiveXObject )
+			{
+				try { baseXml = new ActiveXObject( 'MSXML2.DOMDocument' ); }
+				catch(e)
+				{
+					try { baseXml = new ActiveXObject( 'Microsoft.XmlDom' ); } catch(e) {}
+				}
+
+				if ( baseXml )
+				{
+					baseXml.async = false;
+					baseXml.resolveExternals = false;
+					baseXml.validateOnParse = false;
+					baseXml.loadXML( data );
+				}
+			}
+		}
+
+		/**
+		 * The native XML (DOM document) used by the class instance.
+		 * @type object
+		 * @example
+		 */
+		this.baseXml = baseXml;
+	};
+
+	CKEDITOR.xml.prototype =
+	{
+		/**
+		 * Get a single node from the XML document, based on a XPath query.
+		 * @param {String} xpath The XPath query to execute.
+		 * @param {Object} [contextNode] The XML DOM node to be used as the context
+		 *		for the XPath query. The document root is used by default.
+		 * @returns {Object} A XML node element or null if the query has no results.
+		 * @example
+		 * // Create the XML instance.
+		 * var xml = new CKEDITOR.xml( '<list><item id="test1" /><item id="test2" /></list>' );
+		 * // Get the first <item> node.
+		 * var itemNode = <b>xml.selectSingleNode( 'list/item' )</b>;
+		 * // Alert "item".
+		 * alert( itemNode.nodeName );
+		 */
+		selectSingleNode : function( xpath, contextNode )
+		{
+			var baseXml = this.baseXml;
+
+			if ( contextNode || ( contextNode = baseXml ) )
+			{
+				if ( CKEDITOR.env.ie || contextNode.selectSingleNode )	// IE
+					return contextNode.selectSingleNode( xpath );
+				else if ( baseXml.evaluate )							// Others
+				{
+					var result = baseXml.evaluate( xpath, contextNode, null, 9, null);
+					return ( result && result.singleNodeValue ) || null;
+				}
+			}
+
+			return null;
+		},
+
+		/**
+		 * Gets a list node from the XML document, based on a XPath query.
+		 * @param {String} xpath The XPath query to execute.
+		 * @param {Object} [contextNode] The XML DOM node to be used as the context
+		 *		for the XPath query. The document root is used by default.
+		 * @returns {ArrayLike} An array containing all matched nodes. The array will
+		 *		be empty if the query has no results.
+		 * @example
+		 * // Create the XML instance.
+		 * var xml = new CKEDITOR.xml( '<list><item id="test1" /><item id="test2" /></list>' );
+		 * // Get the first <item> node.
+		 * var itemNodes = xml.selectSingleNode( 'list/item' );
+		 * // Alert "item" twice, one for each <item>.
+		 * for ( var i = 0 ; i < itemNodes.length ; i++ )
+		 *     alert( itemNodes[i].nodeName );
+		 */
+		selectNodes : function( xpath, contextNode )
+		{
+			var baseXml = this.baseXml,
+				nodes = [];
+
+			if ( contextNode || ( contextNode = baseXml ) )
+			{
+				if ( CKEDITOR.env.ie || contextNode.selectNodes )		// IE
+					return contextNode.selectNodes( xpath );
+				else if ( baseXml.evaluate )							// Others
+				{
+					var result = baseXml.evaluate( xpath, contextNode, null, 5, null);
+
+					if ( result )
+					{
+						var node;
+						while ( ( node = result.iterateNext() ) )
+							nodes.push( node );
+					}
+				}
+			}
+
+			return nodes;
+		},
+
+		/**
+		 * Gets the string representation of hte inner contents of a XML node,
+		 * based on a XPath query.
+		 * @param {String} xpath The XPath query to execute.
+		 * @param {Object} [contextNode] The XML DOM node to be used as the context
+		 *		for the XPath query. The document root is used by default.
+		 * @returns {String} The textual representation of the inner contents of
+		 *		the node or null if the query has no results.
+		 * @example
+		 * // Create the XML instance.
+		 * var xml = new CKEDITOR.xml( '<list><item id="test1" /><item id="test2" /></list>' );
+		 * // Alert "<item id="test1" /><item id="test2" />".
+		 * alert( xml.getInnerXml( 'list' ) );
+		 */
+		getInnerXml : function( xpath, contextNode )
+		{
+			var node = this.selectSingleNode( xpath, contextNode ),
+				xml = [];
+			if ( node )
+			{
+				node = node.firstChild;
+				while ( node )
+				{
+					if ( node.xml )				// IE
+						xml.push( node.xml );
+					else if ( window.XMLSerializer )	// Others
+						xml.push( ( new XMLSerializer() ).serializeToString( node ) );
+
+					node = node.nextSibling;
+				}
+			}
+
+			return xml.length ? xml.join( '' ) : null;
+		}
+	};
+})();
Index: /CKEditor/branches/versions/3.5.x/_source/skins/kama/dialog.css
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/skins/kama/dialog.css	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/skins/kama/dialog.css	(revision 6655)
@@ -563,4 +563,9 @@
 /* END Firefox2 buttons */
 
+.cke_skin_kama .cke_browser_ie9.cke_rtl .cke_dialog_footer_buttons td
+{
+	padding-left: 2px;
+}
+
 .cke_skin_kama strong
 {
Index: /CKEditor/branches/versions/3.5.x/_source/skins/kama/mainui.css
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/skins/kama/mainui.css	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/skins/kama/mainui.css	(revision 6655)
@@ -134,5 +134,5 @@
 }
 
-.cke_skin_kama .cke_rtl .cke_resizer
+.cke_skin_kama .cke_resizer_rtl
 {
 	cursor: sw-resize;
Index: /CKEditor/branches/versions/3.5.x/_source/skins/kama/richcombo.css
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/skins/kama/richcombo.css	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/skins/kama/richcombo.css	(revision 6655)
@@ -49,4 +49,5 @@
 	height: 21px;
 	margin-right: 6px;
+	margin-bottom: 5px;
 }
 
@@ -123,23 +124,22 @@
 .cke_skin_kama .cke_rcombo .cke_openbutton
 {
+	display: inline-block;
+}
+
+.cke_skin_kama .cke_rcombo .cke_openbutton .cke_icon
+{
+	display: inline-block;
 	background-image: url(images/sprites.png);
 	_background-image: url(images/sprites_ie6.png);
 	background-position: 0 -68px;
 	background-repeat: no-repeat;
-	display: inline-block;
 	width: 17px;
 	height: 19px;
 	margin: 1px 2px;
-	background-repeat: no-repeat;
-}
-
-.cke_skin_kama .cke_rcombo .cke_openbutton span
-{
-	display: none;
-}
-
-.cke_skin_kama .cke_hc .cke_rcombo .cke_openbutton span
-{
-	display	: inline;
+}
+
+.cke_skin_kama .cke_hc .cke_rcombo .cke_openbutton .cke_icon
+{
+	background: none;
 }
 
Index: /CKEditor/branches/versions/3.5.x/_source/skins/office2003/mainui.css
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/skins/office2003/mainui.css	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/skins/office2003/mainui.css	(revision 6655)
@@ -102,5 +102,5 @@
 }
 
-.cke_skin_office2003 .cke_rtl .cke_resizer
+.cke_skin_office2003 .cke_resizer_rtl
 {
 	cursor: sw-resize;
Index: /CKEditor/branches/versions/3.5.x/_source/skins/office2003/richcombo.css
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/skins/office2003/richcombo.css	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/skins/office2003/richcombo.css	(revision 6655)
@@ -142,12 +142,15 @@
 {
 	display: inline-block;
-
+	border-top: 1px solid #8f8f73;
+	border-bottom: 1px solid #8f8f73;
+}
+
+.cke_skin_office2003 .cke_rcombo .cke_openbutton .cke_icon
+{
+	display: inline-block;
 	background-position: 5px -1002px;
 	background-image: url(images/sprites.png);
 	_background-image: url(images/sprites_ie6.png);
 	background-repeat: no-repeat;
-
-	border-top: 1px solid #8f8f73;
-	border-bottom: 1px solid #8f8f73;
 	width: 14px;
 	height: 22px;
@@ -155,21 +158,16 @@
 
 /* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_office2003 .cke_browser_ie .cke_rcombo .cke_openbutton
+.cke_skin_office2003 .cke_browser_ie .cke_rcombo .cke_openbutton .cke_icon
 {
 	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');
 }
-.cke_skin_office2003 .cke_browser_ie6 .cke_rcombo .cke_openbutton
+.cke_skin_office2003 .cke_browser_ie6 .cke_rcombo .cke_openbutton .cke_icon
 {
 	filter: ;
 }
-
-.cke_skin_office2003 .cke_rcombo .cke_openbutton span
-{
-	display: none;
-}
-
-.cke_skin_office2003 .cke_hc .cke_rcombo .cke_openbutton span
-{
-	display	: inline;
+.cke_skin_office2003 .cke_hc .cke_rcombo .cke_openbutton .cke_icon
+{
+	background: none;
+	filter: ;
 }
 
Index: /CKEditor/branches/versions/3.5.x/_source/skins/office2003/skin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/skins/office2003/skin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/skins/office2003/skin.js	(revision 6655)
@@ -37,5 +37,5 @@
 					});
 
-				if ( !CKEDITOR.env.ie )
+				if ( !CKEDITOR.env.ie || CKEDITOR.env.ie9Compat )
 					return;
 
Index: /CKEditor/branches/versions/3.5.x/_source/skins/v2/mainui.css
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/skins/v2/mainui.css	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/skins/v2/mainui.css	(revision 6655)
@@ -111,5 +111,5 @@
 }
 
-.cke_skin_v2 .cke_rtl .cke_resizer
+.cke_skin_v2 .cke_resizer_rtl
 {
 	cursor: sw-resize;
Index: /CKEditor/branches/versions/3.5.x/_source/skins/v2/richcombo.css
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/skins/v2/richcombo.css	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/skins/v2/richcombo.css	(revision 6655)
@@ -137,5 +137,11 @@
 {
 	display: inline-block;
-
+	border-top: 1px solid #8f8f73;
+	border-bottom: 1px solid #8f8f73;
+}
+
+.cke_skin_v2 .cke_rcombo .cke_openbutton .cke_icon
+{
+	display: inline-block;
 	background-position: 5px -715px;
 	background-image: url(images/sprites.png);
@@ -143,6 +149,4 @@
 	background-repeat: no-repeat;
 
-	border-top: 1px solid #8f8f73;
-	border-bottom: 1px solid #8f8f73;
 	width: 14px;
 	height: 20px;
@@ -150,21 +154,16 @@
 
 /* IE with zoom != 100% will distort the icons otherwise #4821 */
-.cke_skin_v2 .cke_browser_ie .cke_rcombo .cke_openbutton
+.cke_skin_v2 .cke_browser_ie .cke_rcombo .cke_openbutton .cke_icon
 {
 	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');
 }
-.cke_skin_v2 .cke_browser_ie6 .cke_rcombo .cke_openbutton
+.cke_skin_v2 .cke_browser_ie6 .cke_rcombo .cke_openbutton .cke_icon
 {
 	filter: ;
 }
-
-.cke_skin_v2 .cke_rcombo .cke_openbutton span
-{
-	display: none;
-}
-
-.cke_skin_v2 .cke_hc .cke_rcombo .cke_openbutton span
-{
-	display	: inline;
+.cke_skin_v2 .cke_hc .cke_rcombo .cke_openbutton .cke_icon
+{
+	background: none;
+	filter: ;
 }
 
Index: /CKEditor/branches/versions/3.5.x/_source/skins/v2/skin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/skins/v2/skin.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/skins/v2/skin.js	(revision 6655)
@@ -37,5 +37,5 @@
 					});
 
-				if ( !CKEDITOR.env.ie )
+				if ( !CKEDITOR.env.ie || CKEDITOR.env.ie9Compat )
 					return;
 
Index: /CKEditor/branches/versions/3.5.x/_source/themes/default/theme.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/themes/default/theme.js	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/_source/themes/default/theme.js	(revision 6655)
@@ -168,4 +168,16 @@
 			// Disable browser context menu for editor's chrome.
 			container.disableContextMenu();
+
+			// Use a class to indicate that the current selection is in different direction than the UI.
+			editor.on( 'contentDirChanged', function( evt )
+			{
+				var func = ( editor.lang.dir != evt.data ? 'add' : 'remove' ) + 'Class';
+
+				container.getChild( 1 )[ func ]( 'cke_mixed_dir_content' );
+
+				// Put the mixed direction class on the respective element also for shared spaces.
+				var toolbarSpace = this.sharedSpaces && this.sharedSpaces[ this.config.toolbarLocation ];
+				toolbarSpace && toolbarSpace.getParent().getParent()[ func ]( 'cke_mixed_dir_content' );
+			});
 
 			editor.fireOnce( 'themeLoaded' );
Index: /CKEditor/branches/versions/3.5.x/ckeditor_php4.php
===================================================================
--- /CKEditor/branches/versions/3.5.x/ckeditor_php4.php	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/ckeditor_php4.php	(revision 6655)
@@ -532,5 +532,4 @@
 	/**
 	 * This little function provides a basic JSON support.
-	 * http://php.net/manual/en/function.json-encode.php
 	 * \private
 	 *
@@ -543,59 +542,30 @@
 			return 'null';
 		}
-		if ($val === false) {
-			return 'false';
-		}
-		if ($val === true) {
-			return 'true';
-		}
-		if (is_scalar($val))
-		{
-			if (is_float($val))
-			{
-				// Always use "." for floats.
-				$val = str_replace(",", ".", strval($val));
-			}
-
-			// Use @@ to not use quotes when outputting string value
-			if (strpos($val, '@@') === 0) {
-				return substr($val, 2);
-			}
-			else {
-				// All scalars are converted to strings to avoid indeterminism.
-				// PHP's "1" and 1 are equal for all PHP operators, but
-				// JS's "1" and 1 are not. So if we pass "1" or 1 from the PHP backend,
-				// we should get the same result in the JS frontend (string).
-				// Character replacements for JSON.
-				static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'),
-				array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
-
-				$val = str_replace($jsonReplaces[0], $jsonReplaces[1], $val);
-				if (strtoupper(substr($val, 0, 9)) == 'CKEDITOR.') {
-					return $val;
-				}
-
-				return '"' . $val . '"';
-			}
-		}
-		$isList = true;
-		for ($i = 0, reset($val); $i < count($val); $i++, next($val))
-		{
-			if (key($val) !== $i)
-			{
-				$isList = false;
-				break;
-			}
-		}
-		$result = array();
-		if ($isList)
-		{
-			foreach ($val as $v) $result[] = $this->jsEncode($v);
-			return '[ ' . join(', ', $result) . ' ]';
-		}
-		else
-		{
-			foreach ($val as $k => $v) $result[] = $this->jsEncode($k).': '.$this->jsEncode($v);
-			return '{ ' . join(', ', $result) . ' }';
-		}
+		if (is_bool($val)) {
+			return $val ? 'true' : 'false';
+		}
+		if (is_int($val)) {
+			return $val;
+		}
+		if (is_float($val)) {
+			return str_replace(',', '.', $val);
+		}
+		if (is_array($val) || is_object($val)) {
+			if (is_array($val) && (array_keys($val) === range(0,count($val)-1))) {
+				return '[' . implode(',', array_map(array($this, 'jsEncode'), $val)) . ']';
+			}
+			$temp = array();
+			foreach ($val as $k => $v){
+				$temp[] = $this->jsEncode("{$k}") . ':' . $this->jsEncode($v);
+			}
+			return '{' . implode(',', $temp) . '}';
+		}
+		// String otherwise
+		if (strpos($val, '@@') === 0)
+			return substr($val, 2);
+		if (strtoupper(substr($val, 0, 9)) == 'CKEDITOR.')
+			return $val;
+
+		return '"' . str_replace(array("\\", "/", "\n", "\t", "\r", "\x08", "\x0c", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'), $val) . '"';
 	}
 }
Index: /CKEditor/branches/versions/3.5.x/ckeditor_php5.php
===================================================================
--- /CKEditor/branches/versions/3.5.x/ckeditor_php5.php	(revision 6654)
+++ /CKEditor/branches/versions/3.5.x/ckeditor_php5.php	(revision 6655)
@@ -523,5 +523,4 @@
 	/**
 	 * This little function provides a basic JSON support.
-	 * http://php.net/manual/en/function.json-encode.php
 	 *
 	 * @param mixed $val
@@ -533,59 +532,30 @@
 			return 'null';
 		}
-		if ($val === false) {
-			return 'false';
-		}
-		if ($val === true) {
-			return 'true';
-		}
-		if (is_scalar($val))
-		{
-			if (is_float($val))
-			{
-				// Always use "." for floats.
-				$val = str_replace(",", ".", strval($val));
-			}
-
-			// Use @@ to not use quotes when outputting string value
-			if (strpos($val, '@@') === 0) {
-				return substr($val, 2);
-			}
-			else {
-				// All scalars are converted to strings to avoid indeterminism.
-				// PHP's "1" and 1 are equal for all PHP operators, but
-				// JS's "1" and 1 are not. So if we pass "1" or 1 from the PHP backend,
-				// we should get the same result in the JS frontend (string).
-				// Character replacements for JSON.
-				static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'),
-				array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
-
-				$val = str_replace($jsonReplaces[0], $jsonReplaces[1], $val);
-				if (strtoupper(substr($val, 0, 9)) == 'CKEDITOR.') {
-					return $val;
-				}
-
-				return '"' . $val . '"';
-			}
-		}
-		$isList = true;
-		for ($i = 0, reset($val); $i < count($val); $i++, next($val))
-		{
-			if (key($val) !== $i)
-			{
-				$isList = false;
-				break;
-			}
-		}
-		$result = array();
-		if ($isList)
-		{
-			foreach ($val as $v) $result[] = $this->jsEncode($v);
-			return '[ ' . join(', ', $result) . ' ]';
-		}
-		else
-		{
-			foreach ($val as $k => $v) $result[] = $this->jsEncode($k).': '.$this->jsEncode($v);
-			return '{ ' . join(', ', $result) . ' }';
-		}
+		if (is_bool($val)) {
+			return $val ? 'true' : 'false';
+		}
+		if (is_int($val)) {
+			return $val;
+		}
+		if (is_float($val)) {
+			return str_replace(',', '.', $val);
+		}
+		if (is_array($val) || is_object($val)) {
+			if (is_array($val) && (array_keys($val) === range(0,count($val)-1))) {
+				return '[' . implode(',', array_map(array($this, 'jsEncode'), $val)) . ']';
+			}
+			$temp = array();
+			foreach ($val as $k => $v){
+				$temp[] = $this->jsEncode("{$k}") . ':' . $this->jsEncode($v);
+			}
+			return '{' . implode(',', $temp) . '}';
+		}
+		// String otherwise
+		if (strpos($val, '@@') === 0)
+			return substr($val, 2);
+		if (strtoupper(substr($val, 0, 9)) == 'CKEDITOR.')
+			return $val;
+
+		return '"' . str_replace(array("\\", "/", "\n", "\t", "\r", "\x08", "\x0c", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'), $val) . '"';
 	}
 }
