Index: /CKEditor/branches/features/adobeair/CHANGES.html
===================================================================
--- /CKEditor/branches/features/adobeair/CHANGES.html	(revision 6005)
+++ /CKEditor/branches/features/adobeair/CHANGES.html	(revision 6006)
@@ -36,14 +36,241 @@
 	</h1>
 	<h3>
-			CKEditor 3.3.2 (SVN)</h3>
+			CKEditor 3.4.2 (SVN)</h3>
 	<p>
 			New features:</p>
 	<ul>
-			<li></li>
+		<li><a href="http://dev.ckeditor.com/ticket/5024">#5024</a> : Added a sample that shows how to output HTML that is valid for Flash.</li>
 	</ul>
 	<p>
 			Fixed issues:</p>
 	<ul>
-		<li></li>
+		<li><a href="http://dev.ckeditor.com/ticket/5237">#5237</a> : English text in dialogs' title was flipped when using RTL language (office2003 and v2 skins).</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6289">#6289</a> : Deleting nested table removed the parent cell.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6341">#6341</a> : The editor contents now has the text cursor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6153">#6153</a> : Chrome: tab focus is wrong.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6261">#6261</a> : Focus and infinite loop between multiple editors.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6170">#6170</a> : Dedicated class names are removed from floating panels when opening another panel.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6339">#6339</a> : Autogrow plugin now doesn't work on maximized editors.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6237">#6237</a> : BIDI: Applying same language direction to all paragraphs not working.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6353">#6353</a> : [IE] Resize was broken with office2003 and v2 skins.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6375">#6375</a> : Avoiding errors when hiding the editor after the blur event.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6133">#6133</a> : Styled paragraphs result on buggy list creation.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5074">#5074</a> : Link target is not removed when changing to popup.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6408">#6408</a> : [IE] Autogrow now works correctly on Quirks.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6420">#6420</a> : [IE] The table properties dialog now correctly retrieves the caption text.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6141">#6141</a> : It was impossible to outdent a list when indentOffset was set to 0.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6377">#6377</a> : FF width and height are not shown for smiley in Image properties dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5399">#5399</a> : Lists pasted from Word do not maintain their nesting.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6225">#6225</a> : [FF] Can not transform sevaral lines to list with enterMode BR.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6467">#6467</a> : [FF] It is now possible to disable the plugin command on "mode" event.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6461">#6461</a> : Attributes are now being kept when changing block formatting.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6226">#6226</a> : BIDI: Language direction applied to a Paragraph is removed when we apply one of Paragraph formatting options.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5395">#5395</a> : [Opera] Native context menu incorrectly opened after Opera 10.2.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6444">#6444</a> : [Opera] Close panels and dialogs don't return focus to wysiwyg frame.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6332">#6332</a> : IE: V2 skin bottom dialog's border broken.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5646">#5646</a> : Parser incorreclty removes inline element when there's only one comment node enclosed.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6189">#6189</a> : Minor code size reduction.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5045">#5045</a> : uiColor behaved wrong if multiple editors were used with period in their names.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5766">#5766</a> : Config entry "ignoreEmptyParagraph" should only remove one single empty paragraph in document.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5931">#5931</a> : Unable to apply inline style because of nested elements with same style name.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6083">#6083</a> : Dialog close sometimes cause collapsed editor selection before the insertion.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6253">#6253</a> : BIDI: creating a Numbered/Bulleted list causing improper behavior on bidi.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4023">#4023</a> : [Opera] Maximize plugin.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6403">#6403</a> : [Opera] Font name options is not correctly marked in dropdown list.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4534">#4534</a> : [Opera] Arrow key to navigate through combo list has side effects of window scrolling.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6416">#6416</a> : [IE9] Unable to make text selection with mouse in source area.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6417">#6417</a> : [IE9] Context menu opens at the upper-left corner always.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6501">#6501</a> : [IE9] Context menu item layout is broken.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6099">#6099</a> : BIDI: when we apply explicit language direction to Numbered/Bulleted List the corresponding BIDI Tool bar icon is not highlighted in the Toolbar.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6100">#6100</a> : BIDI: when we change Table language direction indentation of text in Table cells is not applied correctly.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6376">#6376</a> : BIDI: buttons should not toggle the base language direction.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6235">#6235</a> : BIDI: Applying direction to multi-paragraph selection within a div.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6187">#6187</a> : [IE6] Multi-instance loading produces 404s on background images.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5446">#5446</a> : Setting config.filebrowserImageBrowseUrl results in displaying also Browser Server on links.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5626">#5626</a> : CKeditor 3.2.1 : html content attached makes ckeditor crash the browser FF/IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6508">#6508</a> : BiDi: Margin mirroring logic doesn't honor CSS direction.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6043">#6043</a> : BIDI: When we apply RTL direction to a right aligned Paragraph, Paragraph is not moved to left & Alignment of Paragraph is not changed.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6485">#6485</a> : BIDI: When direction is applied on partial selected list, the style is been incorrectly applied on the entired list.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6087">#6087</a> : Cursor of input fields in dialog isn't visible in RLT .</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5595">#5595</a> : Extra leading spaces added in preformatted block.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6094">#6094</a> : Match full word option doesn't stop on block boundaries.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5730">#5730</a> : [Safari] Continual pastes (holding paste key) breaks document contents.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5850">#5850</a> : [IE] Inline style misbehaviors at the beginning of numbered/bulleted list.</li>
+		<li>Updated the following language files:<ul>
+			<li><a href="http://dev.ckeditor.com/ticket/6427">#6427</a> : Ukrainian;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/6464">#6464</a> : Finnish;</li>
+			<li>Hebrew;</li>
+		</ul></li>
+	</ul>
+	<h3>
+			CKEditor 3.4.1</h3>
+	<p>
+			New features:</p>
+	<ul>
+		<li><a href="http://dev.ckeditor.com/ticket/5308">#5308</a> : Introduced the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.filebrowserWindowFeatures">filebrowserWindowFeatures</a> setting, making it possible to have custom window features in the file browser window.</li>
+	</ul>
+	<p>
+			Fixed issues:</p>
+	<ul>
+		<li><a href="http://dev.ckeditor.com/ticket/6027">#6027</a> : Modifying Table Properties by selecting more than one cell caused issues.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6146">#6146</a> : IE: Floating panels were being opened in the wrong place in RTL pages with horizontal scrollbars.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6055">#6055</a> : The timestamp is now added only once to each loaded file.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6097">#6097</a> : The bookmarks now use the right name.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5717">#5717</a> : Removed the scayt_contextMenuOntop setting and the SCAYT context menu options are always on top.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5956">#5956</a> : [FF] It was impossible to create an editor inside an hidden container.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5753">#5753</a> : It was impossible to have a default value for the name field in the select dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6041">#6041</a> : BIDI: Direction of Increase Indent & Decrease Indent icons are not reversed after changing Lang direction to RTL.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6138">#6138</a> : List indentation is not working.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5649">#5649</a> : Image dialog too wide when many styles are set.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5715">#5715</a> : Cell color picker dialog returns focus to document.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6108">#6108</a> : Fixed div style.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5336">#5336</a> : Remove object style.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6155">#6155</a> : [[FF]] Modifying Table Header Properties by selecting first Row, causing several issues.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6163">#6163</a> : Focus not going to Tabs in Image dialog when we went to Edit the Image.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6177">#6177</a> : IE we can't start Numbered/Bulleted list on a Empty page.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5413">#5413</a> : Browser error after pasting html table in CKEditor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6034">#6034</a> : Horizontal Alignment applied to Table cell is not updated correctly in the Toolbar.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6112">#6112</a> : BIDI: Alignment set to text in Table cell is not shown in the Tool bar when we press Enter to start a new Paragraph.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6117">#6117</a> : BIDI: Language direction is changing when we come out of Numbered/Bulleted list.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6182">#6182</a> : Language Direction field on the Advanced tab of Table Properties dialog has a fixed pixel width.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5487">#5487</a> : Fullpage writer problem with line-break.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6197">#6197</a> : The CKEDITOR.loader base path auto-detection was not working with the _source folder.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6240">#6240</a> : Font Names & Font Sizes should be shown Left Align even for RTL Languages.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5975">#5975</a> : Page-break should have proper Alt Text instead of Unknown object. so that JAWS reads it properly.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6255">#6255</a> : Inserting a page break as the first node triggered an error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6188">#6188</a> : [IE7] Automatic color button had the wrong cursor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6129">#6129</a> : The show blocks' labels are now shown in the right for RTL languages.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5421">#5421</a> : &amp;shy; entity not converted when config.entities=false.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5769">#5769</a> : xhtml code generation problem &amp;nbsp; instead of &amp;#160; (htmlentities, entities,entities_additional,..., configuration).</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4472">#4472</a> : [FF3] Browser window scrolls to loaded CKEditor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6230">#6230</a> : Fixed invalid parameter count for setTimeout function call.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5335">#5335</a> : Several lines' formatted data will be merged to one line when we apply Numbers/Bullets.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5353">#5353</a> : wrong width of editor after resize() called in Firefox 3.6.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5778">#5778</a> : [IE] Unwanted scroll on first mouse right-click.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5218">#5218</a> : [FF] Copy/paste of an image from same domain changed URL to relative URL.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6265">#6265</a> : Popup window properties were visible in the link dialog's target tab when nothing was selected.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6075">#6075</a> : [FF] Newly created links didn't fill in information on edit.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6183">#6183</a> : The toolbar panels options sometimes had the contents' link color.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6192">#6192</a> : [WebKit] Inserting smileys was not working because of editor focus issues.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6178">#6178</a> : [WebKit] Inserting elements by code was failing if the editor didn't receive the focus first.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6179">#6179</a> : [WebKit] The Image dialog was not working if the editor didn't receive the focus first.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4657">#4657</a> : [Opera] Styles where not working with collapsed selections.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5839">#5839</a> : "Insert row after" was removing the ids of the elements from the clicked row.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6315">#6315</a> : DIV plugin TT #2885 regression.</li>
+		<li>Updated the following language files:<ul>
+			<li><a href="http://dev.ckeditor.com/ticket/6246">#6246</a> : Chinese Simplified;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/6256">#6256</a> : Dutch;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/6271">#6271</a> : English;</li>
+		</ul></li>
+	</ul>
+	<h3>
+			CKEditor 3.4</h3>
+	<p>
+			Fixed issues:</p>
+	<ul>
+		<li><a href="http://dev.ckeditor.com/ticket/6118">#6118</a> : Initial focus is now set to the tabs in the table properties dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6135">#6135</a> : The dialogadvtab plugin now uses the correct label.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6125">#6125</a> : Focus was lost after applying commands in Opera.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6137">#6137</a> : The table dialog was missing the default width value on second opening.</li>
+	</ul>
+	<h3>
+			CKEditor 3.4 Beta</h3>
+	<p>
+			New features:</p>
+	<ul>
+		<li><a href="http://dev.ckeditor.com/ticket/5909">#5909</a> : New BiDi feature, making it possible to switch the base language direction of block elements.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5268">#5268</a> : Introducing the "tableresize" plugin, which makes it possible to resize tables columns by mouse drag. It's not enabled by default, so it must be enabled in the configurations file.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/979">#979</a> : New <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enableTabKeyTools">enableTabKeyTools</a> configuration to allow using the TAB key to navigate through table cells.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4606">#4606</a> : Introduce the "autogrow" plugin, which makes the editor resize automatically, based on the contents size.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5737">#5737</a> : Added support for the <a href="http://www.w3.org/TR/html5/editing.html#contenteditable">HTML5 contenteditable attribute</a>, making it possible to define read only regions into the editor contents.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5418">#5418</a> : New "Advanced" tab introduced on the Table Properties dialog. It's based on the new dialogadvtab plugin.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6082">#6082</a> : Introduced the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.useComputedState">useComputedState</a> setting, making it possible to control whether toolbar features, like alignment and direction, should reflect the "computed" selection states, even when the effective feature value is not applied.</li>
+	</ul>
+	<p>
+			Fixed issues:</p>
+	<ul>
+		<li><a href="http://dev.ckeditor.com/ticket/5911">#5911</a> : BiDi: List items should support and retain correct base language direction</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5689">#5689</a> : Make it possible to run CKEditor inside of Firefox chrome.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6042">#6042</a> : It wasn't possible to align a paragraph with the dir attribute to the opposite direction.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6058">#6058</a> : Fixed a small style glitch with file upload fields in IE+Quirks.</li>
+	</ul>
+	<h3>
+			CKEditor 3.3.2</h3>
+	<p>
+			New features:</p>
+	<ul>
+		<li><a href="http://dev.ckeditor.com/ticket/5882">#5882</a> : Introduce the dialog#selectPage event, replicating the OnDialogTabChange feature available in FCKeditor 2.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5927">#5927</a> : The native controls in ui.dialog.elements can be styled with the controlStyle definition.</li>
+	</ul>
+	<p>
+			Fixed issues:</p>
+	<ul>
+		<li><a href="http://dev.ckeditor.com/ticket/1644">#1644</a> : Removed references to cursor:hand in the stylesheets.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5411">#5411</a> : Anchor, hidden fields and Page-Break objects can no longer be resized.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5456">#5456</a> : Initial focus incorect in api_dialog sample page.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5628">#5628</a> : Incorrect &lt;pre&gt; siblings merging.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5829">#5829</a> : Adding validation for start number field in list style dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5845">#5845</a> : Context menu on empty list item loses selection.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5860">#5860</a> : [IE] &gt; in attribute values are incorrectly escaped.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5905">#5905</a> : SCAYT is not any more enabled by default.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5736">#5736</a> : Improved the text generated for mailto: links if no text was selected.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4779">#4779</a> : Adjust resize_minWidth and resize_minHeight if smaller than actual dimensions.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5687">#5687</a> : Navigation through colors is now compatible with RTL.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4615">#4615</a> : [IE] Text fields are no longer disrupted in dialog with RTL.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5887">#5887</a> : The number of columns in the smileys table is now configurable via the smiley_columns setting.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5100">#5100</a> : It was possible to drag&amp;drop some elements like context menu items or dropdown entries.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5933">#5933</a> : Text color and background color panels don't have scrollbars anymore under office2003 and v2 skins.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5943">#5943</a> : An error is no longer generated when using percent or pixel values in the image dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5951">#5951</a> : Avoid problems with security systems due to the usage of UniversalXPConnect.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5441">#5441</a> : Avoid errors if the editor instance is removed from the DOM before calling its destroy() method.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4997">#4997</a> : Provide better access to the native input in the ui.dialog.file element.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5914">#5914</a> : Modified the Smileys dialog to make active only the images and not their borders.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5565">#5565</a> : The scrollbar does not behaves erratically when opening a rich combo in RTL page.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5843">#5843</a> : In CKEditor 3.3: When we set the focus in the 'instanceReady' event, FF3.6 is giving js error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5902">#5902</a> : paste and pastetext dialogs cannot be skinned easily.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5959">#5959</a> : Dialog auto focus does not check for hidden tabs.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5415">#5415</a> : Undo not working when we change the Table Properties for the table on a saved page.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5435">#5435</a> : IE: we can't start Numbered/Bulleted list in Tables by Clicking on Insert/Remove Numbers/Bullets Icon.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5832">#5832</a> : The JQuery adapter sample is not working properly with SSL.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5728">#5728</a> : Text field & Upload Button in Upload Tab of Image Properties dialog are not shown Properly in Arabic.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5436">#5436</a> : IE: Cursor goes to next Table Cell after we insert a Smiley in the Table Cell.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5580">#5580</a> : Maximize does not work properly in the Office 2003 and V2 skins.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5495">#5495</a> : The link dialog was breaking the undo system on some situations.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5775">#5775</a> : Required field's label to contain a CSS class to allow it to be styled differently.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5999">#5999</a> : Table dialog rows and columns fields are now marked as required.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5693">#5693</a> : baseHref detection in the flash dialog now works correctly.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5690">#5690</a> : Table cell's width attribute is now respected properly.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5819">#5819</a> : Introducing the new removeFormatCleanup event and making sure remove format doesn't break the showborder plugin.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5558">#5558</a> : After pasting on WebKit based browsers the editor now scrolls to the end of the pasted content.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5799">#5799</a> : Correct plugin dependencies for the liststyle plugin with contextMenu and dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5436">#5436</a> : IE: The cursor was moving to the wrong position when inserting inline elements at the end of cells on tables.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5984">#5984</a> : Firefox: CTRL+HOME was creating an unwanted empty paragraph at the start of the document.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5634">#5634</a> : IE: It was needed to click twice in the editor to make it editable on some situations.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5338">#5338</a> : Pasting from Open Office could lead on error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5224">#5224</a> : Some invalid markup could break the editor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5455">#5455</a> : It was not possible to remove formatting from pasted content on specific cases.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5735">#5735</a> : IE: The editor was having focus issues when the previous selection got hidden by scroll operations.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5563">#5563</a> : Firefox: The disableObjectResizing and disableNativeTableHandles settings stopped working.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5781">#5781</a> : Firefox: Editing was not possible in an empty document.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5293">#5293</a> : Firefox: Unwanted BR tags were being left in the editor output when it should be empty.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5280">#5280</a> : IE: Scrollbars where reacting improperly when clicking in the bar space.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5840">#5840</a> : Some dialog access keys are conflicting with "Ctrl + A", select all text behavior on text input.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6059">#6059</a> : Changing list type didn't preserve the list's attributes.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5193">#5193</a> : In Firefox, the element path options had the text cursor instead of the arrow.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6073">#6073</a> : The list context menu was showing the wrong option when in a mixed list hierarchy.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6074">#6074</a> : The Insert Table Column command was duplicating the selected column cells ids.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6066">#6066</a> : The toolbar combos had the text cursor instead of the arrow.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6062">#6062</a> : The toolbar buttons had the text cursor instead of the arrow.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6068">#6068</a> : [IE7] A few labels were hidden in a RTL language.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6000">#6000</a> : Safari and Chrome where scrolling the contents to the top when moving the focus to the editor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6090">#6090</a> : IE: Textarea with selection inside causes Link dialog issues.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5079">#5079</a> : Page break in lists move to above the list when you switch from WYSIWYG to HTML mode and back.</li>
+		<li>Updated the following language files:<ul>
+			<li>Chinese Simplified;</li>
+			<li>Hebrew;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5962">#5962</a> : German;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5645">#5645</a> : Portuguese;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5797">#5797</a> : Turkish;</li>
+		</ul></li>
 	</ul>
 	<h3>
@@ -52,18 +279,18 @@
 			Fixed issues:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/5780">#5780</a> : Text selection lost when opening some of the dialogs.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5787">#5787</a> : Liststyle plugin wasn't packaged into the core (CKEDITOR.resourceManager.load exception).</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5637">#5637</a> : Fix wrong nesting that generated "&lt;head&gt; must be a child of &lt;html&gt;" warning in Webkit.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5790">#5790</a> : Internal only attributes output on fullpage &lt;html&gt; tag.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5761">#5761</a> : [IE] Color dialog matrix buttons are barely clickable in quirks mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5759">#5759</a> : [IE] Clicking on the scrollbar and then on the host page causes error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5772">#5772</a> : List style dialog is missing tab page ids.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5782">#5782</a> : [FF] Wysiwyg mode is broken by 'display' style changes on editor's parent DOM tree.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5801">#5801</a> : [IE] contentEditable="false" doesn't apply in effect on inline-elements.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5794">#5794</a> : Empty find matching twice results in JavaScript error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5732">#5732</a> : If it isn't possible to connect to the SCAYT servers the dialogs might hang in Firefox. Fix for Firefox>=3.6.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5807">#5807</a> : [FF2] New page command results in uneditable document.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5807">#5807</a> : [FF2] SCAYT plugin is disabled in Firefox2 due to selection interference.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5772">#5772</a> : [IE] Some numbered list style types are not supported by IE6/7 and causes JavaScript error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5780">#5780</a> : Text selection lost when opening some of the dialogs.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5787">#5787</a> : Liststyle plugin wasn't packaged into the core (CKEDITOR.resourceManager.load exception).</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5637">#5637</a> : Fix wrong nesting that generated "&lt;head&gt; must be a child of &lt;html&gt;" warning in Webkit.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5790">#5790</a> : Internal only attributes output on fullpage &lt;html&gt; tag.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5761">#5761</a> : [IE] Color dialog matrix buttons are barely clickable in quirks mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5759">#5759</a> : [IE] Clicking on the scrollbar and then on the host page causes error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5772">#5772</a> : List style dialog is missing tab page ids.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5782">#5782</a> : [FF] Wysiwyg mode is broken by 'display' style changes on editor's parent DOM tree.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5801">#5801</a> : [IE] contentEditable="false" doesn't apply in effect on inline-elements.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5794">#5794</a> : Empty find matching twice results in JavaScript error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5732">#5732</a> : If it isn't possible to connect to the SCAYT servers the dialogs might hang in Firefox. Fix for Firefox>=3.6.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5807">#5807</a> : [FF2] New page command results in uneditable document.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5807">#5807</a> : [FF2] SCAYT plugin is disabled in Firefox2 due to selection interference.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5772">#5772</a> : [IE] Some numbered list style types are not supported by IE6/7 and causes JavaScript error.</li>
 	</ul>
 	<h3>
@@ -72,10 +299,10 @@
 		New features:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/635">#635</a> : The properties dialog will now open when double clicking on objects.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3893">#3893</a> : It's now possible to indent/outdent lists when selecting the first list item.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4968">#4968</a> : The <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.contentsLangDirection">contentsLangDirection</a> setting now has a default value 'ui' which inherit language direction from the editor UI language.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4649">#4649</a> : The color picker dialog is now accessible.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3593">#3593</a> : The editing area is now enabled by contentEditable="true" instead of designMode="on" to allow creating uneditable content elements in all browsers.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4056">#4056</a> : Hidden fields will now be displayed as fake element just like in FCKeditor 2.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/635">#635</a> : The properties dialog will now open when double clicking on objects.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3893">#3893</a> : It's now possible to indent/outdent lists when selecting the first list item.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4968">#4968</a> : The <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.contentsLangDirection">contentsLangDirection</a> setting now has a default value 'ui' which inherit language direction from the editor UI language.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4649">#4649</a> : The color picker dialog is now accessible.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3593">#3593</a> : The editing area is now enabled by contentEditable="true" instead of designMode="on" to allow creating uneditable content elements in all browsers.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4056">#4056</a> : Hidden fields will now be displayed as fake element just like in FCKeditor 2.</li>
 	</ul>
 <h3>
@@ -85,74 +312,74 @@
 	<ul>
 		<li>The SCAYT spell checker is now enabled by default through the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.scayt_autoStartup">autoStartup</a> setting.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5631">#5631</a> : The SCAYT context menu options can now be reorganized through the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.scayt_contextMenuItemsOrder">scayt_contextMenuItemsOrder</a> setting.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4231">#4231</a> : Introducing the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.resize_dir">resize_dir setting</a>, to be able to restrict manual resizing of the editor to only one direction (horizontal/vertical).</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5479">#5479</a> : Introducing the classic ASP integration files and samples.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5024">#5024</a> : Added samples (<a href="http://nightly.ckeditor.com/latest/ckeditor/_samples/output_html.html">HTML</a> and <a href="http://nightly.ckeditor.com/latest/ckeditor/_samples/output_xhtml.html">XHTML</a>) to show how to output HTML using fonts and other attributes instead of styles.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4358">#4358</a> : Introduced the List Properties dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5485">#5485</a> : Adding the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.contentsLanguage">contentsLanguage</a> configuration option to be able to set the language for the editor contents.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5631">#5631</a> : The SCAYT context menu options can now be reorganized through the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.scayt_contextMenuItemsOrder">scayt_contextMenuItemsOrder</a> setting.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4231">#4231</a> : Introducing the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.resize_dir">resize_dir setting</a>, to be able to restrict manual resizing of the editor to only one direction (horizontal/vertical).</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5479">#5479</a> : Introducing the classic ASP integration files and samples.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5024">#5024</a> : Added samples (<a href="http://nightly.ckeditor.com/latest/ckeditor/_samples/output_html.html">HTML</a> and <a href="http://nightly.ckeditor.com/latest/ckeditor/_samples/output_xhtml.html">XHTML</a>) to show how to output HTML using fonts and other attributes instead of styles.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4358">#4358</a> : Introduced the List Properties dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5485">#5485</a> : Adding the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.contentsLanguage">contentsLanguage</a> configuration option to be able to set the language for the editor contents.</li>
 	</ul>
 	<p>
 		Fixed issues:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/5330">#5330</a> : Corrected detection of CTRL and META keys in Macs for the context menu.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5434">#5434</a> : Fixed access denied issues with IE when accessing web sites through IPv6 IP addresses.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4476">#4476</a> : [IE] Inaccessible empty list item contains sub list.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4881">#4881</a> : [IE] Selection range broken because of cutting a single control type element from it.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5505">#5505</a> : Image dialog throw JavaScript error when click close dialog before preview area is loading.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5144">#5144</a> : [Chrome] Paste in Webkit sometimes leaves extra 'div' element.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5021">#5021</a> : [Firefox] Typing in empty document start from second line when <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5416">#5416</a> : [IE] Delete table throws a error when <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4459">#4459</a> : [IE] Select element is penetrating the maximized editor in IE6.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5559">#5559</a> : [IE] The first call to <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#setData">setData</a> is affected by iframe cache when loading the wysiwyg mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5567">#5567</a> : [IE] Remove inline styles in some case doesn't join identical siblings.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5450">#5450</a> : [FireFox] Press ENTER on 'replace' button result wrong.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5121">#5121</a> : Recognizes the &lt;br /&gt; tag as a separator when apply block styles and <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5575">#5575</a> : <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.html#.replaceAll">CKEDITOR.replaceAll</a> should consider all kind of white spaces between class names.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5582">#5582</a> : Prevent the default behavior when click the 'x' button to close dialog box.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5584">#5584</a> : ENTER key with <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.forceEnterMode">forceEnterMode</a> turns on doesn't inherit current block attributes.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4797">#4797</a> : [Opera] Press ENTER key in dialog fields to close throws JavaScript error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5578">#5578</a> : Add flash fake element align property when switch mode (source to wysiwyg).</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5577">#5577</a> : Update delete column behavior when choose multiple cells in the same column.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5512">#5512</a> : Open context menu with SHIFT+F10 doesn't get correct editor selection.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5433">#5433</a> : English protocol text directions in Link dialog are not incorrect in 'rtl' UI languages.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5553">#5553</a> : Paste dialog clipboard area text direction is incorrect for 'rtl' content languages.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4734">#4734</a> : Font size resets when font name is changed in an empty numbered list.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5237">#5237</a> : English text in dialogs' title is flipped when using RTL language.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3257">#3257</a> : Create list doesn't keep blocks as headings.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5111">#5111</a> : [Firefox] JAWS doesn't respect PC cursor mode (application role) on toolbar.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5530">#5530</a> : Page break for printing can't be removed with undo.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5381">#5381</a> : Unable to place cursor between two paragraphs in body.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5568">#5568</a> : [IE6/7] Selecting a entire table cell changes the original range.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5623">#5623</a> : [Firefox] Apply style that edges another inline style result incorrect.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5586">#5586</a> : [Firefox] Maximize the second editor ruins full screen mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5617">#5617</a> : HTML filter system does not allow two 'text' filter rules.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5663">#5663</a> : General memory clean up after destroying last instance.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5461">#5461</a> : [IE] Fix Paste from Word dialog doesn't accept imput problem.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5676">#5676</a> : Make color buttons use RRGGBB instead of RGB for better compatibility with IE.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4948">#4948</a> : [Safari] Select the first/last cell of table to open context menu may lead to undetected table.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5591">#5591</a> : [Firefox] Select a list item makes selected element broken.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5667">#5667</a> : Pasting in a RTL page content causes shows up the horizontal scrollbar.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5688">#5688</a> : Duplicate ids are used in dialog definition.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5719">#5719</a> : [IE] 'change' dialog event should not be triggered when dialog is already closed.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5747">#5747</a> : [IE] Error thrown when IE input field editing mode is turned on.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5516">#5516</a> : IE8: Toolbar buttons have higher bottom padding.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5402">#5402</a> : SHIFT-ENTER could now be used to exit from preformat block.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5330">#5330</a> : Corrected detection of CTRL and META keys in Macs for the context menu.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5434">#5434</a> : Fixed access denied issues with IE when accessing web sites through IPv6 IP addresses.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4476">#4476</a> : [IE] Inaccessible empty list item contains sub list.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4881">#4881</a> : [IE] Selection range broken because of cutting a single control type element from it.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5505">#5505</a> : Image dialog throw JavaScript error when click close dialog before preview area is loading.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5144">#5144</a> : [Chrome] Paste in Webkit sometimes leaves extra 'div' element.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5021">#5021</a> : [Firefox] Typing in empty document start from second line when <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5416">#5416</a> : [IE] Delete table throws a error when <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4459">#4459</a> : [IE] Select element is penetrating the maximized editor in IE6.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5559">#5559</a> : [IE] The first call to <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#setData">setData</a> is affected by iframe cache when loading the wysiwyg mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5567">#5567</a> : [IE] Remove inline styles in some case doesn't join identical siblings.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5450">#5450</a> : [FireFox] Press ENTER on 'replace' button result wrong.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5121">#5121</a> : Recognizes the &lt;br /&gt; tag as a separator when apply block styles and <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5575">#5575</a> : <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.html#.replaceAll">CKEDITOR.replaceAll</a> should consider all kind of white spaces between class names.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5582">#5582</a> : Prevent the default behavior when click the 'x' button to close dialog box.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5584">#5584</a> : ENTER key with <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.forceEnterMode">forceEnterMode</a> turns on doesn't inherit current block attributes.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4797">#4797</a> : [Opera] Press ENTER key in dialog fields to close throws JavaScript error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5578">#5578</a> : Add flash fake element align property when switch mode (source to wysiwyg).</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5577">#5577</a> : Update delete column behavior when choose multiple cells in the same column.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5512">#5512</a> : Open context menu with SHIFT+F10 doesn't get correct editor selection.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5433">#5433</a> : English protocol text directions in Link dialog are not incorrect in 'rtl' UI languages.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5553">#5553</a> : Paste dialog clipboard area text direction is incorrect for 'rtl' content languages.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4734">#4734</a> : Font size resets when font name is changed in an empty numbered list.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5237">#5237</a> : English text in dialogs' title is flipped when using RTL language.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3257">#3257</a> : Create list doesn't keep blocks as headings.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5111">#5111</a> : [Firefox] JAWS doesn't respect PC cursor mode (application role) on toolbar.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5530">#5530</a> : Page break for printing can't be removed with undo.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5381">#5381</a> : Unable to place cursor between two paragraphs in body.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5568">#5568</a> : [IE6/7] Selecting a entire table cell changes the original range.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5623">#5623</a> : [Firefox] Apply style that edges another inline style result incorrect.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5586">#5586</a> : [Firefox] Maximize the second editor ruins full screen mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5617">#5617</a> : HTML filter system does not allow two 'text' filter rules.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5663">#5663</a> : General memory clean up after destroying last instance.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5461">#5461</a> : [IE] Fix Paste from Word dialog doesn't accept imput problem.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5676">#5676</a> : Make color buttons use RRGGBB instead of RGB for better compatibility with IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4948">#4948</a> : [Safari] Select the first/last cell of table to open context menu may lead to undetected table.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5591">#5591</a> : [Firefox] Select a list item makes selected element broken.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5667">#5667</a> : Pasting in a RTL page content causes shows up the horizontal scrollbar.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5688">#5688</a> : Duplicate ids are used in dialog definition.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5719">#5719</a> : [IE] 'change' dialog event should not be triggered when dialog is already closed.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5747">#5747</a> : [IE] Error thrown when IE input field editing mode is turned on.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5516">#5516</a> : IE8: Toolbar buttons have higher bottom padding.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5402">#5402</a> : SHIFT-ENTER could now be used to exit from preformat block.</li>
 		<li>SCAYT plugin related:<ul>
-			<li><a href="http://dev.fckeditor.net/ticket/4836">#4836</a> : Using SCAYT result in fragile elements when applying inline styles.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5425">#5425</a> : [Opera] Disable SCAYT plugin for Opera browser.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5632">#5632</a> : SCAYT word marker is not visible on text with background-color set.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4125">#4125</a> : Remove Format command incorrectly removes SCAYT word markers.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5671">#5671</a> : SCAYT bootstrap script could be added multiple times unnecessarily.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5573">#5573</a> : SCAYT move cursor position after insert element into marked word text.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5546">#5546</a> : SCAYT interferes with undo/redo commands.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5570">#5570</a> : [IE] First enabling SCAYT blind cursor in editor.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5741">#5741</a> : Enable SCAYT cause error in multiple editor instances.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5744">#5744</a> : Remove editor with SCAYT enabled in source mode throws error.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4836">#4836</a> : Using SCAYT result in fragile elements when applying inline styles.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5425">#5425</a> : [Opera] Disable SCAYT plugin for Opera browser.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5632">#5632</a> : SCAYT word marker is not visible on text with background-color set.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4125">#4125</a> : Remove Format command incorrectly removes SCAYT word markers.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5671">#5671</a> : SCAYT bootstrap script could be added multiple times unnecessarily.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5573">#5573</a> : SCAYT move cursor position after insert element into marked word text.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5546">#5546</a> : SCAYT interferes with undo/redo commands.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5570">#5570</a> : [IE] First enabling SCAYT blind cursor in editor.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5741">#5741</a> : Enable SCAYT cause error in multiple editor instances.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5744">#5744</a> : Remove editor with SCAYT enabled in source mode throws error.</li>
 		</ul></li>
 		<li>Updated the following language files:<ul>
-			<li><a href="http://dev.fckeditor.net/ticket/5432">#5432</a> : Dutch;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5619">#5619</a> : Finnish;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5515">#5515</a> : Hebrew;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5588">#5588</a> : Turkish;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5432">#5432</a> : Dutch;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5619">#5619</a> : Finnish;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5515">#5515</a> : Hebrew;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5588">#5588</a> : Turkish;</li>
 		</ul></li>
 	</ul>
@@ -162,101 +389,101 @@
 		New features:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/4478">#4478</a> : Enable the SelectAll command in source mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5150">#5150</a> : Allow names in the CKEDITOR.config.colorButton_colors setting.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4810">#4810</a> : Adding configuration option for image dialog preview area filling text.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/536">#536</a> : Object style now could be applied on any parent element of current selection.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5290">#5290</a> : Unified stylesSet loading removing dependencies from the styles combo.
+		<li><a href="http://dev.ckeditor.com/ticket/4478">#4478</a> : Enable the SelectAll command in source mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5150">#5150</a> : Allow names in the CKEDITOR.config.colorButton_colors setting.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4810">#4810</a> : Adding configuration option for image dialog preview area filling text.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/536">#536</a> : Object style now could be applied on any parent element of current selection.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5290">#5290</a> : Unified stylesSet loading removing dependencies from the styles combo.
 					Now the configuration entry is named 'config.stylesSet' instead of config.stylesCombo_stylesSet and the default location
 					is under the 'styles' plugin instead of 'stylescombo'.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5352">#5352</a> : Allow to define the stylesSet array in the config object for the editor.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5302">#5302</a> : Adding config option "forceEnterMode".</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5216">#5216</a> : Extend CKEDITOR.appendTo to allow a data parameter for the initial value.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5024">#5024</a> : Added sample to show how to output XHTML and avoid deprecated tags.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5352">#5352</a> : Allow to define the stylesSet array in the config object for the editor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5302">#5302</a> : Adding config option "forceEnterMode".</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5216">#5216</a> : Extend CKEDITOR.appendTo to allow a data parameter for the initial value.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5024">#5024</a> : Added sample to show how to output XHTML and avoid deprecated tags.</li>
 	</ul>
 	<p>
 		Fixed issues:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/5152">#5152</a> : Indentation using class attribute doesn't work properly.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4682">#4682</a> : It wasn't possible to edit block elements in IE that had styles like width, height or float.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4750">#4750</a> : Correcting default order of buttons layout in dialogs on Mac.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4932">#4932</a> : Fixed collapse button not clickable on simple toolbar.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5228">#5228</a> : Link dialog is automatically changes protocol when URLs that starts with '?'.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4877">#4877</a> : Fixed CKEditor displays source code in one long line (IE quirks mode + office2003 skin).</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5132">#5132</a> : Apply inline style leaks into sibling words which are seperated spaces.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3599">#3599</a> : Background color style on sized text displayed as narrow band behind.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4661">#4661</a> : Translation missing in link dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5240">#5240</a> : Flash alignment property is not presented visually on fake element.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4910">#4910</a> : Pasting in IE scrolls document to the end.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5041">#5041</a> : Table summary attribute can't be removed with dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5124">#5124</a> : All inline styles cannot be applied on empty spaces.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3570">#3570</a> : SCAYT marker shouldn't appear inside elements path bar.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4553">#4553</a> : Dirty check result incorrect when editor document is empty.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4555">#4555</a> : Unreleased memory when editor is created and destroyed.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5118">#5118</a> : Arrow keys navigation in RTL languages is incorrect.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4721">#4721</a> : Remove attribute 'value' of checkbox in IE.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5278">#5278</a> : IE: Add validation to check for bad window names of popup window.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5171">#5171</a> : Dialogs contains lists don't have proper voice labels.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4791">#4791</a> : Can't place cursor inside a form that end with a checkbox/radio.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4479">#4479</a> : StylesCombo doesn't reflect the selection state until it's first opened.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4717">#4717</a> : 'Unlink' and 'Outdent' command buttons should be disabled on editor startup.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5119">#5119</a> : Disabled command buttons are not being properly styled when focused.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5307">#5307</a> : Hide dialog page cause problem when there's two tab pages remain.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5343">#5343</a> : Active list item ARIA role is wrongly placed.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3599">#3599</a> : Background color style applying to text with font size style has been narrowly rendered.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4711">#4711</a> : Line break character inside preformatted text makes it unable to type text at the end of previous line.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4829">#4829</a> : [IE] Apply style from combo has wrong result on manually created selection.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4830">#4830</a> : Retrieving selected element isn't always right, especially selecting using keyboard (SHIFT+ARROW).</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5128">#5128</a> : Element attribute inside preformatted text is corrupted when converting to other blocks.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5190">#5190</a> : Template list entry shouldn't gain initial focus open templates list dialog opens.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5238">#5238</a> : Menu button doesn't display arrow icon in high-contrast mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3576">#3576</a> : Non-attributed element of the same name with the applied style is incorrectly removed.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5221">#5221</a> : Insert table into empty document cause JavaScript error thrown.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5242">#5242</a> : Apply 'automatic' color option of text color incorrectly removes background-color style.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4719">#4719</a> : IE does not escape attribute values properly.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5170">#5170</a> : Firefox does not insert text into styled element properly.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4026">#4026</a> : Office2003 skin has no toolbar button borders in High Contrast in IE7.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4348">#4348</a> : There should have exception thrown when 'CKEDITOR_BASEPATH' couldn't be figured out automatically.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5364">#5364</a> : Focus may not be put into dialog correctly when dialog skin file is loading slow.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4016">#4016</a> : Justify the layout of forms select dialog in Chrome and IE7.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5373">#5373</a> : Variable 'pathBlockElements' defines wrong items in CKEDITOR.dom.elementPath.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5082">#5082</a> : Ctrl key should be described as Cmd key on Mac.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5182">#5182</a> : Context menu is not been announced correctly by ATs.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4898">#4898</a> : Can't navigate outside table under the last paragraph of document.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4950">#4950</a> : List commands could compromise list item attribute and styles.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5018">#5018</a> : Find result highlighting remove normal font color styles unintentionally.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5376">#5376</a> : Unable to exit list from within a empty block under list item.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5145">#5145</a> : Various SCAYT fixes.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5319">#5319</a> : Match whole word doesn't work anymore after replacement has happened.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5363">#5363</a> : 'title' attribute now presents on all editor iframes.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5374">#5374</a> : Unable to toggle inline style when the selection starts at the linefeed of the previous paragraph.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4513">#4513</a> : Selected link element is not always correctly detected when using keyboard arrows to perform such selection.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5372">#5372</a> : Newly created sub list should inherit nothing from the original (parent) list, except the list type.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5274">#5274</a> : [IE6] Templates preview image is displayed in wrong size.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5292">#5292</a> : Preview in font size and family doesn't work with custom styles.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5396">#5396</a> : Selection is lost when use cell properties dialog to change cell type to header.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4082">#4082</a> : [IE+Quirks] Preview text in the image dialog is not wrapping.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4197">#4197</a> : Fixing format combo don't hide when editor blur on Safari.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5401">#5401</a> : The context menu break layout with Office2003 and V2 skin on IE quirks mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4825">#4825</a> : Fixing browser context menu is opened when clicking right mouse button twice.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5356">#5356</a> : The SCAYT dialog had issues with Prototype enabled pages.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5266">#5266</a> : SCAYT was disturbing the rendering of TH elements.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4688">#4688</a> : SCAYT was interfering on checkDirty.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5429">#5429</a> : High Contrast mode was being mistakenly detected when loading the editor through Dojo's xhrGet.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5221">#5221</a> : Range is mangled when making collapsed selection in an empty paragraph.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5261">#5261</a> : Config option 'scayt_autoStartup' slow down editor loading.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3846">#3846</a> : Google Chrome - No Img properties after inserting.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5465">#5465</a> : ShiftEnter=DIV doesn't respect list item when pressing ENTER at end of list item.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5454">#5454</a> : After replaced success, the popup window couldn't be closed and a js error occured.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4784">#4784</a> : Incorrect cursor position after delete table cells.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5149">#5149</a> : [FF] Cursor disappears after maximize when the editor has focus.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5220">#5220</a> : DTD now shows tolerance to &lt;style&gt; appear inside content.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5440">#5440</a> : Mobile browsers (iPhone, Android...) are marked as incompatible as they don't support editing features.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5504">#5504</a> : [IE6/7] 'Paste' dialog will always get opened even when user allows the clipboard access dialog when using 'Paste' button.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5152">#5152</a> : Indentation using class attribute doesn't work properly.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4682">#4682</a> : It wasn't possible to edit block elements in IE that had styles like width, height or float.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4750">#4750</a> : Correcting default order of buttons layout in dialogs on Mac.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4932">#4932</a> : Fixed collapse button not clickable on simple toolbar.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5228">#5228</a> : Link dialog is automatically changes protocol when URLs that starts with '?'.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4877">#4877</a> : Fixed CKEditor displays source code in one long line (IE quirks mode + office2003 skin).</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5132">#5132</a> : Apply inline style leaks into sibling words which are seperated spaces.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3599">#3599</a> : Background color style on sized text displayed as narrow band behind.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4661">#4661</a> : Translation missing in link dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5240">#5240</a> : Flash alignment property is not presented visually on fake element.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4910">#4910</a> : Pasting in IE scrolls document to the end.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5041">#5041</a> : Table summary attribute can't be removed with dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5124">#5124</a> : All inline styles cannot be applied on empty spaces.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3570">#3570</a> : SCAYT marker shouldn't appear inside elements path bar.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4553">#4553</a> : Dirty check result incorrect when editor document is empty.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4555">#4555</a> : Unreleased memory when editor is created and destroyed.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5118">#5118</a> : Arrow keys navigation in RTL languages is incorrect.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4721">#4721</a> : Remove attribute 'value' of checkbox in IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5278">#5278</a> : IE: Add validation to check for bad window names of popup window.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5171">#5171</a> : Dialogs contains lists don't have proper voice labels.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4791">#4791</a> : Can't place cursor inside a form that end with a checkbox/radio.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4479">#4479</a> : StylesCombo doesn't reflect the selection state until it's first opened.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4717">#4717</a> : 'Unlink' and 'Outdent' command buttons should be disabled on editor startup.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5119">#5119</a> : Disabled command buttons are not being properly styled when focused.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5307">#5307</a> : Hide dialog page cause problem when there's two tab pages remain.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5343">#5343</a> : Active list item ARIA role is wrongly placed.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3599">#3599</a> : Background color style applying to text with font size style has been narrowly rendered.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4711">#4711</a> : Line break character inside preformatted text makes it unable to type text at the end of previous line.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4829">#4829</a> : [IE] Apply style from combo has wrong result on manually created selection.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4830">#4830</a> : Retrieving selected element isn't always right, especially selecting using keyboard (SHIFT+ARROW).</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5128">#5128</a> : Element attribute inside preformatted text is corrupted when converting to other blocks.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5190">#5190</a> : Template list entry shouldn't gain initial focus open templates list dialog opens.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5238">#5238</a> : Menu button doesn't display arrow icon in high-contrast mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3576">#3576</a> : Non-attributed element of the same name with the applied style is incorrectly removed.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5221">#5221</a> : Insert table into empty document cause JavaScript error thrown.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5242">#5242</a> : Apply 'automatic' color option of text color incorrectly removes background-color style.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4719">#4719</a> : IE does not escape attribute values properly.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5170">#5170</a> : Firefox does not insert text into styled element properly.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4026">#4026</a> : Office2003 skin has no toolbar button borders in High Contrast in IE7.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4348">#4348</a> : There should have exception thrown when 'CKEDITOR_BASEPATH' couldn't be figured out automatically.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5364">#5364</a> : Focus may not be put into dialog correctly when dialog skin file is loading slow.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4016">#4016</a> : Justify the layout of forms select dialog in Chrome and IE7.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5373">#5373</a> : Variable 'pathBlockElements' defines wrong items in CKEDITOR.dom.elementPath.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5082">#5082</a> : Ctrl key should be described as Cmd key on Mac.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5182">#5182</a> : Context menu is not been announced correctly by ATs.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4898">#4898</a> : Can't navigate outside table under the last paragraph of document.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4950">#4950</a> : List commands could compromise list item attribute and styles.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5018">#5018</a> : Find result highlighting remove normal font color styles unintentionally.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5376">#5376</a> : Unable to exit list from within a empty block under list item.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5145">#5145</a> : Various SCAYT fixes.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5319">#5319</a> : Match whole word doesn't work anymore after replacement has happened.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5363">#5363</a> : 'title' attribute now presents on all editor iframes.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5374">#5374</a> : Unable to toggle inline style when the selection starts at the linefeed of the previous paragraph.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4513">#4513</a> : Selected link element is not always correctly detected when using keyboard arrows to perform such selection.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5372">#5372</a> : Newly created sub list should inherit nothing from the original (parent) list, except the list type.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5274">#5274</a> : [IE6] Templates preview image is displayed in wrong size.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5292">#5292</a> : Preview in font size and family doesn't work with custom styles.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5396">#5396</a> : Selection is lost when use cell properties dialog to change cell type to header.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4082">#4082</a> : [IE+Quirks] Preview text in the image dialog is not wrapping.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4197">#4197</a> : Fixing format combo don't hide when editor blur on Safari.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5401">#5401</a> : The context menu break layout with Office2003 and V2 skin on IE quirks mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4825">#4825</a> : Fixing browser context menu is opened when clicking right mouse button twice.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5356">#5356</a> : The SCAYT dialog had issues with Prototype enabled pages.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5266">#5266</a> : SCAYT was disturbing the rendering of TH elements.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4688">#4688</a> : SCAYT was interfering on checkDirty.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5429">#5429</a> : High Contrast mode was being mistakenly detected when loading the editor through Dojo's xhrGet.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5221">#5221</a> : Range is mangled when making collapsed selection in an empty paragraph.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5261">#5261</a> : Config option 'scayt_autoStartup' slow down editor loading.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3846">#3846</a> : Google Chrome - No Img properties after inserting.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5465">#5465</a> : ShiftEnter=DIV doesn't respect list item when pressing ENTER at end of list item.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5454">#5454</a> : After replaced success, the popup window couldn't be closed and a js error occured.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4784">#4784</a> : Incorrect cursor position after delete table cells.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5149">#5149</a> : [FF] Cursor disappears after maximize when the editor has focus.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5220">#5220</a> : DTD now shows tolerance to &lt;style&gt; appear inside content.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5440">#5440</a> : Mobile browsers (iPhone, Android...) are marked as incompatible as they don't support editing features.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5504">#5504</a> : [IE6/7] 'Paste' dialog will always get opened even when user allows the clipboard access dialog when using 'Paste' button.</li>
 		<li>Updated the following language files:<ul>
-			<li><a href="http://dev.fckeditor.net/ticket/5326">#5326</a> : Catalan;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5370">#5370</a> : Faroese;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5392">#5392</a> : Finnish;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4580">#4580</a> : Hungarian;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5301">#5301</a> : Norwegian;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5326">#5326</a> : Catalan;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5370">#5370</a> : Faroese;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5392">#5392</a> : Finnish;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4580">#4580</a> : Hungarian;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5301">#5301</a> : Norwegian;</li>
 		</ul></li>
 	</ul>
@@ -267,20 +494,20 @@
 	<ul>
 		<li>Several accessibility enhancements:<ul>
-			<li><a href="http://dev.fckeditor.net/ticket/4502">#4502</a> : The editor accessibility is now totally based on <a href="http://www.w3.org/WAI/intro/aria">WAI-ARIA</a>.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5015">#5015</a> : Adding accessibility help dialog plugin.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5014">#5014</a> : Keyboard navigation compliance with screen reader suggested keys.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4595">#4595</a> : Better accessibility in the Templates dialog.</li>
-			<li><a href="http://dev.fckeditor.net/ticket/3389">#3389</a> : Esc/Arrow Key now works for closing sub menu.</li>
-		</ul></li>
-		<li><a href="http://dev.fckeditor.net/ticket/4973">#4973</a> : The Style field in the Div Container dialog is now loading the styles defined in the default styleset used by the Styles toolbar combo.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4502">#4502</a> : The editor accessibility is now totally based on <a href="http://www.w3.org/WAI/intro/aria">WAI-ARIA</a>.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5015">#5015</a> : Adding accessibility help dialog plugin.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5014">#5014</a> : Keyboard navigation compliance with screen reader suggested keys.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4595">#4595</a> : Better accessibility in the Templates dialog.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/3389">#3389</a> : Esc/Arrow Key now works for closing sub menu.</li>
+		</ul></li>
+		<li><a href="http://dev.ckeditor.com/ticket/4973">#4973</a> : The Style field in the Div Container dialog is now loading the styles defined in the default styleset used by the Styles toolbar combo.</li>
 	</ul>
 	<p>
 		Fixed issues:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/5049">#5049</a> : Form Field list command in JAWS incorrectly lists extra fields.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5008">#5008</a> : Lock/Unlock ratio buttons in the Image dialog was poorly designed in High Contrast mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3980">#3980</a> : All labels in dialogs now use &lt;label&gt; instead of &lt;div&gt;.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5213">#5213</a> : Reorganization of some entries in the language files to make it more consistent.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5199">#5199</a> : In IE, single row toolbars didn't have the bottom padding.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5049">#5049</a> : Form Field list command in JAWS incorrectly lists extra fields.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5008">#5008</a> : Lock/Unlock ratio buttons in the Image dialog was poorly designed in High Contrast mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3980">#3980</a> : All labels in dialogs now use &lt;label&gt; instead of &lt;div&gt;.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5213">#5213</a> : Reorganization of some entries in the language files to make it more consistent.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5199">#5199</a> : In IE, single row toolbars didn't have the bottom padding.</li>
 	</ul>
 	<h3>
@@ -289,71 +516,71 @@
 		New features:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/4399">#4399</a> : Improved support for external file browsers by allowing executing a callback function.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4612">#4612</a> : The text of links is now updated if it matches the URL to which it points to.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4936">#4936</a> : New localization support for the Welsh language.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4399">#4399</a> : Improved support for external file browsers by allowing executing a callback function.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4612">#4612</a> : The text of links is now updated if it matches the URL to which it points to.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4936">#4936</a> : New localization support for the Welsh language.</li>
 	</ul>
 	<p>
 		Fixed issues:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/4272">#4272</a> : Kama skin toolbar was broken in IE+Quirks+RTL.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4987">#4987</a> : Changed the url which is called by the Browser Server button in the Link tab of Image Properties dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5030">#5030</a> : The CKEDITOR.timestamp wasn't been appended to the skin.js file.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4993">#4993</a> : Removed the float style from images when the user selects 'not set' for alignment.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4944">#4944</a> : Fixed a bug where nested list structures with inconsequent levels were not being pasted correctly from MS Word.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4637">#4637</a> : Table cells' 'nowrap' attribute was not being loaded by the cell property dialog. Thanks to pomu0325.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4724">#4724</a> : Using the mouse to insert a link in IE might create incorrect results.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4640">#4640</a> : Small optimizations for the fileBrowser plugin.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4583">#4583</a> : The "Target Frame Name" field is now visible when target is set to 'frame' only.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4863">#4863</a> : Fixing iframedialog's height doesn't stretch to 100% (except IE Quirks).</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4964">#4964</a> : The BACKSPACE key positioning was not correct in some cases with Firefox.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4980">#4980</a> : Setting border, vspace and hspace of images to zero was not working.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4773">#4773</a> : The fileBrowser plugin was overwriting onClick functions eventually defined on fileButton elements.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4731">#4731</a> : The clipboard plugin was missing a reference to the dialog plugin.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5051">#5051</a> : The about plugin was missing a reference to the dialog plugin.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5146">#5146</a> : The wsc plugin was missing a reference to the dialog plugin.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4632">#4632</a> : The print command will now properly break on the insertion point of page break for printing.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4862">#4862</a> : The English (United Kingdom) language file has been renamed to en-gb.js.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4618">#4618</a> : Selecting an emoticon or the lock and reset buttons in the image dialog fired the onBeforeUnload event in IE.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4678">#4678</a> : It was not possible to set tables' width to empty value.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5012">#5012</a> : Fixed dependency issues with the menu plugin.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5040">#5040</a> : The editor will not properly ignore font related settings that have extra item separators (semi-colons).</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4046">#4046</a> : Justify should respect config.enterMode = CKEDITOR.ENTER_BR.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4622">#4622</a> : Inserting tables multiple times was corrupting the undo system.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4647">#4647</a> : [IE] Selection on an element within positioned container is lost after open context-menu then click one menu item.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4683">#4683</a> : Double-quote character in attribute values was not escaped in the editor output.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4762">#4762</a> : [IE] Unexpected vertical-scrolling behavior happens whenever focus is moving out of editor in source mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4772">#4772</a> : Text color was not being applied properly on links.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4795">#4795</a> : [IE] Press 'Del' key on horizontal line or table result in error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4824">#4824</a> : [IE] &lt;br/&gt; at the very first table cell breaks the editor selection.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4851">#4851</a> : [IE] Delete table rows with context-menu may cause error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4951">#4951</a> : Replacing text with empty string was throwing errors.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4963">#4963</a> : Link dialog was not opening properly for e-mail type links.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5043">#5043</a> : Removed the possibility of having an unwanted script tag being outputted with the editor contents.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3678">#3678</a> : There were issues when editing links inside floating divs with IE.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4763">#4763</a> : Pressing ENTER key with text selected was not deleting the text in some situations.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5096">#5096</a> : Simple ampersand attribute value doesn't work for more than one occurrence.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3494">#3494</a> : Context menu is too narrow in some translations.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5005">#5005</a> : Fixed HTML errors in PHP samples.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5123">#5123</a> : Fixed broken XHTML in User Interface Languages sample.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4893">#4893</a> : Editor now understands table cell inline styles.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4611">#4611</a> : Selection around &lt;select&gt; in editor doesn't cause error anymore.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4886">#4886</a> : Extra BR tags were being created in the output HTML.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4933">#4933</a> : Empty tags with BR were being left in the DOM.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5127">#5127</a> : There were errors when removing dialog definition pages through code.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4767">#4767</a> : CKEditor was not working when ckeditor_source.js is loaded in the &lt;body&gt; .</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5062">#5062</a> : Avoided security warning message when loading the wysiwyg area in IE6 under HTTPS.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5135">#5135</a> : The TAB key will now behave properly when in Source mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4988">#4988</a> : It wasn't possible to use forcePasteAsPlainText with Safari on Mac.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5095">#5095</a> : Safari on Mac deleted the current selection in the editor when Edit menu was clicked.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5140">#5140</a> : In High Contrast mode, arrows were now been displayed for menus with submenus.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5163">#5163</a> : The undo system was not working on some specific cases.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5162">#5162</a> : The ajax sample was throwing errors when loading data.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4999">#4999</a> : The Template dialog was not generating an undo snapshot.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4272">#4272</a> : Kama skin toolbar was broken in IE+Quirks+RTL.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4987">#4987</a> : Changed the url which is called by the Browser Server button in the Link tab of Image Properties dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5030">#5030</a> : The CKEDITOR.timestamp wasn't been appended to the skin.js file.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4993">#4993</a> : Removed the float style from images when the user selects 'not set' for alignment.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4944">#4944</a> : Fixed a bug where nested list structures with inconsequent levels were not being pasted correctly from MS Word.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4637">#4637</a> : Table cells' 'nowrap' attribute was not being loaded by the cell property dialog. Thanks to pomu0325.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4724">#4724</a> : Using the mouse to insert a link in IE might create incorrect results.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4640">#4640</a> : Small optimizations for the fileBrowser plugin.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4583">#4583</a> : The "Target Frame Name" field is now visible when target is set to 'frame' only.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4863">#4863</a> : Fixing iframedialog's height doesn't stretch to 100% (except IE Quirks).</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4964">#4964</a> : The BACKSPACE key positioning was not correct in some cases with Firefox.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4980">#4980</a> : Setting border, vspace and hspace of images to zero was not working.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4773">#4773</a> : The fileBrowser plugin was overwriting onClick functions eventually defined on fileButton elements.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4731">#4731</a> : The clipboard plugin was missing a reference to the dialog plugin.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5051">#5051</a> : The about plugin was missing a reference to the dialog plugin.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5146">#5146</a> : The wsc plugin was missing a reference to the dialog plugin.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4632">#4632</a> : The print command will now properly break on the insertion point of page break for printing.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4862">#4862</a> : The English (United Kingdom) language file has been renamed to en-gb.js.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4618">#4618</a> : Selecting an emoticon or the lock and reset buttons in the image dialog fired the onBeforeUnload event in IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4678">#4678</a> : It was not possible to set tables' width to empty value.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5012">#5012</a> : Fixed dependency issues with the menu plugin.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5040">#5040</a> : The editor will not properly ignore font related settings that have extra item separators (semi-colons).</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4046">#4046</a> : Justify should respect config.enterMode = CKEDITOR.ENTER_BR.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4622">#4622</a> : Inserting tables multiple times was corrupting the undo system.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4647">#4647</a> : [IE] Selection on an element within positioned container is lost after open context-menu then click one menu item.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4683">#4683</a> : Double-quote character in attribute values was not escaped in the editor output.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4762">#4762</a> : [IE] Unexpected vertical-scrolling behavior happens whenever focus is moving out of editor in source mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4772">#4772</a> : Text color was not being applied properly on links.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4795">#4795</a> : [IE] Press 'Del' key on horizontal line or table result in error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4824">#4824</a> : [IE] &lt;br/&gt; at the very first table cell breaks the editor selection.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4851">#4851</a> : [IE] Delete table rows with context-menu may cause error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4951">#4951</a> : Replacing text with empty string was throwing errors.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4963">#4963</a> : Link dialog was not opening properly for e-mail type links.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5043">#5043</a> : Removed the possibility of having an unwanted script tag being outputted with the editor contents.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3678">#3678</a> : There were issues when editing links inside floating divs with IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4763">#4763</a> : Pressing ENTER key with text selected was not deleting the text in some situations.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5096">#5096</a> : Simple ampersand attribute value doesn't work for more than one occurrence.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3494">#3494</a> : Context menu is too narrow in some translations.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5005">#5005</a> : Fixed HTML errors in PHP samples.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5123">#5123</a> : Fixed broken XHTML in User Interface Languages sample.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4893">#4893</a> : Editor now understands table cell inline styles.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4611">#4611</a> : Selection around &lt;select&gt; in editor doesn't cause error anymore.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4886">#4886</a> : Extra BR tags were being created in the output HTML.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4933">#4933</a> : Empty tags with BR were being left in the DOM.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5127">#5127</a> : There were errors when removing dialog definition pages through code.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4767">#4767</a> : CKEditor was not working when ckeditor_source.js is loaded in the &lt;body&gt; .</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5062">#5062</a> : Avoided security warning message when loading the wysiwyg area in IE6 under HTTPS.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5135">#5135</a> : The TAB key will now behave properly when in Source mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4988">#4988</a> : It wasn't possible to use forcePasteAsPlainText with Safari on Mac.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5095">#5095</a> : Safari on Mac deleted the current selection in the editor when Edit menu was clicked.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5140">#5140</a> : In High Contrast mode, arrows were now been displayed for menus with submenus.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5163">#5163</a> : The undo system was not working on some specific cases.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/5162">#5162</a> : The ajax sample was throwing errors when loading data.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4999">#4999</a> : The Template dialog was not generating an undo snapshot.</li>
 		<li>Updated the following language files:<ul>
-			<li><a href="http://dev.fckeditor.net/ticket/5006">#5006</a> : Dutch;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5039">#5039</a> : Finnish;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5148">#5148</a> : Hebrew;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5071">#5071</a> : Russian;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/5147">#5147</a> : Spanish;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5006">#5006</a> : Dutch;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5039">#5039</a> : Finnish;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5148">#5148</a> : Hebrew;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5071">#5071</a> : Russian;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/5147">#5147</a> : Spanish;</li>
 		</ul></li>
 	</ul>
@@ -363,44 +590,44 @@
 		New features:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/4067">#4067</a> : Introduced the full page editing support (from &lt;html&gt; to &lt;/html&gt;).</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4228">#4228</a> : Introduced the Shared Spaces feature.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4379">#4379</a> : Introduced the new powerful pasting system and word cleanup procedure, including enhancements to the paste as plain text feature.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/2872">#2872</a> : Introduced the new native PHP API, the first standardized server side support.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4210">#4210</a> : Added CKEditor plugin for jQuery.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/2885">#2885</a> : Added 'div' dialog and corresponding context menu options.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4574">#4574</a> : Added the table merging tools and corresponding context menu options.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4340">#4340</a> : Added the email protection option for link dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4463">#4463</a> : Added inline CSS support in all places where custom stylesheet could apply.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3881">#3881</a> : Added color dialog for 'more color' option in color buttons.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4341">#4341</a> : Added the 'showborder' plugin.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4549">#4549</a> : Make the anti-cache query string configurable.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4708">#4708</a> : Added the 'htmlEncodeOutput' config option.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4342">#4342</a> : Introduced the bodyId and bodyClass settings to specify the id and class. to be used in the editing area at runtime.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3401">#3401</a> : Introduced the baseHref setting so it's possible to set the URL to be used to resolve absolute and relative URLs in the contents.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4729">#4729</a> : Added support to fake elements for comments.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4067">#4067</a> : Introduced the full page editing support (from &lt;html&gt; to &lt;/html&gt;).</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4228">#4228</a> : Introduced the Shared Spaces feature.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4379">#4379</a> : Introduced the new powerful pasting system and word cleanup procedure, including enhancements to the paste as plain text feature.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/2872">#2872</a> : Introduced the new native PHP API, the first standardized server side support.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4210">#4210</a> : Added CKEditor plugin for jQuery.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/2885">#2885</a> : Added 'div' dialog and corresponding context menu options.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4574">#4574</a> : Added the table merging tools and corresponding context menu options.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4340">#4340</a> : Added the email protection option for link dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4463">#4463</a> : Added inline CSS support in all places where custom stylesheet could apply.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3881">#3881</a> : Added color dialog for 'more color' option in color buttons.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4341">#4341</a> : Added the 'showborder' plugin.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4549">#4549</a> : Make the anti-cache query string configurable.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4708">#4708</a> : Added the 'htmlEncodeOutput' config option.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4342">#4342</a> : Introduced the bodyId and bodyClass settings to specify the id and class. to be used in the editing area at runtime.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3401">#3401</a> : Introduced the baseHref setting so it's possible to set the URL to be used to resolve absolute and relative URLs in the contents.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4729">#4729</a> : Added support to fake elements for comments.</li>
 	</ul>
 	<p>
 		Fixed issues:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/4707">#4707</a> : Fixed invalid link is requested in image preview.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4461">#4461</a> : Fixed toolbar separator line along side combo enlarging the toolbar height.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4596">#4596</a> : Fixed image re-size lock buttons aren't accessible in high-contrast mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4676">#4676</a> : Fixed editing tables using table properties dialog overwrites original style values.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4714">#4714</a> : Fixed IE6 JavaScript error when editing flash by commit 'Flash' dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3905">#3905</a> : Fixed 'wysiwyg' mode causes unauthenticated content warnings over SSL in FF 3.5.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4768">#4768</a> : Fixed open context menu in IE throws js error when focus is not inside document.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4822">#4822</a> : Fixed applying 'Headers' to existing table does not work in IE.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4855">#4855</a> : Fixed toolbar doesn't wrap well for 'v2' skin in all browsers.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4882">#4882</a> : Fixed auto detect paste from MS-Word is not working for Safari.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4882">#4882</a> : Fixed unexpected margin style left behind on content cleaning up from MS-Word.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4896">#4896</a> : Fixed paste nested list from MS-Word with measurement units set to cm is broken.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4899">#4899</a> : Fixed unable to undo pre-formatted style.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4900">#4900</a> : Fixed ratio-lock inconsistent between browsers.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4901">#4901</a> : Fixed unable to edit any link with popup window's features in Firefox.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4904">#4904</a> : Fixed when paste happen from dialog, it always throw JavaScript error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4905">#4905</a> : Fixed paste plain text result incorrect when content from dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4889">#4889</a> : Fixed unable to undo 'New Page' command after typing inside editor.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4892">#4892</a> : Fixed table alignment style is not properly represented by the wrapping div.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4918">#4918</a> : Fixed switching mode when maximized is showing background page contents.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4707">#4707</a> : Fixed invalid link is requested in image preview.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4461">#4461</a> : Fixed toolbar separator line along side combo enlarging the toolbar height.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4596">#4596</a> : Fixed image re-size lock buttons aren't accessible in high-contrast mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4676">#4676</a> : Fixed editing tables using table properties dialog overwrites original style values.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4714">#4714</a> : Fixed IE6 JavaScript error when editing flash by commit 'Flash' dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3905">#3905</a> : Fixed 'wysiwyg' mode causes unauthenticated content warnings over SSL in FF 3.5.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4768">#4768</a> : Fixed open context menu in IE throws js error when focus is not inside document.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4822">#4822</a> : Fixed applying 'Headers' to existing table does not work in IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4855">#4855</a> : Fixed toolbar doesn't wrap well for 'v2' skin in all browsers.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4882">#4882</a> : Fixed auto detect paste from MS-Word is not working for Safari.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4882">#4882</a> : Fixed unexpected margin style left behind on content cleaning up from MS-Word.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4896">#4896</a> : Fixed paste nested list from MS-Word with measurement units set to cm is broken.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4899">#4899</a> : Fixed unable to undo pre-formatted style.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4900">#4900</a> : Fixed ratio-lock inconsistent between browsers.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4901">#4901</a> : Fixed unable to edit any link with popup window's features in Firefox.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4904">#4904</a> : Fixed when paste happen from dialog, it always throw JavaScript error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4905">#4905</a> : Fixed paste plain text result incorrect when content from dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4889">#4889</a> : Fixed unable to undo 'New Page' command after typing inside editor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4892">#4892</a> : Fixed table alignment style is not properly represented by the wrapping div.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4918">#4918</a> : Fixed switching mode when maximized is showing background page contents.</li>
 	</ul>
 	<h3>
@@ -409,72 +636,72 @@
 		New features:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/4343">#4343</a> : Added the configuration option &#39;browserContextMenuOnCtrl&#39; so it&#39;s possible to enable the default browser context menu by holding the CTRL key.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4343">#4343</a> : Added the configuration option &#39;browserContextMenuOnCtrl&#39; so it&#39;s possible to enable the default browser context menu by holding the CTRL key.</li>
 	</ul>
 	<p>
 		Fixed issues:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/4552">#4552</a> : Fixed float panel doesn't show up since editor instanced been destroyed once.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3918">#3918</a> : Fixed fake object is editable with Image dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4053">#4053</a> : Fixed 'Form Properties' missing from context menu when selection collapsed inside form.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4401">#4401</a> : Fixed customized by removing 'upload' tab page from 'Link dialog' cause JavaScript error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4477">#4477</a> : Adding missing tag names in object style elements.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4567">#4567</a> : Fixed IE throw error when pressing BACKSPACE in source mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4573">#4573</a> : Fixed 'IgnoreEmptyPargraph' config doesn't work with the config 'entities' is set to 'false'.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4614">#4614</a> : Fixed attribute protection fails because of line-break.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4546">#4546</a> : Fixed UIColor plugin doesn't work when editor id contains CSS selector preserved keywords.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4609">#4609</a> : Fixed flash object is lost when loading data from outside editor.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4625">#4625</a> : Fixed editor stays visible in a div with style 'visibility:hidden'.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4621">#4621</a> : Fixed clicking below table caused an empty table been generated.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3373">#3373</a> : Fixed empty context menu when there's no menu item at all.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4473">#4473</a> : Fixed setting rules on the same element tag name throws error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4514">#4514</a> : Fixed press 'Back' button breaks wysiwyg editing mode is Firefox.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4542">#4542</a> : Fixed unable to access buttons using tab key in Safari and Opera.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4577">#4577</a> : Fixed relative link url is broken after opening 'Link' dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4597">#4597</a> : Fixed custom style with same attribute name but different attribute value doesn't work.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4651">#4651</a> : Fixed 'Deleted' and 'Inserted' text style is not rendering in wysiwyg mode and is wrong is source mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4654">#4654</a> : Fixed 'CKEDITOR.config.font_defaultLabel(fontSize_defaultLabel)' is not working.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3950">#3950</a> : Fixed table column insertion incorrect when selecting empty cell area.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3912">#3912</a> : Fixed UIColor not working in IE when page has more than 30+ editors.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4031">#4031</a> : Fixed mouse cursor on toolbar combo has more than 3 shapes.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4041">#4041</a> : Fixed open context menu on multiple cells to remove them result in only one removed.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4185">#4185</a> : Fixed resize handler effect doesn't affect flash object on output.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4196">#4196</a> : Fixed 'Remove Numbered/Bulleted List' on nested list doesn't work well on nested list.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4200">#4200</a> : Fixed unable to insert 'password' type filed with attributes.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4530">#4530</a> : Fixed context menu couldn't open in Opera.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4536">#4536</a> : Fixed keyboard navigation doesn't work at all in IE quirks mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4584">#4584</a> : Fixed updated link Target field is not updating when updating to certain values.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4603">#4603</a> : Fixed unable to disable submenu items in contextmenu.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4672">#4672</a> : Fixed unable to redo the insertion of horizontal line.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4677">#4677</a> : Fixed 'Tab' key is trapped by hidden dialog elements.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4073">#4073</a> : Fixed insert template with replace option could result in empty document.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4455">#4455</a> : Fixed unable to start editing when image inside document not loaded.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4517">#4517</a> : Fixed 'dialog_backgroundCoverColor' doesn't work on IE6.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3165">#3165</a> : Fixed enter key in empty list item before nested one result in collapsed line.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4527">#4527</a> : Fixed checkbox generate invalid 'checked' attribute.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/1659">#1659</a> : Fixed unable to click below content to start editing in IE with 'config.docType' setting to standard compliant.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3933">#3933</a> : Fixed extra &lt;br&gt; left at the end of document when the last element is a table.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4736">#4736</a> : Fixed PAGE UP and PAGE DOWN keys in standards mode are not working.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4725">#4725</a> : Fixed hitting 'enter' before html comment node produces a JavaScript error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4522">#4522</a> : Fixed unable to redo when typing after insert an image with relative url.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4594">#4594</a> : Fixed context menu goes off-screen when mouse is at right had side of screen.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4673">#4673</a> : Fixed undo not available straight away if shift key is used to enter first character.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4690">#4690</a> : Fixed the parsing of nested inline elements.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4450">#4450</a> : Fixed selecting multiple table cells before apply justify commands generates spurious paragraph in Firefox.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4733">#4733</a> : Fixed dialog opening sometimes hang up Firefox and Safari.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4498">#4498</a> : Fixed toolbar collapse button missing tooltip.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4738">#4738</a> : Fixed inserting table inside bold/italic/underline generates error on ENTER_BR mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4246">#4246</a> : Fixed avoid XHTML deprecated attributes for image styling.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4543">#4543</a> : Fixed unable to move cursor between table and hr.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4764">#4764</a> : Fixed wrong exception message when CKEDITOR.editor.append() to non-existing elements.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4521">#4521</a> : Fixed dialog layout in IE6/7 may have scroll-bar and other weird effects.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4709">#4709</a> : Fixed inconsistent scroll-bar behavior on IE.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4776">#4776</a> : Fixed preview page failed to open when relative URl contains in document.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4812">#4812</a> : Fixed 'Esc' key not working on dialogs in Opera.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4552">#4552</a> : Fixed float panel doesn't show up since editor instanced been destroyed once.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3918">#3918</a> : Fixed fake object is editable with Image dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4053">#4053</a> : Fixed 'Form Properties' missing from context menu when selection collapsed inside form.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4401">#4401</a> : Fixed customized by removing 'upload' tab page from 'Link dialog' cause JavaScript error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4477">#4477</a> : Adding missing tag names in object style elements.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4567">#4567</a> : Fixed IE throw error when pressing BACKSPACE in source mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4573">#4573</a> : Fixed 'IgnoreEmptyPargraph' config doesn't work with the config 'entities' is set to 'false'.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4614">#4614</a> : Fixed attribute protection fails because of line-break.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4546">#4546</a> : Fixed UIColor plugin doesn't work when editor id contains CSS selector preserved keywords.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4609">#4609</a> : Fixed flash object is lost when loading data from outside editor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4625">#4625</a> : Fixed editor stays visible in a div with style 'visibility:hidden'.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4621">#4621</a> : Fixed clicking below table caused an empty table been generated.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3373">#3373</a> : Fixed empty context menu when there's no menu item at all.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4473">#4473</a> : Fixed setting rules on the same element tag name throws error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4514">#4514</a> : Fixed press 'Back' button breaks wysiwyg editing mode is Firefox.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4542">#4542</a> : Fixed unable to access buttons using tab key in Safari and Opera.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4577">#4577</a> : Fixed relative link url is broken after opening 'Link' dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4597">#4597</a> : Fixed custom style with same attribute name but different attribute value doesn't work.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4651">#4651</a> : Fixed 'Deleted' and 'Inserted' text style is not rendering in wysiwyg mode and is wrong is source mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4654">#4654</a> : Fixed 'CKEDITOR.config.font_defaultLabel(fontSize_defaultLabel)' is not working.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3950">#3950</a> : Fixed table column insertion incorrect when selecting empty cell area.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3912">#3912</a> : Fixed UIColor not working in IE when page has more than 30+ editors.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4031">#4031</a> : Fixed mouse cursor on toolbar combo has more than 3 shapes.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4041">#4041</a> : Fixed open context menu on multiple cells to remove them result in only one removed.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4185">#4185</a> : Fixed resize handler effect doesn't affect flash object on output.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4196">#4196</a> : Fixed 'Remove Numbered/Bulleted List' on nested list doesn't work well on nested list.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4200">#4200</a> : Fixed unable to insert 'password' type filed with attributes.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4530">#4530</a> : Fixed context menu couldn't open in Opera.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4536">#4536</a> : Fixed keyboard navigation doesn't work at all in IE quirks mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4584">#4584</a> : Fixed updated link Target field is not updating when updating to certain values.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4603">#4603</a> : Fixed unable to disable submenu items in contextmenu.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4672">#4672</a> : Fixed unable to redo the insertion of horizontal line.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4677">#4677</a> : Fixed 'Tab' key is trapped by hidden dialog elements.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4073">#4073</a> : Fixed insert template with replace option could result in empty document.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4455">#4455</a> : Fixed unable to start editing when image inside document not loaded.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4517">#4517</a> : Fixed 'dialog_backgroundCoverColor' doesn't work on IE6.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3165">#3165</a> : Fixed enter key in empty list item before nested one result in collapsed line.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4527">#4527</a> : Fixed checkbox generate invalid 'checked' attribute.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/1659">#1659</a> : Fixed unable to click below content to start editing in IE with 'config.docType' setting to standard compliant.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3933">#3933</a> : Fixed extra &lt;br&gt; left at the end of document when the last element is a table.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4736">#4736</a> : Fixed PAGE UP and PAGE DOWN keys in standards mode are not working.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4725">#4725</a> : Fixed hitting 'enter' before html comment node produces a JavaScript error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4522">#4522</a> : Fixed unable to redo when typing after insert an image with relative url.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4594">#4594</a> : Fixed context menu goes off-screen when mouse is at right had side of screen.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4673">#4673</a> : Fixed undo not available straight away if shift key is used to enter first character.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4690">#4690</a> : Fixed the parsing of nested inline elements.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4450">#4450</a> : Fixed selecting multiple table cells before apply justify commands generates spurious paragraph in Firefox.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4733">#4733</a> : Fixed dialog opening sometimes hang up Firefox and Safari.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4498">#4498</a> : Fixed toolbar collapse button missing tooltip.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4738">#4738</a> : Fixed inserting table inside bold/italic/underline generates error on ENTER_BR mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4246">#4246</a> : Fixed avoid XHTML deprecated attributes for image styling.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4543">#4543</a> : Fixed unable to move cursor between table and hr.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4764">#4764</a> : Fixed wrong exception message when CKEDITOR.editor.append() to non-existing elements.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4521">#4521</a> : Fixed dialog layout in IE6/7 may have scroll-bar and other weird effects.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4709">#4709</a> : Fixed inconsistent scroll-bar behavior on IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4776">#4776</a> : Fixed preview page failed to open when relative URl contains in document.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4812">#4812</a> : Fixed 'Esc' key not working on dialogs in Opera.</li>
 		<li>Updated the following language files:<ul>
-			<li><a href="http://dev.fckeditor.net/ticket/4346">#4346</a> : Dutch;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4837">#4837</a> : Finnish;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4371">#4371</a> : Hebrew;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4371">#4607</a> <a href="http://dev.fckeditor.net/ticket/4713">#4713</a> : Japanese;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4660">#4660</a> : Norwegian.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4346">#4346</a> : Dutch;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4837">#4837</a> : Finnish;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4371">#4371</a> : Hebrew;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4371">#4607</a> <a href="http://dev.ckeditor.com/ticket/4713">#4713</a> : Japanese;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4660">#4660</a> : Norwegian.</li>
 		</ul></li>
 	</ul>
@@ -484,61 +711,61 @@
 		New features:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/4219">#4219</a> : Added fallback mechanism for config.language.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4194">#4194</a> : Added support for using multiple css style sheets within the editor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4219">#4219</a> : Added fallback mechanism for config.language.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4194">#4194</a> : Added support for using multiple css style sheets within the editor.</li>
 	</ul>
 	<p>
 		Fixed issues:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/3898">#3898</a> : Added validation for URL value in Image dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3528">#3528</a> : Fixed Context Menu issue when triggered using Shift+F10.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4028">#4028</a> : Maximize control's tool tip was wrong once it is maximized.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4237">#4237</a> : Toolbar is chopped off in Safari browser 3.x.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4241">#4241</a> : Float panels are left on screen while editor is destroyed.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4274">#4274</a> : Double click event is incorrect handled in 'divreplace' sample.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4354">#4354</a> : Fixed TAB key on toolbar to not focus disabled buttons.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3856">#3856</a> : Fixed focus and blur events in source view mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3438">#3438</a> : Floating panels are off by (-1px, 0px) in RTL mode.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3370">#3370</a> : Refactored use of CKEDITOR.env.isCustomDomain().</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4230">#4230</a> : HC detection caused js error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3978">#3978</a> : Fixed setStyle float on IE7 strict.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4262">#4262</a> : Tab and Shift+Tab was not working to cycle through CTRL+SHIFT+F10 context menu in IE.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3633">#3633</a> : Default context menu isn't disabled in toolbar, status bar, panels...</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3897">#3897</a> : Now there is no image previews when the URL is empty in image dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4048">#4048</a> : Context submenu was lacking uiColor.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3568">#3568</a> : Dialogs now select all text when tabbing to text inputs.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3727">#3727</a> : Cell Properties dialog was missing color selection option.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3517">#3517</a> : Fixed "Match cyclic" field in Find & Replace dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4368">#4368</a> : borderColor table cell attribute haven't worked for none-IE</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4203">#4203</a> : In IE quirks mode + toolbar collapsed + source mode editing block height was incorrect.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4387">#4387</a> : Fixed: right clicking in Kama skin can lead to a javascript error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4397">#4397</a> : Wysiwyg mode caused the host page scroll.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4385">#4385</a> : Fixed editor's auto adjusting on DOM structure were confusing the dirty checking mechanism.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4397">#4397</a> : Fixed regression of [3816] where turn on design mode was causing Firefox3 to scroll the host page.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4254">#4254</a> : Added basic API sample.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4107">#4107</a> : Normalize css font-family style text for correct comparision.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3664">#3664</a> : Insert block element in empty editor document should not create new paragraph.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4037">#4037</a> : 'id' attribute is missing with Flash dialog advanced page.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4047">#4047</a> : Delete selected control type element when 'Backspace' is pressed on it.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4191">#4191</a> : Fixed: dialog changes confirmation on image dialog appeared even when no changes have been made.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4351">#4351</a> : Dash and dot could appear in attribute names.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4355">#4355</a> : 'maximize' and 'showblock' commands shouldn't take editor focus.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4504">#4504</a> : Fixed 'Enter'/'Esc' key is not working on dialog button.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4245">#4245</a> : 'Strange Template' now come with a style attribute for width.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4512">#4512</a> : Fixed styles plugin incorrectly adding semicolons to style text.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3855">#3855</a> : Fixed loading unminified _source files when ckeditor_source.js is used.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3717">#3717</a> : Dialog settings defaults can now be overridden in-page through the CKEDITOR.config object.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4481">#4481</a> : The 'stylesCombo_stylesSet' configuration entry didn't work for full URLs.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4480">#4480</a> : Fixed scope attribute in th.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4467">#4467</a> : Fixed bug to use custom icon in context menus. Thanks to george.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4190">#4190</a> : Fixed select field dialog layout in Safari.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4518">#4518</a> : Fixed unable to open dialog without editor focus in IE.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4519">#4519</a> : Fixed maximize without editor focus throw error in IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3898">#3898</a> : Added validation for URL value in Image dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3528">#3528</a> : Fixed Context Menu issue when triggered using Shift+F10.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4028">#4028</a> : Maximize control's tool tip was wrong once it is maximized.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4237">#4237</a> : Toolbar is chopped off in Safari browser 3.x.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4241">#4241</a> : Float panels are left on screen while editor is destroyed.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4274">#4274</a> : Double click event is incorrect handled in 'divreplace' sample.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4354">#4354</a> : Fixed TAB key on toolbar to not focus disabled buttons.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3856">#3856</a> : Fixed focus and blur events in source view mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3438">#3438</a> : Floating panels are off by (-1px, 0px) in RTL mode.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3370">#3370</a> : Refactored use of CKEDITOR.env.isCustomDomain().</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4230">#4230</a> : HC detection caused js error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3978">#3978</a> : Fixed setStyle float on IE7 strict.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4262">#4262</a> : Tab and Shift+Tab was not working to cycle through CTRL+SHIFT+F10 context menu in IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3633">#3633</a> : Default context menu isn't disabled in toolbar, status bar, panels...</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3897">#3897</a> : Now there is no image previews when the URL is empty in image dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4048">#4048</a> : Context submenu was lacking uiColor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3568">#3568</a> : Dialogs now select all text when tabbing to text inputs.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3727">#3727</a> : Cell Properties dialog was missing color selection option.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3517">#3517</a> : Fixed "Match cyclic" field in Find & Replace dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4368">#4368</a> : borderColor table cell attribute haven't worked for none-IE</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4203">#4203</a> : In IE quirks mode + toolbar collapsed + source mode editing block height was incorrect.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4387">#4387</a> : Fixed: right clicking in Kama skin can lead to a javascript error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4397">#4397</a> : Wysiwyg mode caused the host page scroll.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4385">#4385</a> : Fixed editor's auto adjusting on DOM structure were confusing the dirty checking mechanism.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4397">#4397</a> : Fixed regression of [3816] where turn on design mode was causing Firefox3 to scroll the host page.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4254">#4254</a> : Added basic API sample.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4107">#4107</a> : Normalize css font-family style text for correct comparision.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3664">#3664</a> : Insert block element in empty editor document should not create new paragraph.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4037">#4037</a> : 'id' attribute is missing with Flash dialog advanced page.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4047">#4047</a> : Delete selected control type element when 'Backspace' is pressed on it.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4191">#4191</a> : Fixed: dialog changes confirmation on image dialog appeared even when no changes have been made.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4351">#4351</a> : Dash and dot could appear in attribute names.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4355">#4355</a> : 'maximize' and 'showblock' commands shouldn't take editor focus.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4504">#4504</a> : Fixed 'Enter'/'Esc' key is not working on dialog button.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4245">#4245</a> : 'Strange Template' now come with a style attribute for width.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4512">#4512</a> : Fixed styles plugin incorrectly adding semicolons to style text.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3855">#3855</a> : Fixed loading unminified _source files when ckeditor_source.js is used.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3717">#3717</a> : Dialog settings defaults can now be overridden in-page through the CKEDITOR.config object.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4481">#4481</a> : The 'stylesCombo_stylesSet' configuration entry didn't work for full URLs.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4480">#4480</a> : Fixed scope attribute in th.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4467">#4467</a> : Fixed bug to use custom icon in context menus. Thanks to george.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4190">#4190</a> : Fixed select field dialog layout in Safari.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4518">#4518</a> : Fixed unable to open dialog without editor focus in IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4519">#4519</a> : Fixed maximize without editor focus throw error in IE.</li>
 		<li>Updated the following language files:<ul>
-			<li><a href="http://dev.fckeditor.net/ticket/3947">#3947</a> : Arabic;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4466">#4466</a> : Czech;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4363">#4363</a> : Danish;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4346">#4346</a> : Dutch;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4371">#4371</a> <a href="http://dev.fckeditor.net/ticket/4456">#4456</a> : Hebrew;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4382">#4382</a> : Polish.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/3947">#3947</a> : Arabic;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4466">#4466</a> : Czech;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4363">#4363</a> : Danish;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4346">#4346</a> : Dutch;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4371">#4371</a> <a href="http://dev.ckeditor.com/ticket/4456">#4456</a> : Hebrew;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4382">#4382</a> : Polish.</li>
 		</ul></li>
 	</ul>
@@ -548,202 +775,202 @@
 		New features:</p>
 	<ul>
-	<li><a href="http://dev.fckeditor.net/ticket/3188">#3188</a> : Introduce
+	<li><a href="http://dev.ckeditor.com/ticket/3188">#3188</a> : Introduce
 		&lt;pre&gt; formatting feature when converting from other blocks.</li>
-	<li><a href="http://dev.fckeditor.net/ticket/4445">#4445</a> : editor::setData now support an optional callback parameter.</li>
+	<li><a href="http://dev.ckeditor.com/ticket/4445">#4445</a> : editor::setData now support an optional callback parameter.</li>
 	</ul>
 	<p>
 		Fixed issues:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/2856">#2856</a> : Fixed problem with inches in Paste From Word plugin.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3929">#3929</a> : Using Paste dialog,
+		<li><a href="http://dev.ckeditor.com/ticket/2856">#2856</a> : Fixed problem with inches in Paste From Word plugin.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3929">#3929</a> : Using Paste dialog,
 			the text is pasted into current selection</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3920">#3920</a> : Mouse cursor over characters in
+		<li><a href="http://dev.ckeditor.com/ticket/3920">#3920</a> : Mouse cursor over characters in
 			Special Character dialog now is correct</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3882">#3882</a> : Fixed an issue
+		<li><a href="http://dev.ckeditor.com/ticket/3882">#3882</a> : Fixed an issue
 			with PasteFromWord dialog in which default values was ignored</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3859">#3859</a> : Fixed Flash dialog layout in Webkit</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3852">#3852</a> : Disabled textarea resizing in dialogs</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3831">#3831</a> : The attempt to remove the contextmenu plugin
+		<li><a href="http://dev.ckeditor.com/ticket/3859">#3859</a> : Fixed Flash dialog layout in Webkit</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3852">#3852</a> : Disabled textarea resizing in dialogs</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3831">#3831</a> : The attempt to remove the contextmenu plugin
 			will not anymore break the editor</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3781">#3781</a> : Colorbutton is now disabled in 'source' mode</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3848">#3848</a> : Fixed an issue with Webkit in witch
+		<li><a href="http://dev.ckeditor.com/ticket/3781">#3781</a> : Colorbutton is now disabled in 'source' mode</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3848">#3848</a> : Fixed an issue with Webkit in witch
 			elements in the Image and Link dialogs had wrong dimensions.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3808">#3808</a> : Fixed UI Color Picker dialog size in example page.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3658">#3658</a> : Editor had horizontal scrollbar in IE6.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3819">#3819</a> : The cursor was not visible
+		<li><a href="http://dev.ckeditor.com/ticket/3808">#3808</a> : Fixed UI Color Picker dialog size in example page.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3658">#3658</a> : Editor had horizontal scrollbar in IE6.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3819">#3819</a> : The cursor was not visible
 			when applying style to collapsed selections in Firefox 2.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3809">#3809</a> : Fixed beam cursor
+		<li><a href="http://dev.ckeditor.com/ticket/3809">#3809</a> : Fixed beam cursor
 			when mouse cursor is over text-only buttons in IE.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3815">#3815</a> : Fixed an issue
+		<li><a href="http://dev.ckeditor.com/ticket/3815">#3815</a> : Fixed an issue
 			with the form dialog in which the "enctype" attribute is outputted as "encoding".</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3785">#3785</a> : Fixed an issue
+		<li><a href="http://dev.ckeditor.com/ticket/3785">#3785</a> : Fixed an issue
 			in CKEDITOR.tools.htmlEncode() which incorrectly outputs &amp;nbsp; in IE8.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3820">#3820</a> : Fixed an issue in
+		<li><a href="http://dev.ckeditor.com/ticket/3820">#3820</a> : Fixed an issue in
 			bullet list command in which a list created at the bottom of another gets merged to the top.
 			</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3830">#3830</a> : Table cell properties dialog
+		<li><a href="http://dev.ckeditor.com/ticket/3830">#3830</a> : Table cell properties dialog
 			doesn't apply to all selected cells.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3835">#3835</a> : Element path is not refreshed
+		<li><a href="http://dev.ckeditor.com/ticket/3835">#3835</a> : Element path is not refreshed
 			after click on 'newpage'; and safari is not putting focus on document also.
 			</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3821">#3821</a> : Fixed an issue with JAWS in which
+		<li><a href="http://dev.ckeditor.com/ticket/3821">#3821</a> : Fixed an issue with JAWS in which
 			toolbar items are read inconsistently between virtual cursor modes.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3789">#3789</a> : The &quot;src&quot; attribute
+		<li><a href="http://dev.ckeditor.com/ticket/3789">#3789</a> : The &quot;src&quot; attribute
 			was getting duplicated in some situations.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3591">#3591</a> : Protecting flash related elements
+		<li><a href="http://dev.ckeditor.com/ticket/3591">#3591</a> : Protecting flash related elements
 			including '&lt;object&gt;', '&lt;embed&gt;' and '&lt;param&gt;'.
 			</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3759">#3759</a> : Fixed CKEDITOR.dom.element::scrollIntoView
+		<li><a href="http://dev.ckeditor.com/ticket/3759">#3759</a> : Fixed CKEDITOR.dom.element::scrollIntoView
 			logic bug which scroll even element is inside viewport.
 			</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3773">#3773</a> : Fixed remove list will merge lines.
+		<li><a href="http://dev.ckeditor.com/ticket/3773">#3773</a> : Fixed remove list will merge lines.
 			</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3829">#3829</a> : Fixed remove empty link on output data.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3730">#3730</a> : Indent is performing on the whole
+		<li><a href="http://dev.ckeditor.com/ticket/3829">#3829</a> : Fixed remove empty link on output data.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3730">#3730</a> : Indent is performing on the whole
 			block instead of selected lines in enterMode = BR.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3844">#3844</a> : Fixed UndoManager register keydown on obsoleted document</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3805">#3805</a> : Enabled SCAYT plugin for IE.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3834">#3834</a> : Context menu on table caption was incorrect.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3812">#3812</a> : Fixed an issue in which the editor
+		<li><a href="http://dev.ckeditor.com/ticket/3844">#3844</a> : Fixed UndoManager register keydown on obsoleted document</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3805">#3805</a> : Enabled SCAYT plugin for IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3834">#3834</a> : Context menu on table caption was incorrect.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3812">#3812</a> : Fixed an issue in which the editor
 			may show up empty or uneditable in IE7, 8 and Firefox 3.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3825">#3825</a> : Fixed JS error when opening spellingcheck.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3862">#3862</a> : Fixed html parser infinite loop on certain malformed
+		<li><a href="http://dev.ckeditor.com/ticket/3825">#3825</a> : Fixed JS error when opening spellingcheck.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3862">#3862</a> : Fixed html parser infinite loop on certain malformed
 			source code.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3639">#3639</a> : Button size was inconsistent.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3874">#3874</a> : Paste as plain text in Safari loosing lines.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3849">#3849</a> : Fixed IE8 crashes when applying lists and indenting.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3876">#3876</a> : Changed dialog checkbox and radio labels to explicit labels.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3843">#3843</a> : Fixed context submenu position in IE 6 & 7 RTL.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3864">#3864</a> : [FF]Document is not editable after inserting element on a fresh page.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3883">#3883</a> : Fixed removing inline style logic incorrect on Firefox2.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3884">#3884</a> : Empty "href" attribute was duplicated on output data.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3858">#3858</a> : Fixed the issue where toolbars
+		<li><a href="http://dev.ckeditor.com/ticket/3639">#3639</a> : Button size was inconsistent.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3874">#3874</a> : Paste as plain text in Safari loosing lines.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3849">#3849</a> : Fixed IE8 crashes when applying lists and indenting.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3876">#3876</a> : Changed dialog checkbox and radio labels to explicit labels.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3843">#3843</a> : Fixed context submenu position in IE 6 & 7 RTL.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3864">#3864</a> : [FF]Document is not editable after inserting element on a fresh page.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3883">#3883</a> : Fixed removing inline style logic incorrect on Firefox2.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3884">#3884</a> : Empty "href" attribute was duplicated on output data.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3858">#3858</a> : Fixed the issue where toolbars
 			break up in IE6 and IE7 after the browser is resized.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3868">#3868</a> : [chrome] SCAYT toolbar options was in reversed order.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3875">#3875</a> : Fixed an issue in Safari where
+		<li><a href="http://dev.ckeditor.com/ticket/3868">#3868</a> : [chrome] SCAYT toolbar options was in reversed order.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3875">#3875</a> : Fixed an issue in Safari where
 			table row/column/cell menus are not useable when table cells are selected.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3896">#3896</a> : The editing area was
+		<li><a href="http://dev.ckeditor.com/ticket/3896">#3896</a> : The editing area was
 			flashing when switching forth and back to source view.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3894">#3894</a> : Fixed an issue where editor failed to initialize when using the on-demand loading way.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3903">#3903</a> : Color button plugin doesn't read config entry from editor instance correctly.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3801">#3801</a> : Comments at the start of the document was lost in IE.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3871">#3871</a> : Unable to redo when undos to the front of snapshots stack.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3909">#3909</a> : Move focus from editor into a text input control is broken.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3870">#3870</a> : The empty paragraph
+		<li><a href="http://dev.ckeditor.com/ticket/3894">#3894</a> : Fixed an issue where editor failed to initialize when using the on-demand loading way.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3903">#3903</a> : Color button plugin doesn't read config entry from editor instance correctly.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3801">#3801</a> : Comments at the start of the document was lost in IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3871">#3871</a> : Unable to redo when undos to the front of snapshots stack.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3909">#3909</a> : Move focus from editor into a text input control is broken.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3870">#3870</a> : The empty paragraph
 			desappears when hitting ENTER after &quot;New Page&quot;.</li>
- 		<li><a href="http://dev.fckeditor.net/ticket/3887">#3887</a> : Fixed an issue in which the create
+ 		<li><a href="http://dev.ckeditor.com/ticket/3887">#3887</a> : Fixed an issue in which the create
  			list command may leak outside of a selected table cell and into the rest of document.</li>
- 		<li><a href="http://dev.fckeditor.net/ticket/3916">#3916</a> : Fixed maximize does not enlarge editor width when width is set.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3879">#3879</a> : [webkit] Color button panel had incorrect size on first open.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3839">#3839</a> : Update Scayt plugin to reflect the latest change from SpellChecker.net.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3742">#3742</a> : Fixed wrong dialog layout for dialogs without tab bar in IE RTL mode .</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3671">#3671</a> : Fixed body fixing should be applied to the real type under fake elements.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3836">#3836</a> : Fixed remove list in enterMode=BR will merge sibling text to one line.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3949">#3949</a> : Fixed enterKey within pre-formatted text introduce wrong line-break.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3878">#3878</a> : Whenever possible,
+ 		<li><a href="http://dev.ckeditor.com/ticket/3916">#3916</a> : Fixed maximize does not enlarge editor width when width is set.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3879">#3879</a> : [webkit] Color button panel had incorrect size on first open.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3839">#3839</a> : Update Scayt plugin to reflect the latest change from SpellChecker.net.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3742">#3742</a> : Fixed wrong dialog layout for dialogs without tab bar in IE RTL mode .</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3671">#3671</a> : Fixed body fixing should be applied to the real type under fake elements.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3836">#3836</a> : Fixed remove list in enterMode=BR will merge sibling text to one line.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3949">#3949</a> : Fixed enterKey within pre-formatted text introduce wrong line-break.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3878">#3878</a> : Whenever possible,
 		dialogs will not present scrollbars if the content is too big for its standard
 		size.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3782">#3782</a> : Remove empty list in table cell result in collapsed cell.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3782">#3782</a> : Remove empty list in table cell result in collapsed cell.</li>
 		<li>Updated the following language files:<ul>
-			<li><a href="http://dev.fckeditor.net/ticket/4183">#4183</a> : Basque;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/3837">#3837</a> : Brazilian Portuguese;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4171">#4171</a> : Catalan;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4115">#4115</a> : Chinese (Simplified);</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4179">#4179</a> : Chinese (Traditional);</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4102">#4102</a> : Croatian;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4105">#4105</a> : French;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4104">#4104</a> : German;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4116">#4116</a> : Italian;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4091">#4091</a> : Japanese;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4120">#4120</a> : Polish;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/3987">#3987</a> : Spanish;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4089">#4089</a> : Ukrainian;</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4166">#4166</a> : Vietnamese.</li>
-		</ul></li>
-		<li><a href="http://dev.fckeditor.net/ticket/3984">#3984</a> : [IE]The pre-formatted style is generating error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3946">#3946</a> : Fixed unable to hide contextmenu.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3956">#3956</a> : Fixed About dialog in Source Mode for IE.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3953">#3953</a> : Fixed keystroke for close Paste dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3951">#3951</a> : Reset size and lock ratio options were not accessible in Image dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3921">#3921</a> : Fixed Container scroll issue on IE7.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3940">#3940</a> : Fixed list operation doesn't stop at table.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3891">#3891</a> : [IE] Fixed 'automatic' font color doesn't work.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3972">#3972</a> : Fixed unable to remove a single empty list in document in Firefox with enterMode=BR.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3973">#3973</a> : Fixed list creation error at the end of document.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3959">#3959</a> : Pasting styled text from word result in content lost.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3793">#3793</a> : Combined images into sprites.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3783">#3783</a> : Fixed indenting command in table cells create collapsed paragraph.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3968">#3968</a> : About dialog layout was broken with IE+Standards+RTL.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3991">#3991</a> : In IE quirks, text was not visible in v2 and office2003 skins.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3983">#3983</a> : In IE, we&#39;ll now
+			<li><a href="http://dev.ckeditor.com/ticket/4183">#4183</a> : Basque;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/3837">#3837</a> : Brazilian Portuguese;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4171">#4171</a> : Catalan;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4115">#4115</a> : Chinese (Simplified);</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4179">#4179</a> : Chinese (Traditional);</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4102">#4102</a> : Croatian;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4105">#4105</a> : French;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4104">#4104</a> : German;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4116">#4116</a> : Italian;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4091">#4091</a> : Japanese;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4120">#4120</a> : Polish;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/3987">#3987</a> : Spanish;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4089">#4089</a> : Ukrainian;</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4166">#4166</a> : Vietnamese.</li>
+		</ul></li>
+		<li><a href="http://dev.ckeditor.com/ticket/3984">#3984</a> : [IE]The pre-formatted style is generating error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3946">#3946</a> : Fixed unable to hide contextmenu.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3956">#3956</a> : Fixed About dialog in Source Mode for IE.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3953">#3953</a> : Fixed keystroke for close Paste dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3951">#3951</a> : Reset size and lock ratio options were not accessible in Image dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3921">#3921</a> : Fixed Container scroll issue on IE7.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3940">#3940</a> : Fixed list operation doesn't stop at table.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3891">#3891</a> : [IE] Fixed 'automatic' font color doesn't work.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3972">#3972</a> : Fixed unable to remove a single empty list in document in Firefox with enterMode=BR.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3973">#3973</a> : Fixed list creation error at the end of document.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3959">#3959</a> : Pasting styled text from word result in content lost.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3793">#3793</a> : Combined images into sprites.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3783">#3783</a> : Fixed indenting command in table cells create collapsed paragraph.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3968">#3968</a> : About dialog layout was broken with IE+Standards+RTL.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3991">#3991</a> : In IE quirks, text was not visible in v2 and office2003 skins.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3983">#3983</a> : In IE, we&#39;ll now
 			silently ignore wrong toolbar definition settings which have extra commas being
 			left around.</li>
 		<li>Fixed the following test cases:<ul>
-			<li><a href="http://dev.fckeditor.net/ticket/3992">#3992</a> : core/ckeditor2.html</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4138">#4138</a> : core/plugins.html</li>
-			<li><a href="http://dev.fckeditor.net/ticket/3801">#3801</a> : plugins/htmldataprocessor/htmldataprocessor.html</li>
-		</ul></li>
-		<li><a href="http://dev.fckeditor.net/ticket/3989">#3989</a> : Host page horizontal scrolling a lot when on having righ-to-left direction.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4001">#4001</a> : Create link around existing image result incorrect.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3988">#3988</a> : Destroy editor on form submit event cause error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3994">#3994</a> : Insert horizontal line at end of document cause error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4074">#4074</a> : Indent error with 'indentClasses' config specified.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4057">#4057</a> : Fixed anchor is lost after switch between editing modes.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3644">#3644</a> : Image dialog was missin radio lock.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4014">#4014</a> : Firefox2 had no dialog button backgrounds.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4018">#4018</a> : Firefox2 had no richcombo text visible.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4035">#4035</a> : [IE6] Paste dialog size was too small.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4049">#4049</a> : Kama skin was too wide with config.width.</li>
+			<li><a href="http://dev.ckeditor.com/ticket/3992">#3992</a> : core/ckeditor2.html</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4138">#4138</a> : core/plugins.html</li>
+			<li><a href="http://dev.ckeditor.com/ticket/3801">#3801</a> : plugins/htmldataprocessor/htmldataprocessor.html</li>
+		</ul></li>
+		<li><a href="http://dev.ckeditor.com/ticket/3989">#3989</a> : Host page horizontal scrolling a lot when on having righ-to-left direction.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4001">#4001</a> : Create link around existing image result incorrect.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3988">#3988</a> : Destroy editor on form submit event cause error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3994">#3994</a> : Insert horizontal line at end of document cause error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4074">#4074</a> : Indent error with 'indentClasses' config specified.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4057">#4057</a> : Fixed anchor is lost after switch between editing modes.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3644">#3644</a> : Image dialog was missin radio lock.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4014">#4014</a> : Firefox2 had no dialog button backgrounds.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4018">#4018</a> : Firefox2 had no richcombo text visible.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4035">#4035</a> : [IE6] Paste dialog size was too small.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4049">#4049</a> : Kama skin was too wide with config.width.</li>
 		<li>The following released files now doesn't require the _source folder<ul>
-			<li><a href="http://dev.fckeditor.net/ticket/4086">#4086</a> : _samples/ui_languages.html</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4093">#4093</a> : _tests/core/dom/document.html</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4094">#4094</a> : Smiley plugin file</li>
-			<li><a href="http://dev.fckeditor.net/ticket/4097">#4097</a> : No undo/redo support for fontColor and backgroundColor buttons.</li>
-		</ul></li>
-		<li><a href="http://dev.fckeditor.net/ticket/4085">#4085</a> : Paste and Paste from Word dialogs were not well styled in IE+RTL.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3982">#3982</a> : Fixed enterKey on empty list item result in weird dom structure.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4101">#4101</a> : Now it is possible to close dialog before gets focus.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4075">#4075</a> : [IE6/7]Fixed apply custom inline style with "class" attribute failed.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4087">#4087</a> : [Firefox]Fixed extra blocks created on create list when full document selected.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4097">#4097</a> : No undo/redo support for fontColor and backgroundColor buttons.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4111">#4111</a> : Fixed apply block style after inline style applied on full document error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3622">#3622</a> : Fixed shift enter with selection not deleting highlighted text.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4092">#4092</a> : [IE6] Close button was missing for dialog without multiple tabs.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4003">#4003</a> : Markup on the image dialog was disrupted when removing the border input.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4096">#4096</a> : Editor content area was pushed down in IE RTL quirks.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4112">#4112</a> : [FF] Paste dialog had scrollbars in quirks.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4118">#4118</a> : Dialog dragging was
+			<li><a href="http://dev.ckeditor.com/ticket/4086">#4086</a> : _samples/ui_languages.html</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4093">#4093</a> : _tests/core/dom/document.html</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4094">#4094</a> : Smiley plugin file</li>
+			<li><a href="http://dev.ckeditor.com/ticket/4097">#4097</a> : No undo/redo support for fontColor and backgroundColor buttons.</li>
+		</ul></li>
+		<li><a href="http://dev.ckeditor.com/ticket/4085">#4085</a> : Paste and Paste from Word dialogs were not well styled in IE+RTL.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3982">#3982</a> : Fixed enterKey on empty list item result in weird dom structure.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4101">#4101</a> : Now it is possible to close dialog before gets focus.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4075">#4075</a> : [IE6/7]Fixed apply custom inline style with "class" attribute failed.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4087">#4087</a> : [Firefox]Fixed extra blocks created on create list when full document selected.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4097">#4097</a> : No undo/redo support for fontColor and backgroundColor buttons.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4111">#4111</a> : Fixed apply block style after inline style applied on full document error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3622">#3622</a> : Fixed shift enter with selection not deleting highlighted text.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4092">#4092</a> : [IE6] Close button was missing for dialog without multiple tabs.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4003">#4003</a> : Markup on the image dialog was disrupted when removing the border input.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4096">#4096</a> : Editor content area was pushed down in IE RTL quirks.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4112">#4112</a> : [FF] Paste dialog had scrollbars in quirks.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4118">#4118</a> : Dialog dragging was
 			occasionally behaving strangely .</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4077">#4077</a> : The toolbar combos
+		<li><a href="http://dev.ckeditor.com/ticket/4077">#4077</a> : The toolbar combos
 			were rendering incorrectly in some languages, like Chinese.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3622">#3622</a> : The toolbar in the v2
+		<li><a href="http://dev.ckeditor.com/ticket/3622">#3622</a> : The toolbar in the v2
 			skin was wrapping improperly in some languages.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4119">#4119</a> : Unable to edit image link with image dialog.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4117">#4117</a> : Fixed dialog error when transforming image into button.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4058">#4058</a> : [FF] wysiwyg mode is sometimes not been activated.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4114">#4114</a> : [IE] RTE + IE6/IE7 Quirks = dialog mispositoned.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4123">#4123</a> : Some dialog buttons were broken in IE7 quirks.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4122">#4122</a> : [IE] The image dialog
+		<li><a href="http://dev.ckeditor.com/ticket/4119">#4119</a> : Unable to edit image link with image dialog.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4117">#4117</a> : Fixed dialog error when transforming image into button.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4058">#4058</a> : [FF] wysiwyg mode is sometimes not been activated.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4114">#4114</a> : [IE] RTE + IE6/IE7 Quirks = dialog mispositoned.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4123">#4123</a> : Some dialog buttons were broken in IE7 quirks.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4122">#4122</a> : [IE] The image dialog
 			was being rendered improperly when loading an image with long URL.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4144">#4144</a> : Fixed the white-spaces at the end of &lt;pre&gt; is incorrectly removed.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4143">#4143</a> : Fixed element id is lost when extracting contents from the range.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4007">#4007</a> : [IE] Source area overflow from editor chrome.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4145">#4145</a> : Fixed the on demand
+		<li><a href="http://dev.ckeditor.com/ticket/4144">#4144</a> : Fixed the white-spaces at the end of &lt;pre&gt; is incorrectly removed.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4143">#4143</a> : Fixed element id is lost when extracting contents from the range.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4007">#4007</a> : [IE] Source area overflow from editor chrome.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4145">#4145</a> : Fixed the on demand
 			(&quot;basic&quot;) loading model of the editor.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4139">#4139</a> : Fixed list plugin regression of [3903].</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4147">#4147</a> : Unify style text normalization logic when comparing styles.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4150">#4150</a> : Fixed enlarge list result incorrect at the inner boundary of block.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4164">#4164</a> : Now it is possible to paste text
+		<li><a href="http://dev.ckeditor.com/ticket/4139">#4139</a> : Fixed list plugin regression of [3903].</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4147">#4147</a> : Unify style text normalization logic when comparing styles.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4150">#4150</a> : Fixed enlarge list result incorrect at the inner boundary of block.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4164">#4164</a> : Now it is possible to paste text
 			in Source mode even if forcePasteAsPlainText = true.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4129">#4129</a> : [FF]Unable to remove list with Ctrl-A.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4172">#4172</a> : [Safari] The trailing
+		<li><a href="http://dev.ckeditor.com/ticket/4129">#4129</a> : [FF]Unable to remove list with Ctrl-A.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4172">#4172</a> : [Safari] The trailing
 			&lt;br&gt; was not been always added to blank lines ending with &amp;nbsp;.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4178">#4178</a> : It&#39;s now possible to
+		<li><a href="http://dev.ckeditor.com/ticket/4178">#4178</a> : It&#39;s now possible to
 			copy and paste Flash content among different editor instances.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4193">#4193</a> : Automatic font color produced empty span on Firefox 3.5.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4186">#4186</a> : [FF] Fixed First open float panel cause host page scrollbar blinking.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4227">#4227</a> : Fixed destroy editor instance created on textarea which is not within form cause error.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/4240">#4240</a> : Fixed editor name containing hyphen break editor completely.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/3828">#3828</a> : Malformed nested list is now corrected by the parser.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4193">#4193</a> : Automatic font color produced empty span on Firefox 3.5.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4186">#4186</a> : [FF] Fixed First open float panel cause host page scrollbar blinking.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4227">#4227</a> : Fixed destroy editor instance created on textarea which is not within form cause error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/4240">#4240</a> : Fixed editor name containing hyphen break editor completely.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/3828">#3828</a> : Malformed nested list is now corrected by the parser.</li>
 	</ul>
 	<h3>
Index: /CKEditor/branches/features/adobeair/_dev/docs_build/docs_build.conf
===================================================================
--- /CKEditor/branches/features/adobeair/_dev/docs_build/docs_build.conf	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_dev/docs_build/docs_build.conf	(revision 6006)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 	This is an example of one way you could set up a configuration file to more
 	conveniently define some commandline options. You might like to do this if
Index: /CKEditor/branches/features/adobeair/_dev/docs_build/template/class.tmpl
===================================================================
--- /CKEditor/branches/features/adobeair/_dev/docs_build/template/class.tmpl	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_dev/docs_build/template/class.tmpl	(revision 6006)
@@ -273,5 +273,5 @@
 							!}&nbsp;</td>
 							<td class="nameDescription">
-								<div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>{+makeSignature(member.params)+}
+								<div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>
 								</div>
 								<div class="description">{+resolveLinks(summarize(member.desc))+}</div>
Index: /CKEditor/branches/features/adobeair/_dev/docs_build/template/publish.js
===================================================================
--- /CKEditor/branches/features/adobeair/_dev/docs_build/template/publish.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_dev/docs_build/template/publish.js	(revision 6006)
@@ -1,3 +1,3 @@
-﻿/** Called automatically by JsDoc Toolkit. */
+/** Called automatically by JsDoc Toolkit. */
 function publish(symbolSet) {
 	publish.conf = {  // trailing slash expected for dirs
@@ -79,5 +79,8 @@
 
 		symbol.events = symbol.getEvents();   // 1 order matters
-		symbol.methods = symbol.getMethods(); // 2
+		symbol.methods = symbol.getMethods().filter( function( $ )
+			{
+				return !$.isInner;
+			}); // 2
 
 		var output = "";
Index: /CKEditor/branches/features/adobeair/_dev/dtd_test/dtd_test.html
===================================================================
--- /CKEditor/branches/features/adobeair/_dev/dtd_test/dtd_test.html	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_dev/dtd_test/dtd_test.html	(revision 6006)
@@ -11,5 +11,5 @@
 
 // Define the CKEDITOR namespace.
-var CKEDITOR = {};
+var CKEDITOR = { on : function(){} };
 
 	//]]>
Index: /CKEditor/branches/features/adobeair/_dev/fixlineends/fixlineends.bat
===================================================================
--- /CKEditor/branches/features/adobeair/_dev/fixlineends/fixlineends.bat	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_dev/fixlineends/fixlineends.bat	(revision 6006)
@@ -5,3 +5,3 @@
 ::
 
-php fixlineends.php --excluderegex=/(?:_dev[\\\/]_thirdparty)/ --eolstripwhite --eofnewline --eofstripwhite --nohidden --nosystem ../../
+php fixlineends.php --excluderegex=/(?:_dev[\\\/]_thirdparty)/ --eolstripwhite --eofnewline --eofstripwhite --nohidden --nosystem --fixbom ../../
Index: /CKEditor/branches/features/adobeair/_dev/fixlineends/fixlineends.php
===================================================================
--- /CKEditor/branches/features/adobeair/_dev/fixlineends/fixlineends.php	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_dev/fixlineends/fixlineends.php	(revision 6006)
@@ -64,4 +64,8 @@
 $list["xml"] = CRLF;
 
+$bom = array();
+$bom['asp'] = true;
+$bom['js'] = true;
+
 /**
  * Do not modify anything below
@@ -107,4 +111,9 @@
  */
 $nodotfiles = false;
+/**
+ * If set to true, BOM characters are fixed
+ * @var boolean $fixbom
+ */
+$fixbom = false;
 /**
  * How deep to recurse into subdirectories
@@ -317,4 +326,15 @@
         }
         $new_content .= $line;
+    }
+
+    if ($GLOBALS['fixbom']) {
+        $before_fixing = $new_content;
+        $ext = strtolower(substr($path, strrpos($path, ".") + 1));
+        $new_content = stripUtf8Bom( $new_content );
+        if (!empty($GLOBALS['bom'][$ext])) {
+            $new_content = "\xEF\xBB\xBF" . $new_content; // BOM
+        }
+        if ($new_content != $before_fixing)
+            $modified = true;
     }
 
@@ -353,4 +373,16 @@
 
 /**
+ * Strip BOM from a string
+ * @param string $data
+ */
+function stripUtf8Bom( $data )
+{
+    if ( substr( $data, 0, 3 ) == "\xEF\xBB\xBF" )
+        return stripUtf8Bom(substr_replace( $data, '', 0, 3 )) ;
+
+    return $data ;
+}
+
+/**
  * Fix ending lines in all files at given path
  *
@@ -453,18 +485,21 @@
             use regex to exclude files, preg_match() format expected
 
+       --fixbom
+            fix BOM characters
+
        --help
             display this help and exit
 
        --noarchive
-            if set to true, archive files are skipped (Windows only)
+            skip archive files (Windows only)
 
        --nodotfiles
-            if set to true, dot files are skipped
+            skip dot files
 
        --nohidden
-            if set to true, hidden files are skipped (Windows only)
+            skip hidden files (Windows only)
 
        --nosystem
-            if set to true, system files are skipped (Windows only)
+            skip system files (Windows only)
 
        --maxdepth
@@ -525,4 +560,8 @@
             case '--nodotfiles':
                 $GLOBALS['nodotfiles'] = true;
+                break;
+
+            case '--fixbom':
+                $GLOBALS['fixbom'] = true;
                 break;
 
@@ -572,11 +611,11 @@
 
 if ($_SERVER['argc']>1) {
-	include "../_thirdparty/console_getopt/Getopt.php";
+    include "../_thirdparty/console_getopt/Getopt.php";
 
     if ($windows) {
-        $longoptions = array("eofstripwhite", "eofnewline", "eolstripwhite", "help", "noarchive", "nohidden", "nosystem", "nodotfiles", "maxdepth=", "excluderegex=");
+        $longoptions = array("eofstripwhite", "eofnewline", "eolstripwhite", "help", "noarchive", "nohidden", "nosystem", "nodotfiles", "maxdepth=", "excluderegex=", "fixbom");
     }
     else {
-        $longoptions = array("eofstripwhite", "eofnewline", "eolstripwhite", "help", "nodotfiles", "maxdepth=", "excluderegex=");
+        $longoptions = array("eofstripwhite", "eofnewline", "eolstripwhite", "help", "nodotfiles", "maxdepth=", "excluderegex=", "fixbom");
     }
 
Index: /CKEditor/branches/features/adobeair/_dev/packager/packagefilegen_full.html
===================================================================
--- /CKEditor/branches/features/adobeair/_dev/packager/packagefilegen_full.html	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_dev/packager/packagefilegen_full.html	(revision 6006)
@@ -80,5 +80,5 @@
 		var path = downloaded[i].replace( CKEDITOR.basePath, '' );
 
-		if ( path == 'config.js' )
+		if ( path == 'config.js' || /\/styles\/default\.js/.test( path ) )
 			continue;
 
Index: /CKEditor/branches/features/adobeair/_dev/releaser/release.bat
===================================================================
--- /CKEditor/branches/features/adobeair/_dev/releaser/release.bat	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_dev/releaser/release.bat	(revision 6006)
@@ -11,3 +11,3 @@
 :: rmdir /S /Q release
 
-java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.3.2 SVN" ckeditor_3.3.2_svn --run-before-release=langtool.bat
+java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.4.2 (SVN)" ckeditor_3.4.2_svn --run-before-release=langtool.bat
Index: /CKEditor/branches/features/adobeair/_dev/releaser/release.sh
===================================================================
--- /CKEditor/branches/features/adobeair/_dev/releaser/release.sh	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_dev/releaser/release.sh	(revision 6006)
@@ -13,4 +13,4 @@
 
 pushd $DIR
-java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.3.2 SVN" ckeditor_3.3.2_svn --run-before-release=$LANGTOOL
+java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.4.2 (SVN)" ckeditor_3.4.2_svn --run-before-release=$LANGTOOL
 popd
Index: /CKEditor/branches/features/adobeair/_samples/api.html
===================================================================
--- /CKEditor/branches/features/adobeair/_samples/api.html	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_samples/api.html	(revision 6006)
@@ -64,5 +64,5 @@
 }
 
-function ExecuteCommand(commandName)
+function ExecuteCommand( commandName )
 {
 	// Get the editor instance that we want to interact with.
@@ -114,5 +114,5 @@
 	<form action="sample_posteddata.php" method="post">
 		<p>
-			This sample shows how to use the CKeditor JavaScript API to interact with the editor
+			This sample shows how to use the CKEditor JavaScript API to interact with the editor
 			at runtime.</p>
 		<textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
Index: /CKEditor/branches/features/adobeair/_samples/api_dialog.html
===================================================================
--- /CKEditor/branches/features/adobeair/_samples/api_dialog.html	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_samples/api_dialog.html	(revision 6006)
@@ -92,4 +92,11 @@
 				]
 			});
+
+			// Rewrite the 'onFocus' handler to always focus 'url' field.
+			dialogDefinition.onFocus = function()
+			{
+				var urlField = this.getContentElement( 'info', 'url' );
+				urlField.select();
+			};
 		}
 	});
Index: /CKEditor/branches/features/adobeair/_samples/assets/swfobject.js
===================================================================
--- /CKEditor/branches/features/adobeair/_samples/assets/swfobject.js	(revision 6006)
+++ /CKEditor/branches/features/adobeair/_samples/assets/swfobject.js	(revision 6006)
@@ -0,0 +1,18 @@
+/**
+ * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
+ *
+ * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ */
+/*
+Copyright (c) 2007 Geoff Stearns
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+/*jsl:ignoreall*/
+if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\"";_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";var _1a=this.getParams();for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}var _1c=this.getVariablePairs().join("&");if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\">";_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";var _1d=this.getParams();for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major){return false;}if(this.major>fv.major){return true;}if(this.minor<fv.minor){return false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return false;}return true;};deconcept.util={getRequestParameter:function(_2b){var q=document.location.search||document.location.hash;if(_2b==null){return q;}if(q){var _2d=q.substring(1).split("&");for(var i=0;i<_2d.length;i++){if(_2d[i].substring(0,_2d[i].indexOf("="))==_2b){return _2d[i].substring((_2d[i].indexOf("=")+1));}}}return "";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var _2f=document.getElementsByTagName("OBJECT");for(var i=_2f.length-1;i>=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;
Index: /CKEditor/branches/features/adobeair/_samples/autogrow.html
===================================================================
--- /CKEditor/branches/features/adobeair/_samples/autogrow.html	(revision 6006)
+++ /CKEditor/branches/features/adobeair/_samples/autogrow.html	(revision 6006)
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>AutoGrow Plugin - CKEditor Sample</title>
+	<meta content="text/html; charset=utf-8" http-equiv="content-type" />
+	<!-- CKReleaser %REMOVE_LINE%
+	<script type="text/javascript" src="../ckeditor.js"></script>
+	CKReleaser %REMOVE_START% -->
+	<script type="text/javascript" src="../ckeditor_source.js"></script>
+	<!-- CKReleaser %REMOVE_END% -->
+	<script src="sample.js" type="text/javascript"></script>
+	<link href="sample.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+	<h1>
+		CKEditor Sample
+	</h1>
+	<!-- This <div> holds alert messages to be display in the sample page. -->
+	<div id="alerts">
+		<noscript>
+			<p>
+				<strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript
+				support, like yours, you should still see the contents (HTML data) and you should
+				be able to edit it normally, without a rich editor interface.
+			</p>
+		</noscript>
+	</div>
+	<form action="sample_posteddata.php" method="post">
+		<p>
+			In this sample the AutoGrow plugin is available. It makes the editor grow to fit the size of the content.</p>
+		<p>
+			<label for="editor1">
+				With default configuration:</label><br />
+			<textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
+			<script type="text/javascript">
+			//<![CDATA[
+
+				CKEDITOR.replace( 'editor1', {
+					extraPlugins : 'autogrow'
+				});
+
+			//]]>
+			</script>
+		</p>
+		<p>
+			<label for="editor2">
+				With maximum height set to 400:</label><br />
+			<textarea cols="80" id="editor2" name="editor2" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
+			<script type="text/javascript">
+			//<![CDATA[
+
+				CKEDITOR.replace( 'editor2', {
+					extraPlugins : 'autogrow',
+					autoGrow_maxHeight : 400
+				});
+
+			//]]>
+			</script>
+		</p>
+		<p>
+			<input type="submit" value="Submit" />
+		</p>
+	</form>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
Index: /CKEditor/branches/features/adobeair/_samples/index.html
===================================================================
--- /CKEditor/branches/features/adobeair/_samples/index.html	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_samples/index.html	(revision 6006)
@@ -42,4 +42,6 @@
 		<li><a href="output_xhtml.html">Output XHTML</a></li>
 		<li><a href="output_html.html">Output HTML</a></li>
+		<li><a href="output_for_flash.html">Output for Flash</a></li>
+		<li><a href="autogrow.html">AutoGrow plugin</a></li>
 	</ul>
 	<div id="footer">
Index: /CKEditor/branches/features/adobeair/_samples/jqueryadapter.html
===================================================================
--- /CKEditor/branches/features/adobeair/_samples/jqueryadapter.html	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_samples/jqueryadapter.html	(revision 6006)
@@ -8,5 +8,5 @@
 	<title>jQuery adapter - CKEditor Sample</title>
 	<meta content="text/html; charset=utf-8" http-equiv="content-type" />
-	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
+	<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
 	<!-- CKReleaser %REMOVE_LINE%
 	<script type="text/javascript" src="../ckeditor.js"></script>
Index: /CKEditor/branches/features/adobeair/_samples/output_for_flash.html
===================================================================
--- /CKEditor/branches/features/adobeair/_samples/output_for_flash.html	(revision 6006)
+++ /CKEditor/branches/features/adobeair/_samples/output_for_flash.html	(revision 6006)
@@ -0,0 +1,261 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Output for Flash</title>
+	<meta content="text/html; charset=utf-8" http-equiv="content-type" />
+	<!-- CKReleaser %REMOVE_LINE%
+	<script type="text/javascript" src="../ckeditor.js"></script>
+	CKReleaser %REMOVE_START% -->
+	<script type="text/javascript" src="../ckeditor_source.js"></script>
+	<!-- CKReleaser %REMOVE_END% -->
+	<script src="sample.js" type="text/javascript"></script>
+	<link href="sample.css" rel="stylesheet" type="text/css" />
+	<script type="text/javascript" src="assets/swfobject.js"></script>
+	<script type="text/javascript">
+function sendToFlash()
+{
+	var html = CKEDITOR.instances.editor1.getData() ;
+	var flash = document.getElementById( 'ckFlash' ) ;
+	flash.setData( html ) ;
+}
+
+function init()
+{
+	var so = new SWFObject("assets/output_for_flash.swf", "ckFlash", "550", "400", "8", "#ffffff") ;
+	so.addParam("wmode", "transparent");
+	so.write("ckFlashContainer") ;
+}
+	</script>
+	</head>
+<body onload="init()">
+	<h1>
+		CKEditor Sample
+	</h1>
+	<!-- This <div> holds alert messages to be display in the sample page. -->
+	<div id="alerts">
+		<noscript>
+			<p>
+				<strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript
+				support, like yours, you should still see the contents (HTML data) and you should
+				be able to edit it normally, without a rich editor interface.
+			</p>
+		</noscript>
+	</div>
+
+	<div>
+		This sample shows CKEditor configured to produce HTML code that can be used with
+		<a href="http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00000922.html">
+			Flash</a>.
+	</div>
+	<hr />
+	<table width="100%" cellpadding="0" cellspacing="0">
+		<tr>
+			<td style="width: 100%">
+			<textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;b&gt;sample text&lt;/b&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
+			<script type="text/javascript">
+			//<![CDATA[
+
+				if ( document.location.protocol == 'file:' )
+					alert( 'Warning: This samples does not work when loaded from local filesystem due to security restrictions implemented in Flash.' +
+									'\n\nPlease load the sample from a web server instead.') ;
+
+				CKEDITOR.replace( 'editor1',
+					{
+						height : 300,
+						width : '100%',
+						toolbar : [
+								['Source','-','Bold','Italic','Underline','-','BulletedList','-','Link','Unlink'],
+								['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
+								'/',
+								['Font','FontSize','-','TextColor','-','About']
+							],
+
+						/*
+						 * Style sheet for the contents
+						 */
+						contentsCss : 'body {color:#000; background-color#FFF; font-family: Arial; font-size:80%;} p, ol, ul {margin-top: 0px; margin-bottom: 0px;}',
+
+						/*
+						 * Quirks doctype
+						 */
+						docType : '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',
+
+						/*
+						 * Core styles.
+						 */
+						coreStyles_bold	: { element : 'b' },
+						coreStyles_italic	: { element : 'i' },
+						coreStyles_underline	: { element : 'u'},
+
+						/*
+						 * Font face
+						 */
+						// Define the way font elements will be applied to the document. The "font"
+						// element will be used. 
+						font_style :
+						{
+								element		: 'font',
+								attributes		: { 'face' : '#(family)' }
+						},
+
+						/*
+						 * Font sizes.
+						 * The CSS part of the font sizes isn't used by Flash, it is there to get the
+						 * font rendered correctly in CKEditor.
+						 */
+						fontSize_sizes : '8px/8;9px/9;10px/10;11px/11;12px/12;14px/14;16px/16;18px/18;20px/20;22px/22;24px/24;26px/26;28px/28;36px/36;48px/48;72px/72',
+						fontSize_style :
+							{
+								element		: 'font',
+								attributes	: { 'size' : '#(size)' },
+								styles		: { 'font-size' : '#(size)px' }
+							} ,
+
+						/*
+						 * Font colors.
+						 */
+						colorButton_enableMore : true,
+
+						colorButton_foreStyle :
+							{
+								element : 'font',
+								attributes : { 'color' : '#(color)' }
+							},
+
+						colorButton_backStyle :
+							{
+								element : 'font',
+								styles	: { 'background-color' : '#(color)' }
+							},
+
+
+						on : { 'instanceReady' : configureFlashOutput }
+					});
+
+/*
+ * Adjust the behavior of the dataProcessor to match the 
+ * requirements of Flash
+ */
+function configureFlashOutput( ev )
+{
+	var editor = ev.editor,
+		dataProcessor = editor.dataProcessor,
+		htmlFilter = dataProcessor && dataProcessor.htmlFilter;
+
+	// Out self closing tags the HTML4 way, like <br>.
+	dataProcessor.writer.selfClosingEnd = '>';
+
+	// Make output formatting match Flash expectations
+	var dtd = CKEDITOR.dtd;
+	for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) )
+	{
+		dataProcessor.writer.setRules( e,
+			{
+				indent : false,
+				breakBeforeOpen : false,
+				breakAfterOpen : false,
+				breakBeforeClose : false,
+				breakAfterClose : false
+			});
+	}
+	dataProcessor.writer.setRules( 'br',
+		{
+			indent : false,
+			breakBeforeOpen : false,
+			breakAfterOpen : false,
+			breakBeforeClose : false,
+			breakAfterClose : false
+		});
+
+	// Output properties as attributes, not styles.
+	htmlFilter.addRules( 
+		{
+			elements :
+			{
+				$ : function( element )
+				{
+					var style, match, width, height, align;
+
+					// Output dimensions of images as width and height
+					if ( element.name == 'img' )
+					{
+						style = element.attributes.style;
+
+						if ( style )
+						{
+							// Get the width from the style.
+							match = /(?:^|\s)width\s*:\s*(\d+)px/i.exec( style );
+							width = match && match[1];
+
+							// Get the height from the style.
+							match = /(?:^|\s)height\s*:\s*(\d+)px/i.exec( style );
+							height = match && match[1];
+
+							if ( width )
+							{
+								element.attributes.style = element.attributes.style.replace( /(?:^|\s)width\s*:\s*(\d+)px;?/i , '' );
+								element.attributes.width = width;
+							}
+
+							if ( height )
+							{
+								element.attributes.style = element.attributes.style.replace( /(?:^|\s)height\s*:\s*(\d+)px;?/i , '' );
+								element.attributes.height = height;
+							}
+						}
+					}
+
+					// Output alignment of paragraphs using align
+					if ( element.name == 'p' )
+					{
+						style = element.attributes.style;
+
+						if ( style )
+						{
+							// Get the align from the style.
+							match = /(?:^|\s)text-align\s*:\s*(\w*);/i.exec( style );
+							align = match && match[1];
+
+							if ( align )
+							{
+								element.attributes.style = element.attributes.style.replace( /(?:^|\s)text-align\s*:\s*(\w*);?/i , '' );
+								element.attributes.align = align;
+							}
+						}
+					}
+
+					if ( element.attributes.style == '' )
+						delete element.attributes.style;
+
+					return element;
+				}
+			}
+
+		} );
+}
+
+			//]]>
+			</script>
+				<input type="button" value="Send to Flash" onclick="sendToFlash();" />
+			</td>
+			<td valign="top" style="padding-left: 15px" id="ckFlashContainer">
+			</td>
+		</tr>
+	</table>
+
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
Index: /CKEditor/branches/features/adobeair/_samples/output_html.html
===================================================================
--- /CKEditor/branches/features/adobeair/_samples/output_html.html	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_samples/output_html.html	(revision 6006)
@@ -47,5 +47,5 @@
 						 * Style sheet for the contents
 						 */
-						contentsCss : 'body {color:#000; background-color#FFF;}',
+						contentsCss : 'body {color:#000; background-color#:FFF;}',
 
 						/*
Index: /CKEditor/branches/features/adobeair/_source/core/_bootstrap.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/_bootstrap.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/_bootstrap.js	(revision 6006)
@@ -67,7 +67,5 @@
 	});
 
-/*
-TODO: Enable the following and check if effective.
-
+// Needed for IE6 to not request image (HTTP 200 or 304) for every CSS background. (#6187)
 if ( CKEDITOR.env.ie )
 {
@@ -83,5 +81,12 @@
 	}
 }
-*/
+
+/**
+ * Indicates that CKEditor is running on a High Contrast environment.
+ * @name CKEDITOR.env.hc
+ * @example
+ * if ( CKEDITOR.env.hc )
+ *     alert( 'You're running on High Contrast mode. The editor interface will get adapted to provide you a better experience.' );
+ */
 
 /**
Index: /CKEditor/branches/features/adobeair/_source/core/ckeditor.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/ckeditor.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/ckeditor.js	(revision 6006)
@@ -107,7 +107,27 @@
 
 /**
+ * The editor which is currently active (have user focus).
+ * @name CKEDITOR.currentInstance
+ * @type CKEDITOR.editor
+ * @see CKEDITOR#currentInstance
+ * @example
+ * function showCurrentEditorName()
+ * {
+ *     if ( CKEDITOR.currentInstance )
+ *         alert( CKEDITOR.currentInstance.name );
+ *     else
+ *         alert( 'Please focus an editor first.' );
+ * }
+ */
+
+/**
  * Fired when the CKEDITOR.currentInstance object reference changes. This may
  * happen when setting the focus on different editor instances in the page.
  * @name CKEDITOR#currentInstance
  * @event
+ * var editor;  // Variable to hold a reference to the current editor.
+ * CKEDITOR.on( 'currentInstance' , function( e )
+ *     {
+ *         editor = CKEDITOR.currentInstance;
+ *     });
  */
Index: /CKEditor/branches/features/adobeair/_source/core/ckeditor_base.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/ckeditor_base.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/ckeditor_base.js	(revision 6006)
@@ -53,5 +53,5 @@
 			 * @type String
 			 * @example
-			 * alert( CKEDITOR.version );  // e.g. 'CKEditor 3.0 Beta'
+			 * alert( CKEDITOR.version );  // e.g. 'CKEditor 3.4.1'
 			 */
 			version : '%VERSION%',
@@ -59,5 +59,6 @@
 			/**
 			 * Contains the CKEditor revision number.
-			 * Revision number is incremented automatically after each modification of CKEditor source code.
+			 * The revision number is incremented automatically, following each
+			 * modification to the CKEditor source code.
 			 * @type String
 			 * @example
@@ -146,10 +147,13 @@
 			 * Gets the full URL for CKEditor resources. By default, URLs
 			 * returned by this function contains a querystring parameter ("t")
-			 * set to the {@link CKEDITOR.timestamp} value.
+			 * set to the {@link CKEDITOR.timestamp} value.<br />
+			 * <br />
 			 * It's possible to provide a custom implementation to this
 			 * function by setting a global variable named CKEDITOR_GETURL.
 			 * This global variable must be set "before" the editor script
-			 * loading. If the custom implementation returns nothing, the
+			 * 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.
 			 * @returns {String} The full URL.
 			 * @example
@@ -170,5 +174,5 @@
 
 				// Add the timestamp, except for directories.
-				if ( this.timestamp && resource.charAt( resource.length - 1 ) != '/' )
+				if ( this.timestamp && resource.charAt( resource.length - 1 ) != '/' && !(/[&?]t=/).test( resource ) )
 					resource += ( resource.indexOf( '?' ) >= 0 ? '&' : '?' ) + 't=' + this.timestamp;
 
Index: /CKEditor/branches/features/adobeair/_source/core/ckeditor_basic.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/ckeditor_basic.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/ckeditor_basic.js	(revision 6006)
@@ -30,5 +30,5 @@
 			if ( CKEDITOR.status != 'basic_ready' )
 			{
-				CKEDITOR.loadFullCore._load = true;
+				CKEDITOR.loadFullCore._load = 1;
 				return;
 			}
@@ -79,5 +79,5 @@
 		 * <b>CKEDITOR.replaceByClassEnabled</b> = false;
 		 */
-		CKEDITOR.replaceByClassEnabled = true;
+		CKEDITOR.replaceByClassEnabled = 1;
 
 		var createInstance = function( elementOrIdOrName, config, creationFunction, data )
@@ -176,7 +176,7 @@
 			for ( var i = 0 ; i < textareas.length ; i++ )
 			{
-				var config = null;
-				var textarea = textareas[i];
-				var name = textarea.name;
+				var config = null,
+					textarea = textareas[i],
+					name = textarea.name;
 
 				// The "name" and/or "id" attribute must exist.
Index: /CKEditor/branches/features/adobeair/_source/core/command.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/command.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/command.js	(revision 6006)
@@ -4,8 +4,42 @@
 */
 
+/**
+ * Creates a command class instance.
+ * @class Represents a command that can be executed on an editor instance.
+ * @param {CKEDITOR.editor} editor The editor instance this command will be
+ *		related to.
+ * @param {CKEDITOR.commandDefinition} commandDefinition The command
+ *		definition.
+ * @augments CKEDITOR.event
+ * @example
+ * var command = new CKEDITOR.command( editor,
+ *     {
+ *         exec : function( editor )
+ *         {
+ *             alert( editor.document.getBody().getHtml() );
+ *         }
+ *     });
+ */
 CKEDITOR.command = function( editor, commandDefinition )
 {
+	/**
+	 * Lists UI items that are associated to this command. This list can be
+	 * used to interact with the UI on command execution (by the execution code
+	 * itself, for example).
+	 * @type Array
+	 * @example
+	 * alert( 'Number of UI items associated to this command: ' + command.<b>uiItems</b>.length );
+	 */
 	this.uiItems = [];
 
+	/**
+	 * Executes the command.
+	 * @param {Object} [data] Any data to pass to the command. Depends on the
+	 *		command implementation and requirements.
+	 * @returns {Boolean} A boolean indicating that the command has been
+	 *      successfully executed.
+	 * @example
+	 * command.<b>exec()</b>;  // The command gets executed.
+	 */
 	this.exec = function( data )
 	{
@@ -21,7 +55,54 @@
 	CKEDITOR.tools.extend( this, commandDefinition,
 		// Defaults
+		/** @lends CKEDITOR.command.prototype */
 		{
+			/**
+			 * The editor modes within which the command can be executed. The
+			 * execution will have no action if the current mode is not listed
+			 * in this property.
+			 * @type Object
+			 * @default { wysiwyg : 1 }
+			 * @see CKEDITOR.editor.prototype.mode
+			 * @example
+			 * // Enable the command in both WYSIWYG and Source modes.
+			 * command.<b>modes</b> = { wysiwyg : 1, source : 1 };
+			 * @example
+			 * // Enable the command in Source mode only.
+			 * command.<b>modes</b> = { source : 1 };
+			 */
 			modes : { wysiwyg : 1 },
-			editorFocus : true,
+
+			/**
+			 * Indicates that the editor will get the focus before executing
+			 * the command.
+			 * @type Boolean
+			 * @default true
+			 * @example
+			 * // Do not force the editor to have focus when executing the command.
+			 * command.<b>editorFocus</b> = false;
+			 */
+			editorFocus : 1,
+
+			/**
+			 * Indicates the editor state. Possible values are:
+			 * <ul>
+			 * <li>{@link CKEDITOR.TRISTATE_DISABLED}: the command is
+			 *		disabled. It's execution will have no effect. Same as
+			 *		{@link disable}.</li>
+			 * <li>{@link CKEDITOR.TRISTATE_ON}: the command is enabled
+			 *		and currently active in the editor (for context sensitive commands,
+			 *		for example).</li>
+			 * <li>{@link CKEDITOR.TRISTATE_OFF}: the command is enabled
+			 *		and currently inactive in the editor (for context sensitive
+			 *		commands, for example).</li>
+			 * </ul>
+			 * Do not set this property directly, using the {@link #setState}
+			 * method instead.
+			 * @type Number
+			 * @default {@link CKEDITOR.TRISTATE_OFF}
+			 * @example
+			 * if ( command.<b>state</b> == CKEDITOR.TRISTATE_DISABLED )
+			 *     alert( 'This command is disabled' );
+			 */
 			state : CKEDITOR.TRISTATE_OFF
 		});
@@ -33,4 +114,12 @@
 CKEDITOR.command.prototype =
 {
+	/**
+	 * Enables the command for execution. The command state (see
+	 * {@link CKEDITOR.command.prototype.state}) available before disabling it
+	 * is restored.
+	 * @example
+	 * command.<b>enable()</b>;
+	 * command.exec();    // Execute the command.
+	 */
 	enable : function()
 	{
@@ -39,4 +128,12 @@
 	},
 
+	/**
+	 * Disables the command for execution. The command state (see
+	 * {@link CKEDITOR.command.prototype.state}) will be set to
+	 * {@link CKEDITOR.TRISTATE_DISABLED}.
+	 * @example
+	 * command.<b>disable()</b>;
+	 * command.exec();    // "false" - Nothing happens.
+	 */
 	disable : function()
 	{
@@ -44,4 +141,16 @@
 	},
 
+	/**
+	 * Sets the command state.
+	 * @param {Number} newState The new state. See {@link #state}.
+	 * @returns {Boolean} Returns "true" if the command state changed.
+	 * @example
+	 * command.<b>setState( CKEDITOR.TRISTATE_ON )</b>;
+	 * command.exec();    // Execute the command.
+	 * command.<b>setState( CKEDITOR.TRISTATE_DISABLED )</b>;
+	 * command.exec();    // "false" - Nothing happens.
+	 * command.<b>setState( CKEDITOR.TRISTATE_OFF )</b>;
+	 * command.exec();    // Execute the command.
+	 */
 	setState : function( newState )
 	{
@@ -62,4 +171,10 @@
 	},
 
+	/**
+	 * Toggles the on/off (active/inactive) state of the command. This is
+	 * mainly used internally by context sensitive commands.
+	 * @example
+	 * command.<b>toggleState()</b>;
+	 */
 	toggleState : function()
 	{
@@ -72,2 +187,22 @@
 
 CKEDITOR.event.implementOn( CKEDITOR.command.prototype, true );
+
+/**
+ * Indicates the preivous command state.
+ * @name CKEDITOR.command.prototype.previousState
+ * @type Number
+ * @see #state
+ * @example
+ * alert( command.<b>previousState</b> );
+ */
+
+/**
+ * Fired when the command state changes.
+ * @name CKEDITOR.command.prototype#state
+ * @event
+ * command.on( <b>'state'</b> , function( e )
+ *     {
+ *         // Alerts the new state.
+ *         alert( this.state );
+ *     });
+ */
Index: /CKEditor/branches/features/adobeair/_source/core/config.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/config.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/config.js	(revision 6006)
@@ -244,5 +244,62 @@
 	 * @example
 	 */
-	plugins : 'about,adobeair,basicstyles,blockquote,button,clipboard,colorbutton,colordialog,contextmenu,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',
+	plugins :
+		'about,' +
+		'adobeair,' +
+		'a11yhelp,' +
+		'basicstyles,' +
+		'bidi,' +
+		'blockquote,' +
+		'button,' +
+		'clipboard,' +
+		'colorbutton,' +
+		'colordialog,' +
+		'contextmenu,' +
+		'dialogadvtab,' +
+		'div,' +
+		'elementspath,' +
+		'enterkey,' +
+		'entities,' +
+		'filebrowser,' +
+		'find,' +
+		'flash,' +
+		'font,' +
+		'format,' +
+		'forms,' +
+		'horizontalrule,' +
+		'htmldataprocessor,' +
+		'image,' +
+		'indent,' +
+		'justify,' +
+		'keystrokes,' +
+		'link,' +
+		'list,' +
+		'liststyle,' +
+		'maximize,' +
+		'newpage,' +
+		'pagebreak,' +
+		'pastefromword,' +
+		'pastetext,' +
+		'popup,' +
+		'preview,' +
+		'print,' +
+		'removeformat,' +
+		'resize,' +
+		'save,' +
+		'scayt,' +
+		'smiley,' +
+		'showblocks,' +
+		'showborders,' +
+		'sourcearea,' +
+		'stylescombo,' +
+		'table,' +
+		'tabletools,' +
+		'specialchar,' +
+		'tab,' +
+		'templates,' +
+		'toolbar,' +
+		'undo,' +
+		'wysiwygarea,' +
+		'wsc',
 
 	/**
@@ -331,3 +388,19 @@
 };
 
+/**
+ * Indicates that some of the editor features, like alignement and text
+ * direction, should used the "computed value" of the feature to indicate it's
+ * on/off state, instead of using the "real value".
+ *
+ * If enabled, in a left to right written document, the "Left Justify"
+ * alignment button will show as active, even if the aligment style is not
+ * explicitly applied to the current paragraph in the editor.
+ * @name CKEDITOR.config.useComputedState
+ * @type Boolean
+ * @default true
+ * @since 3.4
+ * @example
+ * config.useComputedState = false;
+ */
+
 // PACKAGER_RENAME( CKEDITOR.config )
Index: /CKEditor/branches/features/adobeair/_source/core/dataprocessor.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/dataprocessor.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/dataprocessor.js	(revision 6006)
@@ -16,16 +16,15 @@
  * which handles HTML data. The editor may also handle other data formats by
  * using different data processors provided by specific plugins.
- * @name CKEDITOR.editor.dataProcessor
+ * @name CKEDITOR.editor.prototype.dataProcessor
  * @type CKEDITOR.dataProcessor
  */
 
 /**
- * Represents a data processor, which is responsible to translate and transform
- * the editor data on input and output.
- * This class is not really part of the API. It's here for documentation
- * purposes, and serves as the base ("interface") for data processors
+ * This class is here for documentation purposes only and is not really part of
+ * the API. It serves as the base ("interface") for data processors
  * implementation.
  * @name CKEDITOR.dataProcessor
- * @contructor
+ * @class Represents a data processor, which is responsible to translate and
+ *        transform the editor data on input and output.
  * @example
  */
Index: /CKEditor/branches/features/adobeair/_source/core/dom/domobject.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/dom/domobject.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/dom/domobject.js	(revision 6006)
@@ -85,8 +85,8 @@
 				var listener = nativeListeners[ eventName ] = getNativeListener( this, eventName );
 
-				if ( this.$.addEventListener )
+				if ( this.$.attachEvent )
+					this.$.attachEvent( 'on' + eventName, listener );
+				else if ( this.$.addEventListener )
 					this.$.addEventListener( eventName, listener, !!CKEDITOR.event.useCapture );
-				else if ( this.$.attachEvent )
-					this.$.attachEvent( 'on' + eventName, listener );
 			}
 
@@ -108,8 +108,8 @@
 				if ( listener )
 				{
-					if ( this.$.removeEventListener )
+					if ( this.$.detachEvent )
+						this.$.detachEvent( 'on' + eventName, listener );
+					else if ( this.$.removeEventListener )
 						this.$.removeEventListener( eventName, listener, false );
-					else if ( this.$.detachEvent )
-						this.$.detachEvent( 'on' + eventName, listener );
 
 					delete nativeListeners[ eventName ];
@@ -129,8 +129,8 @@
 			{
 				var listener = nativeListeners[ eventName ];
-				if ( this.$.removeEventListener )
+				if ( this.$.detachEvent )
+					this.$.detachEvent( 'on' + eventName, listener );
+				else if ( this.$.removeEventListener )
 					this.$.removeEventListener( eventName, listener, false );
-				else if ( this.$.detachEvent )
-					this.$.detachEvent( 'on' + eventName, listener );
 
 				delete nativeListeners[ eventName ];
Index: /CKEditor/branches/features/adobeair/_source/core/dom/element.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/dom/element.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/dom/element.js	(revision 6006)
@@ -89,5 +89,5 @@
 {
 	for ( var i in database )
-		CKEDITOR.dom.element.clearMarkers( database, database[i], true );
+		CKEDITOR.dom.element.clearMarkers( database, database[i], 1 );
 };
 
@@ -790,5 +790,5 @@
 				var child = children.getItem( i );
 
-				if ( child.type == CKEDITOR.NODE_ELEMENT && child.getAttribute( '_fck_bookmark' ) )
+				if ( child.type == CKEDITOR.NODE_ELEMENT && child.getAttribute( '_cke_bookmark' ) )
 					continue;
 
@@ -851,6 +851,14 @@
 				function()
 				{
-					var attributes = this.$.attributes;
-					return ( attributes.length > 1 || ( attributes.length == 1 && attributes[0].nodeName != '_cke_expando' ) );
+					var attrs = this.$.attributes,
+						attrsNum = attrs.length;
+
+					// The _moz_dirty attribute might get into the element after pasting (#5455)
+					var execludeAttrs = { _cke_expando : 1, _moz_dirty : 1 };
+
+					return attrsNum > 0 &&
+						( attrsNum > 2 ||
+							!execludeAttrs[ attrs[0].nodeName ] ||
+							( attrsNum == 2 && !execludeAttrs[ attrs[1].nodeName ] ) );
 				},
 
@@ -910,5 +918,5 @@
 					var pendingNodes = [];
 
-					while ( sibling.getAttribute( '_fck_bookmark' )
+					while ( sibling.getAttribute( '_cke_bookmark' )
 						|| sibling.isEmptyInlineRemoveable() )
 					{
@@ -1163,4 +1171,5 @@
 				{
 					this.$.style.MozUserSelect = 'none';
+					this.on( 'dragstart', function( evt ) { evt.data.preventDefault(); } );
 				}
 			: CKEDITOR.env.webkit ?
@@ -1168,4 +1177,5 @@
 				{
 					this.$.style.KhtmlUserSelect = 'none';
+					this.on( 'dragstart', function( evt ) { evt.data.preventDefault(); } );
 				}
 			:
@@ -1513,4 +1523,42 @@
 						event.data.preventDefault();
 				} );
+		},
+
+		/**
+		 *  Update the element's size with box model awareness.
+		 * @name CKEDITOR.dom.element.setSize
+		 * @param {String} type [width|height]
+		 * @param {Number} size The length unit in px.
+		 * @param isBorderBox Apply the {@param width} and {@param height} based on border box model.
+		 */
+		setSize : ( function()
+		{
+			var sides = {
+				width : [ "border-left-width", "border-right-width","padding-left", "padding-right" ],
+				height : [ "border-top-width", "border-bottom-width", "padding-top",  "padding-bottom" ]
+			};
+
+			return function( type, size, isBorderBox )
+				{
+					if ( typeof size == 'number' )
+					{
+						if ( isBorderBox && !( CKEDITOR.env.ie && CKEDITOR.env.quirks ) )
+						{
+							var	adjustment = 0;
+							for ( var i = 0, len = sides[ type ].length; i < len; i++ )
+								adjustment += parseInt( this.getComputedStyle( sides [ type ][ i ] ) || 0, 10 ) || 0;
+							size -= adjustment;
+						}
+						this.setStyle( type, size + 'px' );
+					}
+				};
+		})(),
+
+		/**
+		 * Gets element's direction. Supports both CSS 'direction' prop and 'dir' attr.
+		 */
+		getDirection : function( useComputed )
+		{
+			return useComputed ? this.getComputedStyle( 'direction' ) : this.getStyle( 'direction' ) || this.getAttribute( 'dir' );
 		}
 	});
Index: /CKEditor/branches/features/adobeair/_source/core/dom/node.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/dom/node.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/dom/node.js	(revision 6006)
@@ -652,4 +652,25 @@
 				}
 			}
+		},
+
+		isReadOnly : function()
+		{
+			var current = this;
+			while( current )
+			{
+				if ( current.type == CKEDITOR.NODE_ELEMENT )
+				{
+					if ( current.is( 'body' ) || current.getCustomData( '_cke_notReadOnly' ) )
+						break;
+
+					if ( current.getAttribute( 'contentEditable' ) == 'false' )
+						return current;
+					else if ( current.getAttribute( 'contentEditable' ) == 'true' )
+						break;
+				}
+				current = current.getParent();
+			}
+
+			return false;
 		}
 	}
Index: /CKEditor/branches/features/adobeair/_source/core/dom/range.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/dom/range.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/dom/range.js	(revision 6006)
@@ -306,5 +306,5 @@
 			    && node.getName() in CKEDITOR.dtd.$removeEmpty
 			    || !CKEDITOR.tools.trim( node.getText() )
-			    || node.getParent().hasAttribute( '_fck_bookmark' );
+			    || node.getParent().hasAttribute( '_cke_bookmark' );
 	}
 
@@ -398,7 +398,8 @@
 			var baseId;
 			var clone;
+			var collapsed = this.collapsed;
 
 			startNode = this.document.createElement( 'span' );
-			startNode.setAttribute( '_fck_bookmark', 1 );
+			startNode.setAttribute( '_cke_bookmark', 1 );
 			startNode.setStyle( 'display', 'none' );
 
@@ -414,5 +415,5 @@
 
 			// If collapsed, the endNode will not be created.
-			if ( !this.collapsed )
+			if ( !collapsed )
 			{
 				endNode = startNode.clone();
@@ -443,5 +444,6 @@
 				startNode : serializable ? baseId + 'S' : startNode,
 				endNode : serializable ? baseId + 'E' : endNode,
-				serializable : serializable
+				serializable : serializable,
+				collapsed : collapsed
 			};
 		},
@@ -466,4 +468,6 @@
 				endOffset	= this.endOffset;
 
+			var collapsed = this.collapsed;
+
 			var child, previous;
 
@@ -502,5 +506,5 @@
 
 				// Process the end only if not normalized.
-				if ( !this.isCollapsed )
+				if ( !collapsed )
 				{
 					// Find out if the start is pointing to a text node that
@@ -533,8 +537,9 @@
 			return {
 				start		: startContainer.getAddress( normalized ),
-				end			: this.isCollapsed ? null : endContainer.getAddress( normalized ),
+				end			: collapsed ? null : endContainer.getAddress( normalized ),
 				startOffset	: startOffset,
 				endOffset	: endOffset,
 				normalized	: normalized,
+				collapsed	: collapsed,
 				is2			: true		// It's a createBookmark2 bookmark.
 			};
@@ -698,5 +703,5 @@
 
 		/**
-		 * Move the range out of bookmark nodes if they're been the container.
+		 * Move the range out of bookmark nodes if they'd been the container.
 		 */
 		optimizeBookmark: function()
@@ -706,8 +711,8 @@
 
 			if ( startNode.is && startNode.is( 'span' )
-				&& startNode.hasAttribute( '_fck_bookmark' ) )
+				&& startNode.hasAttribute( '_cke_bookmark' ) )
 				this.setStartAt( startNode, CKEDITOR.POSITION_BEFORE_START );
 			if ( endNode && endNode.is && endNode.is( 'span' )
-				&& endNode.hasAttribute( '_fck_bookmark' ) )
+				&& endNode.hasAttribute( '_cke_bookmark' ) )
 				this.setEndAt( endNode,  CKEDITOR.POSITION_AFTER_END );
 		},
@@ -915,5 +920,5 @@
 								// We need to check for the bookmark attribute because IE insists on
 								// rendering the display:none nodes we use for bookmarks. (#3363)
-								if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_fck_bookmark' ) )
+								if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_cke_bookmark' ) )
 								{
 									// We'll accept it only if we need
@@ -1074,5 +1079,5 @@
 								// We need to check for the bookmark attribute because IE insists on
 								// rendering the display:none nodes we use for bookmarks. (#3363)
-								if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_fck_bookmark' ) )
+								if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_cke_bookmark' ) )
 								{
 									// We'll accept it only if we need
@@ -1167,11 +1172,11 @@
 					var walker = new CKEDITOR.dom.walker( walkerRange ),
 					    blockBoundary,  // The node on which the enlarging should stop.
-						tailBr, //
-					    defaultGuard = CKEDITOR.dom.walker.blockBoundary(
+						tailBr, // In case BR as block boundary.
+					    notBlockBoundary = CKEDITOR.dom.walker.blockBoundary(
 								( unit == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ) ? { br : 1 } : null ),
 						// Record the encountered 'blockBoundary' for later use.
 						boundaryGuard = function( node )
 						{
-							var retval = defaultGuard( node );
+							var retval = notBlockBoundary( node );
 							if ( !retval )
 								blockBoundary = node;
@@ -1194,6 +1199,7 @@
 					blockBoundary = blockBoundary || body;
 
-					// Start the range at different position by comparing
-					// the document position of it with 'enlargeable' node.
+					// Start the range either after the end of found block (<p>...</p>[text)
+					// or at the start of block (<p>[text...), by comparing the document position
+					// with 'enlargeable' node.
 					this.setStartAt(
 							blockBoundary,
@@ -1221,6 +1227,6 @@
 					blockBoundary = blockBoundary || body;
 
-					// Start the range at different position by comparing
-					// the document position of it with 'enlargeable' node.
+					// Close the range either before the found block start (text]<p>...</p>) or at the block end (...text]</p>)
+					// by comparing the document position with 'enlargeable' node.
 					this.setEndAt(
 							blockBoundary,
@@ -1238,6 +1244,13 @@
 		/**
 		 *  Descrease the range to make sure that boundaries
-		 *  always anchor beside text nodes or innermost element.
+		*  always anchor beside text nodes or innermost element.
 		 * @param {Number} mode  ( CKEDITOR.SHRINK_ELEMENT | CKEDITOR.SHRINK_TEXT ) The shrinking mode.
+		 * <dl>
+		 * 	 <dt>CKEDITOR.SHRINK_ELEMENT</dt>
+		 * 	 <dd>Shrink the range boundaries to the edge of the innermost element.</dd>
+		 * 	 <dt>CKEDITOR.SHRINK_TEXT</dt>
+		 * 	 <dd>Shrink the range boudaries to anchor by the side of enclosed text  node, range remains if there's no text nodes on boundaries at all.</dd>
+		  * </dl>
+		 * @param {Boolean} selectContents Whether result range anchors at the inner OR outer boundary of the node.
 		 */
 		shrink : function( mode, selectContents )
@@ -1417,5 +1430,5 @@
 			if( endNode.type == CKEDITOR.NODE_ELEMENT
 				&& CKEDITOR.dtd.$empty[ endNode.getName() ] )
-				endNode = endNode.getParent(), endOffset = endNode.getIndex() + 1;
+				endOffset = endNode.getIndex() + 1, endNode = endNode.getParent();
 
 			this.endContainer	= endNode;
@@ -1625,24 +1638,34 @@
 
 		/**
-		 * Check whether current range is on the inner edge of the specified element.
-		 * @param {Number} checkType ( CKEDITOR.START | CKEDITOR.END ) The checking side.
+		 * Check whether a range boundary is at the inner boundary of a given
+		 * element.
 		 * @param {CKEDITOR.dom.element} element The target element to check.
+		 * @param {Number} checkType The boundary to check for both the range
+		 *		and the element. It can be CKEDITOR.START or CKEDITOR.END.
+		 * @returns {Boolean} "true" if the range boundary is at the inner
+		 *		boundary of the element.
 		 */
 		checkBoundaryOfElement : function( element, checkType )
 		{
+			var checkStart = ( checkType == CKEDITOR.START );
+
+			// Create a copy of this range, so we can manipulate it for our checks.
 			var walkerRange = this.clone();
+
+			// Collapse the range at the proper size.
+			walkerRange.collapse( checkStart );
+
 			// Expand the range to element boundary.
-			walkerRange[ checkType == CKEDITOR.START ?
-			 'setStartAt' : 'setEndAt' ]
-			 ( element, checkType == CKEDITOR.START ?
-			   CKEDITOR.POSITION_AFTER_START
-			   : CKEDITOR.POSITION_BEFORE_END );
-
-			var walker = new CKEDITOR.dom.walker( walkerRange ),
-			 retval = false;
+			walkerRange[ checkStart ? 'setStartAt' : 'setEndAt' ]
+			 ( element, checkStart ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_END );
+
+			// Create the walker, which will check if we have anything useful
+			// in the range.
+			var walker = new CKEDITOR.dom.walker( walkerRange );
 			walker.evaluator = elementBoundaryEval;
-			return walker[ checkType == CKEDITOR.START ?
-				'checkBackward' : 'checkForward' ]();
-		},
+
+			return walker[ checkStart ? 'checkBackward' : 'checkForward' ]();
+		},
+
 		// Calls to this function may produce changes to the DOM. The range may
 		// be updated to reflect such changes.
@@ -1792,5 +1815,5 @@
 			var walkerRange = this.clone();
 
-			// Optimize and analyze the range to avoid DOM destructive nature of walker. (#
+			// Optimize and analyze the range to avoid DOM destructive nature of walker. (#5780)
 			walkerRange.optimize();
 			if ( walkerRange.startContainer.type != CKEDITOR.NODE_ELEMENT
@@ -1842,12 +1865,12 @@
 CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS = 3;
 
-/**
- * Check boundary types.
- * @see CKEDITOR.dom.range::checkBoundaryOfElement
- */
+// Check boundary types.
+// @see CKEDITOR.dom.range.prototype.checkBoundaryOfElement
 CKEDITOR.START = 1;
 CKEDITOR.END = 2;
 CKEDITOR.STARTEND = 3;
 
+// Shrink range types.
+// @see CKEDITOR.dom.range.prototype.shrink
 CKEDITOR.SHRINK_ELEMENT = 1;
 CKEDITOR.SHRINK_TEXT = 2;
Index: /CKEditor/branches/features/adobeair/_source/core/dom/rangelist.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/dom/rangelist.js	(revision 6006)
+++ /CKEditor/branches/features/adobeair/_source/core/dom/rangelist.js	(revision 6006)
@@ -0,0 +1,214 @@
+/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function()
+{
+	/**
+	 * Represents a list os CKEDITOR.dom.range objects, which can be easily
+	 * iterated sequentially.
+	 * @constructor
+	 * @param {CKEDITOR.dom.range|Array} [ranges] The ranges contained on this list.
+	 *		Note that, if an array of ranges is specified, the range sequence
+	 *		should match its DOM order. This class will not help to sort them.
+	 */
+	CKEDITOR.dom.rangeList = function( ranges )
+	{
+		if ( ranges instanceof CKEDITOR.dom.rangeList )
+			return ranges;
+
+		if ( !ranges )
+			ranges = [];
+		else if ( ranges instanceof CKEDITOR.dom.range )
+			ranges = [ ranges ];
+
+		return CKEDITOR.tools.extend( ranges, mixins );
+	};
+
+	var mixins =
+	/** @lends CKEDITOR.dom.rangeList.prototype */
+	{
+			/**
+			 * Creates an instance of the rangeList iterator, it should be used
+			 * only when the ranges processing could be DOM intrusive, which
+			 * means it may pollute and break other ranges in this list.
+			 * Otherwise, it's enough to just iterate over this array in a for loop.
+			 * @returns {CKEDITOR.dom.rangeListIterator}
+			 */
+			createIterator : function()
+			{
+				var rangeList = this,
+					bookmark = CKEDITOR.dom.walker.bookmark(),
+					emptySpaces = CKEDITOR.dom.walker.whitespaces(),
+					guard = function( node ) { return ! ( node.is && node.is( 'tr' ) ); },
+						bookmarks = [],
+					current;
+
+				/**
+				 * @lends CKEDITOR.dom.rangeListIterator.prototype
+				 */
+				return {
+
+					/**
+					 * Retrieves the next range in the list.
+					 * @param {Boolean} mergeConsequent Whether join two adjacent ranges into single, e.g. consequent table cells.
+					 */
+					getNextRange : function( mergeConsequent )
+					{
+						current = current == undefined ? 0 : current + 1;
+
+						var range = rangeList[ current ];
+
+						// Multiple ranges might be mangled by each other.
+						if ( range && rangeList.length > 1 )
+						{
+							// Bookmarking all other ranges on the first iteration,
+							// the range correctness after it doesn't matter since we'll
+							// restore them before the next iteration.
+							if ( !current )
+							{
+								// Make sure bookmark correctness by reverse processing.
+								for ( var i = rangeList.length - 1; i >= 0; i-- )
+									bookmarks.unshift( rangeList[ i ].createBookmark( true ) );
+							}
+
+							if ( mergeConsequent )
+							{
+								// Figure out how many ranges should be merged.
+								var mergeCount = 0;
+								while ( rangeList[ current + mergeCount + 1 ] )
+								{
+									var doc = range.document,
+										found = 0,
+										left =  doc.getById( bookmarks[ mergeCount ].endNode ),
+										right = doc.getById( bookmarks[ mergeCount + 1 ].startNode ),
+										next;
+
+									// Check subsequent range.
+									while ( 1 )
+									{
+										next = left.getNextSourceNode( false );
+										if ( !right.equals( next ) )
+										{
+											// This could be yet another bookmark or
+											// walking across block boundaries.
+											if ( bookmark( next ) || ( next.type == CKEDITOR.NODE_ELEMENT && next.isBlockBoundary() ) )
+											{
+												left = next;
+												continue;
+											}
+										}
+										else
+											found = 1;
+
+										break;
+									}
+
+									if ( !found )
+										break;
+
+									mergeCount++;
+								}
+							}
+
+							range.moveToBookmark( bookmarks.shift() );
+							
+							// Merge ranges finally after moving to bookmarks.
+							while( mergeCount-- )
+							{
+								var next = rangeList[ ++current ];
+								next.moveToBookmark( bookmarks.shift() );
+								range.setEnd( next.endContainer, next.endOffset );
+							}
+						}
+
+						return range;
+					}
+				};
+			},
+
+			createBookmarks : function( serializable )
+			{
+				var retval = [], bookmark;
+				for ( var i = 0; i < this.length ; i++ )
+				{
+					retval.push( bookmark = this[ i ].createBookmark( serializable, true) );
+
+					// Updating the container & offset values for ranges
+					// that have been touched.
+					for ( var j = i + 1; j < this.length; j++ )
+					{
+						this[ j ] = updateDirtyRange( bookmark, this[ j ] );
+						this[ j ] = updateDirtyRange( bookmark, this[ j ], true );
+					}
+				}
+				return retval;
+			},
+
+			createBookmarks2 : function( normalized )
+			{
+				var bookmarks = [];
+
+				for ( var i = 0 ; i < this.length ; i++ )
+					bookmarks.push( this[ i ].createBookmark2( normalized ) );
+
+				return bookmarks;
+			},
+
+			/**
+			 * Move each range in the list to the position specified by a list of bookmarks.
+			 * @param {Array} bookmarks The list of bookmarks, each one matching a range in the list.
+			 */
+			moveToBookmarks :  function( bookmarks )
+			{
+				for ( var i = 0 ; i < this.length ; i++ )
+					this[ i ].moveToBookmark( bookmarks[ i ] );
+			}
+	};
+
+	// Update the specified range which has been mangled by previous insertion of
+	// range bookmark nodes.(#3256)
+	function updateDirtyRange( bookmark, dirtyRange, checkEnd )
+	{
+		var serializable = bookmark.serializable,
+			container = dirtyRange[ checkEnd ? 'endContainer' : 'startContainer' ],
+			offset = checkEnd ? 'endOffset' : 'startOffset';
+
+		var bookmarkStart = serializable ?
+				dirtyRange.document.getById( bookmark.startNode )
+				: bookmark.startNode;
+
+		var bookmarkEnd = serializable ?
+				dirtyRange.document.getById( bookmark.endNode )
+				: bookmark.endNode;
+
+		if ( container.equals( bookmarkStart.getPrevious() ) )
+		{
+			dirtyRange.startOffset = dirtyRange.startOffset
+					- container.getLength()
+					- bookmarkEnd.getPrevious().getLength();
+			container = bookmarkEnd.getNext();
+		}
+		else if ( container.equals( bookmarkEnd.getPrevious() ) )
+		{
+			dirtyRange.startOffset = dirtyRange.startOffset - container.getLength();
+			container = bookmarkEnd.getNext();
+		}
+
+		container.equals( bookmarkStart.getParent() ) && dirtyRange[ offset ]++;
+		container.equals( bookmarkEnd.getParent() ) && dirtyRange[ offset ]++;
+
+		// Update and return this range.
+		dirtyRange[ checkEnd ? 'endContainer' : 'startContainer' ] = container;
+		return dirtyRange;
+	}
+})();
+
+/**
+ * (Virtual Class) Do not call this constructor. This class is not really part
+ *	of the API. It just describes the return type of {@link CKEDITOR.dom.rangeList#createIterator}.
+ * @name CKEDITOR.dom.rangeListIterator
+ * @constructor
+ * @example
+ */
Index: /CKEditor/branches/features/adobeair/_source/core/dom/walker.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/dom/walker.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/dom/walker.js	(revision 6006)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -262,5 +262,5 @@
 			previous : function()
 			{
-				return iterate.call( this, true );
+				return iterate.call( this, 1 );
 			},
 
@@ -272,5 +272,5 @@
 			checkForward : function()
 			{
-				return iterate.call( this, false, true ) !== false;
+				return iterate.call( this, 0, 1 ) !== false;
 			},
 
@@ -282,5 +282,5 @@
 			checkBackward : function()
 			{
-				return iterate.call( this, true, true ) !== false;
+				return iterate.call( this, 1, 1 ) !== false;
 			},
 
@@ -304,5 +304,5 @@
 			lastBackward : function()
 			{
-				return iterateToLast.call( this, true );
+				return iterateToLast.call( this, 1 );
 			},
 
@@ -360,10 +360,4 @@
 			return this.blockBoundary( { br : 1 } );
 	};
-	/**
-	 * Whether the node is a bookmark node's inner text node.
-	 */
-	CKEDITOR.dom.walker.bookmarkContents = function( node )
-	{
-	},
 
 	/**
@@ -381,5 +375,5 @@
 			return ( node && node.getName
 					&& node.getName() == 'span'
-					&& node.hasAttribute('_fck_bookmark') );
+					&& node.hasAttribute( '_cke_bookmark' ) );
 		}
 
@@ -392,5 +386,5 @@
 			// Is bookmark node?
 			isBookmark = contentOnly ? isBookmark : isBookmark || isBookmarkNode( node );
-			return isReject ^ isBookmark;
+			return !! ( isReject ^ isBookmark );
 		};
 	};
@@ -406,5 +400,5 @@
 			var isWhitespace = node && ( node.type == CKEDITOR.NODE_TEXT )
 							&& !CKEDITOR.tools.trim( node.getText() );
-			return isReject ^ isWhitespace;
+			return !! ( isReject ^ isWhitespace );
 		};
 	};
@@ -425,11 +419,11 @@
 			// all sorts of empty paragraph, e.g. <br />.
 			var isInvisible = whitespace( node ) || node.is && !node.$.offsetHeight;
-			return isReject ^ isInvisible;
+			return !! ( isReject ^ isInvisible );
 		};
 	};
 
 	var tailNbspRegex = /^[\t\r\n ]*(?:&nbsp;|\xa0)$/,
-		isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( true ),
-		isNotBookmark = CKEDITOR.dom.walker.bookmark( false, true ),
+		isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( 1 ),
+		isNotBookmark = CKEDITOR.dom.walker.bookmark( 0, 1 ),
 		fillerEvaluator = function( element )
 		{
@@ -438,5 +432,5 @@
 
 	// Check if there's a filler node at the end of an element, and return it.
-	CKEDITOR.dom.element.prototype.getBogus = function ()
+	CKEDITOR.dom.element.prototype.getBogus = function()
 	{
 		var tail = this.getLast( fillerEvaluator );
Index: /CKEditor/branches/features/adobeair/_source/core/editor.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/editor.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/editor.js	(revision 6006)
@@ -384,4 +384,11 @@
 
 			/**
+			 * A unique random string assigned to each editor instance in the page.
+			 * @name CKEDITOR.editor.prototype.id
+			 * @type String
+			 */
+			this.id = CKEDITOR.tools.getNextId();
+
+			/**
 			 * The configurations for this editor instance. It inherits all
 			 * settings defined in (@link CKEDITOR.config}, combined with settings
Index: /CKEditor/branches/features/adobeair/_source/core/env.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/env.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/env.js	(revision 6006)
@@ -76,9 +76,11 @@
 			isCustomDomain : function()
 			{
+				if ( !this.ie )
+					return false;
+
 				var domain = document.domain,
 					hostname = window.location.hostname;
 
-				return this.ie &&
-					domain != hostname &&
+				return domain != hostname &&
 					domain != ( '[' + hostname + ']' );	// IPv6 IP support (#5434)
 			}
@@ -210,5 +212,5 @@
 			env.cssClass += ' cke_browser_ie' + (
 				env.version < 7 ? '6' :
-				env.version >= 8 ? '8' :
+				env.version >= 8 ? document.documentMode:
 				'7' );
 
Index: /CKEditor/branches/features/adobeair/_source/core/htmlparser.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/htmlparser.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/htmlparser.js	(revision 6006)
@@ -173,4 +173,10 @@
 				{
 					tagName = tagName.toLowerCase();
+
+					// There are some tag names that can break things, so let's
+					// simply ignore them when parsing. (#5224)
+					if ( /="/.test( tagName ) )
+						continue;
+
 					var attribs = {},
 						attribMatch,
Index: /CKEditor/branches/features/adobeair/_source/core/htmlparser/fragment.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/htmlparser/fragment.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/htmlparser/fragment.js	(revision 6006)
@@ -109,7 +109,7 @@
 		}
 
-		function sendPendingBRs()
-		{
-			while ( pendingBRs.length )
+		function sendPendingBRs( brsToIgnore )
+		{
+			while ( pendingBRs.length - ( brsToIgnore || 0 ) > 0 )
 				currentNode.add( pendingBRs.shift() );
 		}
@@ -238,4 +238,10 @@
 					addElement( currentNode, currentNode.parent );
 				}
+				else if ( tagName in CKEDITOR.dtd.$listItem )
+				{
+					parser.onTagOpen( 'ul', {} );
+					addPoint = currentNode;
+					reApply = true;
+				}
 				else
 				{
@@ -387,4 +393,5 @@
 		parser.onComment = function( comment )
 		{
+			checkPending();
 			currentNode.add( new CKEDITOR.htmlParser.comment( comment ) );
 		};
@@ -393,5 +400,6 @@
 		parser.parse( fragmentHtml );
 
-		sendPendingBRs();
+		// Send all pending BRs except one, which we consider a unwanted bogus. (#5293)
+		sendPendingBRs( !CKEDITOR.env.ie && 1 );
 
 		// Close all pending nodes.
Index: /CKEditor/branches/features/adobeair/_source/core/imagecacher.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/imagecacher.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/imagecacher.js	(revision 6006)
@@ -33,6 +33,8 @@
 		 * Loads one or more images.
 		 * @param {Array} images The URLs for the images to be loaded.
-		 * @param {Function} callback The function to be called once all images
-		 *		are loaded.
+		 * @param {Function} callback The optional function to be called once all images
+		 *		are loaded. You can bind any function to the returned event object.
+		 * @return {CKEDITOR.event} Event object which fires 'preloaded' event when all images finished.
+		 *    Additionally it set "finished" property flag after 'preloaded' event.
 		 */
 		load : function( images, callback )
@@ -40,8 +42,17 @@
 			var pendingCount = images.length;
 
+			var event = new CKEDITOR.event;
+			event.on( 'preloaded', function()
+			{
+				event.finished = true;
+			});
+			
+			if ( callback )
+				event.on( 'preloaded', callback );
+
 			var checkPending = function()
 			{
 				if ( --pendingCount === 0 )
-					callback();
+					event.fire( 'preloaded' );
 			};
 
@@ -55,4 +66,6 @@
 					loadImage( image, checkPending );
 			}
+
+			return event;
 		}
 	};
Index: /CKEditor/branches/features/adobeair/_source/core/loader.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/loader.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/loader.js	(revision 6006)
@@ -24,5 +24,5 @@
 		var scripts =
 		{
-			'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/range' ],
+			'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' ],
@@ -42,4 +42,5 @@
 			'core/dom/domobject'	: [ 'core/dom/event' ],
 			'core/dom/range'		: [ 'core/dom/document', 'core/dom/documentfragment', 'core/dom/element', 'core/dom/walker' ],
+			'core/dom/rangelist'    : [ 'core/dom/range' ],
 			'core/dom/text'			: [ 'core/dom/node', 'core/dom/domobject' ],
 			'core/dom/walker'		: [ 'core/dom/node' ],
@@ -59,5 +60,5 @@
 			'core/htmlparser/filter'	: [ 'core/htmlparser' ],
 			'core/htmlparser/basicwriter': [ 'core/htmlparser' ],
-			'core/imagecacher'		: [ 'core/dom/element' ],
+			'core/imagecacher'		: [ 'core/dom/element', 'core/event' ],
 			'core/lang'				: [],
 			'core/plugins'			: [ 'core/resourcemanager' ],
@@ -84,5 +85,5 @@
 			for ( var i = 0 ; i < scripts.length ; i++ )
 			{
-				var match = scripts[i].src.match( /(^|.*[\\\/])core\/loader.js(?:\?.*)?$/i );
+				var match = scripts[i].src.match( /(^|.*?[\\\/])(?:_source\/)?core\/loader.js(?:\?.*)?$/i );
 
 				if ( match )
Index: /CKEditor/branches/features/adobeair/_source/core/scriptloader.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/scriptloader.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/scriptloader.js	(revision 6006)
@@ -16,6 +16,6 @@
 CKEDITOR.scriptLoader = (function()
 {
-	var uniqueScripts = {};
-	var waitingList = {};
+	var uniqueScripts = {},
+		waitingList = {};
 
 	return /** @lends CKEDITOR.scriptLoader */ {
@@ -36,4 +36,6 @@
 		 * @param {Boolean} [noCheck] Indicates that the script must be loaded
 		 *		anyway, not checking if it has already loaded.
+		 * @param {Boolean} [showBusy] Changes the cursor of the document while
++		 *		the script is loaded.
 		 * @example
 		 * CKEDITOR.scriptLoader.load( '/myscript.js' );
Index: /CKEditor/branches/features/adobeair/_source/core/skins.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/skins.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/skins.js	(revision 6006)
@@ -17,7 +17,7 @@
 {
 	// Holds the list of loaded skins.
-	var loaded = {};
-	var preloaded = {};
-	var paths = {};
+	var loaded = {},
+		preloaded = {},
+		paths = {};
 
 	var loadPart = function( editor, skinName, part, callback )
@@ -56,20 +56,28 @@
 
 		// Check if we need to preload images from it.
-		if ( !preloaded[ skinName ] )
-		{
-			var preload = skinDefinition.preload;
-			if ( preload && preload.length > 0 )
-			{
+		var preload = skinDefinition.preload;
+		if ( preload && preload.length > 0 )
+		{
+			if ( !preloaded[ skinName ] )
+			{
+				// Prepare image URLs
 				appendSkinPath( preload );
-				CKEDITOR.imageCacher.load( preload, function()
-					{
-						preloaded[ skinName ] = 1;
+
+				// Get preloader event dispatcher object.
+				preloaded[ skinName ] = CKEDITOR.imageCacher.load( preload );
+			}
+
+			if ( !preloaded[ skinName ].finished )
+			{
+				// Bind listener for this editor instance.
+				preloaded[ skinName ].on( 'preloaded', function()
+					{
 						loadPart( editor, skinName, part, callback );
-					} );
+					}
+				);
+
+				// Execution will be continued from event listener.
 				return;
 			}
-
-			// Mark it as preloaded.
-			preloaded[ skinName ] = 1;
 		}
 
@@ -94,6 +102,6 @@
 			// Check whether the "css" and "js" properties have been defined
 			// for that part.
-			var cssIsLoaded = !part.css || !part.css.length;
-			var jsIsLoaded = !part.js || !part.js.length;
+			var cssIsLoaded = !part.css || !part.css.length,
+				jsIsLoaded = !part.js || !part.js.length;
 
 			// This is the function that will trigger the callback calls on
Index: /CKEditor/branches/features/adobeair/_source/core/tools.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/core/tools.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/core/tools.js	(revision 6006)
@@ -221,4 +221,8 @@
 		},
 
+		/**
+		 * Whether the object contains no properties of it's own.
+ 		 * @param object
+		 */
 		isEmpty : function ( object )
 		{
@@ -230,4 +234,5 @@
 			return true;
 		},
+
 		/**
 		 * Transforms a CSS property name to its relative DOM style name.
@@ -338,18 +343,5 @@
 		htmlEncodeAttr : function( text )
 		{
-			return text.replace( /"/g, '&quot;' ).replace( /</g, '&lt;' ).replace( />/, '&gt;' );
-		},
-
-		/**
-		 * Replace characters can't be represented through CSS Selectors string
-		 * by CSS Escape Notation where the character escape sequence consists
-		 * of a backslash character (\) followed by the orginal characters.
-		 * Ref: http://www.w3.org/TR/css3-selectors/#grammar
-		 * @param cssSelectText
-		 * @return the escaped selector text.
-		 */
-		escapeCssSelector : function( cssSelectText )
-		{
-			return cssSelectText.replace( /[\s#:.,$*^\[\]()~=+>]/g, '\\$&' );
+			return text.replace( /"/g, '&quot;' ).replace( /</g, '&lt;' ).replace( />/g, '&gt;' );
 		},
 
@@ -371,4 +363,18 @@
 			};
 		})(),
+
+		/**
+		 * Gets a unique ID for CKEditor's interface elements. It returns a
+		 * string with the "cke_" prefix and a progressive number.
+		 * @function
+		 * @returns {String} A unique ID.
+		 * @example
+		 * alert( CKEDITOR.tools.<b>getNextId()</b> );  // "cke_1" (e.g.)
+		 * alert( CKEDITOR.tools.<b>getNextId()</b> );  // "cke_2"
+		 */
+		getNextId : function()
+		{
+			return 'cke_' + this.getNextNumber();
+		},
 
 		/**
@@ -669,4 +675,8 @@
 		},
 
+		/**
+		 * Append the 'px' length unit to the size if it's missing.
+		 * @param length
+		 */
 		cssLength : (function()
 		{
@@ -678,4 +688,9 @@
 		})(),
 
+		/**
+		 * String specified by {@param str} repeats {@param times} times.
+		 * @param str
+		 * @param times
+		 */
 		repeat : function( str, times )
 		{
@@ -683,4 +698,8 @@
 		},
 
+		/**
+		 * Return the first successfully executed function's return value that
+		 * doesn't throw any exception.
+		 */
 		tryThese : function()
 		{
Index: /CKEditor/branches/features/adobeair/_source/lang/_translationstatus.txt
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/_translationstatus.txt	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/_translationstatus.txt	(revision 6006)
@@ -2,59 +2,59 @@
 For licensing, see LICENSE.html or http://ckeditor.com/license
 
-af.js      Found: 287 Missing: 237
-ar.js      Found: 451 Missing: 73
-bg.js      Found: 280 Missing: 244
-bn.js      Found: 281 Missing: 243
-bs.js      Found: 187 Missing: 337
-ca.js      Found: 490 Missing: 34
-cs.js      Found: 411 Missing: 113
-cy.js      Found: 452 Missing: 72
-da.js      Found: 404 Missing: 120
-de.js      Found: 444 Missing: 80
-el.js      Found: 286 Missing: 238
-en-au.js   Found: 369 Missing: 155
-en-ca.js   Found: 369 Missing: 155
-en-gb.js   Found: 370 Missing: 154
-eo.js      Found: 259 Missing: 265
-es.js      Found: 524 Missing: 0
-et.js      Found: 301 Missing: 223
-eu.js      Found: 403 Missing: 121
-fa.js      Found: 302 Missing: 222
-fi.js      Found: 518 Missing: 6
-fo.js      Found: 420 Missing: 104
-fr-ca.js   Found: 301 Missing: 223
-fr.js      Found: 403 Missing: 121
-gl.js      Found: 283 Missing: 241
-gu.js      Found: 300 Missing: 224
-he.js      Found: 523 Missing: 1
-hi.js      Found: 302 Missing: 222
-hr.js      Found: 404 Missing: 120
-hu.js      Found: 445 Missing: 79
-is.js      Found: 307 Missing: 217
-it.js      Found: 404 Missing: 120
-ja.js      Found: 413 Missing: 111
-km.js      Found: 275 Missing: 249
-ko.js      Found: 293 Missing: 231
-lt.js      Found: 306 Missing: 218
-lv.js      Found: 283 Missing: 241
-mn.js      Found: 300 Missing: 224
-ms.js      Found: 265 Missing: 259
-nb.js      Found: 470 Missing: 54
-nl.js      Found: 494 Missing: 30
-no.js      Found: 470 Missing: 54
-pl.js      Found: 411 Missing: 113
-pt-br.js   Found: 402 Missing: 122
-pt.js      Found: 282 Missing: 242
-ro.js      Found: 301 Missing: 223
-ru.js      Found: 467 Missing: 57
-sk.js      Found: 302 Missing: 222
-sl.js      Found: 410 Missing: 114
-sr-latn.js Found: 276 Missing: 248
-sr.js      Found: 275 Missing: 249
-sv.js      Found: 299 Missing: 225
-th.js      Found: 287 Missing: 237
-tr.js      Found: 494 Missing: 30
-uk.js      Found: 404 Missing: 120
-vi.js      Found: 481 Missing: 43
-zh-cn.js   Found: 404 Missing: 120
-zh.js      Found: 404 Missing: 120
+af.js      Found: 287 Missing: 244
+ar.js      Found: 451 Missing: 80
+bg.js      Found: 280 Missing: 251
+bn.js      Found: 281 Missing: 250
+bs.js      Found: 187 Missing: 344
+ca.js      Found: 490 Missing: 41
+cs.js      Found: 411 Missing: 120
+cy.js      Found: 452 Missing: 79
+da.js      Found: 404 Missing: 127
+de.js      Found: 528 Missing: 3
+el.js      Found: 286 Missing: 245
+en-au.js   Found: 369 Missing: 162
+en-ca.js   Found: 369 Missing: 162
+en-gb.js   Found: 370 Missing: 161
+eo.js      Found: 259 Missing: 272
+es.js      Found: 524 Missing: 7
+et.js      Found: 301 Missing: 230
+eu.js      Found: 403 Missing: 128
+fa.js      Found: 302 Missing: 229
+fi.js      Found: 531 Missing: 0
+fo.js      Found: 420 Missing: 111
+fr-ca.js   Found: 301 Missing: 230
+fr.js      Found: 403 Missing: 128
+gl.js      Found: 283 Missing: 248
+gu.js      Found: 300 Missing: 231
+he.js      Found: 531 Missing: 0
+hi.js      Found: 302 Missing: 229
+hr.js      Found: 404 Missing: 127
+hu.js      Found: 445 Missing: 86
+is.js      Found: 307 Missing: 224
+it.js      Found: 404 Missing: 127
+ja.js      Found: 413 Missing: 118
+km.js      Found: 275 Missing: 256
+ko.js      Found: 293 Missing: 238
+lt.js      Found: 306 Missing: 225
+lv.js      Found: 283 Missing: 248
+mn.js      Found: 300 Missing: 231
+ms.js      Found: 265 Missing: 266
+nb.js      Found: 470 Missing: 61
+nl.js      Found: 531 Missing: 0
+no.js      Found: 470 Missing: 61
+pl.js      Found: 411 Missing: 120
+pt-br.js   Found: 524 Missing: 7
+pt.js      Found: 282 Missing: 249
+ro.js      Found: 301 Missing: 230
+ru.js      Found: 467 Missing: 64
+sk.js      Found: 302 Missing: 229
+sl.js      Found: 410 Missing: 121
+sr-latn.js Found: 276 Missing: 255
+sr.js      Found: 275 Missing: 256
+sv.js      Found: 299 Missing: 232
+th.js      Found: 287 Missing: 244
+tr.js      Found: 524 Missing: 7
+uk.js      Found: 531 Missing: 0
+vi.js      Found: 481 Missing: 50
+zh-cn.js   Found: 531 Missing: 0
+zh.js      Found: 404 Missing: 127
Index: /CKEditor/branches/features/adobeair/_source/lang/af.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/af.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/af.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/ar.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/ar.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/ar.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'عن'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/bg.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/bg.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/bg.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/bn.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/bn.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/bn.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/bs.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/bs.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/bs.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/ca.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/ca.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/ca.js	(revision 6006)
@@ -106,4 +106,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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'Quant a'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Redueix la barra d\'eines',
-	toolbarExpand	: 'Amplia la barra d\'eines'
+	toolbarExpand	: 'Amplia la barra d\'eines',
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/cs.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/cs.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/cs.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'O aplikaci'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/cy.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/cy.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/cy.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'Ynghylch'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Cyfangu\'r Bar Offer',
-	toolbarExpand	: 'Ehangu\'r Bar Offer'
+	toolbarExpand	: 'Ehangu\'r Bar Offer',
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/da.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/da.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/da.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'Om'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/de.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/de.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/de.js	(revision 6006)
@@ -93,6 +93,6 @@
 		ok				: 'OK',
 		cancel			: 'Abbrechen',
-		close			: 'Close', // MISSING
-		preview			: 'Preview', // MISSING
+		close			: 'Schließen',
+		preview			: 'Vorschau',
 		generalTab		: 'Allgemein',
 		advancedTab		: 'Erweitert',
@@ -100,10 +100,14 @@
 		confirmNewPage	: 'Alle nicht gespeicherten Änderungen gehen verlohren. Sind sie sicher die neue Seite zu laden?',
 		confirmCancel	: 'Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?',
-		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
+		options			: 'Optionen',
+		target			: 'Zielseite',
+		targetNew		: 'Neues Fenster (_blank)',
+		targetTop		: 'Oberstes Fenster (_top)',
+		targetSelf		: 'Gleiches Fenster (_self)',
+		targetParent	: 'Oberes Fenster (_parent)',
+		langDirLTR		: 'Links nach Rechts (LNR)',
+		langDirRTL		: 'Rechts nach Links (RNL)',
+		styles			: 'Style',
+		cssClasses		: 'Stylesheet Klasse',
 
 		// Put the voice-only part of the label in the span.
@@ -113,5 +117,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Context Menu Optionen'
 	},
 
@@ -121,5 +125,5 @@
 		toolbar		: 'Sonderzeichen einfügen/editieren',
 		title		: 'Sonderzeichen auswählen',
-		options : 'Special Character Options' // MISSING
+		options : 'Sonderzeichen Optionen'
 	},
 
@@ -136,5 +140,5 @@
 		advanced	: 'Erweitert',
 		type		: 'Link-Typ',
-		toUrl		: 'URL', // MISSING
+		toUrl		: 'URL',
 		toAnchor	: 'Anker in dieser Seite',
 		toEmail		: 'E-Mail',
@@ -193,22 +197,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // 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		: 'Nummerierte Listen-Eigenschaften',
+		bulletedTitle		: 'Listen-Eigenschaften',
+		type				: 'Typ',
+		start				: 'Start',
+		validateStartNumber				:'List Startnummer muss eine ganze Zahl sein.',
+		circle				: 'Ring',
+		disc				: 'Kreis',
+		square				: 'Quadrat',
+		none				: 'Keine',
+		notset				: '<nicht gesetzt>',
+		armenian			: 'Armenisch Nummerierung',
+		georgian			: 'Georgisch Nummerierung (an, ban, gan, etc.)',
+		lowerRoman			: 'Klein römisch (i, ii, iii, iv, v, etc.)',
+		upperRoman			: 'Groß römisch (I, II, III, IV, V, etc.)',
+		lowerAlpha			: 'Klein alpha (a, b, c, d, e, etc.)',
+		upperAlpha			: 'Groß alpha (A, B, C, D, E, etc.)',
+		lowerGreek			: 'Klein griechisch (alpha, beta, gamma, etc.)',
+		decimal				: 'Dezimal (1, 2, 3, etc.)',
+		decimalLeadingZero	: 'Dezimal mit führende  Null (01, 02, 03, etc.)'
 	},
 
@@ -246,5 +251,5 @@
 		widthPx		: 'Pixel',
 		widthPc		: '%',
-		widthUnit	: 'width unit', // MISSING
+		widthUnit	: 'Breite Einheit',
 		height		: 'Höhe',
 		cellSpace	: 'Zellenabstand außen',
@@ -252,9 +257,9 @@
 		caption		: 'Überschrift',
 		summary		: 'Inhaltsübersicht',
-		headers		: 'Überschriften',
-		headersNone		: 'keine',
+		headers		: 'Headers',
+		headersNone		: 'Keine',
 		headersColumn	: 'Erste Spalte',
 		headersRow		: 'Erste Zeile',
-		headersBoth		: 'keine',
+		headersBoth		: 'Beide',
 		invalidRows		: 'Die Anzahl der Zeilen muß größer als 0 sein.',
 		invalidCols		: 'Die Anzahl der Spalten muß größer als 0 sein..',
@@ -297,5 +302,5 @@
 			invalidRowSpan	: '"Anzahl Zeilen verbinden" muss eine Ganzzahl sein.',
 			invalidColSpan	: '"Anzahl Spalten verbinden" muss eine Ganzzahl sein.',
-			chooseColor		: 'Choose' // MISSING
+			chooseColor		: 'Wählen'
 		},
 
@@ -409,5 +414,5 @@
 		height		: 'Höhe',
 		lockRatio	: 'Größenverhältnis beibehalten',
-		unlockRatio	: 'Unlock Ratio', // MISSING
+		unlockRatio	: 'Ratio Freischalten',
 		resetSize	: 'Größe zurücksetzen',
 		border		: 'Rahmen',
@@ -421,10 +426,10 @@
 		button2Img	: 'Möchten Sie den gewählten Bild-Button in ein einfaches Bild umwandeln?',
 		img2Button	: 'Möchten Sie das gewählten Bild in einen Bild-Button umwandeln?',
-		urlMissing	: 'Image source URL is missing.', // MISSING
-		validateWidth	: 'Width must be a whole number.', // MISSING
-		validateHeight	: 'Height must be a whole number.', // 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
+		urlMissing	: 'Imagequelle URL fehlt.',
+		validateWidth	: 'Breite muß eine ganze Zahl sein.',
+		validateHeight	: 'Höhe muß eine ganze Zahl sein.',
+		validateBorder	: 'Rahmen muß eine ganze Zahl sein.',
+		validateHSpace	: 'Horizontal-Abstand muß eine ganze Zahl sein.',
+		validateVSpace	: 'Vertikal-Abstand must be a whole number.'
 	},
 
@@ -508,10 +513,10 @@
 		toolbar	: 'Smiley',
 		title	: 'Smiley auswählen',
-		options : 'Smiley Options' // MISSING
+		options : 'Smiley Optionen'
 	},
 
 	elementsPath :
 	{
-		eleLabel : 'Elements path', // MISSING
+		eleLabel : 'Elements Pfad',
 		eleTitle : '%1 Element'
 	},
@@ -539,5 +544,5 @@
 		pasteMsg	: 'Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.',
 		securityMsg	: 'Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.',
-		pasteArea	: 'Paste Area' // MISSING
+		pasteArea	: 'Einfügebereich'
 	},
 
@@ -547,5 +552,5 @@
 		toolbar			: 'aus MS-Word einfügen',
 		title			: 'aus MS-Word einfügen',
-		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		error			: 'Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen'
 	},
 
@@ -560,5 +565,5 @@
 		button			: 'Vorlagen',
 		title			: 'Vorlagen',
-		options : 'Template Options', // MISSING
+		options : 'Vorlagen Optionen',
 		insertOption	: 'Aktuellen Inhalt ersetzen',
 		selectPromptMsg	: 'Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):',
@@ -571,5 +576,5 @@
 	{
 		label		: 'Stil',
-		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle	: 'Formatierungenstil',
 		panelTitle1	: 'Block Stilart',
 		panelTitle2	: 'Inline Stilart',
@@ -596,17 +601,17 @@
 	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				: 'Div Container erzeugen',
+		toolbar				: 'Div Container erzeugen',
+		cssClassInputLabel	: 'Stylesheet Klasse',
+		styleSelectLabel	: 'Stil',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Sprache Code',
+		inlineStyleInputLabel	: 'Inline Style',
+		advisoryTitleInputLabel	: 'Beratungs Titel',
+		langDirLabel		: 'Sprache Richtung',
+		langDirLTRLabel		: 'Links nach Rechs (LTR)',
+		langDirRTLLabel		: 'Rechs nach Links (RTL)',
+		edit				: 'Div Bearbeiten',
+		remove				: 'Div Entfernen'
   	},
 
@@ -629,5 +634,5 @@
 		textColorTitle	: 'Textfarbe',
 		bgColorTitle	: 'Hintergrundfarbe',
-		panelTitle		: 'Colors', // MISSING
+		panelTitle		: 'Farben',
 		auto			: 'Automatisch',
 		more			: 'Weitere Farben...'
@@ -681,5 +686,5 @@
 	{
 		title			: 'Rechtschreibprüfung während der Texteingabe',
-		opera_title		: 'Not supported by Opera', // MISSING
+		opera_title		: 'Nicht von Opera unterstützt',
 		enable			: 'SCAYT einschalten',
 		disable			: 'SCAYT ausschalten',
@@ -695,18 +700,18 @@
 
 		optionsTab		: 'Optionen',
-		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			: 'Groß geschriebenen Wörter ignorieren',
+		ignoreDomainNames : 'Domain-Namen ignorieren',
+		mixedCase		: 'Wörter mit gemischte Setzkasten ignorieren',
+		mixedWithDigits	: 'Wörter mit Zahlen ignorieren',
 
 		languagesTab	: 'Sprachen',
 
 		dictionariesTab	: 'Wörterbücher',
-		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 it\'s name and click the Restore button.', // MISSING
+		dic_field_name	: 'Wörterbuchname',
+		dic_create		: 'Erzeugen',
+		dic_restore		: 'Wiederherstellen',
+		dic_delete		: 'Löschen',
+		dic_rename		: 'Umbenennen',
+		dic_info		: 'Anfangs wird das Benutzerwörterbuch in einem Cookie gespeichert. Allerdings sind Cookies in der Größe begrenzt. Wenn das Benutzerwörterbuch bis zu einem Punkt wächst, wo es nicht mehr in einem Cookie gespeichert werden kann, wird das Benutzerwörterbuch auf dem Server gespeichert. Um Ihr persönliches Wörterbuch auf dem Server zu speichern, müssen Sie einen Namen für das Wörterbuch angeben. Falls  Sie schon ein gespeicherte Wörterbuch haben, geben Sie bitte dessen Namen ein und klicken Sie auf die Schaltfläche Wiederherstellen.',
 
 		aboutTab		: 'Über'
@@ -722,5 +727,5 @@
 
 	maximize : 'Maximieren',
-	minimize : 'Minimize', // MISSING
+	minimize : 'Minimieren',
 
 	fakeobjects :
@@ -736,12 +741,18 @@
 	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		: 'Farbe wählen',
+		options	:	'Farbeoptionen',
+		highlight	: 'Hervorheben',
+		selected	: 'Ausgewählte Farbe',
+		clear		: 'Entfernen'
+	},
+
+	toolbarCollapse	: 'Symbolleiste einklappen',
+	toolbarExpand	: 'Symbolleiste ausklappen',
+
+	bidi :
+	{
+		ltr : 'Leserichtung von Links nach Rechts',
+		rtl : 'Leserichtung von Rechts nach Links'
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/el.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/el.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/el.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/en-au.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/en-au.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/en-au.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/en-ca.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/en-ca.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/en-ca.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/en-gb.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/en-gb.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/en-gb.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/en.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/en.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/en.js	(revision 6006)
@@ -106,4 +106,8 @@
 		targetSelf		: 'Same Window (_self)',
 		targetParent	: 'Parent Window (_parent)',
+		langDirLTR		: 'Left to Right (LTR)',
+		langDirRTL		: 'Right to Left (RTL)',
+		styles			: 'Style',
+		cssClasses		: 'Stylesheet Classes',
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type',
 		start				: 'Start',
+		validateStartNumber				:'List start number must be a whole number.',
 		circle				: 'Circle',
 		disc				: 'Disc',
@@ -643,5 +648,5 @@
 		'000080' : 'Navy',
 		'4B0082' : 'Indigo',
-		'696969' : 'Dim Gray',
+		'696969' : 'Dark Gray',
 		'B22222' : 'Fire Brick',
 		'A52A2A' : 'Brown',
@@ -659,5 +664,5 @@
 		'00F' : 'Blue',
 		'EE82EE' : 'Violet',
-		'A9A9A9' : 'Dark Gray',
+		'A9A9A9' : 'Dim Gray',
 		'FFA07A' : 'Light Salmon',
 		'FFA500' : 'Orange',
@@ -708,5 +713,5 @@
 		dic_delete		: 'Delete',
 		dic_rename		: 'Rename',
-		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 it\'s name and click the Restore button.',
+		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.',
 
 		aboutTab		: 'About'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar',
-	toolbarExpand	: 'Expand Toolbar'
+	toolbarExpand	: 'Expand Toolbar',
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right',
+		rtl : 'Text direction from right to left'
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/eo.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/eo.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/eo.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/es.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/es.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/es.js	(revision 6006)
@@ -106,4 +106,8 @@
 		targetSelf		: 'Misma ventana (_self)',
 		targetParent	: 'Ventana padre (_parent)',
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Tipo',
 		start				: 'Inicio',
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Círculo',
 		disc				: 'Disco',
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Contraer barra de herramientas',
-	toolbarExpand	: 'Expandir barra de herramientas'
+	toolbarExpand	: 'Expandir barra de herramientas',
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/et.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/et.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/et.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/eu.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/eu.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/eu.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'Honi buruz'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/fa.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/fa.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/fa.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/fi.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/fi.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/fi.js	(revision 6006)
@@ -106,4 +106,8 @@
 		targetSelf		: 'Sama ikkuna (_self)',
 		targetParent	: 'Ylemmän tason ikkuna (_parent)',
+		langDirLTR		: 'Vasemmalta oikealle (LTR)',
+		langDirRTL		: 'Oikealta vasemmalle (RTL)',
+		styles			: 'Tyyli',
+		cssClasses		: 'Tyylitiedoston luokat',
 
 		// Put the voice-only part of the label in the span.
@@ -113,5 +117,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Pikavalikon ominaisuudet'
 	},
 
@@ -121,5 +125,5 @@
 		toolbar		: 'Lisää erikoismerkki',
 		title		: 'Valitse erikoismerkki',
-		options : 'Special Character Options' // MISSING
+		options : 'Erikoismerkin ominaisuudet'
 	},
 
@@ -197,4 +201,5 @@
 		type				: 'Tyyppi',
 		start				: 'Alku',
+		validateStartNumber				:'Listan ensimmäisen numeron tulee olla kokonaisluku.',
 		circle				: 'Ympyrä',
 		disc				: 'Levy',
@@ -203,5 +208,5 @@
 		notset				: '<ei asetettu>',
 		armenian			: 'Armeenialainen numerointi',
-		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		georgian			: 'Georgialainen numerointi (an, ban, gan, etc.)',
 		lowerRoman			: 'Pienet roomalaiset (i, ii, iii, iv, v, jne.)',
 		upperRoman			: 'Isot roomalaiset (I, II, III, IV, V, jne.)',
@@ -508,5 +513,5 @@
 		toolbar	: 'Hymiö',
 		title	: 'Lisää hymiö',
-		options : 'Smiley Options' // MISSING
+		options : 'Hymiön ominaisuudet'
 	},
 
@@ -560,5 +565,5 @@
 		button			: 'Pohjat',
 		title			: 'Sisältöpohjat',
-		options : 'Template Options', // MISSING
+		options : 'Sisältöpohjan ominaisuudet',
 		insertOption	: 'Korvaa editorin koko sisältö',
 		selectPromptMsg	: 'Valitse pohja editoriin<br>(aiempi sisältö menetetään):',
@@ -737,5 +742,5 @@
 	{
 		title		: 'Valitse väri',
-		options	:	'Color Options', // MISSING
+		options	:	'Värin ominaisuudet',
 		highlight	: 'Korostus',
 		selected	: 'Valittu',
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Kutista työkalupalkki',
-	toolbarExpand	: 'Laajenna työkalupalkki'
+	toolbarExpand	: 'Laajenna työkalupalkki',
+
+	bidi :
+	{
+		ltr : 'Tekstin suunta vasemmalta oikealle',
+		rtl : 'Tekstin suunta oikealta vasemmalle'
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/fo.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/fo.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/fo.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'Um'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/fr-ca.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/fr-ca.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/fr-ca.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/fr.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/fr.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/fr.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'A propos de'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/gl.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/gl.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/gl.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/gu.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/gu.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/gu.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/he.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/he.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/he.js	(revision 6006)
@@ -106,4 +106,8 @@
 		targetSelf		: 'אותו חלון (_self)',
 		targetParent	: 'חלון האב (_parent)',
+		langDirLTR		: 'שמאל לימין (LTR)',
+		langDirRTL		: 'ימין לשמאל (RTL)',
+		styles			: 'סגנון',
+		cssClasses		: 'מחלקות גליונות סגנון',
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'סוג',
 		start				: 'תחילת מספור',
+		validateStartNumber				:'שדה תחילת המספור חייב להכיל מספר שלם.',
 		circle				: 'עיגול ריק',
 		disc				: 'עיגול מלא',
@@ -260,5 +265,5 @@
 		invalidCols		: 'שדה מספר העמודות חייב להיות מספר גדול מ 0.',
 		invalidBorder	: 'שדה גודל המסגרת חייב להיות מספר.',
-		invalidWidth	: 'שדה רוחב הטבלה חייב להיות רוחב.',
+		invalidWidth	: 'שדה רוחב הטבלה חייב להיות מספר.',
 		invalidHeight	: 'שדה גובה הטבלה חייב להיות מספר.',
 		invalidCellSpacing	: 'שדה ריווח התאים חייב להיות מספר.',
@@ -737,5 +742,5 @@
 	{
 		title		: 'בחירת צבע',
-		options	:	'Color Options', // MISSING
+		options	:	'אפשרויות צבע',
 		highlight	: 'סימון',
 		selected	: 'בחירה',
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'מזעור סרגל כלים',
-	toolbarExpand	: 'הרחבת סרגל כלים'
+	toolbarExpand	: 'הרחבת סרגל כלים',
+
+	bidi :
+	{
+		ltr : 'כיוון טקסט משמאל לימין (LTR)',
+		rtl : 'כיוון טקסט מימין לשמאל (RTL)'
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/hi.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/hi.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/hi.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/hr.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/hr.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/hr.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'O SCAYT'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/hu.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/hu.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/hu.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'Névjegy'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/is.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/is.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/is.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/it.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/it.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/it.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/ja.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/ja.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/ja.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -222,7 +227,7 @@
 		replaceWith			: '置換えする文字列:',
 		notFoundMsg			: '指定された文字列は見つかりませんでした。',
-		matchCase			: '部分一致',
-		matchWord			: '単語単位で一致',
-		matchCyclic			: '大文字/小文字区別一致',
+		matchCase			: '大文字と小文字を区別する',
+		matchWord			: '単語単位で探す',
+		matchCyclic			: '一周する',
 		replaceAll			: 'すべて置換え',
 		replaceSuccessMsg	: '%1 個置換しました。'
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'バージョン情報'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'ツールバーを閉じる',
-	toolbarExpand	: 'ツールバーを開く'
+	toolbarExpand	: 'ツールバーを開く',
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/km.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/km.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/km.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/ko.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/ko.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/ko.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/lt.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/lt.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/lt.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/lv.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/lv.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/lv.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/mn.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/mn.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/mn.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/ms.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/ms.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/ms.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/nb.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/nb.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/nb.js	(revision 6006)
@@ -106,4 +106,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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'Om'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Slå sammen verktøylinje',
-	toolbarExpand	: 'Vis verktøylinje'
+	toolbarExpand	: 'Vis verktøylinje',
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/nl.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/nl.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/nl.js	(revision 6006)
@@ -106,4 +106,8 @@
 		targetSelf		: 'Zelfde venster (_self)',
 		targetParent	: 'Origineel venster (_parent)',
+		langDirLTR		: 'Links naar rechts (LTR)',
+		langDirRTL		: 'Rechts naar links (RTL)',
+		styles			: 'Stijlen',
+		cssClasses		: 'Stylesheet klassen',
 
 		// Put the voice-only part of the label in the span.
@@ -193,22 +197,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // 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		: 'Eigenschappen genummerde lijst',
+		bulletedTitle		: 'Eigenschappen lijst met opsommingstekens',
+		type				: 'Type',
+		start				: 'Start',
+		validateStartNumber				:'Starnummer van de lijst moet een heel nummer zijn.',
+		circle				: 'Cirkel',
+		disc				: 'Schijf',
+		square				: 'Vierkant',
+		none				: 'Geen',
+		notset				: '<niet gezet>',
+		armenian			: 'Armeense numering',
+		georgian			: 'Greorgische numering (an, ban, gan, etc.)',
+		lowerRoman			: 'Romeins kleine letters (i, ii, iii, iv, v, etc.)',
+		upperRoman			: 'Romeins hoofdletters (I, II, III, IV, V, etc.)',
+		lowerAlpha			: 'Kleine letters (a, b, c, d, e, etc.)',
+		upperAlpha			: 'Hoofdletters (A, B, C, D, E, etc.)',
+		lowerGreek			: 'Grieks kleine letters (alpha, beta, gamma, etc.)',
+		decimal				: 'Cijfers (1, 2, 3, etc.)',
+		decimalLeadingZero	: 'Cijfers beginnen met nul (01, 02, 03, etc.)'
 	},
 
@@ -681,5 +686,5 @@
 	{
 		title			: 'Controleer de spelling tijdens het typen',
-		opera_title		: 'Not supported by Opera', // MISSING
+		opera_title		: 'Niet ondersteund door Opera',
 		enable			: 'SCAYT inschakelen',
 		disable			: 'SCAYT uitschakelen',
@@ -695,18 +700,18 @@
 
 		optionsTab		: 'Opties',
-		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			: 'Negeer woorden helemaal in hoofdletters',
+		ignoreDomainNames : 'Negeer domeinnamen',
+		mixedCase		: 'Negeer woorden met hoofd- en kleine letters',
+		mixedWithDigits	: 'Negeer woorden met cijfers',
 
 		languagesTab	: 'Talen',
 
 		dictionariesTab	: 'Woordenboeken',
-		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 it\'s name and click the Restore button.', // MISSING
+		dic_field_name	: 'Naam woordenboek',
+		dic_create		: 'Aanmaken',
+		dic_restore		: 'Terugzetten',
+		dic_delete		: 'Verwijderen',
+		dic_rename		: 'Hernoemen',
+		dic_info		: 'Initieel wordt het gebruikerswoordenboek opgeslagen in een cookie. Cookies zijn echter beperkt in grootte. Zodra het gebruikerswoordenboek het punt bereikt waarop het niet meer in een cookie opgeslagen kan worden, dan wordt het woordenboek op de server opgeslagen. Om je persoonlijke woordenboek op je eigen server op te slaan, moet je een mapnaam opgeven. Indien je al een woordenboek hebt opgeslagen, typ dan de naam en klik op de Terugzetten knop.',
 
 		aboutTab		: 'Over'
@@ -737,5 +742,5 @@
 	{
 		title		: 'Selecteer kleur',
-		options	:	'Color Options', // MISSING
+		options	:	'Kleuropties',
 		highlight	: 'Actief',
 		selected	: 'Geselecteerd',
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Werkbalk inklappen',
-	toolbarExpand	: 'Werkbalk uitklappen'
+	toolbarExpand	: 'Werkbalk uitklappen',
+
+	bidi :
+	{
+		ltr : 'Schrijfrichting van links naar rechts',
+		rtl : 'Schrijfrichting van rechts naar links'
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/no.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/no.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/no.js	(revision 6006)
@@ -106,4 +106,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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'Om'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Slå sammen verktøylinje',
-	toolbarExpand	: 'Vis verktøylinje'
+	toolbarExpand	: 'Vis verktøylinje',
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/pl.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/pl.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/pl.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'Na temat SCAYT'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/pt-br.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/pt-br.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/pt-br.js	(revision 6006)
@@ -5,7 +5,6 @@
 
 /**
- * @fileOverview Defines the {@link CKEDITOR.lang} object, for the
- * Brazilian Portuguese 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 : 'Editor de Texto, %1, pressione ALT 0 para obter ajuda.',
 
 	// ARIA descriptions.
-	toolbar	: 'Toolbar', // MISSING
-	editor	: 'Rich Text Editor', // MISSING
+	toolbar	: 'Barra de Ferramentas',
+	editor	: 'Editor de Texto',
 
 	// Toolbar buttons without dialogs.
@@ -57,5 +56,5 @@
 	horizontalrule	: 'Inserir Linha Horizontal',
 	pagebreak		: 'Inserir Quebra de Página',
-	unlink			: 'Remover Hiperlink',
+	unlink			: 'Remover Link',
 	undo			: 'Desfazer',
 	redo			: 'Refazer',
@@ -69,5 +68,5 @@
 		upload			: 'Enviar ao Servidor',
 		uploadSubmit	: 'Enviar para o Servidor',
-		image			: 'Figura',
+		image			: 'Imagem',
 		flash			: 'Flash',
 		form			: 'Formulário',
@@ -88,22 +87,26 @@
 		langCode		: 'Idioma',
 		longDescr		: 'Descrição da URL',
-		cssClass		: 'Classe de Folhas de Estilo',
+		cssClass		: 'Classe de CSS',
 		advisoryTitle	: 'Título',
 		cssStyle		: 'Estilos',
 		ok				: 'OK',
 		cancel			: 'Cancelar',
-		close			: 'Close', // MISSING
-		preview			: 'Preview', // MISSING
+		close			: 'Fechar',
+		preview			: 'Visualizar',
 		generalTab		: 'Geral',
 		advancedTab		: 'Avançado',
 		validateNumberFailed : 'Este valor não é um número.',
-		confirmNewPage	: 'Todas as mudanças não salvas serão perdidas. Tem certeza de que quer carregar outra página?',
+		confirmNewPage	: 'Todas as mudanças não salvas serão perdidas. Tem certeza de que quer abrir uma nova página?',
 		confirmCancel	: 'Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?',
-		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
+		options			: 'Opções',
+		target			: 'Destino',
+		targetNew		: 'Nova Janela (_blank)',
+		targetTop		: 'Janela de Cima (_top)',
+		targetSelf		: 'Mesma Janela (_self)',
+		targetParent	: 'Janela Pai (_parent)',
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
 
 		// Put the voice-only part of the label in the span.
@@ -113,5 +116,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Opções Menu de Contexto'
 	},
 
@@ -121,5 +124,5 @@
 		toolbar		: 'Inserir Caractere Especial',
 		title		: 'Selecione um Caractere Especial',
-		options : 'Special Character Options' // MISSING
+		options : 'Opções de Caractere Especial'
 	},
 
@@ -127,8 +130,8 @@
 	link :
 	{
-		toolbar		: 'Inserir/Editar Hiperlink',
-		other 		: '<other>', // MISSING
-		menu		: 'Editar Hiperlink',
-		title		: 'Hiperlink',
+		toolbar		: 'Inserir/Editar Link',
+		other 		: '<outro>',
+		menu		: 'Editar Link',
+		title		: 'Editar Link',
 		info		: 'Informações',
 		target		: 'Destino',
@@ -136,5 +139,5 @@
 		advanced	: 'Avançado',
 		type		: 'Tipo de hiperlink',
-		toUrl		: 'URL', // MISSING
+		toUrl		: 'URL',
 		toAnchor	: 'Âncora nesta página',
 		toEmail		: 'E-Mail',
@@ -143,5 +146,5 @@
 		targetFrameName	: 'Nome do Frame de Destino',
 		targetPopupName	: 'Nome da Janela Pop-up',
-		popupFeatures	: 'Atributos da Janela Pop-up',
+		popupFeatures	: 'Propriedades da Janela Pop-up',
 		popupResizable	: 'Redimensionável',
 		popupStatusBar	: 'Barra de Status',
@@ -155,5 +158,5 @@
 		popupLeft		: 'Esquerda',
 		popupHeight		: 'Altura',
-		popupTop		: 'Superior',
+		popupTop		: 'Topo',
 		id				: 'Id',
 		langDir			: 'Direção do idioma',
@@ -166,15 +169,15 @@
 		advisoryTitle	: 'Título',
 		advisoryContentType	: 'Tipo de Conteúdo',
-		cssClasses		: 'Classe de Folhas de Estilo',
-		charset			: 'Conjunto de Caracteres do Hiperlink',
+		cssClasses		: 'Classe de CSS',
+		charset			: 'Charset do Link',
 		styles			: 'Estilos',
 		selectAnchor	: 'Selecione uma âncora',
-		anchorName		: 'Pelo Nome da âncora',
-		anchorId		: 'Pelo Id do Elemento',
+		anchorName		: 'Nome da âncora',
+		anchorId		: 'Id da âncora',
 		emailAddress	: 'Endereço E-Mail',
 		emailSubject	: 'Assunto da Mensagem',
 		emailBody		: 'Corpo da Mensagem',
-		noAnchors		: '(Não há âncoras disponíveis neste documento)',
-		noUrl			: 'Por favor, digite o endereço do Hiperlink',
+		noAnchors		: '(Não há âncoras no documento)',
+		noUrl			: 'Por favor, digite o endereço do Link',
 		noEmail			: 'Por favor, digite o endereço de e-mail'
 	},
@@ -193,22 +196,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // 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		: 'Propriedades da Lista Numerada',
+		bulletedTitle		: 'Propriedades da Lista sem Numeros',
+		type				: 'Tipo',
+		start				: 'Início',
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Círculo',
+		disc				: 'Disco',
+		square				: 'Quadrado',
+		none				: 'Nenhum',
+		notset				: '<não definido>',
+		armenian			: 'Numeração Armêna',
+		georgian			: 'Numeração da Geórgia (an, ban, gan, etc.)',
+		lowerRoman			: 'Numeração Romana minúscula (i, ii, iii, iv, v, etc.)',
+		upperRoman			: 'Numeração Romana maiúscula (I, II, III, IV, V, etc.)',
+		lowerAlpha			: 'Numeração Alfabética minúscula (a, b, c, d, e, etc.)',
+		upperAlpha			: 'Numeração Alfabética Maiúscula (A, B, C, D, E, etc.)',
+		lowerGreek			: 'Numeração Grega minúscula (alpha, beta, gamma, etc.)',
+		decimal				: 'Numeração Decimal (1, 2, 3, etc.)',
+		decimalLeadingZero	: 'Numeração Decimal com zeros (01, 02, 03, etc.)'
 	},
 
@@ -246,8 +250,8 @@
 		widthPx		: 'pixels',
 		widthPc		: '%',
-		widthUnit	: 'width unit', // MISSING
+		widthUnit	: 'unidade largura',
 		height		: 'Altura',
 		cellSpace	: 'Espaçamento',
-		cellPad		: 'Enchimento',
+		cellPad		: 'Margem interna',
 		caption		: 'Legenda',
 		summary		: 'Resumo',
@@ -257,20 +261,20 @@
 		headersRow		: 'Primeira linha',
 		headersBoth		: 'Ambos',
-		invalidRows		: '"Número de linhas" tem que ser um número maior que 0.',
-		invalidCols		: '"Número de colunas" tem que ser um número maior que 0.',
-		invalidBorder	: '"Tamanho da borda" tem que ser um número.',
-		invalidWidth	: '"Largura da tabela" tem que ser um número.',
-		invalidHeight	: '"Altura da tabela" tem que ser um número.',
-		invalidCellSpacing	: '"Espaçamento das células" tem que ser um número.',
-		invalidCellPadding	: '"Margem interna das células" tem que ser um número.',
+		invalidRows		: 'O número de linhas tem que ser um número maior que 0.',
+		invalidCols		: 'O número de colunas tem que ser um número maior que 0.',
+		invalidBorder	: 'O tamanho da borda tem que ser um número.',
+		invalidWidth	: 'A largura da tabela tem que ser um número.',
+		invalidHeight	: 'A altura da tabela tem que ser um número.',
+		invalidCellSpacing	: 'O espaçamento das células tem que ser um número.',
+		invalidCellPadding	: 'A margem interna das células tem que ser um número.',
 
 		cell :
 		{
 			menu			: 'Célula',
-			insertBefore	: 'Inserir célula à esquerda',
-			insertAfter		: 'Inserir célula à direita',
+			insertBefore	: 'Inserir célula a esquerda',
+			insertAfter		: 'Inserir célula a direita',
 			deleteCell		: 'Remover Células',
 			merge			: 'Mesclar Células',
-			mergeRight		: 'Mesclar com célula à direita',
+			mergeRight		: 'Mesclar com célula a direita',
 			mergeDown		: 'Mesclar com célula abaixo',
 			splitHorizontal	: 'Dividir célula horizontalmente',
@@ -295,7 +299,7 @@
 			invalidWidth	: 'A largura da célula tem que ser um número.',
 			invalidHeight	: 'A altura da célula tem que ser um número.',
-			invalidRowSpan	: '"Linhas cobertas" tem que ser um número inteiro.',
-			invalidColSpan	: '"Colunas cobertas" tem que ser um número inteiro.',
-			chooseColor		: 'Choose' // MISSING
+			invalidRowSpan	: 'Linhas cobertas tem que ser um número inteiro.',
+			invalidColSpan	: 'Colunas cobertas tem que ser um número inteiro.',
+			chooseColor		: 'Escolher'
 		},
 
@@ -311,6 +315,6 @@
 		{
 			menu			: 'Coluna',
-			insertBefore	: 'Inserir coluna à esquerda',
-			insertAfter		: 'Inserir coluna à direita',
+			insertBefore	: 'Inserir coluna a esquerda',
+			insertAfter		: 'Inserir coluna a direita',
 			deleteColumn	: 'Remover Colunas'
 		}
@@ -342,5 +346,5 @@
 		title		: 'Formatar Formulário',
 		menu		: 'Formatar Formulário',
-		action		: 'Action',
+		action		: 'Ação',
 		method		: 'Método',
 		encoding	: 'Codificação'
@@ -351,5 +355,5 @@
 	{
 		title		: 'Formatar Caixa de Listagem',
-		selectInfo	: 'Info',
+		selectInfo	: 'Informações',
 		opAvail		: 'Opções disponíveis',
 		value		: 'Valor',
@@ -399,32 +403,32 @@
 	image :
 	{
-		title		: 'Formatar Figura',
+		title		: 'Formatar Imagem',
 		titleButton	: 'Formatar Botão de Imagem',
-		menu		: 'Formatar Figura',
-		infoTab		: 'Informações da Figura',
+		menu		: 'Formatar Imagem',
+		infoTab		: 'Informações da Imagem',
 		btnUpload	: 'Enviar para o Servidor',
-		upload		: 'Submeter',
+		upload		: 'Enviar',
 		alt			: 'Texto Alternativo',
 		width		: 'Largura',
 		height		: 'Altura',
-		lockRatio	: 'Manter proporções',
-		unlockRatio	: 'Unlock Ratio', // MISSING
+		lockRatio	: 'Travar Proporções',
+		unlockRatio	: 'Destravar Proporções',
 		resetSize	: 'Redefinir para o Tamanho Original',
 		border		: 'Borda',
-		hSpace		: 'Horizontal',
-		vSpace		: 'Vertical',
+		hSpace		: 'HSpace',
+		vSpace		: 'VSpace',
 		align		: 'Alinhamento',
 		alignLeft	: 'Esquerda',
 		alignRight	: 'Direita',
-		alertUrl	: 'Por favor, digite o URL da figura.',
-		linkTab		: 'Hiperlink',
-		button2Img	: 'Você deseja transformar o botão de imagem selecionado em uma imagem comum?',
-		img2Button	: 'Você deseja transformar a imagem selecionada em um botão de imagem?',
-		urlMissing	: 'Image source URL is missing.', // MISSING
-		validateWidth	: 'Width must be a whole number.', // MISSING
-		validateHeight	: 'Height must be a whole number.', // 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
+		alertUrl	: 'Por favor, digite a URL da imagem.',
+		linkTab		: 'Link',
+		button2Img	: 'Deseja transformar o botão de imagem em uma imagem comum?',
+		img2Button	: 'Deseja transformar a imagem em um botão de imagem?',
+		urlMissing	: 'URL da imagem está faltando.',
+		validateWidth	: 'A largura deve ser um número inteiro.',
+		validateHeight	: 'A altura deve ser um número inteiro.',
+		validateBorder	: 'A borda deve ser um número inteiro.',
+		validateHSpace	: 'O HSpace deve ser um número inteiro.',
+		validateVSpace	: 'O VSpace deve ser um número inteiro.'
 	},
 
@@ -436,5 +440,5 @@
 		title			: 'Propriedades do Flash',
 		chkPlay			: 'Tocar Automaticamente',
-		chkLoop			: 'Loop',
+		chkLoop			: 'Tocar Infinitamente',
 		chkMenu			: 'Habilita Menu Flash',
 		chkFull			: 'Permitir tela cheia',
@@ -445,5 +449,5 @@
 		access			: 'Acesso ao script',
 		accessAlways	: 'Sempre',
-		accessSameDomain: 'Mesmo domínio',
+		accessSameDomain: 'Acessar Mesmo Domínio',
 		accessNever		: 'Nunca',
 		align			: 'Alinhamento',
@@ -458,10 +462,10 @@
 		alignTop		: 'Superior',
 		quality			: 'Qualidade',
-		qualityBest		: 'Melhor',
-		qualityHigh		: 'Alta',
-		qualityAutoHigh	: 'Alta automático',
-		qualityMedium	: 'Média',
-		qualityAutoLow	: 'Média automático',
-		qualityLow		: 'Baixa',
+		qualityBest		: 'Qualidade Melhor',
+		qualityHigh		: 'Qualidade Alta',
+		qualityAutoHigh	: 'Qualidade Alta Automática',
+		qualityMedium	: 'Qualidade Média',
+		qualityAutoLow	: 'Qualidade Baixa Automática',
+		qualityLow		: 'Qualidade Baixa',
 		windowModeWindow: 'Janela',
 		windowModeOpaque: 'Opaca',
@@ -472,11 +476,11 @@
 		width			: 'Largura',
 		height			: 'Altura',
-		hSpace			: 'Horizontal',
-		vSpace			: 'Vertical',
-		validateSrc		: 'Por favor, digite o endereço do Hiperlink',
-		validateWidth	: '"Largura" tem que ser um número.',
-		validateHeight	: '"Altura" tem que ser um número',
-		validateHSpace	: '"HSpace" tem que ser um número',
-		validateVSpace	: '"VSpace" tem que ser um número.'
+		hSpace			: 'HSpace',
+		vSpace			: 'VSpace',
+		validateSrc		: 'Por favor, digite o endereço do link',
+		validateWidth	: 'A largura tem que ser um número.',
+		validateHeight	: 'A altura tem que ser um número',
+		validateHSpace	: 'O HSpace tem que ser um número',
+		validateVSpace	: 'O VSpace tem que ser um número.'
 	},
 
@@ -485,5 +489,5 @@
 	{
 		toolbar			: 'Verificar Ortografia',
-		title			: 'Corretor gramatical',
+		title			: 'Corretor Ortográfico',
 		notAvailable	: 'Desculpe, o serviço não está disponível no momento.',
 		errorLoading	: 'Erro carregando servidor de aplicação: %s.',
@@ -500,5 +504,5 @@
 		noChanges		: 'Verificação ortográfica encerrada: Não houve alterações',
 		oneChange		: 'Verificação ortográfica encerrada: Uma palavra foi alterada',
-		manyChanges		: 'Verificação ortográfica encerrada: %1 foram alteradas',
+		manyChanges		: 'Verificação ortográfica encerrada: %1 palavras foram alteradas',
 		ieSpellDownload	: 'A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?'
 	},
@@ -508,15 +512,15 @@
 		toolbar	: 'Emoticon',
 		title	: 'Inserir Emoticon',
-		options : 'Smiley Options' // MISSING
+		options : 'Opções de Emoticons'
 	},
 
 	elementsPath :
 	{
-		eleLabel : 'Elements path', // MISSING
+		eleLabel : 'Caminho dos Elementos',
 		eleTitle : 'Elemento %1'
 	},
 
-	numberedlist	: 'Numeração',
-	bulletedlist	: 'Marcadores',
+	numberedlist	: 'Lista numerada',
+	bulletedlist	: 'Lista sem números',
 	indent			: 'Aumentar Recuo',
 	outdent			: 'Diminuir Recuo',
@@ -530,5 +534,5 @@
 	},
 
-	blockquote : 'Recuo',
+	blockquote : 'Citação',
 
 	clipboard :
@@ -537,7 +541,7 @@
 		cutError	: 'As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).',
 		copyError	: 'As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).',
-		pasteMsg	: 'Transfira o link usado no box usando o teclado com (<STRONG>Ctrl/Cmd+V</STRONG>) e <STRONG>OK</STRONG>.',
-		securityMsg	: 'As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo novamente nesta janela.',
-		pasteArea	: 'Paste Area' // MISSING
+		pasteMsg	: 'Transfira o link usado na caixa usando o teclado com (<STRONG>Ctrl/Cmd+V</STRONG>) e <STRONG>OK</STRONG>.',
+		securityMsg	: 'As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo manualmente nesta janela.',
+		pasteArea	: 'Área para Colar'
 	},
 
@@ -547,5 +551,5 @@
 		toolbar			: 'Colar do Word',
 		title			: 'Colar do Word',
-		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		error			: 'Não foi possível limpar os dados colados devido a um erro interno'
 	},
 
@@ -559,6 +563,6 @@
 	{
 		button			: 'Modelos de layout',
-		title			: 'Modelo de layout do conteúdo',
-		options : 'Template Options', // MISSING
+		title			: 'Modelo de layout de conteúdo',
+		options : 'Opções de Template',
 		insertOption	: 'Substituir o conteúdo atual',
 		selectPromptMsg	: 'Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):',
@@ -566,12 +570,12 @@
 	},
 
-	showBlocks : 'Mostrar blocos',
+	showBlocks : 'Mostrar blocos de código',
 
 	stylesCombo :
 	{
 		label		: 'Estilo',
-		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle	: 'Estilos de Formatação',
 		panelTitle1	: 'Estilos de bloco',
-		panelTitle2	: 'Estilos em texto corrido',
+		panelTitle2	: 'Estilos de texto corrido',
 		panelTitle3	: 'Estilos de objeto'
 	},
@@ -596,17 +600,17 @@
 	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				: 'Criar Container de DIV',
+		toolbar				: 'Criar Container de DIV',
+		cssClassInputLabel	: 'Classes de CSS',
+		styleSelectLabel	: 'Estilo',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: 'Código de Idioma',
+		inlineStyleInputLabel	: 'Estilo Inline',
+		advisoryTitleInputLabel	: 'Título Consulta',
+		langDirLabel		: 'Direção da Escrita',
+		langDirLTRLabel		: 'Esquerda para Direita (LTR)',
+		langDirRTLLabel		: 'Direita para Esquerda (RTL)',
+		edit				: 'Editar Div',
+		remove				: 'Remover Div'
   	},
 
@@ -629,5 +633,5 @@
 		textColorTitle	: 'Cor do Texto',
 		bgColorTitle	: 'Cor do Plano de Fundo',
-		panelTitle		: 'Colors', // MISSING
+		panelTitle		: 'Cores',
 		auto			: 'Automático',
 		more			: 'Mais Cores...'
@@ -636,56 +640,56 @@
 	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' : 'Dim 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' : 'Dark 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' : 'Preto',
+		'800000' : 'Foquete',
+		'8B4513' : 'Marrom 1',
+		'2F4F4F' : 'Cinza 1',
+		'008080' : 'Cerceta',
+		'000080' : 'Azul Marinho',
+		'4B0082' : 'Índigo',
+		'696969' : 'Cinza 2',
+		'B22222' : 'Tijolo de Fogo',
+		'A52A2A' : 'Marrom 2',
+		'DAA520' : 'Vara Dourada',
+		'006400' : 'Verde Escuro',
+		'40E0D0' : 'Turquesa',
+		'0000CD' : 'Azul Médio',
+		'800080' : 'Roxo',
+		'808080' : 'Cinza 3',
+		'F00' : 'Vermelho',
+		'FF8C00' : 'Laranja Escuro',
+		'FFD700' : 'Dourado',
+		'008000' : 'Verde',
+		'0FF' : 'Ciano',
+		'00F' : 'Azul',
+		'EE82EE' : 'Violeta',
+		'A9A9A9' : 'Cinza Escuro',
+		'FFA07A' : 'Salmão Claro',
+		'FFA500' : 'Laranja',
+		'FFFF00' : 'Amarelo',
+		'00FF00' : 'Lima',
+		'AFEEEE' : 'Turquesa Pálido',
+		'ADD8E6' : 'Azul Claro',
+		'DDA0DD' : 'Ameixa',
+		'D3D3D3' : 'Cinza Claro',
+		'FFF0F5' : 'Lavanda 1',
+		'FAEBD7' : 'Branco Antiguidade',
+		'FFFFE0' : 'Amarelo Claro',
+		'F0FFF0' : 'Orvalho',
+		'F0FFFF' : 'Azure',
+		'F0F8FF' : 'Azul Alice',
+		'E6E6FA' : 'Lavanda 2',
+		'FFF' : 'Branco'
 	},
 
 	scayt :
 	{
-		title			: 'Correção gramatical durante a digitação',
-		opera_title		: 'Not supported by Opera', // MISSING
-		enable			: 'Habilitar SCAYT',
-		disable			: 'Desabilitar SCAYT',
-		about			: 'Sobre o SCAYT',
-		toggle			: 'Ativar/desativar SCAYT',
+		title			: 'Correção ortográfica durante a digitação',
+		opera_title		: 'Não suportado no Opera',
+		enable			: 'Habilitar correção ortográfica durante a digitação',
+		disable			: 'Desabilitar correção ortográfica durante a digitação',
+		about			: 'Sobre a correção ortográfica durante a digitação',
+		toggle			: 'Ativar/desativar correção ortográfica durante a digitação',
 		options			: 'Opções',
-		langs			: 'Línguas',
+		langs			: 'Idiomas',
 		moreSuggestions	: 'Mais sugestões',
 		ignore			: 'Ignorar',
@@ -695,18 +699,18 @@
 
 		optionsTab		: 'Opções',
-		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	: 'Línguas',
+		allCaps			: 'Ignorar palavras maiúsculas',
+		ignoreDomainNames : 'Ignorar nomes de domínio',
+		mixedCase		: 'Ignorar palavras com maiúsculas e minúsculas misturadas',
+		mixedWithDigits	: 'Ignorar palavras com números',
+
+		languagesTab	: 'Idiomas',
 
 		dictionariesTab	: 'Dicionários',
-		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 it\'s name and click the Restore button.', // MISSING
+		dic_field_name	: 'Nome do Dicionário',
+		dic_create		: 'Criar',
+		dic_restore		: 'Restaurar',
+		dic_delete		: 'Excluir',
+		dic_rename		: 'Renomear',
+		dic_info		: 'Inicialmente, o dicionário do usuário fica armazenado em um Cookie. Porém, Cookies tem tamanho limitado, portanto quand o dicionário do usuário atingir o tamanho limite poderá ser armazenado no nosso servidor. Para armazenar seu dicionário pessoal no nosso servidor deverá especificar um nome para ele. Se já tiver um dicionário armazenado por favor especifique o seu nome e clique em Restaurar.',
 
 		aboutTab		: 'Sobre'
@@ -716,11 +720,11 @@
 	{
 		title		: 'Sobre o CKEditor',
-		dlgTitle	: 'About CKEditor', // MISSING
-		moreInfo	: 'Para informações sobre a licença, por favor, visite o nosso site na Internet:',
-		copy		: 'Direito de reprodução &copy; $1. Todos os direitos reservados.'
+		dlgTitle	: 'Sobre o CKEditor',
+		moreInfo	: 'Para informações sobre a licença por favor visite o nosso site:',
+		copy		: 'Copyright &copy; $1. Todos os direitos reservados.'
 	},
 
 	maximize : 'Maximizar',
-	minimize : 'Minimize', // MISSING
+	minimize : 'Minimize',
 
 	fakeobjects :
@@ -736,12 +740,18 @@
 	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		: 'Selecione uma cor',
+		options	:	'Opções de Cor',
+		highlight	: 'Grifar',
+		selected	: 'Cor Selecionada',
+		clear		: 'Limpar'
+	},
+
+	toolbarCollapse	: 'Diminuir Barra de Ferramentas',
+	toolbarExpand	: 'Aumentar Barra de Ferramentas',
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/pt.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/pt.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/pt.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/ro.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/ro.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/ro.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/ru.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/ru.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/ru.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'О словарях'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Свернуть панель инструментов',
-	toolbarExpand	: 'Развернуть панель инструментов'
+	toolbarExpand	: 'Развернуть панель инструментов',
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/sk.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/sk.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/sk.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/sl.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/sl.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/sl.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: 'O storitvi'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/sr-latn.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/sr-latn.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/sr-latn.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/sr.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/sr.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/sr.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/sv.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/sv.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/sv.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/th.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/th.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/th.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/tr.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/tr.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/tr.js	(revision 6006)
@@ -5,7 +5,6 @@
 
 /**
- * @fileOverview Defines the {@link CKEDITOR.lang} object, for the
- * Turkish language.
- */
+* @fileOverview
+*/
 
 /**#@+
@@ -106,7 +105,11 @@
 		targetSelf		: 'Aynı Pencere (_self)',
 		targetParent	: 'Ana Pencere (_parent)',
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
 
 		// Put the voice-only part of the label in the span.
-		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>'
+		unavailable		: '%1<span class="cke_accessibility">, hazır değildir</span>'
 	},
 
@@ -193,22 +196,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // 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		: 'Sayılandırılmış Liste Özellikleri',
+		bulletedTitle		: 'Simgeli Liste Özellikleri',
+		type				: 'Tipi',
+		start				: 'Başla',
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Daire',
+		disc				: 'Disk',
+		square				: 'Kare',
+		none				: 'Yok',
+		notset				: '<ayarlanmamış>',
+		armenian			: 'Ermenice sayılandırma',
+		georgian			: 'Gürcüce numaralandırma (an, ban, gan, vs.)',
+		lowerRoman			: 'Küçük Roman (i, ii, iii, iv, v, vs.)',
+		upperRoman			: 'Büyük Roman (I, II, III, IV, V, vs.)',
+		lowerAlpha			: 'Küçük Alpha (a, b, c, d, e, vs.)',
+		upperAlpha			: 'Büyük Alpha (A, B, C, D, E, vs.)',
+		lowerGreek			: 'Küçük Greek (alpha, beta, gamma, vs.)',
+		decimal				: 'Ondalık (1, 2, 3, vs.)',
+		decimalLeadingZero	: 'Başı sıfırlı ondalık (01, 02, 03, vs.)'
 	},
 
@@ -475,5 +479,5 @@
 		vSpace			: 'Dikey Boşluk',
 		validateSrc		: 'Lütfen köprü URL\'sini yazın',
-		validateWidth	: 'Width must be a number.',
+		validateWidth	: 'Genişlik bir sayı olmalıdır.',
 		validateHeight	: 'Yükseklik sayı olmalıdır.',
 		validateHSpace	: 'HSpace sayı olmalıdır.',
@@ -681,5 +685,5 @@
 	{
 		title			: 'Girmiş olduğunuz kelime denetimi',
-		opera_title		: 'Not supported by Opera', // MISSING
+		opera_title		: 'Opera tarafından desteklenmemektedir',
 		enable			: 'SCAYT etkinleştir',
 		disable			: 'SCAYT pasifleştir',
@@ -695,18 +699,18 @@
 
 		optionsTab		: 'Seçenekler',
-		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			: 'Tüm büyük küçük kelimeleri yoksay',
+		ignoreDomainNames : 'Domain adlarını yoksay',
+		mixedCase		: 'Karışık büyüklük ile Sözcükler yoksay',
+		mixedWithDigits	: 'Sayılarla Kelimeler yoksay',
 
 		languagesTab	: 'Diller',
 
 		dictionariesTab	: 'Sözlükler',
-		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 it\'s name and click the Restore button.', // MISSING
+		dic_field_name	: 'Sözlük adı',
+		dic_create		: 'Oluştur',
+		dic_restore		: 'Geri al',
+		dic_delete		: 'Sil',
+		dic_rename		: 'Yeniden adlandır',
+		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 it\'s name and click the Restore button.',
 
 		aboutTab		: 'Hakkında'
@@ -737,5 +741,5 @@
 	{
 		title		: 'Renk seç',
-		options	:	'Color Options', // MISSING
+		options	:	'Renk Seçenekleri',
 		highlight	: 'İşaretle',
 		selected	: 'Seçilmiş',
@@ -744,4 +748,10 @@
 
 	toolbarCollapse	: 'Toolbar\'ı topla',
-	toolbarExpand	: 'Toolbar\'ı aç'
+	toolbarExpand	: 'Toolbar\'ı aç',
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/uk.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/uk.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/uk.js	(revision 6006)
@@ -6,5 +6,5 @@
 /**
  * @fileOverview Defines the {@link CKEDITOR.lang} object, for the
- * Ukrainian language. Translated by Alexander Pervak.
+ * Ukrainian language.
  */
 
@@ -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 : 'Текстовий редактор, %1, натисніть ALT 0 для довідки.',
 
 	// ARIA descriptions.
-	toolbar	: 'Toolbar', // MISSING
-	editor	: 'Rich Text Editor', // MISSING
+	toolbar	: 'Панель інструментів',
+	editor	: 'Текстовий редактор',
 
 	// Toolbar buttons without dialogs.
@@ -51,11 +51,11 @@
 	italic			: 'Курсив',
 	selectAll		: 'Виділити все',
-	removeFormat	: 'Прибрати форматування',
+	removeFormat	: 'Очистити форматування',
 	strike			: 'Закреслений',
-	subscript		: 'Підрядковий індекс',
-	superscript		: 'Надрядковий индекс',
-	horizontalrule	: 'Вставити горизонтальну лінію',
-	pagebreak		: 'Вставити розривши сторінки',
-	unlink			: 'Знищити посилання',
+	subscript		: 'Нижній індекс',
+	superscript		: 'Верхній індекс',
+	horizontalrule	: 'Горизонтальна лінія',
+	pagebreak		: 'Вставити розрив сторінки',
+	unlink			: 'Видалити посилання',
 	undo			: 'Повернути',
 	redo			: 'Повторити',
@@ -64,13 +64,13 @@
 	common :
 	{
-		browseServer	: 'Передивитися на сервері',
+		browseServer	: 'Огляд',
 		url				: 'URL',
 		protocol		: 'Протокол',
-		upload			: 'Закачати',
+		upload			: 'Надіслати',
 		uploadSubmit	: 'Надіслати на сервер',
 		image			: 'Зображення',
 		flash			: 'Flash',
 		form			: 'Форма',
-		checkbox		: 'Флагова кнопка',
+		checkbox		: 'Галочка',
 		radio			: 'Кнопка вибору',
 		textField		: 'Текстове поле',
@@ -82,9 +82,9 @@
 		notSet			: '<не визначено>',
 		id				: 'Ідентифікатор',
-		name			: 'Им\'я',
+		name			: 'Ім\'я',
 		langDir			: 'Напрямок мови',
-		langDirLtr		: 'Зліва на право (LTR)',
-		langDirRtl		: 'Зправа на ліво (RTL)',
-		langCode		: 'Мова',
+		langDirLtr		: 'Зліва направо (LTR)',
+		langDirRtl		: 'Справа наліво (RTL)',
+		langCode		: 'Код мови',
 		longDescr		: 'Довгий опис URL',
 		cssClass		: 'Клас CSS',
@@ -93,17 +93,21 @@
 		ok				: 'ОК',
 		cancel			: 'Скасувати',
-		close			: 'Close', // MISSING
-		preview			: 'Preview', // MISSING
-		generalTab		: 'Загальна',
-		advancedTab		: 'Розширений',
-		validateNumberFailed : 'Значення не є числом.',
-		confirmNewPage	: 'Всі не збережені зміни будуть втрачені. Ви впевнені, що хочете завантажити нову сторінку?',
-		confirmCancel	: 'Деякі опції були змінені. Закрити вікно?',
-		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
+		close			: 'Закрити',
+		preview			: 'Попередній перегляд',
+		generalTab		: 'Основне',
+		advancedTab		: 'Додаткове',
+		validateNumberFailed : 'Значення не є цілим числом.',
+		confirmNewPage	: 'Всі незбережені зміни будуть втрачені. Ви впевнені, що хочете завантажити нову сторінку?',
+		confirmCancel	: 'Деякі опції змінено. Закрити вікно без збереження змін?',
+		options			: 'Опції',
+		target			: 'Ціль',
+		targetNew		: 'Нове вікно (_blank)',
+		targetTop		: 'Поточне вікно (_top)',
+		targetSelf		: 'Поточний фрейм/вікно (_self)',
+		targetParent	: 'Батьківський фрейм/вікно (_parent)',
+		langDirLTR		: 'Зліва направо (LTR)',
+		langDirRTL		: 'Справа наліво (RTL)',
+		styles			: 'Стиль CSS',
+		cssClasses		: 'Клас CSS',
 
 		// Put the voice-only part of the label in the span.
@@ -113,5 +117,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Опції контекстного меню'
 	},
 
@@ -119,7 +123,7 @@
 	specialChar		:
 	{
-		toolbar		: 'Вставити спеціальний символ',
+		toolbar		: 'Спеціальний символ',
 		title		: 'Оберіть спеціальний символ',
-		options : 'Special Character Options' // MISSING
+		options : 'Опції'
 	},
 
@@ -133,22 +137,22 @@
 		info		: 'Інформація посилання',
 		target		: 'Ціль',
-		upload		: 'Закачати',
-		advanced	: 'Розширений',
+		upload		: 'Надіслати',
+		advanced	: 'Додаткове',
 		type		: 'Тип посилання',
-		toUrl		: 'URL', // MISSING
+		toUrl		: 'URL',
 		toAnchor	: 'Якір на цю сторінку',
-		toEmail		: 'Эл. пошта',
+		toEmail		: 'Ел. пошта',
 		targetFrame		: '<фрейм>',
-		targetPopup		: '<спливаюче вікно>',
-		targetFrameName	: 'Ім\'я целевого фрейма',
-		targetPopupName	: 'Ім\'я спливаючого вікна',
-		popupFeatures	: 'Властивості спливаючого вікна',
+		targetPopup		: '<випливаюче вікно>',
+		targetFrameName	: 'Ім\'я цільового фрейму',
+		targetPopupName	: 'Ім\'я випливаючого вікна',
+		popupFeatures	: 'Властивості випливаючого вікна',
 		popupResizable	: 'Масштабоване',
-		popupStatusBar	: 'Строка статусу',
+		popupStatusBar	: 'Рядок статусу',
 		popupLocationBar: 'Панель локації',
 		popupToolbar	: 'Панель інструментів',
 		popupMenuBar	: 'Панель меню',
 		popupFullScreen	: 'Повний екран (IE)',
-		popupScrollBars	: 'Полоси прокрутки',
+		popupScrollBars	: 'Стрічки прокрутки',
 		popupDependent	: 'Залежний (Netscape)',
 		popupWidth		: 'Ширина',
@@ -156,26 +160,26 @@
 		popupHeight		: 'Висота',
 		popupTop		: 'Позиція зверху',
-		id				: 'Ідентифікатор (Id)',
+		id				: 'Ідентифікатор',
 		langDir			: 'Напрямок мови',
-		langDirLTR		: 'Зліва на право (LTR)',
-		langDirRTL		: 'Зправа на ліво (RTL)',
+		langDirLTR		: 'Зліва направо (LTR)',
+		langDirRTL		: 'Справа наліво (RTL)',
 		acccessKey		: 'Гаряча клавіша',
-		name			: 'Им\'я',
-		langCode		: 'Напрямок мови',
+		name			: 'Ім\'я',
+		langCode		: 'Код мови',
 		tabIndex		: 'Послідовність переходу',
 		advisoryTitle	: 'Заголовок',
 		advisoryContentType	: 'Тип вмісту',
 		cssClasses		: 'Клас CSS',
-		charset			: 'Кодировка',
+		charset			: 'Кодування',
 		styles			: 'Стиль CSS',
 		selectAnchor	: 'Оберіть якір',
-		anchorName		: 'За ім\'ям якоря',
-		anchorId		: 'За ідентифікатором елемента',
+		anchorName		: 'За ім\'ям елементу',
+		anchorId		: 'За ідентифікатором елементу',
 		emailAddress	: 'Адреса ел. пошти',
 		emailSubject	: 'Тема листа',
 		emailBody		: 'Тіло повідомлення',
-		noAnchors		: '(Немає якорів доступних в цьому документі)',
-		noUrl			: 'Будь ласка, занесіть URL посилання',
-		noEmail			: 'Будь ласка, занесіть адрес эл. почты'
+		noAnchors		: '(В цьому документі немає якорів)',
+		noUrl			: 'Будь ласка, вкажіть URL посилання',
+		noEmail			: 'Будь ласка, вкажіть адрес ел. пошти'
 	},
 
@@ -187,5 +191,5 @@
 		title		: 'Властивості якоря',
 		name		: 'Ім\'я якоря',
-		errorName	: 'Будь ласка, занесіть ім\'я якоря'
+		errorName	: 'Будь ласка, вкажіть ім\'я якоря'
 	},
 
@@ -193,22 +197,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // 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		: 'Опції нумерованого списку',
+		bulletedTitle		: 'Опції маркірованого списку',
+		type				: 'Тип',
+		start				: 'Почати з...',
+		validateStartNumber				:'Початковий номер списку повинен бути цілим числом.',
+		circle				: 'Кільце',
+		disc				: 'Кружечок',
+		square				: 'Квадратик',
+		none				: 'Нема',
+		notset				: '<не вказано>',
+		armenian			: 'Вірменська нумерація',
+		georgian			: 'Грузинська нумерація (an, ban, gan і т.д.)',
+		lowerRoman			: 'Малі римські (i, ii, iii, iv, v і т.д.)',
+		upperRoman			: 'Великі римські (I, II, III, IV, V і т.д.)',
+		lowerAlpha			: 'Малі лат. букви (a, b, c, d, e і т.д.)',
+		upperAlpha			: 'Великі лат. букви (A, B, C, D, E і т.д.)',
+		lowerGreek			: 'Малі гр. букви (альфа, бета, гамма і т.д.)',
+		decimal				: 'Десяткові (1, 2, 3 і т.д.)',
+		decimalLeadingZero	: 'Десяткові з нулем (01, 02, 03 і т.д.)'
 	},
 
@@ -221,10 +226,10 @@
 		findWhat			: 'Шукати:',
 		replaceWith			: 'Замінити на:',
-		notFoundMsg			: 'Вказаний текст не знайдений.',
+		notFoundMsg			: 'Вказаний текст не знайдено.',
 		matchCase			: 'Враховувати регістр',
 		matchWord			: 'Збіг цілих слів',
 		matchCyclic			: 'Циклічна заміна',
 		replaceAll			: 'Замінити все',
-		replaceSuccessMsg	: '%1 співпадінь(я) замінено.'
+		replaceSuccessMsg	: '%1 співпадінь(ня) замінено.'
 	},
 
@@ -236,82 +241,82 @@
 		menu		: 'Властивості таблиці',
 		deleteTable	: 'Видалити таблицю',
-		rows		: 'Строки',
-		columns		: 'Колонки',
-		border		: 'Розмір бордюра',
+		rows		: 'Рядки',
+		columns		: 'Стовбці',
+		border		: 'Розмір рамки',
 		align		: 'Вирівнювання',
-		alignLeft	: 'Зліва',
+		alignLeft	: 'По лівому краю',
 		alignCenter	: 'По центру',
-		alignRight	: 'Зправа',
+		alignRight	: 'По правому краю',
 		width		: 'Ширина',
 		widthPx		: 'пікселів',
 		widthPc		: 'відсотків',
-		widthUnit	: 'width unit', // MISSING
+		widthUnit	: 'Одиниці вимір.',
 		height		: 'Висота',
-		cellSpace	: 'Проміжок (spacing)',
-		cellPad		: 'Відступ (padding)',
-		caption		: 'Заголовок',
-		summary		: 'Резюме',
-		headers		: 'Заголовки',
-		headersNone		: 'Жодного',
-		headersColumn	: 'Перша колонка',
-		headersRow		: 'Перший рядок',
-		headersBoth		: 'Обидва',
-		invalidRows		: 'Кількість рядків повинна бути числом більше за 0.',
-		invalidCols		: 'Кількість колонок повинна бути числом більше за  0.',
-		invalidBorder	: 'Розмір бордюра повинен бути числом.',
-		invalidWidth	: 'Ширина таблиці повинна бути числом.',
-		invalidHeight	: 'Висота таблиці повинна бути числом.',
-		invalidCellSpacing	: 'Проміжок (spacing) комірки повинен бути числом.',
-		invalidCellPadding	: 'Відступ (padding) комірки повинен бути числом.',
+		cellSpace	: 'Проміжок',
+		cellPad		: 'Внутр. відступ',
+		caption		: 'Заголовок таблиці',
+		summary		: 'Детальний опис заголовку таблиці',
+		headers		: 'Заголовки стовбців/рядків',
+		headersNone		: 'Без заголовків',
+		headersColumn	: 'Стовбці',
+		headersRow		: 'Рядки',
+		headersBoth		: 'Стовбці і рядки',
+		invalidRows		: 'Кількість рядків повинна бути більшою 0.',
+		invalidCols		: 'Кількість стовбців повинна бути більшою 0.',
+		invalidBorder	: 'Розмір рамки повинен бути цілим числом.',
+		invalidWidth	: 'Ширина таблиці повинна бути цілим числом.',
+		invalidHeight	: 'Висота таблиці повинна бути цілим числом.',
+		invalidCellSpacing	: 'Проміжок між комірками повинен бути цілим числом.',
+		invalidCellPadding	: 'Внутр. відступ комірки повинен бути цілим числом.',
 
 		cell :
 		{
-			menu			: 'Осередок',
-			insertBefore	: 'Вставити комірку до',
+			menu			: 'Комірки',
+			insertBefore	: 'Вставити комірку перед',
 			insertAfter		: 'Вставити комірку після',
 			deleteCell		: 'Видалити комірки',
 			merge			: 'Об\'єднати комірки',
-			mergeRight		: 'Об\'єднати зправа',
-			mergeDown		: 'Об\'єднати до низу',
+			mergeRight		: 'Об\'єднати справа',
+			mergeDown		: 'Об\'єднати донизу',
 			splitHorizontal	: 'Розділити комірку по горизонталі',
 			splitVertical	: 'Розділити комірку по вертикалі',
 			title			: 'Властивості комірки',
 			cellType		: 'Тип комірки',
-			rowSpan			: 'Обєднання рядків (Rows Span)',
-			colSpan			: 'Обєднання стовпчиків (Columns Span)',
-			wordWrap		: 'Авто згортання тексту (Word Wrap)',
-			hAlign			: 'Горизонтальне вирівнювання',
-			vAlign			: 'Вертикальне вирівнювання',
-			alignTop		: 'До верху',
-			alignMiddle		: 'Посередині',
-			alignBottom		: 'До низу',
+			rowSpan			: 'Об\'єднання рядків',
+			colSpan			: 'Об\'єднання стовпців',
+			wordWrap		: 'Автоперенесення тексту',
+			hAlign			: 'Гориз. вирівнювання',
+			vAlign			: 'Верт. вирівнювання',
+			alignTop		: 'По верхньому краю',
+			alignMiddle		: 'По середині',
+			alignBottom		: 'По нижньому краю',
 			alignBaseline	: 'По базовій лінії',
 			bgColor			: 'Колір фону',
-			borderColor		: 'Колір бордюру',
+			borderColor		: 'Колір рамки',
 			data			: 'Дані',
 			header			: 'Заголовок',
 			yes				: 'Так',
 			no				: 'Ні',
-			invalidWidth	: 'Ширина комірки повинна бути числом.',
-			invalidHeight	: 'Висота комірки повинна бути числом.',
-			invalidRowSpan	: 'Кількість обєднуваних рядків повинна бути цілим числом.',
-			invalidColSpan	: 'Кількість обєднуваних стовпчиків повинна бути цілим числом.',
-			chooseColor		: 'Choose' // MISSING
+			invalidWidth	: 'Ширина комірки повинна бути цілим числом.',
+			invalidHeight	: 'Висота комірки повинна бути цілим числом.',
+			invalidRowSpan	: 'Кількість об\'єднуваних рядків повинна бути цілим числом.',
+			invalidColSpan	: 'Кількість об\'єднуваних стовбців повинна бути цілим числом.',
+			chooseColor		: 'Обрати'
 		},
 
 		row :
 		{
-			menu			: 'Рядок',
-			insertBefore	: 'Вставити рядок до',
+			menu			: 'Рядки',
+			insertBefore	: 'Вставити рядок перед',
 			insertAfter		: 'Вставити рядок після',
-			deleteRow		: 'Видалити строки'
+			deleteRow		: 'Видалити рядки'
 		},
 
 		column :
 		{
-			menu			: 'Колонка',
-			insertBefore	: 'Вставити колонку до',
-			insertAfter		: 'Вставити колонку після',
-			deleteColumn	: 'Видалити колонки'
+			menu			: 'Стовбці',
+			insertBefore	: 'Вставити стовбець перед',
+			insertAfter		: 'Вставити стовбець після',
+			deleteColumn	: 'Видалити стовбці'
 		}
 	},
@@ -321,9 +326,9 @@
 	{
 		title		: 'Властивості кнопки',
-		text		: 'Текст (Значення)',
+		text		: 'Значення',
 		type		: 'Тип',
-		typeBtn		: 'Кнопка',
-		typeSbm		: 'Відправити',
-		typeRst		: 'Скинути'
+		typeBtn		: 'Кнопка (button)',
+		typeSbm		: 'Надіслати (submit)',
+		typeRst		: 'Очистити (reset)'
 	},
 
@@ -331,5 +336,5 @@
 	checkboxAndRadio :
 	{
-		checkboxTitle : 'Властивості флагової кнопки',
+		checkboxTitle : 'Властивості галочки',
 		radioTitle	: 'Властивості кнопки вибору',
 		value		: 'Значення',
@@ -354,7 +359,7 @@
 		opAvail		: 'Доступні варіанти',
 		value		: 'Значення',
-		size		: 'Розмір',
-		lines		: 'лінії',
-		chkMulti	: 'Дозволити обрання декількох позицій',
+		size		: 'Кількість',
+		lines		: 'видимих позицій у списку',
+		chkMulti	: 'Список з мультивибором',
 		opText		: 'Текст',
 		opValue		: 'Значення',
@@ -363,5 +368,5 @@
 		btnUp		: 'Вгору',
 		btnDown		: 'Вниз',
-		btnSetValue : 'Встановити як вибране значення',
+		btnSetValue : 'Встановити як обране значення',
 		btnDelete	: 'Видалити'
 	},
@@ -371,6 +376,6 @@
 	{
 		title		: 'Властивості текстової області',
-		cols		: 'Колонки',
-		rows		: 'Строки'
+		cols		: 'Стовбці',
+		rows		: 'Рядки'
 	},
 
@@ -382,5 +387,5 @@
 		value		: 'Значення',
 		charWidth	: 'Ширина',
-		maxChars	: 'Макс. кіл-ть символів',
+		maxChars	: 'Макс. к-ть символів',
 		type		: 'Тип',
 		typeText	: 'Текст',
@@ -402,29 +407,29 @@
 		titleButton	: 'Властивості кнопки із зображенням',
 		menu		: 'Властивості зображення',
-		infoTab		: 'Інформація про изображении',
+		infoTab		: 'Інформація про зображення',
 		btnUpload	: 'Надіслати на сервер',
-		upload		: 'Закачати',
+		upload		: 'Надіслати',
 		alt			: 'Альтернативний текст',
 		width		: 'Ширина',
 		height		: 'Висота',
 		lockRatio	: 'Зберегти пропорції',
-		unlockRatio	: 'Unlock Ratio', // MISSING
-		resetSize	: 'Скинути розмір',
-		border		: 'Бордюр',
-		hSpace		: 'Горизонтальний відступ',
-		vSpace		: 'Вертикальний відступ',
-		align		: 'Вирівнювання',
+		unlockRatio	: 'Не зберігати пропорції',
+		resetSize	: 'Очистити поля розмірів',
+		border		: 'Рамка',
+		hSpace		: 'Гориз. відступ',
+		vSpace		: 'Верт. відступ',
+		align		: 'Вирівн.',
 		alignLeft	: 'По лівому краю',
 		alignRight	: 'По правому краю',
-		alertUrl	: 'Будь ласка, введіть URL зображення',
+		alertUrl	: 'Будь ласка, вкажіть URL зображення',
 		linkTab		: 'Посилання',
-		button2Img	: 'Ви хочете перетворити обрану кнопку-зображення на просте зображення?',
-		img2Button	: 'Ви хочете перетворити обране зображення на кнопку-зображення?',
-		urlMissing	: 'Image source URL is missing.', // MISSING
-		validateWidth	: 'Width must be a whole number.', // MISSING
-		validateHeight	: 'Height must be a whole number.', // 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	: 'Бажаєте перетворити обрану кнопку-зображення на просте зображення?',
+		img2Button	: 'Бажаєте перетворити обране зображення на кнопку-зображення?',
+		urlMissing	: 'Вкажіть URL зображення.',
+		validateWidth	: 'Ширина повинна бути цілим числом.',
+		validateHeight	: 'Висота повинна бути цілим числом.',
+		validateBorder	: 'Ширина рамки повинна бути цілим числом.',
+		validateHSpace	: 'Гориз. відступ повинен бути цілим числом.',
+		validateVSpace	: 'Верт. відступ повинен бути цілим числом.'
 	},
 
@@ -435,12 +440,12 @@
 		propertiesTab	: 'Властивості',
 		title			: 'Властивості Flash',
-		chkPlay			: 'Авто програвання',
-		chkLoop			: 'Зациклити',
+		chkPlay			: 'Автопрогравання',
+		chkLoop			: 'Циклічно',
 		chkMenu			: 'Дозволити меню Flash',
 		chkFull			: 'Дозволити повноекранний перегляд',
  		scale			: 'Масштаб',
-		scaleAll		: 'Показати всі',
+		scaleAll		: 'Показати все',
 		scaleNoBorder	: 'Без рамки',
-		scaleFit		: 'Дійсний розмір',
+		scaleFit		: 'Поч. розмір',
 		access			: 'Доступ до скрипта',
 		accessAlways	: 'Завжди',
@@ -449,34 +454,34 @@
 		align			: 'Вирівнювання',
 		alignLeft		: 'По лівому краю',
-		alignAbsBottom	: 'Абс по низу',
-		alignAbsMiddle	: 'Абс по середині',
+		alignAbsBottom	: 'По нижньому краю (abs)',
+		alignAbsMiddle	: 'По середині (abs)',
 		alignBaseline	: 'По базовій лінії',
-		alignBottom		: 'По низу',
+		alignBottom		: 'По нижньому краю',
 		alignMiddle		: 'По середині',
 		alignRight		: 'По правому краю',
-		alignTextTop	: 'Текст на верху',
-		alignTop		: 'По верху',
+		alignTextTop	: 'Текст по верхньому краю',
+		alignTop		: 'По верхньому краю',
 		quality			: 'Якість',
 		qualityBest		: 'Відмінна',
 		qualityHigh		: 'Висока',
-		qualityAutoHigh	: 'Авто відмінна',
+		qualityAutoHigh	: 'Автом. відмінна',
 		qualityMedium	: 'Середня',
-		qualityAutoLow	: 'Авто низька',
+		qualityAutoLow	: 'Автом. низька',
 		qualityLow		: 'Низька',
 		windowModeWindow: 'Вікно',
-		windowModeOpaque: 'Непрозорість (Opaque)',
-		windowModeTransparent : 'Прозорість (Transparent)',
-		windowMode		: 'Режим вікна',
+		windowModeOpaque: 'Непрозорість',
+		windowModeTransparent : 'Прозорість',
+		windowMode		: 'Віконний режим',
 		flashvars		: 'Змінні Flash',
 		bgcolor			: 'Колір фону',
 		width			: 'Ширина',
 		height			: 'Висота',
-		hSpace			: 'Горизонтальний відступ',
-		vSpace			: 'Вертикальний відступ',
-		validateSrc		: 'Будь ласка, занесіть URL посилання',
-		validateWidth	: 'Ширина повинна бути числом.',
-		validateHeight	: 'Висота повинна бути числом.',
-		validateHSpace	: 'HSpace повинна бути числом.',
-		validateVSpace	: 'VSpace повинна бути числом.'
+		hSpace			: 'Гориз. відступ',
+		vSpace			: 'Верт. відступ',
+		validateSrc		: 'Будь ласка, вкажіть URL посилання',
+		validateWidth	: 'Ширина повинна бути цілим числом.',
+		validateHeight	: 'Висота повинна бути цілим числом.',
+		validateHSpace	: 'Гориз. відступ повинен бути цілим числом.',
+		validateVSpace	: 'Верт. відступ повинен бути цілим числом.'
 	},
 
@@ -488,18 +493,18 @@
 		notAvailable	: 'Вибачте, але сервіс наразі недоступний.',
 		errorLoading	: 'Помилка завантаження : %s.',
-		notInDic		: 'Не має в словнику',
+		notInDic		: 'Немає в словнику',
 		changeTo		: 'Замінити на',
-		btnIgnore		: 'Ігнорувати',
-		btnIgnoreAll	: 'Ігнорувати все',
+		btnIgnore		: 'Пропустити',
+		btnIgnoreAll	: 'Пропустити все',
 		btnReplace		: 'Замінити',
 		btnReplaceAll	: 'Замінити все',
 		btnUndo			: 'Назад',
-		noSuggestions	: '- Немає припущень -',
+		noSuggestions	: '- немає варіантів -',
 		progress		: 'Виконується перевірка орфографії...',
 		noMispell		: 'Перевірку орфографії завершено: помилок не знайдено',
 		noChanges		: 'Перевірку орфографії завершено: жодне слово не змінено',
-		oneChange		: 'Перевірку орфографії завершено: змінено одно слово',
-		manyChanges		: 'Перевірку орфографії завершено: 1% слів змінено',
-		ieSpellDownload	: 'Модуль перевірки орфографії не встановлено. Бажаєтн завантажити його зараз?'
+		oneChange		: 'Перевірку орфографії завершено: змінено одне слово',
+		manyChanges		: 'Перевірку орфографії завершено: 1% слів(ова) змінено',
+		ieSpellDownload	: 'Модуль перевірки орфографії не встановлено. Бажаєте завантажити його зараз?'
 	},
 
@@ -508,15 +513,15 @@
 		toolbar	: 'Смайлик',
 		title	: 'Вставити смайлик',
-		options : 'Smiley Options' // MISSING
+		options : 'Опції смайликів'
 	},
 
 	elementsPath :
 	{
-		eleLabel : 'Elements path', // MISSING
+		eleLabel : 'Шлях',
 		eleTitle : '%1 елемент'
 	},
 
 	numberedlist	: 'Нумерований список',
-	bulletedlist	: 'Маркований список',
+	bulletedlist	: 'Маркірований список',
 	indent			: 'Збільшити відступ',
 	outdent			: 'Зменшити відступ',
@@ -535,17 +540,17 @@
 	{
 		title		: 'Вставити',
-		cutError	: 'Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+X).',
-		copyError	: 'Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+C).',
-		pasteMsg	: 'Будь ласка, вставте з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl/Cmd+V</STRONG>) та натисніть <STRONG>OK</STRONG>.',
-		securityMsg	: 'Редактор не може отримати прямий доступ до буферу обміну у зв\'язку з налаштуваннями вашого браузера. Вам потрібно вставити інформацію повторно в це вікно.',
-		pasteArea	: 'Paste Area' // MISSING
+		cutError	: 'Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+X)',
+		copyError	: 'Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+C).',
+		pasteMsg	: 'Будь ласка, вставте інформацію з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl/Cmd+V</STRONG>), та натисніть <STRONG>OK</STRONG>.',
+		securityMsg	: 'Редактор не може отримати прямий доступ до буферу обміну у зв\'язку з налаштуваннями Вашого браузера. Вам потрібно вставити інформацію в це вікно.',
+		pasteArea	: 'Область вставки'
 	},
 
 	pastefromword :
 	{
-		confirmCleanup	: 'Текст, що ви хочете вставити, схожий на копійований з Word. Ви хочете очистити його перед вставкою?',
+		confirmCleanup	: 'Текст, що Ви намагаєтесь вставити, схожий на скопійований з Word. Бажаєте очистити його форматування перед вставлянням?',
 		toolbar			: 'Вставити з Word',
 		title			: 'Вставити з Word',
-		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		error			: 'Неможливо очистити форматування через внутрішню помилку.'
 	},
 
@@ -560,8 +565,8 @@
 		button			: 'Шаблони',
 		title			: 'Шаблони змісту',
-		options : 'Template Options', // MISSING
+		options : 'Опції шаблону',
 		insertOption	: 'Замінити поточний вміст',
 		selectPromptMsg	: 'Оберіть, будь ласка, шаблон для відкриття в редакторі<br>(поточний зміст буде втрачено):',
-		emptyListMsg	: '(Не визначено жодного шаблону)'
+		emptyListMsg	: '(Не знайдено жодного шаблону)'
 	},
 
@@ -571,8 +576,8 @@
 	{
 		label		: 'Стиль',
-		panelTitle	: 'Formatting Styles', // MISSING
-		panelTitle1	: 'Block стилі',
-		panelTitle2	: 'Inline стилі',
-		panelTitle3	: 'Object стилі'
+		panelTitle	: 'Стилі форматування',
+		panelTitle1	: 'Блочні стилі',
+		panelTitle2	: 'Рядкові стилі',
+		panelTitle3	: 'Об\'єктні стилі'
 	},
 
@@ -591,22 +596,22 @@
 		tag_h5		: 'Заголовок 5',
 		tag_h6		: 'Заголовок 6',
-		tag_div		: 'Нормальний (DIV)'
+		tag_div		: 'Нормальний (div)'
 	},
 
 	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				: 'Створити блок-контейнер',
+		toolbar				: 'Створити блок-контейнер',
+		cssClassInputLabel	: 'Клас CSS',
+		styleSelectLabel	: 'Стиль CSS',
+		IdInputLabel		: 'Ідентифікатор',
+		languageCodeInputLabel	: 'Код мови',
+		inlineStyleInputLabel	: 'Вписаний стиль',
+		advisoryTitleInputLabel	: 'Зміст випливаючої підказки',
+		langDirLabel		: 'Напрямок мови',
+		langDirLTRLabel		: 'Зліва направо (LTR)',
+		langDirRTLLabel		: 'Справа наліво (RTL)',
+		edit				: 'Редагувати блок',
+		remove				: 'Видалити блок'
   	},
 
@@ -621,5 +626,5 @@
 	{
 		label		: 'Розмір',
-		voiceLabel	: 'Розмір шрифта',
+		voiceLabel	: 'Розмір шрифту',
 		panelTitle	: 'Розмір'
 	},
@@ -629,6 +634,6 @@
 		textColorTitle	: 'Колір тексту',
 		bgColorTitle	: 'Колір фону',
-		panelTitle		: 'Colors', // MISSING
-		auto			: 'Автоматичний',
+		panelTitle		: 'Кольори',
+		auto			: 'Авто',
 		more			: 'Кольори...'
 	},
@@ -636,44 +641,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' : 'Dim 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' : 'Dark 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' : 'Чорний',
+		'800000' : 'Бордовий',
+		'8B4513' : 'Коричневий',
+		'2F4F4F' : 'Темний сіро-зелений',
+		'008080' : 'Морської хвилі',
+		'000080' : 'Сливовий',
+		'4B0082' : 'Індиго',
+		'696969' : 'Темносірий',
+		'B22222' : 'Темночервоний',
+		'A52A2A' : 'Каштановий',
+		'DAA520' : 'Бежевий',
+		'006400' : 'Темнозелений',
+		'40E0D0' : 'Бірюзовий',
+		'0000CD' : 'Темносиній',
+		'800080' : 'Пурпурний',
+		'808080' : 'Сірий',
+		'F00' : 'Червоний',
+		'FF8C00' : 'Темнооранжевий',
+		'FFD700' : 'Жовтий',
+		'008000' : 'Зелений',
+		'0FF' : 'Синьо-зелений',
+		'00F' : 'Синій',
+		'EE82EE' : 'Фіолетовий',
+		'A9A9A9' : 'Світлосірий',
+		'FFA07A' : 'Рожевий',
+		'FFA500' : 'Оранжевий',
+		'FFFF00' : 'Яскравожовтий',
+		'00FF00' : 'Салатовий',
+		'AFEEEE' : 'Світлобірюзовий',
+		'ADD8E6' : 'Блакитний',
+		'DDA0DD' : 'Світлофіолетовий',
+		'D3D3D3' : 'Сріблястий',
+		'FFF0F5' : 'Світлорожевий',
+		'FAEBD7' : 'Світлооранжевий',
+		'FFFFE0' : 'Світложовтий',
+		'F0FFF0' : 'Світлозелений',
+		'F0FFFF' : 'Світлий синьо-зелений',
+		'F0F8FF' : 'Світлоблакитний',
+		'E6E6FA' : 'Лавандовий',
+		'FFF' : 'Білий'
 	},
 
@@ -681,34 +686,34 @@
 	{
 		title			: 'Перефірка орфографії по мірі набору',
-		opera_title		: 'Not supported by Opera', // MISSING
-		enable			: 'Включити SCAYT',
-		disable			: 'Відключити SCAYT',
+		opera_title		: 'Не підтримується в Opera',
+		enable			: 'Ввімкнути SCAYT',
+		disable			: 'Вимкнути SCAYT',
 		about			: 'Про SCAYT',
 		toggle			: 'Перемкнути SCAYT',
 		options			: 'Опції',
 		langs			: 'Мови',
-		moreSuggestions	: 'Більше пропозицій',
-		ignore			: 'Ігнорувати',
-		ignoreAll		: 'Ігнорувати всі',
+		moreSuggestions	: 'Більше варіантів',
+		ignore			: 'Пропустити',
+		ignoreAll		: 'Пропустити всі',
 		addWord			: 'Додати слово',
-		emptyDic		: 'Назва словника повинна бути заповнена.',
+		emptyDic		: 'Назва словника повинна бути вказана.',
 
 		optionsTab		: 'Опції',
-		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			: 'Пропустити прописні слова',
+		ignoreDomainNames : 'Пропустити доменні назви',
+		mixedCase		: 'Пропустити слова зі змішаним регістром',
+		mixedWithDigits	: 'Пропустити слова, що містять цифри',
 
 		languagesTab	: 'Мови',
 
 		dictionariesTab	: 'Словники',
-		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 it\'s name and click the Restore button.', // MISSING
-
-		aboutTab		: 'Про'
+		dic_field_name	: 'Назва словника',
+		dic_create		: 'Створити',
+		dic_restore		: 'Відновити',
+		dic_delete		: 'Видалити',
+		dic_rename		: 'Перейменувати',
+		dic_info		: 'Як правило, користувацькі словники зберігаються у cookie-файлах. Однак, cookie-файли мають обмеження на розмір. Якщо користувацький словник зростає в обсязі настільки, що вже не може бути збережений у cookie-файлі, тоді його можна зберегти на нашому сервері. Щоб зберегти Ваш персональний словник на нашому сервері необхідно вказати назву словника. Якщо Ви вже зберігали словник на сервері, будь ласка, вкажіть назву збереженого словника і натисніть кнопку Відновити.',
+
+		aboutTab		: 'Про SCAYT'
 	},
 
@@ -717,31 +722,37 @@
 		title		: 'Про CKEditor',
 		dlgTitle	: 'Про CKEditor',
-		moreInfo	: 'Щодо інформації з ліцензування завітайте до нашого сайту:',
+		moreInfo	: 'Щодо інформації з ліцензування завітайте на наш сайт:',
 		copy		: 'Copyright &copy; $1. Всі права застережено.'
 	},
 
 	maximize : 'Максимізувати',
-	minimize : 'Minimize', // MISSING
+	minimize : 'Мінімізувати',
 
 	fakeobjects :
 	{
 		anchor	: 'Якір',
-		flash	: 'Flash анімація',
+		flash	: 'Flash-анімація',
 		div		: 'Розрив сторінки',
-		unknown	: 'Невідомий об`єкт'
-	},
-
-	resize : 'Пересувайте для зміни розміру',
+		unknown	: 'Невідомий об\'єкт'
+	},
+
+	resize : 'Потягніть для зміни розмірів',
 
 	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		: 'Обрати колір',
+		options	:	'Опції кольорів',
+		highlight	: 'Колір, на який вказує курсор',
+		selected	: 'Обраний колір',
+		clear		: 'Очистити'
+	},
+
+	toolbarCollapse	: 'Згорнути панель інструментів',
+	toolbarExpand	: 'Розгорнути панель інструментів',
+
+	bidi :
+	{
+		ltr : 'Напрямок тексту зліва направо',
+		rtl : 'Напрямок тексту справа наліво'
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/vi.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/vi.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/vi.js	(revision 6006)
@@ -106,4 +106,8 @@
 		targetSelf		: 'Tại trang (_self)',
 		targetParent	: 'Cửa sổ cha (_parent)',
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Kiểu loại',
 		start				: 'Bắt đầu',
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Khuyên tròn',
 		disc				: 'Hình đĩa',
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		dic_delete		: 'Xóa',
 		dic_rename		: 'Thay tên',
-		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 it\'s name and click the Restore button.', // 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		: 'Thông tin'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Thu gọn thanh công cụ',
-	toolbarExpand	: 'Mở rộng thnah công cụ'
+	toolbarExpand	: 'Mở rộng thnah công cụ',
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/zh-cn.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/zh-cn.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/zh-cn.js	(revision 6006)
@@ -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 : '所见即所得编辑器, %1, 按 ALT+0 查看帮助。',
 
 	// ARIA descriptions.
-	toolbar	: 'Toolbar', // MISSING
-	editor	: 'Rich Text Editor', // MISSING
+	toolbar	: '工具栏',
+	editor	: '所见即所得编辑器',
 
 	// Toolbar buttons without dialogs.
@@ -68,5 +68,5 @@
 		protocol		: '协议',
 		upload			: '上传',
-		uploadSubmit	: '发送到服务器上',
+		uploadSubmit	: '上传到服务器上',
 		image			: '图象',
 		flash			: 'Flash',
@@ -93,17 +93,21 @@
 		ok				: '确定',
 		cancel			: '取消',
-		close			: 'Close', // MISSING
-		preview			: 'Preview', // MISSING
+		close			: '关闭',
+		preview			: '预览',
 		generalTab		: '常规',
 		advancedTab		: '高级',
 		validateNumberFailed : '需要输入数字格式',
 		confirmNewPage	: '当前文档内容未保存,是否确认新建文档？',
-		confirmCancel	: '部分选项尚未保存，是否确认关闭对话框？',
-		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
+		confirmCancel	: '部分修改尚未保存，是否确认关闭对话框？',
+		options			: '选项',
+		target			: '目标窗口',
+		targetNew		: '新窗口 (_blank)',
+		targetTop		: '整页 (_top)',
+		targetSelf		: '本窗口 (_self)',
+		targetParent	: '父窗口 (_parent)',
+		langDirLTR		: '从左到右 (LTR)',
+		langDirRTL		: '从右到左 (RTL)',
+		styles			: '样式',
+		cssClasses		: '样式类',
 
 		// Put the voice-only part of the label in the span.
@@ -113,5 +117,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : '快捷菜单选项'
 	},
 
@@ -121,5 +125,5 @@
 		toolbar		: '插入特殊符号',
 		title		: '选择特殊符号',
-		options : 'Special Character Options' // MISSING
+		options : '特殊符号选项'
 	},
 
@@ -136,5 +140,5 @@
 		advanced	: '高级',
 		type		: '超链接类型',
-		toUrl		: 'URL', // MISSING
+		toUrl		: '地址',
 		toAnchor	: '页内锚点链接',
 		toEmail		: '电子邮件',
@@ -162,5 +166,5 @@
 		acccessKey		: '访问键',
 		name			: '名称',
-		langCode		: '语言方向',
+		langCode		: '语言代码',
 		tabIndex		: 'Tab 键次序',
 		advisoryTitle	: '标题',
@@ -193,22 +197,23 @@
 	list:
 	{
-		numberedTitle		: 'Numbered List Properties', // MISSING
-		bulletedTitle		: 'Bulleted List Properties', // MISSING
-		type				: 'Type', // MISSING
-		start				: 'Start', // 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		: '编号列表属性',
+		bulletedTitle		: '项目列表属性',
+		type				: '标记类型',
+		start				: '开始序号',
+		validateStartNumber				:'列表开始序号必须为整数格式',
+		circle				: '空心圆',
+		disc				: '实心圆',
+		square				: '实心方块',
+		none				: '无标记',
+		notset				: '<没有设置>',
+		armenian			: '传统的亚美尼亚编号方式',
+		georgian			: '传统的乔治亚编号方式(an, ban, gan, 等)',
+		lowerRoman			: '小写罗马数字(i, ii, iii, iv, v, 等)',
+		upperRoman			: '大写罗马数字(I, II, III, IV, V, 等)',
+		lowerAlpha			: '小写英文字母(a, b, c, d, e, 等)',
+		upperAlpha			: '大写英文字母(A, B, C, D, E, 等)',
+		lowerGreek			: '小写希腊字母(alpha, beta, gamma, 等)',
+		decimal				: '数字 (1, 2, 3, 等)',
+		decimalLeadingZero	: '0开头的数字标记(01, 02, 03, 等)'
 	},
 
@@ -246,5 +251,5 @@
 		widthPx		: '像素',
 		widthPc		: '百分比',
-		widthUnit	: 'width unit', // MISSING
+		widthUnit	: '宽度单位',
 		height		: '高度',
 		cellSpace	: '间距',
@@ -278,13 +283,13 @@
 			title			: '单元格属性',
 			cellType		: '单元格类型',
-			rowSpan			: '行跨度',
-			colSpan			: '列跨度',
+			rowSpan			: '纵跨行数',
+			colSpan			: '横跨列数',
 			wordWrap		: '自动换行',
 			hAlign			: '水平对齐',
 			vAlign			: '垂直对齐',
-			alignTop		: '顶对齐',
-			alignMiddle		: '中对齐',
-			alignBottom		: '底对齐',
-			alignBaseline	: '基线对齐',
+			alignTop		: '顶端',
+			alignMiddle		: '中间',
+			alignBottom		: '底部',
+			alignBaseline	: '基线',
 			bgColor			: '背景颜色',
 			borderColor		: '边框颜色',
@@ -297,5 +302,5 @@
 			invalidRowSpan	: '行跨度必须为整数格式',
 			invalidColSpan	: '列跨度必须为整数格式',
-			chooseColor		: 'Choose' // MISSING
+			chooseColor		: '选择'
 		},
 
@@ -351,17 +356,17 @@
 	{
 		title		: '菜单/列表属性',
-		selectInfo	: '信息',
-		opAvail		: '列表值',
+		selectInfo	: '选择信息',
+		opAvail		: '可选项',
 		value		: '值',
 		size		: '高度',
 		lines		: '行',
 		chkMulti	: '允许多选',
-		opText		: '标签',
-		opValue		: '选定',
-		btnAdd		: '新增',
+		opText		: '选项文本',
+		opValue		: '选项值',
+		btnAdd		: '添加',
 		btnModify	: '修改',
 		btnUp		: '上移',
 		btnDown		: '下移',
-		btnSetValue : '设为初始化时选定',
+		btnSetValue : '设为初始选定',
 		btnDelete	: '删除'
 	},
@@ -403,5 +408,5 @@
 		menu		: '图象属性',
 		infoTab		: '图象',
-		btnUpload	: '发送到服务器上',
+		btnUpload	: '上传到服务器上',
 		upload		: '上传',
 		alt			: '替换文本',
@@ -409,6 +414,6 @@
 		height		: '高度',
 		lockRatio	: '锁定比例',
-		unlockRatio	: 'Unlock Ratio', // MISSING
-		resetSize	: '恢复尺寸',
+		unlockRatio	: '不锁定比例',
+		resetSize	: '原始尺寸',
 		border		: '边框大小',
 		hSpace		: '水平间距',
@@ -421,10 +426,10 @@
 		button2Img	: '确定要把当前按钮改变为图像吗?',
 		img2Button	: '确定要把当前图像改变为按钮吗?',
-		urlMissing	: 'Image source URL is missing.', // MISSING
-		validateWidth	: 'Width must be a whole number.', // MISSING
-		validateHeight	: 'Height must be a whole number.', // 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
+		urlMissing	: '缺少图像源文件地址',
+		validateWidth	: '图像宽度必须为整数格式',
+		validateHeight	: '图像高度必须为整数格式',
+		validateBorder	: '边框大小必须为整数格式',
+		validateHSpace	: '水平间距必须为整数格式',
+		validateVSpace	: '垂直间距必须为整数格式'
 	},
 
@@ -449,8 +454,8 @@
 		align			: '对齐方式',
 		alignLeft		: '左对齐',
-		alignAbsBottom	: '绝对底边',
+		alignAbsBottom	: '绝对底部',
 		alignAbsMiddle	: '绝对居中',
 		alignBaseline	: '基线',
-		alignBottom		: '底边',
+		alignBottom		: '底部',
 		alignMiddle		: '居中',
 		alignRight		: '右对齐',
@@ -460,7 +465,7 @@
 		qualityBest		: '最好',
 		qualityHigh		: '高',
-		qualityAutoHigh	: '高（自动）',
-		qualityMedium	: '中（自动）',
-		qualityAutoLow	: '低（自动）',
+		qualityAutoHigh	: '高(自动)',
+		qualityMedium	: '中(自动)',
+		qualityAutoLow	: '低(自动)',
 		qualityLow		: '低',
 		windowModeWindow: '窗体',
@@ -468,5 +473,5 @@
 		windowModeTransparent : '透明',
 		windowMode		: '窗体模式',
-		flashvars		: 'Flash变量',
+		flashvars		: 'Flash 变量',
 		bgcolor			: '背景颜色',
 		width			: '宽度',
@@ -474,5 +479,5 @@
 		hSpace			: '水平间距',
 		vSpace			: '垂直间距',
-		validateSrc		: '请输入超链接地址',
+		validateSrc		: '请输入源文件地址',
 		validateWidth	: '宽度必须为数字格式',
 		validateHeight	: '高度必须为数字格式',
@@ -486,6 +491,6 @@
 		toolbar			: '拼写检查',
 		title			: '拼写检查',
-		notAvailable	: '抱歉，服务目前暂不可用',
-		errorLoading	: '无法联系该应用的主机: %s.',
+		notAvailable	: '抱歉, 服务目前暂不可用',
+		errorLoading	: '加载应该服务主机时出错: %s.',
 		notInDic		: '没有在字典里',
 		changeTo		: '更改为',
@@ -497,9 +502,9 @@
 		noSuggestions	: '- 没有建议 -',
 		progress		: '正在进行拼写检查...',
-		noMispell		: '拼写检查完成：没有发现拼写错误',
-		noChanges		: '拼写检查完成：没有更改任何单词',
-		oneChange		: '拼写检查完成：更改了一个单词',
-		manyChanges		: '拼写检查完成：更改了 %1 个单词',
-		ieSpellDownload	: '拼写检查插件还没安装，你是否想现在就下载？'
+		noMispell		: '拼写检查完成: 没有发现拼写错误',
+		noChanges		: '拼写检查完成: 没有更改任何单词',
+		oneChange		: '拼写检查完成: 更改了一个单词',
+		manyChanges		: '拼写检查完成: 更改了 %1 个单词',
+		ieSpellDownload	: '拼写检查插件还没安装, 你是否想现在就下载?'
 	},
 
@@ -508,10 +513,10 @@
 		toolbar	: '表情符',
 		title	: '插入表情图标',
-		options : 'Smiley Options' // MISSING
+		options : '表情图标选项'
 	},
 
 	elementsPath :
 	{
-		eleLabel : 'Elements path', // MISSING
+		eleLabel : '元素路径',
 		eleTitle : '%1 元素'
 	},
@@ -525,5 +530,5 @@
 	{
 		left	: '左对齐',
-		center	: '居中对齐',
+		center	: '居中',
 		right	: '右对齐',
 		block	: '两端对齐'
@@ -535,17 +540,17 @@
 	{
 		title		: '粘贴',
-		cutError	: '您的浏览器安全设置不允许编辑器自动执行剪切操作，请使用键盘快捷键(Ctrl/Cmd+X)来完成',
-		copyError	: '您的浏览器安全设置不允许编辑器自动执行复制操作，请使用键盘快捷键(Ctrl/Cmd+C)来完成',
+		cutError	: '您的浏览器安全设置不允许编辑器自动执行剪切操作, 请使用键盘快捷键(Ctrl/Cmd+X)来完成',
+		copyError	: '您的浏览器安全设置不允许编辑器自动执行复制操作, 请使用键盘快捷键(Ctrl/Cmd+C)来完成',
 		pasteMsg	: '请使用键盘快捷键(<STRONG>Ctrl/Cmd+V</STRONG>)把内容粘贴到下面的方框里，再按 <STRONG>确定</STRONG>',
-		securityMsg	: '因为你的浏览器的安全设置原因，本编辑器不能直接访问你的剪贴板内容，你需要在本窗口重新粘贴一次',
-		pasteArea	: 'Paste Area' // MISSING
+		securityMsg	: '因为你的浏览器的安全设置原因, 本编辑器不能直接访问你的剪贴板内容, 你需要在本窗口重新粘贴一次',
+		pasteArea	: '粘贴区域'
 	},
 
 	pastefromword :
 	{
-		confirmCleanup	: '您要粘贴的内容好像是来自 MS Word，是否要清除 MS Word 格式后再粘贴？',
+		confirmCleanup	: '您要粘贴的内容好像是来自 MS Word, 是否要清除 MS Word 格式后再粘贴?',
 		toolbar			: '从 MS Word 粘贴',
 		title			: '从 MS Word 粘贴',
-		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		error			: '由于内部错误无法清理要粘贴的数据'
 	},
 
@@ -560,5 +565,5 @@
 		button			: '模板',
 		title			: '内容模板',
-		options : 'Template Options', // MISSING
+		options : '模板选项',
 		insertOption	: '替换当前内容',
 		selectPromptMsg	: '请选择编辑器内容模板:',
@@ -571,5 +576,5 @@
 	{
 		label		: '样式',
-		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle	: '样式',
 		panelTitle1	: '块级元素样式',
 		panelTitle2	: '内联元素样式',
@@ -596,17 +601,17 @@
 	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				: '创建 DIV 容器',
+		toolbar				: '创建 DIV 容器',
+		cssClassInputLabel	: '样式类名称',
+		styleSelectLabel	: '样式',
+		IdInputLabel		: 'ID',
+		languageCodeInputLabel	: '语言代码',
+		inlineStyleInputLabel	: '行内样式',
+		advisoryTitleInputLabel	: '标题',
+		langDirLabel		: '语言方向',
+		langDirLTRLabel		: '从左到右 (LTR)',
+		langDirRTLLabel		: '从右到左 (RTL)',
+		edit				: '编辑 DIV',
+		remove				: '移除 DIV'
   	},
 
@@ -629,5 +634,5 @@
 		textColorTitle	: '文本颜色',
 		bgColorTitle	: '背景颜色',
-		panelTitle		: 'Colors', // MISSING
+		panelTitle		: '颜色',
 		auto			: '自动',
 		more			: '其它颜色...'
@@ -636,44 +641,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' : 'Dim 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' : 'Dark 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' : '黑',
+		'800000' : '褐红',
+		'8B4513' : '深褐',
+		'2F4F4F' : '墨绿',
+		'008080' : '绿松石',
+		'000080' : '海军蓝',
+		'4B0082' : '靛蓝',
+		'696969' : '暗灰',
+		'B22222' : '砖红',
+		'A52A2A' : '褐',
+		'DAA520' : '金黄',
+		'006400' : '深绿',
+		'40E0D0' : '蓝绿',
+		'0000CD' : '中蓝',
+		'800080' : '紫',
+		'808080' : '灰',
+		'F00' : '红',
+		'FF8C00' : '深橙',
+		'FFD700' : '金',
+		'008000' : '绿',
+		'0FF' : '青',
+		'00F' : '蓝',
+		'EE82EE' : '紫罗兰',
+		'A9A9A9' : '深灰',
+		'FFA07A' : '亮橙',
+		'FFA500' : '橙',
+		'FFFF00' : '黄',
+		'00FF00' : '水绿',
+		'AFEEEE' : '粉蓝',
+		'ADD8E6' : '亮蓝',
+		'DDA0DD' : '梅红',
+		'D3D3D3' : '淡灰',
+		'FFF0F5' : '淡紫红',
+		'FAEBD7' : '古董白',
+		'FFFFE0' : '淡黄',
+		'F0FFF0' : '蜜白',
+		'F0FFFF' : '天蓝',
+		'F0F8FF' : '淡蓝',
+		'E6E6FA' : '淡紫',
+		'FFF' : '白'
 	},
 
@@ -681,5 +686,5 @@
 	{
 		title			: '即时拼写检查',
-		opera_title		: 'Not supported by Opera', // MISSING
+		opera_title		: '不支持 Opera 浏览器',
 		enable			: '启用即时拼写检查',
 		disable			: '禁用即时拼写检查',
@@ -695,18 +700,18 @@
 
 		optionsTab		: '选项',
-		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			: '忽略所有大写单词',
+		ignoreDomainNames : '忽略域名',
+		mixedCase		: '忽略大小写混合的单词',
+		mixedWithDigits	: '忽略带数字的单词',
 
 		languagesTab	: '语言',
 
 		dictionariesTab	: '字典',
-		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 it\'s name and click the Restore button.', // MISSING
+		dic_field_name	: '字典名称',
+		dic_create		: '创建',
+		dic_restore		: '还原',
+		dic_delete		: '删除',
+		dic_rename		: '重命名',
+		dic_info		: '一开始用户词典储存在 Cookie 中, 但是 Cookies 的容量是有限的, 当用户词典增长到超出 Cookie 限制时就无法再储存了, 这时您可以将词典储存到我们的服务器上. 要把您的个人词典到储存到我们的服务器上的话, 需要为您的词典指定一个名称, 如果您在我们的服务器上已经有储存有一个词典, 请输入词典名称并按还原按钮.',
 
 		aboutTab		: '关于'
@@ -722,12 +727,12 @@
 
 	maximize : '全屏',
-	minimize : 'Minimize', // MISSING
+	minimize : '最小化',
 
 	fakeobjects :
 	{
 		anchor	: '锚点',
-		flash	: 'Flash',
+		flash	: 'Flash 动画',
 		div		: '分页',
-		unknown	: '位置对象'
+		unknown	: '未知对象'
 	},
 
@@ -736,12 +741,18 @@
 	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		: '选择颜色',
+		options	:	'颜色选项',
+		highlight	: '高亮',
+		selected	: '选择颜色',
+		clear		: '清除'
+	},
+
+	toolbarCollapse	: '折叠工具栏',
+	toolbarExpand	: '展开工具栏',
+
+	bidi :
+	{
+		ltr : '文字方向为从左至右',
+		rtl : '文字方向为从右至左'
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/lang/zh.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/lang/zh.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/lang/zh.js	(revision 6006)
@@ -106,4 +106,8 @@
 		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
 
 		// Put the voice-only part of the label in the span.
@@ -197,4 +201,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
@@ -643,5 +648,5 @@
 		'000080' : 'Navy', // MISSING
 		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
+		'696969' : 'Dark Gray', // MISSING
 		'B22222' : 'Fire Brick', // MISSING
 		'A52A2A' : 'Brown', // MISSING
@@ -659,5 +664,5 @@
 		'00F' : 'Blue', // MISSING
 		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
+		'A9A9A9' : 'Dim Gray', // MISSING
 		'FFA07A' : 'Light Salmon', // MISSING
 		'FFA500' : 'Orange', // MISSING
@@ -708,5 +713,5 @@
 		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 it\'s name and click the Restore button.', // 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		: '關於'
@@ -744,4 +749,10 @@
 
 	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	}
 };
Index: /CKEditor/branches/features/adobeair/_source/plugins/a11yhelp/dialogs/a11yhelp.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/a11yhelp/dialogs/a11yhelp.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/a11yhelp/dialogs/a11yhelp.js	(revision 6006)
@@ -7,5 +7,5 @@
 {
 	var lang = editor.lang.accessibilityHelp,
-		id = CKEDITOR.tools.getNextNumber();
+		id = CKEDITOR.tools.getNextId();
 
 	// CharCode <-> KeyChar.
@@ -126,6 +126,6 @@
 	function buildHelpContents()
 	{
-		var pageTpl = '<div class="cke_accessibility_legend" role="document" aria-labelledby="cke_' + id + '_arialbl" tabIndex="-1">%1</div>' +
-				'<span id="cke_' + id + '_arialbl" class="cke_voice_label">' + lang.contents + ' </span>',
+		var pageTpl = '<div class="cke_accessibility_legend" role="document" aria-labelledby="' + id + '_arialbl" tabIndex="-1">%1</div>' +
+				'<span id="' + id + '_arialbl" class="cke_voice_label">' + lang.contents + ' </span>',
 			sectionTpl = '<h1>%1</h1><dl>%2</dl>',
 			itemTpl = '<dt>%1</dt><dd>%2</dd>';
Index: /CKEditor/branches/features/adobeair/_source/plugins/autogrow/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/autogrow/plugin.js	(revision 6006)
+++ /CKEditor/branches/features/adobeair/_source/plugins/autogrow/plugin.js	(revision 6006)
@@ -0,0 +1,86 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @file AutoGrow plugin
+ */
+(function(){
+	var resizeEditor = function( editor )
+	{
+		var doc = editor.document,
+			currentHeight = editor.window.getViewPaneSize().height,
+			newHeight;
+
+		// We can not use documentElement to calculate the height for IE (#6061).
+		// It is not good for IE Quirks, yet using offsetHeight would also not work as expected (#6408).
+		// We do the same for FF because of the html height workaround (#6341).
+		if ( CKEDITOR.env.ie || CKEDITOR.env.gecko )
+			newHeight = doc.getBody().$.scrollHeight + ( CKEDITOR.env.ie && CKEDITOR.env.quirks ? 0 : 24 );
+		else
+			newHeight = doc.getDocumentElement().$.offsetHeight;
+
+		var min = editor.config.autoGrow_minHeight,
+			max = editor.config.autoGrow_maxHeight;
+		( min == undefined ) && ( editor.config.autoGrow_minHeight = min = 200 );
+		if ( min )
+			newHeight = Math.max( newHeight, min );
+		if ( max )
+			newHeight = Math.min( newHeight, max );
+
+		if ( newHeight != currentHeight )
+		{
+			newHeight = editor.fire( 'autoGrow', { currentHeight : currentHeight, newHeight : newHeight } ).newHeight;
+			editor.resize( editor.container.getStyle( 'width' ), newHeight, true );
+		}
+	};
+	CKEDITOR.plugins.add( 'autogrow',
+	{
+		init : function( editor )
+		{
+			for ( var eventName in { contentDom:1, key:1, selectionChange:1, insertElement:1 } )
+			{
+				editor.on( eventName, function( evt )
+				{
+					var maximize = editor.getCommand( 'maximize' );
+					// Some time is required for insertHtml, and it gives other events better performance as well.
+					if ( evt.editor.mode == 'wysiwyg' &&
+						// Disable autogrow when the editor is maximized .(#6339)
+						( !maximize || maximize.state != CKEDITOR.TRISTATE_ON ) )
+					{
+						setTimeout( function(){ resizeEditor( evt.editor ); }, 100 );
+					}
+				});
+			}
+		}
+	});
+})();
+/**
+ * The minimum height to which the editor can reach using AutoGrow.
+ * @name CKEDITOR.config.autoGrow_minHeight
+ * @type Number
+ * @default 200
+ * @since 3.4
+ * @example
+ * config.autoGrow_minHeight = 300;
+ */
+
+/**
+ * The maximum height to which the editor can reach using AutoGrow. Zero means unlimited.
+ * @name CKEDITOR.config.autoGrow_maxHeight
+ * @type Number
+ * @default 0
+ * @since 3.4
+ * @example
+ * config.autoGrow_maxHeight = 400;
+ */
+
+/**
+ * Fired when the AutoGrow plugin is about to change the size of the editor.
+ * @name CKEDITOR#autogrow
+ * @event
+ * @param {Number} data.currentHeight The current height of the editor (before the resizing).
+ * @param {Number} data.newHeight The new height of the editor (after the resizing). It can be changed
+ *				to determine another height to be used instead.
+ */
Index: /CKEditor/branches/features/adobeair/_source/plugins/basicstyles/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/basicstyles/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/basicstyles/plugin.js	(revision 6006)
@@ -30,13 +30,13 @@
 		};
 
-		var config = editor.config;
-		var lang = editor.lang;
+		var config = editor.config, 
+			lang = editor.lang;
 
-		addButtonCommand( 'Bold'		, lang.bold			, 'bold'		, config.coreStyles_bold );
+		addButtonCommand( 'Bold'		, lang.bold		, 'bold'		, config.coreStyles_bold );
 		addButtonCommand( 'Italic'		, lang.italic		, 'italic'		, config.coreStyles_italic );
-		addButtonCommand( 'Underline'	, lang.underline	, 'underline'	, config.coreStyles_underline );
+		addButtonCommand( 'Underline'	, lang.underline		, 'underline'	, config.coreStyles_underline );
 		addButtonCommand( 'Strike'		, lang.strike		, 'strike'		, config.coreStyles_strike );
-		addButtonCommand( 'Subscript'	, lang.subscript	, 'subscript'	, config.coreStyles_subscript );
-		addButtonCommand( 'Superscript'	, lang.superscript	, 'superscript'	, config.coreStyles_superscript );
+		addButtonCommand( 'Subscript'	, lang.subscript		, 'subscript'	, config.coreStyles_subscript );
+		addButtonCommand( 'Superscript'	, lang.superscript		, 'superscript'	, config.coreStyles_superscript );
 	}
 });
@@ -59,5 +59,5 @@
  * @default { element : 'em', overrides : 'i' }
  * @example
- * config.coreStyles_bold = { element : 'i', overrides : 'em' };
+ * config.coreStyles_italic = { element : 'i', overrides : 'em' };
  * @example
  * CKEDITOR.config.coreStyles_italic = { element : 'span', attributes : {'class': 'Italic'} };
Index: /CKEditor/branches/features/adobeair/_source/plugins/bidi/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/bidi/plugin.js	(revision 6006)
+++ /CKEditor/branches/features/adobeair/_source/plugins/bidi/plugin.js	(revision 6006)
@@ -0,0 +1,259 @@
+/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function()
+{
+	var guardElements = { table:1, tbody: 1, tr:1, ul:1, ol:1, blockquote:1, div:1 },
+		directSelectionGuardElements = {},
+		// All guard elements which can have a direction applied on them.
+		allGuardElements = {};
+	CKEDITOR.tools.extend( directSelectionGuardElements, guardElements, { p:1, div:1, li:1 } );
+	CKEDITOR.tools.extend( allGuardElements, directSelectionGuardElements, { td:1 } );
+
+	function onSelectionChange( e )
+	{
+		setToolbarStates( e );
+		handleMixedDirContent( e );
+	}
+
+	function setToolbarStates( evt )
+	{
+		var editor = evt.editor,
+			path = evt.data.path;
+		var useComputedState = editor.config.useComputedState,
+			selectedElement;
+
+		useComputedState = useComputedState === undefined || useComputedState;
+
+		// We can use computedState provided by the browser or traverse parents manually.
+		if ( !useComputedState )
+			selectedElement = getElementForDirection( path.lastElement );
+
+		selectedElement = selectedElement || path.block || path.blockLimit;
+
+		if ( !selectedElement || selectedElement.getName() == 'body' )
+			return;
+
+		var selectionDir = useComputedState ?
+			selectedElement.getComputedStyle( 'direction' ) :
+			selectedElement.getStyle( 'direction' ) || selectedElement.getAttribute( 'dir' );
+
+		editor.getCommand( 'bidirtl' ).setState( selectionDir == 'rtl' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
+		editor.getCommand( 'bidiltr' ).setState( selectionDir == 'ltr' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
+	}
+
+	function handleMixedDirContent( evt )
+	{
+		var editor = evt.editor,
+			chromeRoot = editor.container.getChild( 1 ),
+			directionNode = getElementForDirection( evt.data.path.lastElement );
+		
+		if ( directionNode && editor.lang.dir != directionNode.getComputedStyle( 'direction' ) )
+			chromeRoot.addClass( 'cke_mixed_dir_content' );
+		else
+			chromeRoot.removeClass( 'cke_mixed_dir_content' );
+	}
+
+	/**
+	 * Returns element with possibility of applying the direction.
+	 * @param node
+	 */
+	function getElementForDirection( node )
+	{
+		while ( node && !( node.getName() in allGuardElements || node.is( 'body' ) ) )
+		{
+			var parent = node.getParent();
+			if ( !parent )
+				break;
+
+			node = parent;
+		}
+
+		return node;
+	}
+
+	function switchDir( element, dir, editor, database )
+	{
+		// Mark this element as processed by switchDir.
+		CKEDITOR.dom.element.setMarker( database, element, 'bidi_processed', 1 );
+
+		// Check whether one of the ancestors has already been styled.
+		var parent = element;
+		while ( ( parent = parent.getParent() ) && !parent.is( 'body' ) )
+		{
+			if ( parent.getCustomData( 'bidi_processed' ) )
+			{
+				// Ancestor style must dominate.
+				element.removeStyle( 'direction' );
+				element.removeAttribute( 'dir' );
+				return null;
+			}
+		}
+
+		var useComputedState = ( 'useComputedState' in editor.config ) ? editor.config.useComputedState : 1;
+		
+		var elementDir = useComputedState ? element.getComputedStyle( 'direction' )
+			: element.getStyle( 'direction' ) || element.hasAttribute( 'dir' );
+
+		// 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' );
+
+		// Clear direction on this element.
+		element.removeStyle( 'direction' );
+
+		// Do the second check when computed state is ON, to check 
+		// if we need to apply explicit direction on this element.
+		if ( useComputedState )
+		{
+			element.removeAttribute( 'dir' );
+			if ( dir != element.getComputedStyle( 'direction' ) )
+				element.setAttribute( 'dir', dir );
+		}
+		else
+			// Set new direction for this element.
+			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', element );
+
+		editor.forceNextSelectionCheck();
+
+		return null;
+	}
+
+	function getFullySelected( range, elements )
+	{
+		var ancestor = range.getCommonAncestor( false, true );
+
+		range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );
+
+		if ( range.checkBoundaryOfElement( ancestor, CKEDITOR.START )
+				&& range.checkBoundaryOfElement( ancestor, CKEDITOR.END ) )
+		{
+			var parent;
+			while ( ancestor && ancestor.type == CKEDITOR.NODE_ELEMENT
+					&& ( parent = ancestor.getParent() )
+					&& parent.getChildCount() == 1
+					&& ( !( ancestor.getName() in elements ) || ( parent.getName() in elements ) )
+					)
+				ancestor = parent;
+
+			return ancestor.type == CKEDITOR.NODE_ELEMENT
+					&& ( ancestor.getName() in elements )
+					&& ancestor;
+		}
+	}
+
+	function bidiCommand( dir )
+	{
+		return function( editor )
+		{
+			var selection = editor.getSelection(),
+				enterMode = editor.config.enterMode,
+				ranges = selection.getRanges();
+
+			if ( ranges && ranges.length )
+			{
+				var database = {};
+
+				// Creates bookmarks for selection, as we may split some blocks.
+				var bookmarks = selection.createBookmarks();
+
+				var rangeIterator = ranges.createIterator(),
+					range,
+					i = 0;
+
+				while ( ( range = rangeIterator.getNextRange( 1 ) ) )
+				{
+					// Apply do directly selected elements from guardElements.
+					var selectedElement = range.getEnclosedNode();
+
+					// If this is not our element of interest, apply to fully selected elements from guardElements.
+					if ( !selectedElement || selectedElement
+							&& !( selectedElement.type == CKEDITOR.NODE_ELEMENT && selectedElement.getName() in directSelectionGuardElements )
+						)
+						selectedElement = getFullySelected( range, guardElements );
+
+					if ( selectedElement && !selectedElement.isReadOnly() )
+						switchDir( selectedElement, dir, editor, database );
+
+					var iterator,
+						block;
+
+					// Walker searching for guardElements.
+					var walker = new CKEDITOR.dom.walker( range );
+
+					var start = bookmarks[ i ].startNode,
+						end = bookmarks[ i++ ].endNode;
+
+					walker.evaluator = function( node )
+					{
+						return !! ( node.type == CKEDITOR.NODE_ELEMENT
+								&& node.getName() in guardElements
+								&& !( node.getName() == ( enterMode == CKEDITOR.ENTER_P ) ? 'p' : 'div'
+									&& node.getParent().type == CKEDITOR.NODE_ELEMENT
+									&& node.getParent().getName() == 'blockquote' )
+								// Element must be fully included in the range as well. (#6485).
+								&& node.getPosition( start ) & CKEDITOR.POSITION_FOLLOWING
+								&& ( ( node.getPosition( end ) & CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_CONTAINS ) == CKEDITOR.POSITION_PRECEDING ) );
+					};
+
+					while ( ( block = walker.next() ) )
+						switchDir( block, dir, editor, database );
+
+					iterator = range.createIterator();
+					iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR;
+
+					while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) )
+						!block.isReadOnly() && switchDir( block, dir, editor, database );
+				}
+
+				CKEDITOR.dom.element.clearAllMarkers( database );
+
+				editor.forceNextSelectionCheck();
+				// Restore selection position.
+				selection.selectBookmarks( bookmarks );
+
+				editor.focus();
+			}
+		};
+	}
+
+	CKEDITOR.plugins.add( 'bidi',
+	{
+		requires : [ 'styles', 'button' ],
+
+		init : function( editor )
+		{
+			// All buttons use the same code to register. So, to avoid
+			// duplications, let's use this tool function.
+			var addButtonCommand = function( buttonName, buttonLabel, commandName, commandExec )
+			{
+				editor.addCommand( commandName, new CKEDITOR.command( editor, { exec : commandExec }) );
+
+				editor.ui.addButton( buttonName,
+					{
+						label : buttonLabel,
+						command : commandName
+					});
+			};
+
+			var lang = editor.lang.bidi;
+
+			addButtonCommand( 'BidiLtr', lang.ltr, 'bidiltr', bidiCommand( 'ltr' ) );
+			addButtonCommand( 'BidiRtl', lang.rtl, 'bidirtl', bidiCommand( 'rtl' ) );
+
+			editor.on( 'selectionChange', onSelectionChange );
+		}
+	});
+
+})();
Index: /CKEditor/branches/features/adobeair/_source/plugins/blockquote/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/blockquote/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/blockquote/plugin.js	(revision 6006)
@@ -48,5 +48,5 @@
 			var state = editor.getCommand( 'blockquote' ).state,
 				selection = editor.getSelection(),
-				range = selection && selection.getRanges()[0];
+				range = selection && selection.getRanges( true )[0];
 
 			if ( !range )
Index: /CKEditor/branches/features/adobeair/_source/plugins/button/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/button/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/button/plugin.js	(revision 6006)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -110,5 +110,5 @@
 		{
 			var env = CKEDITOR.env,
-				id = this._.id = 'cke_' + CKEDITOR.tools.getNextNumber(),
+				id = this._.id = CKEDITOR.tools.getNextId(),
 				classes = '',
 				command = this.command, // Get the command name.
Index: /CKEditor/branches/features/adobeair/_source/plugins/clipboard/dialogs/paste.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/clipboard/dialogs/paste.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/clipboard/dialogs/paste.js	(revision 6006)
@@ -11,8 +11,8 @@
 	function onPasteFrameLoad( win )
 	{
-		var doc =  new CKEDITOR.dom.document( win.document ),
+		var doc = new CKEDITOR.dom.document( win.document ),
 			docElement = doc.$;
 
-		doc.getById( "cke_actscrpt" ).remove();
+		doc.getById( 'cke_actscrpt' ).remove();
 
 		CKEDITOR.env.ie ?
@@ -77,4 +77,5 @@
 			var iframe = CKEDITOR.dom.element.createFromHtml(
 						'<iframe' +
+						' class="cke_pasteframe"' +
 						' frameborder="0" ' +
 						' allowTransparency="true"' +
@@ -104,11 +105,4 @@
 			}, this );
 
-			iframe.setStyles(
-				{
-					width : '346px',
-					height : '130px',
-					'background-color' : 'white',
-					border : '1px solid black'
-				} );
 			iframe.setCustomData( 'dialog', this );
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/clipboard/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/clipboard/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/clipboard/plugin.js	(revision 6006)
@@ -17,8 +17,8 @@
 			body = doc.getBody();
 
-		var	enabled = false;
+		var enabled = 0;
 		var onExec = function()
 		{
-			enabled = true;
+			enabled = 1;
 		};
 
@@ -164,14 +164,14 @@
 		var doc = this.document;
 
-		// Avoid recursions on 'paste' event for IE.
-		if ( CKEDITOR.env.ie && doc.getById( 'cke_pastebin' ) )
+		// Avoid recursions on 'paste' event or consequent paste too fast. (#5730)
+		if ( doc.getById( 'cke_pastebin' ) )
 			return;
 
 		// If the browser supports it, get the data directly
-		if (mode == 'text' && evt.data && evt.data.$.clipboardData)
+		if ( mode == 'text' && evt.data && evt.data.$.clipboardData )
 		{
 			// evt.data.$.clipboardData.types contains all the flavours in Mac's Safari, but not on windows.
 			var plain = evt.data.$.clipboardData.getData( 'text/plain' );
-			if (plain)
+			if ( plain )
 			{
 				evt.data.preventDefault();
@@ -255,5 +255,5 @@
 	function fixCut( editor )
 	{
-		if ( !CKEDITOR.env.ie || editor.document.$.compatMode == 'BackCompat' )
+		if ( !CKEDITOR.env.ie || CKEDITOR.env.quirks )
 			return;
 
@@ -349,5 +349,5 @@
 				{
 					var body = editor.document.getBody();
-					body.on( ( (mode == 'text' && CKEDITOR.env.ie) || CKEDITOR.env.webkit ) ? 'paste' : 'beforepaste',
+					body.on( ( (mode == 'text' && CKEDITOR.env.ie ) || CKEDITOR.env.webkit ) ? 'paste' : 'beforepaste',
 						function( evt )
 						{
@@ -387,12 +387,11 @@
 					}
 
-					editor.contextMenu.addListener( function()
+					editor.contextMenu.addListener( function( element, selection )
 						{
+							var readOnly = selection.getCommonAncestor().isReadOnly();
 							return {
-								cut : stateFromNamedCommand( 'Cut' ),
-
-								// Browser bug: 'Cut' has the correct states for both Copy and Cut.
-								copy : stateFromNamedCommand( 'Cut' ),
-								paste : CKEDITOR.env.webkit ? CKEDITOR.TRISTATE_OFF : stateFromNamedCommand( 'Paste' )
+								cut : !readOnly && stateFromNamedCommand( 'Cut' ),
+								copy : stateFromNamedCommand( 'Copy' ),
+								paste : !readOnly && ( CKEDITOR.env.webkit ? CKEDITOR.TRISTATE_OFF : stateFromNamedCommand( 'Paste' ) )
 							};
 						});
Index: /CKEditor/branches/features/adobeair/_source/plugins/colorbutton/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/colorbutton/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/colorbutton/plugin.js	(revision 6006)
@@ -41,12 +41,15 @@
 						block.element.addClass( 'cke_colorblock' );
 						block.element.setHtml( renderColors( panel, type ) );
+						// The block should not have scrollbars (#5933, #6056)
+						block.element.getDocument().getBody().setStyle( 'overflow', 'hidden' );
 
 						CKEDITOR.ui.panelButton.fire( 'uiReady', this );
 
 						var keys = block.keys;
-						keys[ 39 ]	= 'next';					// ARROW-RIGHT
+						var rtl = editor.lang.dir == 'rtl';
+						keys[ rtl ? 37 : 39 ]	= 'next';					// ARROW-RIGHT
 						keys[ 40 ]	= 'next';					// ARROW-DOWN
 						keys[ 9 ]	= 'next';					// TAB
-						keys[ 37 ]	= 'prev';					// ARROW-LEFT
+						keys[ rtl ? 39 : 37 ]	= 'prev';					// ARROW-LEFT
 						keys[ 38 ]	= 'prev';					// ARROW-UP
 						keys[ CKEDITOR.SHIFT + 9 ]	= 'prev';	// SHIFT + TAB
@@ -161,5 +164,5 @@
 
 			// Render the "More Colors" button.
-			if ( config.colorButton_enableMore )
+			if ( config.colorButton_enableMore === undefined || config.colorButton_enableMore )
 			{
 				output.push(
@@ -174,5 +177,5 @@
 								lang.more,
 							'</a>' +
-						'</td>' );	// It is later in the code.
+						'</td>' );	// tr is later in the code.
 			}
 
@@ -186,10 +189,9 @@
 /**
  * Whether to enable the "More Colors..." button in the color selectors.
- * @default false
+ * @default true
  * @type Boolean
  * @example
  * config.colorButton_enableMore = false;
  */
-CKEDITOR.config.colorButton_enableMore = true;
 
 /**
Index: /CKEditor/branches/features/adobeair/_source/plugins/colordialog/dialogs/colordialog.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/colordialog/dialogs/colordialog.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/colordialog/dialogs/colordialog.js	(revision 6006)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -15,11 +15,9 @@
 		var dialog;
 
-		function spacer()
-		{
-			return {
-				type : 'html',
-				html : '&nbsp;'
-			};
-		}
+		var spacer =
+		{
+			type : 'html',
+			html : '&nbsp;'
+		};
 
 		function clearSelected()
@@ -31,9 +29,9 @@
 		function updateSelected( evt )
 		{
-			if ( ! (evt instanceof CKEDITOR.dom.event ) )
+			if ( ! ( evt instanceof CKEDITOR.dom.event ) )
 				evt = new CKEDITOR.dom.event( evt );
 
 			var target = evt.getTarget(),
-					color;
+				color;
 
 			if ( target.getName() == 'a' && ( color = target.getChild( 0 ).getHtml() ) )
@@ -43,5 +41,5 @@
 		function updateHighlight( event )
 		{
-			if ( ! (event instanceof CKEDITOR.dom.event ) )
+			if ( ! ( event instanceof CKEDITOR.dom.event ) )
 				event = event.data;
 
@@ -62,11 +60,9 @@
 		}
 
-		var onMouseout = $tools.addFunction( clearHighlight );
-
-		var onClick = updateSelected,
-				onClickHandler = CKEDITOR.tools.addFunction( onClick );
-
-		var onFocus = updateHighlight,
-				onBlur = clearHighlight;
+		var onMouseout = $tools.addFunction( clearHighlight ),
+			onClick = updateSelected,
+			onClickHandler = CKEDITOR.tools.addFunction( onClick ),
+			onFocus = updateHighlight,
+			onBlur = clearHighlight;
 
 		var onKeydownHandler = CKEDITOR.tools.addFunction( function( ev )
@@ -75,6 +71,6 @@
 			var element = ev.getTarget();
 			var relative, nodeToMove;
-			var keystroke = ev.getKeystroke();
-			var rtl = editor.lang.dir == 'rtl';
+			var keystroke = ev.getKeystroke(),
+				rtl = editor.lang.dir == 'rtl';
 
 			switch ( keystroke )
@@ -178,5 +174,5 @@
 		{
 			// Create the base colors array.
-			var aColors = ['00','33','66','99','cc','ff'];
+			var aColors = [ '00', '33', '66', '99', 'cc', 'ff' ];
 
 			// This function combines two ranges of three values from the color array into a row.
@@ -185,5 +181,5 @@
 				for ( var i = rangeA ; i < rangeA + 3 ; i++ )
 				{
-					var row = table.$.insertRow(-1);
+					var row = table.$.insertRow( -1 );
 
 					for ( var j = rangeB ; j < rangeB + 3 ; j++ )
@@ -244,9 +240,10 @@
 		var numbering = function( id )
 			{
-				return id + CKEDITOR.tools.getNextNumber();
+				return CKEDITOR.tools.getNextId() + '_' + id;
 			},
 			hicolorId = numbering( 'hicolor' ),
 			hicolorTextId = numbering( 'hicolortext' ),
-			selHiColorId = numbering( 'selhicolor' );
+			selHiColorId = numbering( 'selhicolor' ),
+			tableLabelId = numbering( 'color_table_label' );
 
 		return {
@@ -274,6 +271,6 @@
 								{
 									type : 'html',
-									html : '<table role="listbox" aria-labelledby="color_table_label" onmouseout="CKEDITOR.tools.callFunction( ' + onMouseout + ' );">' + table.getHtml() + '</table>' +
-												'<span id="color_table_label" class="cke_voice_label">' + lang.options +'</span>',
+									html : '<table role="listbox" aria-labelledby="' + tableLabelId + '" onmouseout="CKEDITOR.tools.callFunction( ' + onMouseout + ' );">' + table.getHtml() + '</table>' +
+												'<span id="' + tableLabelId + '" class="cke_voice_label">' + lang.options +'</span>',
 									onLoad : function()
 									{
@@ -287,5 +284,5 @@
 									}
 								},
-								spacer(),
+								spacer,
 								{
 									type : 'vbox',
@@ -320,5 +317,5 @@
 											}
 										},
-										spacer(),
+										spacer,
 										{
 											type : 'button',
Index: /CKEditor/branches/features/adobeair/_source/plugins/contextmenu/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/contextmenu/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/contextmenu/plugin.js	(revision 6006)
@@ -26,5 +26,5 @@
 	$ : function( editor )
 	{
-		this.id = 'cke_' + CKEDITOR.tools.getNextNumber();
+		this.id = CKEDITOR.tools.getNextId();
 		this.editor = editor;
 		this._.listeners = [];
@@ -148,11 +148,12 @@
 		addTarget : function( element, nativeContextMenuOnCtrl )
 		{
-			// Opera doesn't support 'contextmenu' event, we have duo approaches employed here:
-			// 1. Inherit the 'button override' hack we introduced in v2 (#4530), while this require the Opera browser
-			//  option 'Allow script to detect context menu/right click events' to be always turned on.
+
+			// For browsers (Opera <=10a) that doesn't  support 'contextmenu' event, we have duo approaches employed here:
+			// 1. Inherit the 'button override' hack we introduced in v2 (#4530) (In Opera browser, this require the
+			//  option 'Allow script to detect context menu/right click events' to be always turned on).
 			// 2. Considering the fact that ctrl/meta key is not been occupied
 			//  for multiple range selecting (like Gecko), we use this key
 			//  combination as a fallback for triggering context-menu. (#4530)
-			if ( CKEDITOR.env.opera )
+			if ( CKEDITOR.env.opera && !( 'oncontextmenu' in document.body ) )
 			{
 				var contextMenuOverrideButton;
Index: /CKEditor/branches/features/adobeair/_source/plugins/dialog/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/dialog/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/dialog/plugin.js	(revision 6006)
@@ -34,4 +34,5 @@
 (function()
 {
+	var cssLength = CKEDITOR.tools.cssLength;
 	function isTabVisible( tabId )
 	{
@@ -67,4 +68,28 @@
 
 		return null;
+	}
+
+
+	function clearOrRecoverTextInputValue( container, isRecover )
+	{
+		var inputs = container.$.getElementsByTagName( 'input' );
+		for ( var i = 0, length = inputs.length; i < length ; i++ )
+		{
+			var item = new CKEDITOR.dom.element( inputs[ i ] );
+
+			if ( item.getAttribute( 'type' ).toLowerCase() == 'text' )
+			{
+				if ( isRecover )
+				{
+					item.setAttribute( 'value', item.getCustomData( 'fake_value' ) || '' );
+					item.removeCustomData( 'fake_value' );
+				}
+				else
+				{
+					item.setCustomData( 'fake_value', item.getAttribute( 'value' ) );
+					item.setAttribute( 'value', '' );
+				}
+			}
+		}
 	}
 
@@ -169,4 +194,7 @@
 			this.on( 'ok', function( evt )
 				{
+					// Dialog confirm might probably introduce content changes (#5415).
+					editor.fire( 'saveSnapshot' );
+					setTimeout( function () { editor.fire( 'saveSnapshot' ); }, 0 );
 					if ( definition.onOk.call( this, evt ) === false )
 						evt.data.hide = false;
@@ -405,5 +433,5 @@
 
 				if ( editor.config.dialog_startupFocusTab
-					&& me._.tabIdList.length > 1 )
+					&& me._.pageCount > 1 )
 				{
 					me._.tabBarMode = true;
@@ -470,7 +498,10 @@
 		// Insert the tabs and contents.
 		for ( var i = 0 ; i < definition.contents.length ; i++ )
-			this.addPage( definition.contents[i] );
-
-		this.parts['tabs'].on( 'click', function( evt )
+		{
+			var page = definition.contents[i];
+			page && this.addPage( page );
+		}
+
+		this.parts[ 'tabs' ].on( 'click', function( evt )
 				{
 					var target = evt.data.getTarget();
@@ -478,6 +509,8 @@
 					if ( target.hasClass( 'cke_dialog_tab' ) )
 					{
+						// Get the ID of the tab, without the 'cke_' prefix and the unique number suffix.
 						var id = target.$.id;
-						this.selectPage( id.substr( 0, id.lastIndexOf( '_' ) ) );
+						this.selectPage( id.substring( 4, id.lastIndexOf( '_' ) ) );
+
 						if ( this._.tabBarMode )
 						{
@@ -680,9 +713,9 @@
 			this.resize( definition.minWidth, definition.minHeight );
 
+			// Reset all inputs back to their default value.
+			this.reset();
+
 			// Select the first tab by default.
 			this.selectPage( this.definition.contents[0].id );
-
-			// Reset all inputs back to their default value.
-			this.reset();
 
 			// Set z-index.
@@ -757,5 +790,5 @@
 			{
 				for ( var j in this._.contents[i] )
-					fn( this._.contents[i][j]);
+					fn( this._.contents[i][j] );
 			}
 			return this;
@@ -770,5 +803,5 @@
 		reset : (function()
 		{
-			var fn = function( widget ){ if ( widget.reset ) widget.reset(); };
+			var fn = function( widget ){ if ( widget.reset ) widget.reset( 1 ); };
 			return function(){ this.foreach( fn ); return this; };
 		})(),
@@ -881,5 +914,5 @@
 
 			var env = CKEDITOR.env;
-			var tabId = contents.id + '_' + CKEDITOR.tools.getNextNumber(),
+			var tabId = 'cke_' + contents.id + '_' + CKEDITOR.tools.getNextNumber(),
 				 tab = CKEDITOR.dom.element.createFromHtml( [
 					'<a class="cke_dialog_tab"',
@@ -941,4 +974,11 @@
 		selectPage : function( id )
 		{
+			if ( this._.currentTabId == id )
+				return;
+
+			// Returning true means that the event has been canceled
+			if ( this.fire( 'selectPage', { page : id, currentPage : this._.currentTabId } ) === true )
+				return;
+
 			// Hide the non-selected tabs and pages.
 			for ( var i in this._.tabs )
@@ -954,7 +994,22 @@
 			}
 
-			var selected = this._.tabs[id];
-			selected[0].addClass( 'cke_dialog_tab_selected' );
-			selected[1].show();
+			var selected = this._.tabs[ id ];
+			selected[ 0 ].addClass( 'cke_dialog_tab_selected' );
+			
+			// [IE] an invisible input[type='text'] will enlarge it's width 
+			// if it's value is long when it shows, so we clear it's value
+			// before it shows and then recover it (#5649)
+			if ( CKEDITOR.env.ie6Compat || CKEDITOR.env.ie7Compat )
+			{
+				clearOrRecoverTextInputValue( selected[ 1 ] );
+				selected[ 1 ].show();
+				setTimeout( function()
+				{
+					clearOrRecoverTextInputValue( selected[ 1 ], 1 );
+				}, 0 );
+			}
+			else
+				selected[ 1 ].show();
+
 			this._.currentTabId = id;
 			this._.currentTabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, id );
@@ -1379,5 +1434,5 @@
 		var contents = dialogDefinition.contents;
 		for ( var i = 0, content ; ( content = contents[i] ) ; i++ )
-			contents[ i ] = new contentObject( dialog, content );
+			contents[ i ] = content && new contentObject( dialog, content );
 
 		CKEDITOR.tools.extend( this, dialogDefinition );
@@ -1763,7 +1818,8 @@
 	{
 		var win = CKEDITOR.document.getWindow();
-		var backgroundColorStyle = editor.config.dialog_backgroundCoverColor || 'white',
-			backgroundCoverOpacity = editor.config.dialog_backgroundCoverOpacity,
-			baseFloatZIndex = editor.config.baseFloatZIndex,
+		var config = editor.config,
+			backgroundColorStyle = config.dialog_backgroundCoverColor || 'white',
+			backgroundCoverOpacity = config.dialog_backgroundCoverOpacity,
+			baseFloatZIndex = config.baseFloatZIndex,
 			coverKey = CKEDITOR.tools.genKey(
 					backgroundColorStyle,
@@ -2044,5 +2100,5 @@
 					attributes = ( attributesArg && attributesArg.call ? attributesArg( elementDefinition ) : attributesArg ) || {},
 					innerHTML = ( contentsArg && contentsArg.call ? contentsArg.call( this, dialog, elementDefinition ) : contentsArg ) || '',
-					domId = this.domId = attributes.id || CKEDITOR.tools.getNextNumber() + '_uiElement',
+					domId = this.domId = attributes.id || CKEDITOR.tools.getNextId() + '_uiElement',
 					id = this.id = elementDefinition.id,
 					i;
@@ -2196,12 +2252,12 @@
 						{
 							if ( widths[i] )
-								styles.push( 'width:' + CKEDITOR.tools.cssLength( widths[i] ) );
+								styles.push( 'width:' + cssLength( widths[i] ) );
 						}
 						else
 							styles.push( 'width:' + Math.floor( 100 / childHtmlList.length ) + '%' );
 						if ( height )
-							styles.push( 'height:' + CKEDITOR.tools.cssLength( height ) );
+							styles.push( 'height:' + cssLength( height ) );
 						if ( elementDefinition && elementDefinition.padding != undefined )
-							styles.push( 'padding:' + CKEDITOR.tools.cssLength( elementDefinition.padding ) );
+							styles.push( 'padding:' + cssLength( elementDefinition.padding ) );
 						if ( styles.length > 0 )
 							html.push( 'style="' + styles.join('; ') + '" ' );
@@ -2256,5 +2312,5 @@
 			vbox : function( dialog, childObjList, childHtmlList, htmlList, elementDefinition )
 			{
-				if (arguments.length < 3 )
+				if ( arguments.length < 3 )
 					return;
 
@@ -2271,5 +2327,5 @@
 					if ( elementDefinition && elementDefinition.expand )
 						html.push( 'height:100%;' );
-					html.push( 'width:' + CKEDITOR.tools.cssLength( width || '100%' ), ';' );
+					html.push( 'width:' + cssLength( width || '100%' ), ';' );
 					html.push( '"' );
 					html.push( 'align="', CKEDITOR.tools.htmlEncode(
@@ -2282,11 +2338,11 @@
 						html.push( '<tr><td role="presentation" ' );
 						if ( width )
-							styles.push( 'width:' + CKEDITOR.tools.cssLength( width || '100%' ) );
+							styles.push( 'width:' + cssLength( width || '100%' ) );
 						if ( heights )
-							styles.push( 'height:' + CKEDITOR.tools.cssLength( heights[i] ) );
+							styles.push( 'height:' + cssLength( heights[i] ) );
 						else if ( elementDefinition && elementDefinition.expand )
 							styles.push( 'height:' + Math.floor( 100 / childHtmlList.length ) + '%' );
 						if ( elementDefinition && elementDefinition.padding != undefined )
-							styles.push( 'padding:' + CKEDITOR.tools.cssLength( elementDefinition.padding ) );
+							styles.push( 'padding:' + cssLength( elementDefinition.padding ) );
 						if ( styles.length > 0 )
 							html.push( 'style="', styles.join( '; ' ), '" ' );
@@ -2342,12 +2398,13 @@
 		 * Sets the value of this dialog UI object.
 		 * @param {Object} value The new value.
+		 * @param {Boolean} noChangeEvent Internal commit, to supress 'change' event on this element.
 		 * @returns {CKEDITOR.dialog.uiElement} The current UI element.
 		 * @example
 		 * uiElement.setValue( 'Dingo' );
 		 */
-		setValue : function( value )
+		setValue : function( value, noChangeEvent )
 		{
 			this.getInputElement().setValue( value );
-			this.fire( 'change', { value : value } );
+			!noChangeEvent && this.fire( 'change', { value : value } );
 			return this;
 		},
@@ -2951,2 +3008,10 @@
  *		dialog.
  */
+
+/**
+ * Fired when a tab is going to be selected in a dialog
+ * @name dialog#selectPage
+ * @event
+ * @param String page The id of the page that it's gonna be selected.
+ * @param String currentPage The id of the current page.
+ */
Index: /CKEditor/branches/features/adobeair/_source/plugins/dialogadvtab/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/dialogadvtab/plugin.js	(revision 6006)
+++ /CKEditor/branches/features/adobeair/_source/plugins/dialogadvtab/plugin.js	(revision 6006)
@@ -0,0 +1,213 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function()
+{
+
+function setupAdvParams( element )
+{
+	var attrName = this.att;
+
+	var value = element && element.hasAttribute( attrName ) && element.getAttribute( attrName ) || '';
+
+	if ( value !== undefined )
+		this.setValue( value );
+}
+
+function commitAdvParams()
+{
+	// Dialogs may use different parameters in the commit list, so, by
+	// definition, we take the first CKEDITOR.dom.element available.
+	var element;
+
+	for ( var i = 0 ; i < arguments.length ; i++ )
+	{
+		if ( arguments[ i ] instanceof CKEDITOR.dom.element )
+		{
+			element = arguments[ i ];
+			break;
+		}
+	}
+
+	if ( element )
+	{
+		var attrName = this.att,
+			value = this.getValue();
+
+		// Broadcast Lang Dir change
+		if ( attrName == 'dir' )
+		{
+			var dir = element.getAttribute( attrName, value );
+			if ( dir != value && element.getParent() )
+					this._.dialog._.editor.fire( 'dirChanged', element );
+		}
+
+		if ( value )
+			element.setAttribute( attrName, value );
+		else
+			element.removeAttribute( attrName, value );
+	}
+}
+
+CKEDITOR.plugins.add( 'dialogadvtab',
+{
+	/**
+	 *
+	 * @param tabConfig
+	 * id, dir, classes, styles
+	 */
+	createAdvancedTab : function( editor, tabConfig )
+	{
+		if ( !tabConfig )
+			tabConfig = { id:1, dir:1, classes:1, styles:1 };
+
+		var lang = editor.lang.common;
+
+		var result =
+		{
+			id : 'advanced',
+			label : lang.advancedTab,
+			title : lang.advancedTab,
+			elements :
+				[
+					{
+						type : 'vbox',
+						padding : 1,
+						children : []
+					}
+				]
+		};
+
+		var contents = [];
+
+		if ( tabConfig.id || tabConfig.dir )
+		{
+			if ( tabConfig.id )
+			{
+				contents.push(
+					{
+						id : 'advId',
+						att : 'id',
+						type : 'text',
+						label : lang.id,
+						setup : setupAdvParams,
+						commit : commitAdvParams
+					});
+			}
+
+			if ( tabConfig.dir )
+			{
+				contents.push(
+					{
+						id : 'advLangDir',
+						att : 'dir',
+						type : 'select',
+						label : lang.langDir,
+						'default' : '',
+						style : 'width:100%',
+						items :
+						[
+							[ lang.notSet, '' ],
+							[ lang.langDirLTR, 'ltr' ],
+							[ lang.langDirRTL, 'rtl' ]
+						],
+						setup : setupAdvParams,
+						commit : commitAdvParams
+					});
+			}
+
+			result.elements[ 0 ].children.push(
+				{
+					type : 'hbox',
+					widths : [ '50%', '50%' ],
+					children : [].concat( contents )
+				});
+		}
+
+		if ( tabConfig.styles || tabConfig.classes )
+		{
+			contents = [];
+
+			if ( tabConfig.styles )
+			{
+				contents.push(
+					{
+						id : 'advStyles',
+						att : 'style',
+						type : 'text',
+						label : lang.styles,
+						'default' : '',
+
+						getStyle : function( name, defaultValue )
+						{
+							var match = this.getValue().match( new RegExp( name + '\\s*:\s*([^;]*)', 'i') );
+							return match ? match[ 1 ] : defaultValue;
+						},
+
+						updateStyle : function( name, value )
+						{
+							var styles = this.getValue();
+
+							// Remove the current value.
+							if ( styles )
+							{
+								styles = styles
+									.replace( new RegExp( '\\s*' + name + '\s*:[^;]*(?:$|;\s*)', 'i' ), '' )
+									.replace( /^[;\s]+/, '' )
+									.replace( /\s+$/, '' );
+							}
+
+							if ( value )
+							{
+								styles && !(/;\s*$/).test( styles ) && ( styles += '; ' );
+								styles += name + ': ' + value;
+							}
+
+							this.setValue( styles, 1 );
+
+						},
+
+						setup : setupAdvParams,
+
+						commit : commitAdvParams
+
+					});
+			}
+
+			if ( tabConfig.classes )
+			{
+				contents.push(
+					{
+						type : 'hbox',
+						widths : [ '45%', '55%' ],
+						children :
+						[
+							{
+								id : 'advCSSClasses',
+								att : 'class',
+								type : 'text',
+								label : lang.cssClasses,
+								'default' : '',
+								setup : setupAdvParams,
+								commit : commitAdvParams
+
+							}
+						]
+					});
+			}
+
+			result.elements[ 0 ].children.push(
+				{
+					type : 'hbox',
+					widths : [ '50%', '50%' ],
+					children : [].concat( contents )
+				});
+		}
+
+		return result;
+	}
+});
+
+})();
Index: /CKEditor/branches/features/adobeair/_source/plugins/dialogui/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/dialogui/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/dialogui/plugin.js	(revision 6006)
@@ -60,7 +60,7 @@
 		},
 
-		reset : function()
+		reset : function( noChangeEvent )
 		{
-			this.setValue( this.getInitValue() );
+			this.setValue( this.getInitValue(), noChangeEvent );
 		},
 
@@ -148,12 +148,13 @@
 
 				var _ = initPrivateObject.call( this, elementDefinition );
-				_.labelId = CKEDITOR.tools.getNextNumber() + '_label';
+				_.labelId = CKEDITOR.tools.getNextId() + '_label';
 				var children = this._.children = [];
 				/** @ignore */
 				var innerHTML = function()
 				{
-					var html = [];
+					var html = [],
+						requiredClass = elementDefinition.required ? ' cke_required' : '' ;
 					if ( elementDefinition.labelLayout != 'horizontal' )
-						html.push( '<label class="cke_dialog_ui_labeled_label" ',
+						html.push( '<label class="cke_dialog_ui_labeled_label' + requiredClass + '" ',
 								' id="'+  _.labelId + '"',
 								' for="' + _.inputId + '"',
@@ -174,5 +175,5 @@
 								{
 									type : 'html',
-									html : '<label class="cke_dialog_ui_labeled_label"' +
+									html : '<label class="cke_dialog_ui_labeled_label' + requiredClass + '"' +
 										' id="' + _.labelId + '"' +
 										' for="' + _.inputId + '"' +
@@ -223,5 +224,5 @@
 
 				initPrivateObject.call( this, elementDefinition );
-				var domId = this._.inputId = CKEDITOR.tools.getNextNumber() + '_textInput',
+				var domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textInput',
 					attributes = { 'class' : 'cke_dialog_ui_input_' + elementDefinition.type, id : domId, type : 'text' },
 					i;
@@ -236,4 +237,7 @@
 				if ( elementDefinition.size )
 					attributes.size = elementDefinition.size;
+
+				if ( elementDefinition.controlStyle )
+					attributes.style = elementDefinition.controlStyle;
 
 				// If user presses Enter in a text box, it implies clicking OK for the dialog.
@@ -310,5 +314,5 @@
 				initPrivateObject.call( this, elementDefinition );
 				var me = this,
-					domId = this._.inputId = CKEDITOR.tools.getNextNumber() + '_textarea',
+					domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textarea',
 					attributes = {};
 
@@ -367,13 +371,17 @@
 					var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition,
 							{
-								id : elementDefinition.id ? elementDefinition.id + '_checkbox' : CKEDITOR.tools.getNextNumber() + '_checkbox'
+								id : elementDefinition.id ? elementDefinition.id + '_checkbox' : CKEDITOR.tools.getNextId() + '_checkbox'
 							}, true ),
 						html = [];
 
-					var labelId = CKEDITOR.tools.getNextNumber() + '_label';
+					var labelId = CKEDITOR.tools.getNextId() + '_label';
 					var attributes = { 'class' : 'cke_dialog_ui_checkbox_input', type : 'checkbox', 'aria-labelledby' : labelId };
 					cleanInnerDefinition( myDefinition );
 					if ( elementDefinition[ 'default' ] )
 						attributes.checked = 'checked';
+
+					if ( typeof myDefinition.controlStyle != 'undefined' )
+						myDefinition.style = myDefinition.controlStyle;
+
 					_.checkbox = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'input', null, attributes );
 					html.push( ' <label id="', labelId, '" for="', attributes.id, '">',
@@ -423,5 +431,5 @@
 					var inputHtmlList = [], html = [],
 						commonAttributes = { 'class' : 'cke_dialog_ui_radio_item', 'aria-labelledby' : this._.labelId },
-						commonName = elementDefinition.id ? elementDefinition.id + '_radio' : CKEDITOR.tools.getNextNumber() + '_radio';
+						commonName = elementDefinition.id ? elementDefinition.id + '_radio' : CKEDITOR.tools.getNextId() + '_radio';
 					for ( var i = 0 ; i < elementDefinition.items.length ; i++ )
 					{
@@ -429,5 +437,5 @@
 							title = item[2] !== undefined ? item[2] : item[0],
 							value = item[1] !== undefined ? item[1] : item[0],
-							inputId = CKEDITOR.tools.getNextNumber() + '_radio_input',
+							inputId = CKEDITOR.tools.getNextId() + '_radio_input',
 							labelId = inputId + '_label',
 							inputDefinition = CKEDITOR.tools.extend( {}, elementDefinition,
@@ -454,4 +462,8 @@
 						cleanInnerDefinition( inputDefinition );
 						cleanInnerDefinition( labelDefinition );
+
+						if ( typeof inputDefinition.controlStyle != 'undefined' )
+							inputDefinition.style = inputDefinition.controlStyle;
+
 						children.push( new CKEDITOR.ui.dialog.uiElement( dialog, inputDefinition, inputHtml, 'input', null, inputAttributes ) );
 						inputHtml.push( ' ' );
@@ -529,5 +541,5 @@
 				delete outerDefinition.style;
 
-				var labelId = CKEDITOR.tools.getNextNumber() + '_label';
+				var labelId = CKEDITOR.tools.getNextId() + '_label';
 				CKEDITOR.ui.dialog.uiElement.call(
 					this,
@@ -585,5 +597,5 @@
 					this.validate = elementDefinition.validate;
 
-				_.inputId = CKEDITOR.tools.getNextNumber() + '_select';
+				_.inputId = CKEDITOR.tools.getNextId() + '_select';
 				/** @ignore */
 				var innerHTML = function()
@@ -591,5 +603,5 @@
 					var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition,
 							{
-								id : elementDefinition.id ? elementDefinition.id + '_select' : CKEDITOR.tools.getNextNumber() + '_select'
+								id : elementDefinition.id ? elementDefinition.id + '_select' : CKEDITOR.tools.getNextId() + '_select'
 							}, true ),
 						html = [],
@@ -610,4 +622,7 @@
 							CKEDITOR.tools.htmlEncode( item[0] ) );
 					}
+
+					if ( typeof myDefinition.controlStyle != 'undefined' )
+						myDefinition.style = myDefinition.controlStyle;
 
 					_.select = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'select', null, attributes, innerHTML.join( '' ) );
@@ -649,5 +664,5 @@
 				var innerHTML = function()
 				{
-					_.frameId = CKEDITOR.tools.getNextNumber() + '_fileInput';
+					_.frameId = CKEDITOR.tools.getNextId() + '_fileInput';
 
 					// Support for custom document.domain in IE.
@@ -917,5 +932,5 @@
 					this._.disabled = false;
 					var element = this.getElement();
-					element && element.removeClass( 'disabled' );
+					element && element.removeClass( 'cke_disabled' );
 				},
 
@@ -927,5 +942,5 @@
 				{
 					this._.disabled = true;
-					this.getElement().addClass( 'disabled' );
+					this.getElement().addClass( 'cke_disabled' );
 				},
 
@@ -1047,5 +1062,5 @@
 				{
 					!value && ( value = '' );
-					return CKEDITOR.ui.dialog.uiElement.prototype.setValue.call( this, value );
+					return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply( this, arguments );
 				},
 
@@ -1142,9 +1157,10 @@
 				 * @example
 				 * @param {Boolean} true to tick the checkbox, false to untick it.
-				 */
-				setValue : function( checked )
+				 * @param {Boolean} noChangeEvent Internal commit, to supress 'change' event on this element.
+				 */
+				setValue : function( checked, noChangeEvent )
 				{
 					this.getInputElement().$.checked = checked;
-					this.fire( 'change', { value : checked } );
+					!noChangeEvent && this.fire( 'change', { value : checked } );
 				},
 
@@ -1208,6 +1224,7 @@
 				 * @example
 				 * @param {String} value The value of the button to be chcked.
-				 */
-				setValue : function( value )
+				 * @param {Boolean} noChangeEvent Internal commit, to supress 'change' event on this element.
+				 */
+				setValue : function( value, noChangeEvent )
 				{
 					var children = this._.children,
@@ -1215,5 +1232,5 @@
 					for ( var i = 0 ; ( i < children.length ) && ( item = children[i] ) ; i++ )
 						item.getElement().$.checked = ( item.getValue() == value );
-					this.fire( 'change', { value : value } );
+					!noChangeEvent && this.fire( 'change', { value : value } );
 				},
 
@@ -1324,7 +1341,38 @@
 				 * @example
 				 */
-				getAction : function( action )
+				getAction : function()
 				{
 					return this.getInputElement().getParent().$.action;
+				},
+
+				/**
+				 * The events must be applied on the inner input element, and
+				 * that must be done when the iframe & form has been loaded
+				 */
+				registerEvents : function( definition )
+				{
+					var regex = /^on([A-Z]\w+)/,
+						match;
+
+					var registerDomEvent = function( uiElement, dialog, eventName, func )
+					{
+						uiElement.on( 'formLoaded', function()
+						{
+							uiElement.getInputElement().on( eventName, func, uiElement );
+						});
+					};
+
+					for ( var i in definition )
+					{
+						if ( !( match = i.match( regex ) ) )
+							continue;
+
+						if ( this.eventProcessors[i] )
+							this.eventProcessors[i].call( this, this._.dialog, definition[i] );
+						else
+							registerDomEvent( this, this._.dialog, match[1].toLowerCase(), definition[i] );
+					}
+
+					return this;
 				},
 
@@ -1337,8 +1385,38 @@
 				reset : function()
 				{
-					var frameElement = CKEDITOR.document.getById( this._.frameId ),
+					var _ = this._,
+						frameElement = CKEDITOR.document.getById( _.frameId ),
 						frameDocument = frameElement.getFrameDocument(),
-						elementDefinition = this._.definition,
-						buttons = this._.buttons;
+						elementDefinition = _.definition,
+						buttons = _.buttons,
+						callNumber = this.formLoadedNumber,
+						unloadNumber = this.formUnloadNumber,
+						langDir = _.dialog._.editor.lang.dir,
+						langCode = _.dialog._.editor.langCode;
+
+					// The callback function for the iframe, but we must call tools.addFunction only once
+					// so we store the function number in this.formLoadedNumber
+					if ( !callNumber )
+					{
+						callNumber = this.formLoadedNumber = CKEDITOR.tools.addFunction(
+							function()
+							{
+								// Now we can apply the events to the input type=file
+								this.fire( 'formLoaded' ) ;
+							}, this ) ;
+
+						// Remove listeners attached to the content of the iframe (the file input)
+						unloadNumber = this.formUnloadNumber = CKEDITOR.tools.addFunction(
+							function()
+							{
+								this.getInputElement().clearCustomData();
+							}, this ) ;
+
+						this.getDialog()._.editor.on( 'destroy', function()
+								{
+									CKEDITOR.tools.removeFunction( callNumber );
+									CKEDITOR.tools.removeFunction( unloadNumber );
+								} );
+					}
 
 					function generateFormField()
@@ -1354,6 +1432,6 @@
 							size = elementDefinition.size - ( CKEDITOR.env.ie  ? 7 : 0 );	// "Browse" button is bigger in IE.
 
-						frameDocument.$.write( [ '<html><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">',
-								'<form enctype="multipart/form-data" method="POST" action="',
+						frameDocument.$.write( [ '<html dir="' + langDir + '" lang="' + langCode + '"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">',
+								'<form enctype="multipart/form-data" method="POST" dir="' + langDir + '" lang="' + langCode + '" action="',
 								CKEDITOR.tools.htmlEncode( elementDefinition.action ),
 								'">',
@@ -1364,5 +1442,7 @@
 								'" />',
 								'</form>',
-								'</body></html>' ].join( '' ) );
+								'</body></html>',
+								'<script>window.parent.CKEDITOR.tools.callFunction(' + callNumber + ');',
+								'window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction(' + unloadNumber + ')}</script>' ].join( '' ) );
 
 						frameDocument.$.close();
@@ -1381,8 +1461,16 @@
 				getValue : function()
 				{
-					// The file path returned from the input tag is incomplete anyway, so it's
-					// safe to ignore it and prevent the confirmation dialog from appearing.
-					// (Part of #3465)
-					return '';
+					return this.getInputElement().$.value;
+				},
+
+				/***
+				 * The default value of input type="file" is an empty string, but during initialization
+				 * of this UI element, the iframe still isn't ready so it can't be read from that object
+				 * Setting it manually prevents later issues about the current value ("") being different
+				 * of the initial value (undefined as it asked for .value of a div)
+				 */
+				setInitValue : function()
+				{
+					this._.initValue = '';
 				},
 
@@ -1393,5 +1481,25 @@
 				 * @example
 				 */
-				eventProcessors : commonEventProcessors,
+				eventProcessors :
+				{
+					onChange : function( dialog, func )
+					{
+						// If this method is called several times (I'm not sure about how this can happen but the default
+						// onChange processor includes this protection)
+						// In order to reapply to the new element, the property is deleted at the beggining of the registerEvents method
+						if ( !this._.domOnChangeRegistered )
+						{
+							// By listening for the formLoaded event, this handler will get reapplied when a new
+							// form is created
+							this.on( 'formLoaded', function()
+							{
+								this.getInputElement().on( 'change', function(){ this.fire( 'change', { value : this.getValue() } ); }, this );
+							}, this );
+							this._.domOnChangeRegistered = true;
+						}
+
+						this.on( 'change', func );
+					}
+				},
 
 				keyboardFocusable : true
Index: /CKEditor/branches/features/adobeair/_source/plugins/div/dialogs/div.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/div/dialogs/div.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/div/dialogs/div.js	(revision 6006)
@@ -141,6 +141,6 @@
 
 			// Get all ranges from the selection.
-			var selection = editor.document.getSelection();
-			var ranges = selection.getRanges();
+			var selection = editor.document.getSelection(),
+				ranges = selection.getRanges();
 			var bookmarks = selection.createBookmarks();
 			var i, iterator;
@@ -331,5 +331,11 @@
 									var styleName;
 									if ( ( styleName = this.getValue() ) )
-										styles[ styleName ].applyToObject( element );
+									{
+										var style = styles[ styleName ];
+										var customData = element.getCustomData( 'elementStyle' ) || '';
+
+										style.applyToObject( element );
+										element.setCustomData( 'elementStyle', customData + style._.definition.attributes.style );
+									}
 								}
 							},
@@ -387,7 +393,6 @@
 											{
 												// Merge with 'elementStyle', which is of higher priority.
-												var value = this.getValue(),
-														merged = [ value, element.getAttribute( 'style' ) ].join( ';' );
-												value && element.setAttribute( 'style', merged );
+												var merged = this.getValue() + ( element.getCustomData( 'elementStyle' ) || '' );
+												element.setAttribute( 'style', merged );
 											}
 										}
@@ -433,5 +438,5 @@
 			onLoad : function()
 			{
-				setupFields.call(this);
+				setupFields.call( this );
 
 				// Preparing for the 'elementStyle' field.
@@ -485,5 +490,4 @@
 			onOk : function()
 			{
-				editor.fire( 'saveSnapshot' );
 				if ( command == 'editdiv' )
 					containers = [ this._element ];
@@ -500,5 +504,4 @@
 					!containers[ i ].getAttribute( 'style' ) && containers[ i ].removeAttribute( 'style' );
 				}
-				editor.fire( 'saveSnapshot' );
 
 				this.hide();
@@ -506,4 +509,7 @@
 			onHide : function()
 			{
+				// Remove style only when editing existing DIV. (#6315)
+				if ( command == 'editdiv' )
+					this._element.removeCustomData( 'elementStyle' );
 				delete this._element;
 			}
Index: /CKEditor/branches/features/adobeair/_source/plugins/div/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/div/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/div/plugin.js	(revision 6006)
@@ -96,5 +96,5 @@
 					editor.contextMenu.addListener( function( element, selection )
 						{
-							if ( !element )
+							if ( !element || element.isReadOnly() )
 								return null;
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/domiterator/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/domiterator/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/domiterator/plugin.js	(revision 6006)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -21,9 +21,9 @@
 
 		this.range = range;
-		this.forceBrBreak = false;
+		this.forceBrBreak = 0;
 
 		// Whether include <br>s into the enlarged range.(#3730).
-		this.enlargeBr = true;
-		this.enforceRealBlocks = false;
+		this.enlargeBr = 1;
+		this.enforceRealBlocks = 0;
 
 		this._ || ( this._ = {} );
@@ -45,4 +45,7 @@
 			var isLast;
 
+			// Indicate at least one of the range boundaries is inside a preformat block.
+			var touchPre;
+
 			// Instructs to cleanup remaining BRs.
 			var removePreviousBr, removeLastBr;
@@ -52,9 +55,16 @@
 			{
 				range = this.range.clone();
-				range.enlarge( this.forceBrBreak || !this.enlargeBr ?
+
+				// Shrink the range to exclude harmful "noises" (#4087, #4450, #5435).
+				range.shrink( CKEDITOR.NODE_ELEMENT, true );
+
+				touchPre = range.endContainer.hasAscendant( 'pre', true )
+					|| range.startContainer.hasAscendant( 'pre', true );
+
+				range.enlarge( this.forceBrBreak && !touchPre || !this.enlargeBr ?
 							   CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS : CKEDITOR.ENLARGE_BLOCK_CONTENTS );
 
 				var walker = new CKEDITOR.dom.walker( range ),
-					ignoreBookmarkTextEvaluator = CKEDITOR.dom.walker.bookmark( true, true );
+					ignoreBookmarkTextEvaluator = CKEDITOR.dom.walker.bookmark( false, true );
 				// Avoid anchor inside bookmark inner text.
 				walker.evaluator = ignoreBookmarkTextEvaluator;
@@ -71,5 +81,5 @@
 				if ( this._.lastNode &&
 						this._.lastNode.type == CKEDITOR.NODE_TEXT &&
-						!CKEDITOR.tools.trim( this._.lastNode.getText( ) ) &&
+						!CKEDITOR.tools.trim( this._.lastNode.getText() ) &&
 						this._.lastNode.getParent().isBlockBoundary() )
 				{
@@ -103,10 +113,11 @@
 				// closeRange indicates that a paragraph boundary has been found,
 				// so the range can be closed.
-				var closeRange = false;
+				var closeRange = 0,
+					parentPre = currentNode.hasAscendant( 'pre' );
 
 				// includeNode indicates that the current node is good to be part
 				// of the range. By default, any non-element node is ok for it.
 				var includeNode = ( currentNode.type != CKEDITOR.NODE_ELEMENT ),
-					continueFromSibling = false;
+					continueFromSibling = 0;
 
 				// If it is an element node, let's check if it can be part of the
@@ -116,10 +127,11 @@
 					var nodeName = currentNode.getName();
 
-					if ( currentNode.isBlockBoundary( this.forceBrBreak && { br : 1 } ) )
+					if ( currentNode.isBlockBoundary( this.forceBrBreak &&
+							!parentPre && { br : 1 } ) )
 					{
 						// <br> boundaries must be part of the range. It will
 						// happen only if ForceBrBreak.
 						if ( nodeName == 'br' )
-							includeNode = true;
+							includeNode = 1;
 						else if ( !range && !currentNode.getChildCount() && nodeName != 'hr' )
 						{
@@ -143,5 +155,5 @@
 						}
 
-						closeRange = true;
+						closeRange = 1;
 					}
 					else
@@ -160,5 +172,5 @@
 							continue;
 						}
-						includeNode = true;
+						includeNode = 1;
 					}
 				}
@@ -168,5 +180,5 @@
 					// other unicode whitespaces) before/after a block node.
 					if ( beginWhitespaceRegex.test( currentNode.getText() ) )
-						includeNode = false;
+						includeNode = 0;
 				}
 
@@ -190,7 +202,8 @@
 						var parentNode = currentNode.getParent();
 
-						if ( parentNode.isBlockBoundary( this.forceBrBreak && { br : 1 } ) )
+						if ( parentNode.isBlockBoundary( this.forceBrBreak
+								&& !parentPre && { br : 1 } ) )
 						{
-							closeRange = true;
+							closeRange = 1;
 							isLast = isLast || ( parentNode.equals( lastNode) );
 							break;
@@ -198,7 +211,7 @@
 
 						currentNode = parentNode;
-						includeNode = true;
+						includeNode = 1;
 						isLast = ( currentNode.equals( lastNode ) );
-						continueFromSibling = true;
+						continueFromSibling = 1;
 					}
 				}
@@ -213,24 +226,6 @@
 				// We have found a block boundary. Let's close the range and move out of the
 				// loop.
-				if ( ( closeRange || isLast ) && range )
-				{
-					var boundaryNodes = range.getBoundaryNodes(),
-						startPath = new CKEDITOR.dom.elementPath( range.startContainer );
-
-					// Drop the range if it only contains bookmark nodes, and is
-					// not because of the original collapsed range. (#4087,#4450)
-					if ( boundaryNodes.startNode.getParent().equals( startPath.blockLimit )
-						 && isBookmark( boundaryNodes.startNode ) && isBookmark( boundaryNodes.endNode ) )
-					{
-						range = null;
-						this._.nextNode = null;
-					}
-					else
+				if ( isLast || ( closeRange && range ) )
 						break;
-				}
-
-				if ( isLast )
-					break;
-
 			}
 
@@ -246,5 +241,5 @@
 				}
 
-				startPath = new CKEDITOR.dom.elementPath( range.startContainer );
+				var startPath = new CKEDITOR.dom.elementPath( range.startContainer );
 				var startBlockLimit = startPath.blockLimit,
 					checkLimits = { div : 1, th : 1, td : 1 };
@@ -308,4 +303,7 @@
 			}
 
+			// Ignore bookmark nodes.(#3783)
+			var bookmarkGuard = CKEDITOR.dom.walker.bookmark( false, true );
+
 			if ( removePreviousBr )
 			{
@@ -322,7 +320,4 @@
 			if ( removeLastBr )
 			{
-				// Ignore bookmark nodes.(#3783)
-				var bookmarkGuard = CKEDITOR.dom.walker.bookmark( false, true );
-
 				var lastChild = block.getLast();
 				if ( lastChild && lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.getName() == 'br' )
@@ -345,4 +340,10 @@
 			}
 
+			if ( !bookmarkGuard( this._.nextNode ) )
+			{
+				this._.nextNode = this._.nextNode.getNextSourceNode( true, null, function( node )
+					{ return !node.equals( lastNode ) && bookmarkGuard( node ); } );
+			}
+
 			return block;
 		}
Index: /CKEditor/branches/features/adobeair/_source/plugins/editingblock/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/editingblock/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/editingblock/plugin.js	(revision 6006)
@@ -105,5 +105,5 @@
 						editor.fireOnce( 'instanceReady' );
 						CKEDITOR.fire( 'instanceReady', null, editor );
-					} );
+					}, 0 );
 				});
 		}
@@ -206,5 +206,4 @@
  * config.startupFocus = true;
  */
-CKEDITOR.config.startupFocus = false;
 
 /**
Index: /CKEditor/branches/features/adobeair/_source/plugins/elementspath/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/elementspath/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/elementspath/plugin.js	(revision 6006)
@@ -134,5 +134,7 @@
 			editor.on( 'contentDomUnload', function()
 				{
-					getSpaceElement().setHtml( emptyHtml );
+					// If the spaceElement hasn't been initialized, don't try to do it at this time
+					// Only reuse existing reference.
+					spaceElement && spaceElement.setHtml( emptyHtml );
 				});
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/enterkey/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/enterkey/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/enterkey/plugin.js	(revision 6006)
@@ -25,4 +25,9 @@
 			range = range || getRange( editor );
 
+			// We may not have valid ranges to work on, like when inside a
+			// contenteditable=false element.
+			if ( !range )
+				return;
+
 			var doc = range.document;
 
@@ -65,5 +70,5 @@
 				{
 					nextBlock.breakParent( node );
-					nextBlock.move( nextBlock.getNext(), true );
+					nextBlock.move( nextBlock.getNext(), 1 );
 				}
 			}
@@ -189,4 +194,9 @@
 			// Get the range for the current selection.
 			range = range || getRange( editor );
+
+			// We may not have valid ranges to work on, like when inside a
+			// contenteditable=false element.
+			if ( !range )
+				return;
 
 			var doc = range.document;
@@ -308,5 +318,5 @@
 		}
 		else
-			return enter( editor, editor.config.shiftEnterMode, true );
+			return enter( editor, editor.config.shiftEnterMode, 1 );
 	}
 
@@ -326,5 +336,5 @@
 			{
 				editor.fire( 'saveSnapshot' );	// Save undo step.
-				if ( mode == CKEDITOR.ENTER_BR || editor.getSelection().getStartElement().hasAscendant( 'pre', true ) )
+				if ( mode == CKEDITOR.ENTER_BR || editor.getSelection().getStartElement().hasAscendant( 'pre', 1 ) )
 					enterBr( editor, mode, null, forceMode );
 				else
@@ -340,5 +350,5 @@
 	{
 		// Get the selection ranges.
-		var ranges = editor.getSelection().getRanges();
+		var ranges = editor.getSelection().getRanges( true );
 
 		// Delete the contents of all ranges except the first one.
Index: /CKEditor/branches/features/adobeair/_source/plugins/entities/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/entities/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/entities/plugin.js	(revision 6006)
@@ -6,9 +6,8 @@
 (function()
 {
+	// Base HTML entities.
+	var htmlbase = 'nbsp,gt,lt,quot';
+
 	var entities =
-
-		// Base HTML entities.
-		'nbsp,gt,lt,quot,' +
-
 		// Latin-1 Entities
 		'iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,' +
@@ -47,5 +46,9 @@
 		'upsih,piv';
 
-	function buildTable( entities )
+	/**
+	 * Create a mapping table between one character and it's entity form from a list of entity names.
+	 * @param reverse {Boolean} Whether create a reverse map from the entity string form to actual character.
+	 */
+	function buildTable( entities, reverse )
 	{
 		var table = {},
@@ -64,29 +67,35 @@
 		entities = entities.replace( /\b(nbsp|shy|gt|lt|amp)(?:,|$)/g, function( match, entity )
 			{
-				table[ specialTable[ entity ] ] = '&' + entity + ';';
-				regex.push( specialTable[ entity ] );
+				var org = reverse ? '&' + entity + ';' : specialTable[ entity ],
+					result = reverse ? specialTable[ entity ] : '&' + entity + ';';
+
+				table[ org ] = result;
+				regex.push( org );
 				return '';
 			});
 
-		// Transforms the entities string into an array.
-		entities = entities.split( ',' );
-
-		// Put all entities inside a DOM element, transforming them to their
-		// final chars.
-		var div = document.createElement( 'div' ),
-			chars;
-		div.innerHTML = '&' + entities.join( ';&' ) + ';';
-		chars = div.innerHTML;
-		div = null;
-
-		// Add all chars to the table.
-		for ( var i = 0 ; i < chars.length ; i++ )
+		if ( !reverse )
 		{
-			var charAt = chars.charAt( i );
-			table[ charAt ] = '&' + entities[ i ] + ';';
-			regex.push( charAt );
+			// Transforms the entities string into an array.
+			entities = entities.split( ',' );
+
+			// Put all entities inside a DOM element, transforming them to their
+			// final chars.
+			var div = document.createElement( 'div' ),
+				chars;
+			div.innerHTML = '&' + entities.join( ';&' ) + ';';
+			chars = div.innerHTML;
+			div = null;
+
+			// Add all chars to the table.
+			for ( var i = 0 ; i < chars.length ; i++ )
+			{
+				var charAt = chars.charAt( i );
+				table[ charAt ] = '&' + entities[ i ] + ';';
+				regex.push( charAt );
+			}
 		}
 
-		table.regex = regex.join( '' );
+		table.regex = regex.join( reverse ? '|' : '' );
 
 		return table;
@@ -99,7 +108,4 @@
 			var config = editor.config;
 
-			if ( !config.entities )
-				return;
-
 			var dataProcessor = editor.dataProcessor,
 				htmlFilter = dataProcessor && dataProcessor.htmlFilter;
@@ -107,14 +113,19 @@
 			if ( htmlFilter )
 			{
-				var selectedEntities = entities;
-
-				if ( config.entities_latin )
-					selectedEntities += ',' + latin;
-
-				if ( config.entities_greek )
-					selectedEntities += ',' + greek;
-
-				if ( config.entities_additional )
-					selectedEntities += ',' + config.entities_additional;
+				// Mandatory HTML base entities.
+				var selectedEntities = htmlbase;
+
+				if ( config.entities )
+				{
+					selectedEntities += ',' + entities;
+					if ( config.entities_latin )
+						selectedEntities += ',' + latin;
+
+					if ( config.entities_greek )
+						selectedEntities += ',' + greek;
+
+					if ( config.entities_additional )
+						selectedEntities += ',' + config.entities_additional;
+				}
 
 				var entitiesTable = buildTable( selectedEntities );
@@ -124,12 +135,24 @@
 				delete entitiesTable.regex;
 
-				if ( config.entities_processNumerical )
+				if ( config.entities && config.entities_processNumerical )
 					entitiesRegex = '[^ -~]|' + entitiesRegex ;
 
 				entitiesRegex = new RegExp( entitiesRegex, 'g' );
+
+				function getEntity( character )
+				{
+					return config.entities_processNumerical == 'force' || !entitiesTable[ character ] ?
+						   '&#' + character.charCodeAt(0) + ';'
+							: entitiesTable[ character ];
+				}
+
+				// Decode entities that the browsers has transformed
+				// at first place.
+				var baseEntitiesTable = buildTable( [ htmlbase, 'shy' ].join( ',' ) , true ),
+					baseEntitiesRegex = new RegExp( baseEntitiesTable.regex, 'g' );
 
 				function getChar( character )
 				{
-					return entitiesTable[ character ] || ( '&#' + character.charCodeAt(0) + ';' );
+					return baseEntitiesTable[ character ];
 				}
 
@@ -138,5 +161,6 @@
 						text : function( text )
 						{
-							return text.replace( entitiesRegex, getChar );
+							return text.replace( baseEntitiesRegex, getChar )
+									.replace( entitiesRegex, getEntity );
 						}
 					});
@@ -180,13 +204,15 @@
 /**
  * Whether to convert all remaining characters, not comprised in the ASCII
- * character table, to their relative numeric representation of HTML entity.
+ * character table, to their relative decimal numeric representation of HTML entity.
+ * When specified as the value 'force', it will simply convert all entities into the above form.
  * For example, the phrase "This is Chinese: &#27721;&#35821;." is outputted
  * as "This is Chinese: &amp;#27721;&amp;#35821;."
  * @type Boolean
+ * @type Boolean|String
  * @default false
  * @example
  * config.entities_processNumerical = true;
- */
-CKEDITOR.config.entities_processNumerical = false;
+ * config.entities_processNumerical = 'force';		//Convert from "&nbsp;" into "&#160;";
+ */
 
 /**
Index: /CKEditor/branches/features/adobeair/_source/plugins/filebrowser/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/filebrowser/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/filebrowser/plugin.js	(revision 6006)
@@ -175,5 +175,5 @@
 
 		var url = addQueryString( this.filebrowser.url, params );
-		editor.popup( url, width, height );
+		editor.popup( url, width, height, editor.config.fileBrowserWindowFeatures );
 	}
 
@@ -262,6 +262,11 @@
 			if ( element.filebrowser.action == 'Browse' )
 			{
-				var url = element.filebrowser.url || editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'BrowseUrl' ]
-							|| editor.config.filebrowserBrowseUrl;
+				var url = element.filebrowser.url;
+				if ( url === undefined )
+				{
+					url = editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'BrowseUrl' ];
+					if ( url === undefined )
+						url = editor.config.filebrowserBrowseUrl;
+				}
 
 				if ( url )
@@ -274,6 +279,11 @@
 			else if ( element.filebrowser.action == 'QuickUpload' && element[ 'for' ] )
 			{
-				url =  element.filebrowser.url || editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'UploadUrl' ]
-							|| editor.config.filebrowserUploadUrl;
+				var url = element.filebrowser.url;
+				if ( url === undefined )
+				{
+					url = editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'UploadUrl' ];
+					if ( url === undefined )
+						url = editor.config.filebrowserUploadUrl;
+				}
 
 				if ( url )
@@ -341,5 +351,5 @@
 			for ( var i = 0 ; i < ids.length ; i++ )
 			{
-				if ( isConfigured( definition, tabId, ids[i]) )
+				if ( isConfigured( definition, tabId, ids[i] ) )
 					return true;
 			}
@@ -389,9 +399,11 @@
 		for ( var i in definition.contents )
 		{
-			element = definition.contents[ i ] ;
-			attachFileBrowser( evt.editor, evt.data.name, definition, element.elements );
-			if ( element.hidden && element.filebrowser )
+			if ( ( element = definition.contents[ i ] ) )
 			{
-				element.hidden = !isConfigured( definition, element[ 'id' ], element.filebrowser );
+				attachFileBrowser( evt.editor, evt.data.name, definition, element.elements );
+				if ( element.hidden && element.filebrowser )
+				{
+					element.hidden = !isConfigured( definition, element[ 'id' ], element.filebrowser );
+				}
 			}
 		}
@@ -478,2 +490,12 @@
  * config.filebrowserImageBrowseLinkUrl = '/browser/browse.php';
  */
+
+/**
+ * The "features" to use in the file browser popup window.
+ * @name CKEDITOR.config.filebrowserWindowFeatures
+ * @since 3.4.1
+ * @type String
+ * @default 'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes'
+ * @example
+ * config.filebrowserWindowFeatures = 'resizable=yes,scrollbars=no';
+ */
Index: /CKEditor/branches/features/adobeair/_source/plugins/find/dialogs/find.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/find/dialogs/find.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/find/dialogs/find.js	(revision 6006)
@@ -6,7 +6,9 @@
 (function()
 {
-	function nonEmptyText( node )
+	var isReplace;
+
+	function findEvaluator( node )
 	{
-		return ( node.type == CKEDITOR.NODE_TEXT && node.getLength() > 0 );
+		return node.type == CKEDITOR.NODE_TEXT && node.getLength() > 0 && ( !isReplace || !node.isReadOnly() );
 	}
 
@@ -14,5 +16,5 @@
 	 * Elements which break characters been considered as sequence.
 	*/
-	function nonCharactersBoundary ( node )
+	function nonCharactersBoundary( node )
 	{
 		return !( node.type == CKEDITOR.NODE_ELEMENT && node.isBlockBoundary(
@@ -70,5 +72,5 @@
 		// 1. Defined as full match style to avoid compromising ordinary text color styles.
 		// 2. Must be apply onto inner-most text to avoid conflicting with ordinary text color styles visually.
-		var highlightStyle = new CKEDITOR.style( CKEDITOR.tools.extend( { fullMatch : true, childRule : function(){ return false; } },
+		var highlightStyle = new CKEDITOR.style( CKEDITOR.tools.extend( { fullMatch : true, childRule : function(){ return 0; } },
 			editor.config.find_highlight ) );
 
@@ -82,9 +84,19 @@
 		var characterWalker = function( range , matchWord )
 		{
+			var self = this;
 			var walker =
 				new CKEDITOR.dom.walker( range );
-			walker.guard = matchWord ? nonCharactersBoundary : null;
-			walker[ 'evaluator' ] = nonEmptyText;
-			walker.breakOnFalse = true;
+			walker.guard = matchWord ? nonCharactersBoundary : function( node )
+			{
+				!nonCharactersBoundary( node ) && ( self._.matchBoundary = true );
+			};
+			walker[ 'evaluator' ] = findEvaluator;
+			walker.breakOnFalse = 1;
+
+			if ( range.startContainer.type == CKEDITOR.NODE_TEXT )
+			{
+				this.textNode = range.startContainer;
+				this.offset = range.startOffset - 1;
+			}
 
 			this._ = {
@@ -110,5 +122,5 @@
 				var currentTextNode = this.textNode;
 				// Already at the end of document, no more character available.
-				if (  currentTextNode === null )
+				if ( currentTextNode === null )
 					return cursorStep.call( this );
 
@@ -141,12 +153,6 @@
 						// already reach document end.
 						if ( this._.matchWord && !currentTextNode
-							 ||this._.walker._.end )
+							 || this._.walker._.end )
 							break;
-
-						// Marking as match character boundaries.
-						if ( !currentTextNode
-						   && !nonCharactersBoundary( this._.walker.current ) )
-							this._.matchBoundary = true;
-
 					}
 					// Found a fresh text node.
@@ -174,5 +180,5 @@
 				rangeLength : rangeLength,
 				highlightRange : null,
-				isMatched : false
+				isMatched : 0
 			};
 		};
@@ -252,6 +258,8 @@
 
 				// Apply the highlight.
-				var range = this.toDomRange();
+				var range = this.toDomRange(),
+					bookmark = range.createBookmark();
 				highlightStyle.applyToRange( range );
+				range.moveToBookmark( bookmark );
 				this._.highlightRange = range;
 
@@ -274,7 +282,17 @@
 					return;
 
+				var bookmark = this._.highlightRange.createBookmark();
 				highlightStyle.removeFromRange( this._.highlightRange );
+				this._.highlightRange.moveToBookmark( bookmark );
 				this.updateFromDomRange( this._.highlightRange );
 				this._.highlightRange = null;
+			},
+
+			isReadOnly : function()
+			{
+				if ( !this._.highlightRange )
+					return 0;
+
+				return this._.highlightRange.startContainer.isReadOnly();
 			},
 
@@ -498,5 +516,5 @@
 				if ( matchCyclic && !cyclicRerun )
 				{
-					this.searchRange = getSearchRange( true );
+					this.searchRange = getSearchRange( 1 );
 					this.matchRange = null;
 					return arguments.callee.apply( this,
@@ -515,11 +533,13 @@
 				matchCyclic , isReplaceAll )
 			{
+				isReplace = 1;
+
 				// Successiveness of current replace/find.
-				var result = false;
+				var result = 0;
 
 				// 1. Perform the replace when there's already a match here.
 				// 2. Otherwise perform the find but don't replace it immediately.
 				if ( this.matchRange && this.matchRange.isMatched()
-						&& !this.matchRange._.isReplaced )
+						&& !this.matchRange._.isReplaced && !this.matchRange.isReadOnly() )
 				{
 					// Turn off highlight for a while when saving snapshots.
@@ -546,8 +566,10 @@
 					this.matchRange._.isReplaced = true;
 					this.replaceCounter++;
-					result = true;
+					result = 1;
 				}
 				else
 					result = this.find( pattern, matchCase, matchWord, matchCyclic, !isReplaceAll );
+
+				isReplace = 0;
 
 				return result;
@@ -578,15 +600,16 @@
 		}
 
+		var lang = editor.lang.findAndReplace;
 		return {
-			title : editor.lang.findAndReplace.title,
+			title : lang.title,
 			resizable : CKEDITOR.DIALOG_RESIZE_NONE,
 			minWidth : 350,
 			minHeight : 165,
-			buttons : [ CKEDITOR.dialog.cancelButton ],		//Cancel button only.
+			buttons : [ CKEDITOR.dialog.cancelButton ],		// Cancel button only.
 			contents : [
 				{
 					id : 'find',
-					label : editor.lang.findAndReplace.find,
-					title : editor.lang.findAndReplace.find,
+					label : lang.find,
+					title : lang.find,
 					accessKey : '',
 					elements : [
@@ -599,5 +622,5 @@
 									type : 'text',
 									id : 'txtFindFind',
-									label : editor.lang.findAndReplace.findWhat,
+									label : lang.findWhat,
 									isChanged : false,
 									labelLayout : 'horizontal',
@@ -608,5 +631,5 @@
 									align : 'left',
 									style : 'width:100%',
-									label : editor.lang.findAndReplace.find,
+									label : lang.find,
 									onClick : function()
 									{
@@ -616,5 +639,5 @@
 													dialog.getValueOf( 'find', 'txtFindWordChk' ),
 													dialog.getValueOf( 'find', 'txtFindCyclic' ) ) )
-											alert( editor.lang.findAndReplace
+											alert( lang
 												.notFoundMsg );
 									}
@@ -632,5 +655,5 @@
 									isChanged : false,
 									style : 'margin-top:28px',
-									label : editor.lang.findAndReplace.matchCase
+									label : lang.matchCase
 								},
 								{
@@ -638,5 +661,5 @@
 									id : 'txtFindWordChk',
 									isChanged : false,
-									label : editor.lang.findAndReplace.matchWord
+									label : lang.matchWord
 								},
 								{
@@ -645,5 +668,5 @@
 									isChanged : false,
 									'default' : true,
-									label : editor.lang.findAndReplace.matchCyclic
+									label : lang.matchCyclic
 								}
 							]
@@ -653,5 +676,5 @@
 				{
 					id : 'replace',
-					label : editor.lang.findAndReplace.replace,
+					label : lang.replace,
 					accessKey : 'M',
 					elements : [
@@ -664,5 +687,5 @@
 									type : 'text',
 									id : 'txtFindReplace',
-									label : editor.lang.findAndReplace.findWhat,
+									label : lang.findWhat,
 									isChanged : false,
 									labelLayout : 'horizontal',
@@ -673,5 +696,5 @@
 									align : 'left',
 									style : 'width:100%',
-									label : editor.lang.findAndReplace.replace,
+									label : lang.replace,
 									onClick : function()
 									{
@@ -683,5 +706,5 @@
 													dialog.getValueOf( 'replace', 'txtReplaceWordChk' ),
 													dialog.getValueOf( 'replace', 'txtReplaceCyclic' ) ) )
-											alert( editor.lang.findAndReplace
+											alert( lang
 												.notFoundMsg );
 									}
@@ -697,5 +720,5 @@
 									type : 'text',
 									id : 'txtReplace',
-									label : editor.lang.findAndReplace.replaceWith,
+									label : lang.replaceWith,
 									isChanged : false,
 									labelLayout : 'horizontal',
@@ -706,5 +729,5 @@
 									align : 'left',
 									style : 'width:100%',
-									label : editor.lang.findAndReplace.replaceAll,
+									label : lang.replaceAll,
 									isChanged : false,
 									onClick : function()
@@ -716,5 +739,5 @@
 
 										// Scope to full document.
-										finder.searchRange = getSearchRange( true );
+										finder.searchRange = getSearchRange( 1 );
 										if ( finder.matchRange )
 										{
@@ -733,9 +756,9 @@
 										if ( finder.replaceCounter )
 										{
-											alert( editor.lang.findAndReplace.replaceSuccessMsg.replace( /%1/, finder.replaceCounter ) );
+											alert( lang.replaceSuccessMsg.replace( /%1/, finder.replaceCounter ) );
 											editor.fire( 'saveSnapshot' );
 										}
 										else
-											alert( editor.lang.findAndReplace.notFoundMsg );
+											alert( lang.notFoundMsg );
 									}
 								}
@@ -751,5 +774,5 @@
 									id : 'txtReplaceCaseChk',
 									isChanged : false,
-									label : editor.lang.findAndReplace
+									label : lang
 										.matchCase
 								},
@@ -758,5 +781,5 @@
 									id : 'txtReplaceWordChk',
 									isChanged : false,
-									label : editor.lang.findAndReplace
+									label : lang
 										.matchWord
 								},
@@ -766,5 +789,5 @@
 									isChanged : false,
 									'default' : true,
-									label : editor.lang.findAndReplace
+									label : lang
 										.matchCyclic
 								}
@@ -778,17 +801,17 @@
 				var dialog = this;
 
-				//keep track of the current pattern field in use.
+				// Keep track of the current pattern field in use.
 				var patternField, wholeWordChkField;
 
-				//Ignore initial page select on dialog show
-				var isUserSelect = false;
-				this.on('hide', function()
-						{
-							isUserSelect = false;
-						} );
-				this.on('show', function()
-						{
-							isUserSelect = true;
-						} );
+				// Ignore initial page select on dialog show
+				var isUserSelect = 0;
+				this.on( 'hide', function()
+						{
+							isUserSelect = 0;
+						});
+				this.on( 'show', function()
+						{
+							isUserSelect = 1;
+						});
 
 				this.selectPage = CKEDITOR.tools.override( this.selectPage, function( originalFunc )
@@ -808,5 +831,5 @@
 								wholeWordChkFieldId );
 
-							// prepare for check pattern text filed 'keyup' event
+							// Prepare for check pattern text filed 'keyup' event
 							if ( !currPage.initialized )
 							{
@@ -816,6 +839,6 @@
 							}
 
+							// Synchronize fields on tab switch.
 							if ( isUserSelect )
-								// synchronize fields on tab switch.
 								syncFieldsBetweenTabs.call( this, pageId );
 						};
Index: /CKEditor/branches/features/adobeair/_source/plugins/flash/dialogs/flash.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/flash/dialogs/flash.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/flash/dialogs/flash.js	(revision 6006)
@@ -176,6 +176,6 @@
 		var previewPreloader,
 			previewAreaHtml = '<div>' + CKEDITOR.tools.htmlEncode( editor.lang.common.preview ) +'<br>' +
-			'<div id="FlashPreviewLoader' + CKEDITOR.tools.getNextNumber() + '" style="display:none"><div class="loading">&nbsp;</div></div>' +
-			'<div id="FlashPreviewBox' + CKEDITOR.tools.getNextNumber() + '" class="FlashPreviewBox"></div></div>';
+			'<div id="cke_FlashPreviewLoader' + CKEDITOR.tools.getNextNumber() + '" style="display:none"><div class="loading">&nbsp;</div></div>' +
+			'<div id="cke_FlashPreviewBox' + CKEDITOR.tools.getNextNumber() + '" class="FlashPreviewBox"></div></div>';
 
 		return {
@@ -187,5 +187,5 @@
 				// Clear previously saved elements.
 				this.fakeImage = this.objectNode = this.embedNode = null;
-				previewPreloader = new CKEDITOR.dom.element( 'embeded', editor.document );
+				previewPreloader = new CKEDITOR.dom.element( 'embed', editor.document );
 
 				// Try to detect any embed or object tag that has Flash parameters.
Index: /CKEditor/branches/features/adobeair/_source/plugins/flash/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/flash/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/flash/plugin.js	(revision 6006)
@@ -6,13 +6,7 @@
 (function()
 {
-	var flashFilenameRegex = /\.swf(?:$|\?)/i,
-		numberRegex = /^\d+(?:\.\d+)?$/;
+	var flashFilenameRegex = /\.swf(?:$|\?)/i;
 
-	function cssifyLength( length )
-	{
-		if ( numberRegex.test( length ) )
-			return length + 'px';
-		return length;
-	}
+	var cssifyLength = CKEDITOR.tools.cssLength;
 
 	function isFlashEmbed( element )
@@ -91,5 +85,6 @@
 				editor.contextMenu.addListener( function( element, selection )
 					{
-						if ( element && element.is( 'img' ) && element.getAttribute( '_cke_real_element_type' ) == 'flash' )
+						if ( element && element.is( 'img' ) && !element.isReadOnly()
+								&& element.getAttribute( '_cke_real_element_type' ) == 'flash' )
 							return { flash : CKEDITOR.TRISTATE_OFF };
 					});
Index: /CKEditor/branches/features/adobeair/_source/plugins/floatpanel/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/floatpanel/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/floatpanel/plugin.js	(revision 6006)
@@ -17,12 +17,6 @@
 	{
 		// Generates the panel key: docId-eleId-skinName-langDir[-uiColor][-CSSs][-level]
-		var key =
-			doc.getUniqueId() +
-			'-' + parentElement.getUniqueId() +
-			'-' + editor.skinName +
-			'-' + editor.lang.dir +
-			( ( editor.uiColor && ( '-' + editor.uiColor ) ) || '' ) +
-			( ( definition.css && ( '-' + definition.css ) ) || '' ) +
-			( ( level && ( '-' + level ) ) || '' );
+		var key = CKEDITOR.tools.genKey( doc.getUniqueId(), parentElement.getUniqueId(), editor.skinName, editor.lang.dir,
+			editor.uiColor || '', definition.css || '', level || '' );
 
 		var panel = panels[ key ];
@@ -47,5 +41,5 @@
 		$ : function( editor, parentElement, definition, level )
 		{
-			definition.forceIFrame = true;
+			definition.forceIFrame = 1;
 
 			var doc = parentElement.getDocument(),
@@ -105,5 +99,5 @@
 
 				this.allowBlur( false );
-				isShowing = true;
+				isShowing = 1;
 
 				var element = this.element,
@@ -130,12 +124,13 @@
 				element.setStyles(
 					{
-						top : top + 'px',
-						left : '-3000px',
-						opacity : '0',	// FF3 is ignoring "visibility"
+						top : '-30000px',
 						display	: ''
 					});
+				// Don't use display or visibility style because we need to
+				// calculate the rendering layout later and focus the element.
+				element.setOpacity( 0 );
 
 				// To allow the context menu to decrease back their width
-				element.getFirst().removeStyle('width');
+				element.getFirst().removeStyle( 'width' );
 
 				// Configure the IFrame blur event. Do that only once.
@@ -204,8 +199,8 @@
 								var widthNode = block.element.$;
 
-								if ( CKEDITOR.env.gecko || CKEDITOR.env.opera)
+								if ( CKEDITOR.env.gecko || CKEDITOR.env.opera )
 									widthNode = widthNode.parentNode;
 
-								if ( CKEDITOR.env.ie)
+								if ( CKEDITOR.env.ie )
 									widthNode = widthNode.document.body;
 
@@ -260,11 +255,40 @@
 								top -= panelSize.height;
 
+							// If IE is in RTL, we have troubles with absolute
+							// position and horizontal scrolls. Here we have a
+							// series of hacks to workaround it. (#6146)
+							if ( CKEDITOR.env.ie )
+							{
+								var offsetParent = new CKEDITOR.dom.element( element.$.offsetParent ),
+									scrollParent = offsetParent;
+
+								// Quirks returns <body>, but standards returns <html>.
+								if ( scrollParent.getName() == 'html' )
+									scrollParent = scrollParent.getDocument().getBody();
+
+								if ( scrollParent.getComputedStyle( 'direction' ) == 'rtl' )
+								{
+									// For IE8, there is not much logic on this, but it works.
+									if ( CKEDITOR.env.ie8Compat )
+										left -= element.getDocument().getDocumentElement().$.scrollLeft * 2;
+									else
+										left -= ( offsetParent.$.scrollWidth - offsetParent.$.clientWidth );
+								}
+							}
+
+							// Trigger the onHide event of the previously active panel to prevent
+							// incorrect styles from being applied (#6170) 
+							var innerElement = element.getFirst(),
+								activePanel;
+							if ( ( activePanel = innerElement.getCustomData( 'activePanel' ) ) )
+								activePanel.onHide && activePanel.onHide.call( this, 1 );
+							innerElement.setCustomData( 'activePanel', this );
+
 							element.setStyles(
 								{
 									top : top + 'px',
-									left : left + 'px',
-									opacity : '1'
+									left : left + 'px'
 								} );
-
+							element.setOpacity( 1 );
 						} , this );
 
@@ -284,5 +308,5 @@
 					this.onShow.call( this );
 
-				isShowing = false;
+				isShowing = 0;
 			},
 
@@ -294,4 +318,5 @@
 					this.element.setStyle( 'display', 'none' );
 					this.visible = 0;
+					this.element.getFirst().removeCustomData( 'activePanel' ); 
 				}
 			},
Index: /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/button.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/button.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/button.js	(revision 6006)
@@ -13,8 +13,8 @@
 			delete this.button;
 			var element = this.getParentEditor().getSelection().getSelectedElement();
-			if ( element && element.getName() == "input" )
+			if ( element && element.is( 'input' ) )
 			{
 				var type = element.getAttribute( 'type' );
-				if ( type == "button" || type == "reset" || type == "submit" )
+				if ( type in { button:1, reset:1, submit:1 } )
 				{
 					this.button = element;
Index: /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/checkbox.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/checkbox.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/checkbox.js	(revision 6006)
@@ -15,5 +15,5 @@
 			var element = this.getParentEditor().getSelection().getSelectedElement();
 
-			if ( element && element.getAttribute( 'type' ) == "checkbox" )
+			if ( element && element.getAttribute( 'type' ) == 'checkbox' )
 			{
 				this.checkbox = element;
@@ -32,8 +32,6 @@
 				element = editor.document.createElement( 'input' );
 				element.setAttribute( 'type', 'checkbox' );
+				editor.insertElement( element );
 			}
-
-			if ( isInsertMode )
-				editor.insertElement( element );
 			this.commitContent( { element : element } );
 		},
@@ -95,5 +93,5 @@
 								if ( CKEDITOR.env.ie )
 								{
-									// Remove attribute 'value' of checkbox #4721.
+									// Remove attribute 'value' of checkbox (#4721).
 									var checkbox = new CKEDITOR.dom.element( 'input', element.getDocument() );
 									element.copyAttributes( checkbox, { value: 1 } );
@@ -124,6 +122,6 @@
 							if ( CKEDITOR.env.ie )
 							{
-								var isElementChecked = !!element.getAttribute( 'checked' );
-								var isChecked = !!this.getValue();
+								var isElementChecked = !!element.getAttribute( 'checked' ),
+									isChecked = !!this.getValue();
 
 								if ( isElementChecked != isChecked )
Index: /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/form.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/form.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/form.js	(revision 6006)
@@ -105,5 +105,5 @@
 						label : editor.lang.form.action,
 						'default' : '',
-						accessKey : 'A'
+						accessKey : 'T'
 					},
 					{
Index: /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/radio.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/radio.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/radio.js	(revision 6006)
@@ -14,5 +14,5 @@
 
 			var element = this.getParentEditor().getSelection().getSelectedElement();
-			if ( element && element.getName() == "input" && element.getAttribute( 'type' ) == "radio" )
+			if ( element && element.getName() == 'input' && element.getAttribute( 'type' ) == 'radio' )
 			{
 				this.radioButton = element;
Index: /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/select.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/select.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/select.js	(revision 6006)
@@ -162,10 +162,10 @@
 			if ( isInsertMode )
 			{
-				editor.insertElement(element);
+				editor.insertElement( element );
 				if ( CKEDITOR.env.ie )
 				{
 					var sel = editor.getSelection(),
 						bms = sel.createBookmarks();
-					setTimeout(function ()
+					setTimeout(function()
 					{
 						sel.selectBookmarks( bms );
@@ -194,5 +194,5 @@
 						{
 							if ( name == 'clear' )
-								this.setValue( '' );
+								this.setValue( this['default'] || '' );
 							else if ( name == 'select' )
 							{
Index: /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/textfield.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/textfield.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/forms/dialogs/textfield.js	(revision 6006)
@@ -148,5 +148,11 @@
 								validate : CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed )
 							}
-						]
+						],
+						onLoad : function()
+						{
+							// Repaint the style for IE7 (#6068)
+							if ( CKEDITOR.env.ie7Compat )
+								this.getElement().setStyle( 'zoom', '100%' );
+						}
 					},
 					{
Index: /CKEditor/branches/features/adobeair/_source/plugins/forms/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/forms/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/forms/plugin.js	(revision 6006)
@@ -28,6 +28,6 @@
 				'background-repeat: no-repeat;' +
 				'border: 1px solid #a9a9a9;' +
-				'width: 16px;' +
-				'height: 16px;' +
+				'width: 16px !important;' +
+				'height: 16px !important;' +
 			'}' );
 
@@ -132,5 +132,5 @@
 			editor.contextMenu.addListener( function( element )
 				{
-					if ( element && element.hasAscendant( 'form', true ) )
+					if ( element && element.hasAscendant( 'form', true ) && !element.isReadOnly() )
 						return { form : CKEDITOR.TRISTATE_OFF };
 				});
@@ -138,5 +138,5 @@
 			editor.contextMenu.addListener( function( element )
 				{
-					if ( element )
+					if ( element && !element.isReadOnly() )
 					{
 						var name = element.getName();
@@ -192,8 +192,11 @@
 					switch ( type )
 					{
-						case 'text' : case 'password':
+						case 'text' :
+						case 'password' :
 							evt.data.dialog = 'textfield';
 							break;
-						case 'button' : case 'submit' : case 'reset' :
+						case 'button' :
+						case 'submit' :
+						case 'reset' :
 							evt.data.dialog = 'button';
 							break;
Index: /CKEditor/branches/features/adobeair/_source/plugins/htmldataprocessor/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/htmldataprocessor/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/htmldataprocessor/plugin.js	(revision 6006)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -202,5 +202,6 @@
 				title : function( element )
 				{
-					element.children[ 0 ].value = element.attributes[ '_cke_title' ];
+					var titleText = element.children[ 0 ];
+					titleText && ( titleText.value = element.attributes[ '_cke_title' ] || '' );
 				}
 			},
@@ -263,5 +264,6 @@
 	}
 
-	var protectAttributeRegex = /<(?:a|area|img|input)[\s\S]*?\s((?:href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))/gi;
+	var protectAttributeRegex = /<((?:a|area|img|input)[\s\S]*?\s)((href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))([^>]*)>/gi,
+		findSavedSrcRegex = /\s_cke_saved_src\s*=/;
 
 	var protectElementsRegex = /(?:<style(?=[ >])[^>]*>[\s\S]*<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,
@@ -275,5 +277,12 @@
 	function protectAttributes( html )
 	{
-		return html.replace( protectAttributeRegex, '$& _cke_saved_$1' );
+		return html.replace( protectAttributeRegex, function( tag, beginning, fullAttr, attrName, end )
+			{
+				// We should not rewrite the _cke_saved_src attribute (#5218)
+				if ( attrName == 'src' && findSavedSrcRegex.test( tag ) )
+					return tag;
+				else
+					return '<' + beginning + fullAttr + ' _cke_saved_' + fullAttr + end + '>';
+			});
 	}
 
@@ -307,4 +316,9 @@
 	{
 		return html.replace( protectSelfClosingRegex, '<cke:$1$2></cke:$1>' );
+	}
+
+	function protectPreFormatted( html )
+	{
+		return html.replace( /(<pre\b[^>]*>)(\r\n|\n)/g, '$1$2$2' );
 	}
 
@@ -429,4 +443,8 @@
 			data = protectSelfClosingElements( data );
 
+			// Compensate one leading line break after <pre> open as browsers
+			// eat it up. (#5789)
+			data = protectPreFormatted( data );
+
 			// Call the browser to help us fixing a possibly invalid HTML
 			// structure.
@@ -483,3 +501,2 @@
  * config.forceSimpleAmpersand = false;
  */
-CKEDITOR.config.forceSimpleAmpersand = false;
Index: /CKEditor/branches/features/adobeair/_source/plugins/htmlwriter/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/htmlwriter/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/htmlwriter/plugin.js	(revision 6006)
@@ -58,10 +58,12 @@
 		this.lineBreakChars = '\n';
 
-		this.forceSimpleAmpersand = false;
-
-		this.sortAttributes = true;
-
-		this._.indent = false;
+		this.forceSimpleAmpersand = 0;
+
+		this.sortAttributes = 1;
+
+		this._.indent = 0;
 		this._.indentation = '';
+		// Indicate preformatted block context status. (#5789)
+		this._.inPre = 0;
 		this._.rules = {};
 
@@ -72,9 +74,9 @@
 			this.setRules( e,
 				{
-					indent : true,
-					breakBeforeOpen : true,
-					breakAfterOpen : true,
+					indent : 1,
+					breakBeforeOpen : 1,
+					breakAfterOpen : 1,
 					breakBeforeClose : !dtd[ e ][ '#' ],
-					breakAfterClose : true
+					breakAfterClose : 1
 				});
 		}
@@ -82,17 +84,17 @@
 		this.setRules( 'br',
 			{
-				breakAfterOpen : true
+				breakAfterOpen : 1
 			});
 
 		this.setRules( 'title',
 			{
-				indent : false,
-				breakAfterOpen : false
+				indent : 0,
+				breakAfterOpen : 0
 			});
 
 		this.setRules( 'style',
 			{
-				indent : false,
-				breakBeforeClose : true
+				indent : 0,
+				breakBeforeClose : 1
 			});
 
@@ -100,5 +102,5 @@
 		this.setRules( 'pre',
 			{
-			  indent: false
+			  indent : 0
 			});
 	},
@@ -159,4 +161,5 @@
 			if ( rules && rules.breakAfterOpen )
 				this.lineBreak();
+			tagName == 'pre' && ( this._.inPre = 1 );
 		},
 
@@ -207,4 +210,5 @@
 
 			this._.output.push( '</', tagName, '>' );
+			tagName == 'pre' && ( this._.inPre = 0 );
 
 			if ( rules && rules.breakAfterClose )
@@ -224,5 +228,5 @@
 			{
 				this.indentation();
-				text = CKEDITOR.tools.ltrim( text );
+				!this._.inPre  && ( text = CKEDITOR.tools.ltrim( text ) );
 			}
 
@@ -253,7 +257,7 @@
 		lineBreak : function()
 		{
-			if ( this._.output.length > 0 )
+			if ( !this._.inPre && this._.output.length > 0 )
 				this._.output.push( this.lineBreakChars );
-			this._.indent = true;
+			this._.indent = 1;
 		},
 
@@ -268,6 +272,7 @@
 		indentation : function()
 		{
-			this._.output.push( this._.indentation );
-			this._.indent = false;
+			if( !this._.inPre )
+				this._.output.push( this._.indentation );
+			this._.indent = 0;
 		},
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/iframedialog/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/iframedialog/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/iframedialog/plugin.js	(revision 6006)
@@ -75,5 +75,5 @@
 					cssWidth = CKEDITOR.tools.cssLength( elementDefinition.width ),
 					cssHeight = CKEDITOR.tools.cssLength( elementDefinition.height );
-				_.frameId = CKEDITOR.tools.getNextNumber() + '_iframe';
+				_.frameId = CKEDITOR.tools.getNextId() + '_iframe';
 
 				// IE BUG: Parent container does not resize to contain the iframe automatically.
Index: /CKEditor/branches/features/adobeair/_source/plugins/image/dialogs/image.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/image/dialogs/image.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/image/dialogs/image.js	(revision 6006)
@@ -251,5 +251,8 @@
 		};
 
-		var numbering = function( id ){ return id + CKEDITOR.tools.getNextNumber(); },
+		var numbering = function( id )
+			{
+				return CKEDITOR.tools.getNextId() + '_' + id;
+			},
 			btnLockSizesId = numbering( 'btnLockSizes' ),
 			btnResetSizeId = numbering( 'btnResetSize' ),
@@ -539,5 +542,4 @@
 													// Manually set the initial value.(#4191)
 													field.setInitValue();
-													field.focus();
 												}
 											},
@@ -576,5 +578,5 @@
 							type : 'text',
 							label : editor.lang.image.alt,
-							accessKey : 'A',
+							accessKey : 'T',
 							'default' : '',
 							onChange : function()
@@ -665,5 +667,5 @@
 																	}
 																	else
-																		element.setStyle( 'width', value + 'px');
+																		element.setStyle( 'width', CKEDITOR.tools.cssLength( value ) );
 																}
 																else if ( type == CLEANUP )
@@ -716,5 +718,5 @@
 																	}
 																	else
-																		element.setStyle( 'height', value + 'px' );
+																		element.setStyle( 'height',  CKEDITOR.tools.cssLength( value ) );
 																}
 																else if ( type == CLEANUP )
@@ -1126,5 +1128,5 @@
 								action : 'Browse',
 								target: 'Link:txtUrl',
-								url: editor.config.filebrowserImageBrowseLinkUrl || editor.config.filebrowserBrowseUrl
+								url: editor.config.filebrowserImageBrowseLinkUrl
 							},
 							style : 'float:right',
Index: /CKEditor/branches/features/adobeair/_source/plugins/image/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/image/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/image/plugin.js	(revision 6006)
@@ -54,5 +54,5 @@
 			editor.contextMenu.addListener( function( element, selection )
 				{
-					if ( !element || !element.is( 'img' ) || element.getAttribute( '_cke_realelement' ) )
+					if ( !element || !element.is( 'img' ) || element.getAttribute( '_cke_realelement' ) || element.isReadOnly() )
 						return null;
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/indent/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/indent/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/indent/plugin.js	(revision 6006)
@@ -54,5 +54,5 @@
 		else
 		{
-			var indent = parseInt( firstBlock.getStyle( this.indentCssProperty ), 10 );
+			var indent = parseInt( firstBlock.getStyle( getIndentCssProperty( firstBlock ) ), 10 );
 			if ( isNaN( indent ) )
 				indent = 0;
@@ -62,185 +62,4 @@
 		}
 	}
-
-	function indentList( editor, range, listNode )
-	{
-		// Our starting and ending points of the range might be inside some blocks under a list item...
-		// So before playing with the iterator, we need to expand the block to include the list items.
-		var startContainer = range.startContainer,
-			endContainer = range.endContainer;
-		while ( startContainer && !startContainer.getParent().equals( listNode ) )
-			startContainer = startContainer.getParent();
-		while ( endContainer && !endContainer.getParent().equals( listNode ) )
-			endContainer = endContainer.getParent();
-
-		if ( !startContainer || !endContainer )
-			return;
-
-		// Now we can iterate over the individual items on the same tree depth.
-		var block = startContainer,
-			itemsToMove = [],
-			stopFlag = false;
-		while ( !stopFlag )
-		{
-			if ( block.equals( endContainer ) )
-				stopFlag = true;
-			itemsToMove.push( block );
-			block = block.getNext();
-		}
-		if ( itemsToMove.length < 1 )
-			return;
-
-		// Do indent or outdent operations on the array model of the list, not the
-		// list's DOM tree itself. The array model demands that it knows as much as
-		// possible about the surrounding lists, we need to feed it the further
-		// ancestor node that is still a list.
-		var listParents = listNode.getParents( true );
-		for ( var i = 0 ; i < listParents.length ; i++ )
-		{
-			if ( listParents[i].getName && listNodeNames[ listParents[i].getName() ] )
-			{
-				listNode = listParents[i];
-				break;
-			}
-		}
-		var indentOffset = this.name == 'indent' ? 1 : -1,
-			startItem = itemsToMove[0],
-			lastItem = itemsToMove[ itemsToMove.length - 1 ],
-			database = {};
-
-		// Convert the list DOM tree into a one dimensional array.
-		var listArray = CKEDITOR.plugins.list.listToArray( listNode, database );
-
-		// Apply indenting or outdenting on the array.
-		var baseIndent = listArray[ lastItem.getCustomData( 'listarray_index' ) ].indent;
-		for ( i = startItem.getCustomData( 'listarray_index' ); i <= lastItem.getCustomData( 'listarray_index' ); i++ )
-		{
-			listArray[ i ].indent += indentOffset;
-			// Make sure the newly created sublist get a brand-new element of the same type. (#5372)
-			var listRoot = listArray[ i ].parent;
-			listArray[ i ].parent = new CKEDITOR.dom.element( listRoot.getName(), listRoot.getDocument() );
-		}
-
-		for ( i = lastItem.getCustomData( 'listarray_index' ) + 1 ;
-				i < listArray.length && listArray[i].indent > baseIndent ; i++ )
-			listArray[i].indent += indentOffset;
-
-		// Convert the array back to a DOM forest (yes we might have a few subtrees now).
-		// And replace the old list with the new forest.
-		var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode, 0 );
-
-		// Avoid nested <li> after outdent even they're visually same,
-		// recording them for later refactoring.(#3982)
-		if ( this.name == 'outdent' )
-		{
-			var parentLiElement;
-			if ( ( parentLiElement = listNode.getParent() ) && parentLiElement.is( 'li' ) )
-			{
-				var children = newList.listNode.getChildren(),
-					pendingLis = [],
-					count = children.count(),
-					child;
-
-				for ( i = count - 1 ; i >= 0 ; i-- )
-				{
-					if ( ( child = children.getItem( i ) ) && child.is && child.is( 'li' )  )
-						pendingLis.push( child );
-				}
-			}
-		}
-
-		if ( newList )
-			newList.listNode.replace( listNode );
-
-		// Move the nested <li> to be appeared after the parent.
-		if ( pendingLis && pendingLis.length )
-		{
-			for (  i = 0; i < pendingLis.length ; i++ )
-			{
-				var li = pendingLis[ i ],
-					followingList = li;
-
-				// Nest preceding <ul>/<ol> inside current <li> if any.
-				while ( ( followingList = followingList.getNext() ) &&
-					   followingList.is &&
-					   followingList.getName() in listNodeNames )
-				{
-					// IE requires a filler NBSP for nested list inside empty list item,
-					// otherwise the list item will be inaccessiable. (#4476)
-					if ( CKEDITOR.env.ie && !li.getFirst( function( node ){ return isNotWhitespaces( node ) && isNotBookmark( node ); } ) )
-						li.append( range.document.createText( '\u00a0' ) );
-
-					li.append( followingList );
-				}
-
-				li.insertAfter( parentLiElement );
-			}
-		}
-
-		// Clean up the markers.
-		CKEDITOR.dom.element.clearAllMarkers( database );
-	}
-
-	function indentBlock( editor, range )
-	{
-		var iterator = range.createIterator(),
-			enterMode = editor.config.enterMode;
-		iterator.enforceRealBlocks = true;
-		iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR;
-		var block;
-		while ( ( block = iterator.getNextParagraph() ) )
-			indentElement.call( this, editor, block );
-	}
-
-	function indentElement( editor, element )
-		{
-			if ( this.useIndentClasses )
-			{
-				// Transform current class name to indent step index.
-			var indentClass = element.$.className.match( this.classNameRegex ),
-					indentStep = 0;
-				if ( indentClass )
-				{
-					indentClass = indentClass[1];
-					indentStep = this.indentClassMap[ indentClass ];
-				}
-
-				// Operate on indent step index, transform indent step index back to class
-				// name.
-				if ( this.name == 'outdent' )
-					indentStep--;
-				else
-					indentStep++;
-
-			if ( indentStep < 0 )
-				return false;
-
-				indentStep = Math.min( indentStep, editor.config.indentClasses.length );
-				indentStep = Math.max( indentStep, 0 );
-			var className = CKEDITOR.tools.ltrim( element.$.className.replace( this.classNameRegex, '' ) );
-				if ( indentStep < 1 )
-				element.$.className = className;
-				else
-				element.addClass( editor.config.indentClasses[ indentStep - 1 ] );
-			}
-			else
-			{
-			var currentOffset = parseInt( element.getStyle( this.indentCssProperty ), 10 );
-				if ( isNaN( currentOffset ) )
-					currentOffset = 0;
-				currentOffset += ( this.name == 'indent' ? 1 : -1 ) * editor.config.indentOffset;
-
-			if ( currentOffset < 0 )
-				return false;
-
-				currentOffset = Math.max( currentOffset, 0 );
-				currentOffset = Math.ceil( currentOffset / editor.config.indentOffset ) * editor.config.indentOffset;
-			element.setStyle( this.indentCssProperty, currentOffset ? currentOffset + editor.config.indentUnit : '' );
-			if ( element.getAttribute( 'style' ) === '' )
-				element.removeAttribute( 'style' );
-			}
-
-		return true;
-		}
 
 	function indentCommand( editor, name )
@@ -255,7 +74,12 @@
 				this.indentClassMap[ editor.config.indentClasses[i] ] = i + 1;
 		}
-		else
-			this.indentCssProperty = editor.config.contentsLangDirection == 'ltr' ? 'margin-left' : 'margin-right';
+
 		this.startDisabled = name == 'outdent';
+	}
+
+	// Returns the CSS property to be used for identing a given element.
+	function getIndentCssProperty( element )
+	{
+		return element.getComputedStyle( 'direction' ) == 'ltr' ? 'margin-left' : 'margin-right';
 	}
 
@@ -268,53 +92,255 @@
 		exec : function( editor )
 		{
+			var self = this, database = {};
+
+			function indentList( listNode )
+			{
+				// Our starting and ending points of the range might be inside some blocks under a list item...
+				// So before playing with the iterator, we need to expand the block to include the list items.
+				var startContainer = range.startContainer,
+					endContainer = range.endContainer;
+				while ( startContainer && !startContainer.getParent().equals( listNode ) )
+					startContainer = startContainer.getParent();
+				while ( endContainer && !endContainer.getParent().equals( listNode ) )
+					endContainer = endContainer.getParent();
+
+				if ( !startContainer || !endContainer )
+					return;
+
+				// Now we can iterate over the individual items on the same tree depth.
+				var block = startContainer,
+					itemsToMove = [],
+					stopFlag = false;
+				while ( !stopFlag )
+				{
+					if ( block.equals( endContainer ) )
+						stopFlag = true;
+					itemsToMove.push( block );
+					block = block.getNext();
+				}
+				if ( itemsToMove.length < 1 )
+					return;
+
+				// Do indent or outdent operations on the array model of the list, not the
+				// list's DOM tree itself. The array model demands that it knows as much as
+				// possible about the surrounding lists, we need to feed it the further
+				// ancestor node that is still a list.
+				var listParents = listNode.getParents( true );
+				for ( var i = 0 ; i < listParents.length ; i++ )
+				{
+					if ( listParents[i].getName && listNodeNames[ listParents[i].getName() ] )
+					{
+						listNode = listParents[i];
+						break;
+					}
+				}
+				var indentOffset = self.name == 'indent' ? 1 : -1,
+					startItem = itemsToMove[0],
+					lastItem = itemsToMove[ itemsToMove.length - 1 ];
+
+				// Convert the list DOM tree into a one dimensional array.
+				var listArray = CKEDITOR.plugins.list.listToArray( listNode, database );
+
+				// Apply indenting or outdenting on the array.
+				var baseIndent = listArray[ lastItem.getCustomData( 'listarray_index' ) ].indent;
+				for ( i = startItem.getCustomData( 'listarray_index' ); i <= lastItem.getCustomData( 'listarray_index' ); i++ )
+				{
+					listArray[ i ].indent += indentOffset;
+					// Make sure the newly created sublist get a brand-new element of the same type. (#5372)
+					var listRoot = listArray[ i ].parent;
+					listArray[ i ].parent = new CKEDITOR.dom.element( listRoot.getName(), listRoot.getDocument() );
+				}
+
+				for ( i = lastItem.getCustomData( 'listarray_index' ) + 1 ;
+						i < listArray.length && listArray[i].indent > baseIndent ; i++ )
+					listArray[i].indent += indentOffset;
+
+				// Convert the array back to a DOM forest (yes we might have a few subtrees now).
+				// And replace the old list with the new forest.
+				var newListDir = listNode.getAttribute( 'dir' ) || listNode.getStyle( 'direction' );
+				var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode, newListDir );
+
+				// Avoid nested <li> after outdent even they're visually same,
+				// recording them for later refactoring.(#3982)
+				if ( self.name == 'outdent' )
+				{
+					var parentLiElement;
+					if ( ( parentLiElement = listNode.getParent() ) && parentLiElement.is( 'li' ) )
+					{
+						var children = newList.listNode.getChildren(),
+							pendingLis = [],
+							count = children.count(),
+							child;
+
+						for ( i = count - 1 ; i >= 0 ; i-- )
+						{
+							if ( ( child = children.getItem( i ) ) && child.is && child.is( 'li' )  )
+								pendingLis.push( child );
+						}
+					}
+				}
+
+				if ( newList )
+					newList.listNode.replace( listNode );
+
+				// Move the nested <li> to be appeared after the parent.
+				if ( pendingLis && pendingLis.length )
+				{
+					for (  i = 0; i < pendingLis.length ; i++ )
+					{
+						var li = pendingLis[ i ],
+							followingList = li;
+
+						// Nest preceding <ul>/<ol> inside current <li> if any.
+						while ( ( followingList = followingList.getNext() ) &&
+							   followingList.is &&
+							   followingList.getName() in listNodeNames )
+						{
+							// IE requires a filler NBSP for nested list inside empty list item,
+							// otherwise the list item will be inaccessiable. (#4476)
+							if ( CKEDITOR.env.ie && !li.getFirst( function( node ){ return isNotWhitespaces( node ) && isNotBookmark( node ); } ) )
+								li.append( range.document.createText( '\u00a0' ) );
+
+							li.append( followingList );
+						}
+
+						li.insertAfter( parentLiElement );
+					}
+				}
+			}
+
+			function indentBlock()
+			{
+				var iterator = range.createIterator(),
+					enterMode = editor.config.enterMode;
+				iterator.enforceRealBlocks = true;
+				iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR;
+				var block;
+				while ( ( block = iterator.getNextParagraph() ) )
+					indentElement( block );
+			}
+
+			function indentElement( element )
+			{
+				if ( element.getCustomData( 'indent_processed' ) )
+					return false;
+
+				if ( self.useIndentClasses )
+				{
+					// Transform current class name to indent step index.
+					var indentClass = element.$.className.match( self.classNameRegex ),
+							indentStep = 0;
+					if ( indentClass )
+					{
+						indentClass = indentClass[1];
+						indentStep = self.indentClassMap[ indentClass ];
+					}
+
+					// Operate on indent step index, transform indent step index back to class
+					// name.
+					if ( self.name == 'outdent' )
+						indentStep--;
+					else
+						indentStep++;
+
+					if ( indentStep < 0 )
+						return false;
+
+					indentStep = Math.min( indentStep, editor.config.indentClasses.length );
+					indentStep = Math.max( indentStep, 0 );
+					var className = CKEDITOR.tools.ltrim( element.$.className.replace( self.classNameRegex, '' ) );
+					if ( indentStep < 1 )
+						element.$.className = className;
+					else
+						element.addClass( editor.config.indentClasses[ indentStep - 1 ] );
+				}
+				else
+				{
+					var indentCssProperty = getIndentCssProperty( element ),
+						currentOffset = parseInt( element.getStyle( indentCssProperty ), 10 );
+					if ( isNaN( currentOffset ) )
+						currentOffset = 0;
+					var indentOffset = editor.config.indentOffset || 40;
+					currentOffset += ( self.name == 'indent' ? 1 : -1 ) * indentOffset;
+
+					if ( currentOffset < 0 )
+						return false;
+
+					currentOffset = Math.max( currentOffset, 0 );
+					currentOffset = Math.ceil( currentOffset / indentOffset ) * indentOffset;
+					element.setStyle( indentCssProperty, currentOffset ? currentOffset + ( editor.config.indentUnit || 'px' ) : '' );
+					if ( element.getAttribute( 'style' ) === '' )
+						element.removeAttribute( 'style' );
+				}
+
+				CKEDITOR.dom.element.setMarker( database, element, 'indent_processed', 1 );
+				return true;
+			}
+
 			var selection = editor.getSelection(),
-				range = selection && selection.getRanges()[0];
-
-			var startContainer = range.startContainer,
-				endContainer = range.endContainer,
-				rangeRoot = range.getCommonAncestor(),
-				nearestListBlock = rangeRoot;
-
-			while ( nearestListBlock && !( nearestListBlock.type == CKEDITOR.NODE_ELEMENT &&
-				listNodeNames[ nearestListBlock.getName() ] ) )
-				nearestListBlock = nearestListBlock.getParent();
-
-			// Avoid selection anchors under list root.
-			// <ul>[<li>...</li>]</ul> =>	<ul><li>[...]</li></ul>
-			if ( nearestListBlock && startContainer.type == CKEDITOR.NODE_ELEMENT
-				&& startContainer.getName() in listNodeNames )
-			{
-				var walker = new CKEDITOR.dom.walker( range );
-				walker.evaluator = isListItem;
-				range.startContainer = walker.next();
-			}
-
-			if ( nearestListBlock && endContainer.type == CKEDITOR.NODE_ELEMENT
-				&& endContainer.getName() in listNodeNames )
-			{
-				walker = new CKEDITOR.dom.walker( range );
-				walker.evaluator = isListItem;
-				range.endContainer = walker.previous();
-			}
-
-			var bookmarks = selection.createBookmarks( true );
-
-			if ( nearestListBlock  )
-			{
-				var firstListItem = nearestListBlock.getFirst( function( node )
-					{
-						return node.type == CKEDITOR.NODE_ELEMENT && node.is( 'li' );
-					}),
-					rangeStart = range.startContainer,
-					indentWholeList = firstListItem.equals( rangeStart ) || firstListItem.contains( rangeStart );
-
-				// Indent the entire list if  cursor is inside the first list item. (#3893)
-				if ( !( indentWholeList && indentElement.call( this, editor, nearestListBlock ) ) )
-				indentList.call( this, editor, range, nearestListBlock );
-			}
-			else
-				indentBlock.call( this, editor, range );
-
-			editor.focus();
+				bookmarks = selection.createBookmarks( 1 ),
+				ranges = selection && selection.getRanges( 1 ),
+				range;
+
+			var skipBookmarks = CKEDITOR.dom.walker.bookmark( 0, 1 );
+
+			var iterator = ranges.createIterator();
+			while ( ( range = iterator.getNextRange() ) )
+			{
+				// Do not indent body. (#6138)
+				range.shrink( CKEDITOR.SHRINK_ELEMENT );
+				if ( range.endContainer.getName() == 'body' )
+					range.setEndAt( range.endContainer.getLast( skipBookmarks ), CKEDITOR.POSITION_BEFORE_END );
+
+				var startContainer = range.startContainer,
+					endContainer = range.endContainer,
+					rangeRoot = range.getCommonAncestor(),
+					nearestListBlock = rangeRoot;
+
+				while ( nearestListBlock && !( nearestListBlock.type == CKEDITOR.NODE_ELEMENT &&
+					listNodeNames[ nearestListBlock.getName() ] ) )
+					nearestListBlock = nearestListBlock.getParent();
+
+				// Avoid selection anchors under list root.
+				// <ul>[<li>...</li>]</ul> =>	<ul><li>[...]</li></ul>
+				if ( nearestListBlock && startContainer.type == CKEDITOR.NODE_ELEMENT
+					&& startContainer.getName() in listNodeNames )
+				{
+					var walker = new CKEDITOR.dom.walker( range );
+					walker.evaluator = isListItem;
+					range.startContainer = walker.next();
+				}
+
+				if ( nearestListBlock && endContainer.type == CKEDITOR.NODE_ELEMENT
+					&& endContainer.getName() in listNodeNames )
+				{
+					walker = new CKEDITOR.dom.walker( range );
+					walker.evaluator = isListItem;
+					range.endContainer = walker.previous();
+				}
+
+				if ( nearestListBlock )
+				{
+					var firstListItem = nearestListBlock.getFirst( function( node )
+						{
+							return node.type == CKEDITOR.NODE_ELEMENT && node.is( 'li' );
+						}),
+						rangeStart = range.startContainer,
+						indentWholeList = firstListItem.equals( rangeStart ) || firstListItem.contains( rangeStart );
+
+					// Indent the entire list if cursor is inside the first list item. (#3893)
+					// Only do that for indenting or when using indent classes or when there is something to outdent. (#6141)
+					if ( !( indentWholeList &&
+						( self.name == 'indent' || self.useIndentClasses || parseInt( nearestListBlock.getStyle( getIndentCssProperty( nearestListBlock ) ), 10 ) ) &&
+							indentElement( nearestListBlock ) ) )
+								indentList( nearestListBlock );
+				}
+				else
+					indentBlock();
+			}
+
+			// Clean up the markers.
+			CKEDITOR.dom.element.clearAllMarkers( database );
+
 			editor.forceNextSelectionCheck();
 			selection.selectBookmarks( bookmarks );
@@ -358,4 +384,36 @@
 					"}" );
 			}
+
+			// Register dirChanged listener.
+			editor.on( 'dirChanged', function( e )
+			{
+				var range = new CKEDITOR.dom.range( editor.document );
+				range.setStartBefore( e.data );
+				range.setEndAfter( e.data );
+				
+				var walker = new CKEDITOR.dom.walker( range ),
+					node;
+
+				while ( ( node = walker.next() ) )
+				{
+					if ( node.type == CKEDITOR.NODE_ELEMENT )
+					{
+						// A child with the defined dir is to be ignored.
+						if ( !node.equals( e.data ) && node.getDirection() )
+						{
+							range.setStartAfter( node );
+							walker = new CKEDITOR.dom.walker( range );
+							continue;
+						}
+
+						// Switch the margins.
+						var marginLeft = node.getStyle( 'margin-right' ),
+							marginRight = node.getStyle( 'margin-left' );
+
+						marginLeft ? node.setStyle( 'margin-left', marginLeft ) : node.removeStyle( 'margin-left' );
+						marginRight ? node.setStyle( 'margin-right', marginRight ) : node.removeStyle( 'margin-right' );
+					}
+				}
+			});
 		},
 
@@ -363,36 +421,4 @@
 	} );
 })();
-
-CKEDITOR.tools.extend( CKEDITOR.config,
-	{
-		indentOffset : 40,
-		indentUnit : 'px',
-		indentClasses : null
-	});
-
-/**
- * Size of each indentation step
- * @type Number
- * @example
- * config.indentOffset = 40;
- */
-
- /**
- * Unit for the indentation style
- * @type String
- * @example
- * config.indentUnit = 'px';
- */
-
- /**
- * List of classes to use for indenting the contents.
- * @type Array
- * @example
- * // Don't use classes for indenting. (this is the default value)
- * config.indentClasses = null;
- * @example
- * // Use the classes 'Indent1', 'Indent2', 'Indent3'
- * config.indentClasses = ['Indent1', 'Indent2', 'Indent3'];
- */
 
 /**
Index: /CKEditor/branches/features/adobeair/_source/plugins/justify/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/justify/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/justify/plugin.js	(revision 6006)
@@ -10,6 +10,4 @@
 (function()
 {
-	var alignRemoveRegex = /(-moz-|-webkit-|start|auto)/i;
-
 	function getState( editor, path )
 	{
@@ -19,8 +17,33 @@
 			return CKEDITOR.TRISTATE_OFF;
 
-		var currentAlign = firstBlock.getComputedStyle( 'text-align' ).replace( alignRemoveRegex, '' );
-		if ( ( !currentAlign && this.isDefaultAlign ) || currentAlign == this.value )
-			return CKEDITOR.TRISTATE_ON;
-		return CKEDITOR.TRISTATE_OFF;
+		return ( getAlignment( firstBlock, editor.config.useComputedState ) == this.value ) ?
+			CKEDITOR.TRISTATE_ON :
+			CKEDITOR.TRISTATE_OFF;
+	}
+
+	function getAlignment( element, useComputedState )
+	{
+		useComputedState = useComputedState === undefined || useComputedState;
+
+		var align;
+		if ( useComputedState )
+			align = element.getComputedStyle( 'text-align' );
+		else
+		{
+			while ( !element.hasAttribute || !( element.hasAttribute( 'align' ) || element.getStyle( 'text-align' ) ) )
+			{
+				var parent = element.getParent();
+				if ( !parent )
+					break;
+				element = parent;
+			}
+			align = element.getStyle( 'text-align' ) || element.getAttribute( 'align' ) || '';
+		}
+
+		align && ( align = align.replace( /-moz-|-webkit-|start|auto/i, '' ) );
+
+		!align && useComputedState && ( align = element.getComputedStyle( 'direction' ) == 'rtl' ? 'right' : 'left' );
+
+		return align;
 	}
 
@@ -37,8 +60,4 @@
 		this.value = value;
 
-		var contentDir = editor.config.contentsLangDirection;
-		this.isDefaultAlign = ( value == 'left' && contentDir == 'ltr' ) ||
-			( value == 'right' && contentDir == 'rtl' );
-
 		var classes = editor.config.justifyClasses;
 		if ( classes )
@@ -64,4 +83,39 @@
 	}
 
+	function onDirChanged( e )
+	{
+		var editor = e.editor;
+
+		var range = new CKEDITOR.dom.range( editor.document );
+		range.setStartBefore( e.data );
+		range.setEndAfter( e.data );
+
+		var walker = new CKEDITOR.dom.walker( range ),
+			node;
+
+		while ( node = walker.next() )
+		{
+			if ( node.type == CKEDITOR.NODE_ELEMENT )
+			{
+				// A child with the defined dir is to be ignored.
+				if ( !node.equals( e.data ) && node.getDirection() )
+				{
+					range.setStartAfter( node );
+					walker = new CKEDITOR.dom.walker( range );
+					continue;
+				}
+
+				// Switch the alignment.
+				var style = 'text-align';
+				var align = node.getStyle( style );
+
+				if ( align == 'left' )
+					node.setStyle( style, 'right' );
+				else if ( align == 'right' )
+					node.setStyle( style, 'left' );
+			}
+		}
+	}
+
 	justifyCommand.prototype = {
 		exec : function( editor )
@@ -74,10 +128,13 @@
 
 			var bookmarks = selection.createBookmarks(),
-				ranges = selection.getRanges();
-
+				ranges = selection.getRanges( true );
 
 			var cssClassName = this.cssClassName,
 				iterator,
 				block;
+
+			var useComputedState = editor.config.useComputedState;
+			useComputedState = useComputedState === undefined || useComputedState;
+
 			for ( var i = ranges.length - 1 ; i >= 0 ; i-- )
 			{
@@ -88,24 +145,24 @@
 				{
 					block.removeAttribute( 'align' );
+					block.removeStyle( 'text-align' );
+
+					// Remove any of the alignment classes from the className.
+					var className = cssClassName && ( block.$.className =
+						CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) ) );
+
+					var apply =
+						( this.state == CKEDITOR.TRISTATE_OFF ) &&
+						( !useComputedState || ( getAlignment( block, true ) != this.value ) );
 
 					if ( cssClassName )
 					{
-						// Remove any of the alignment classes from the className.
-						var className = block.$.className =
-							CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) );
-
 						// Append the desired class name.
-						if ( this.state == CKEDITOR.TRISTATE_OFF && !this.isDefaultAlign )
+						if ( apply )
 							block.addClass( cssClassName );
 						else if ( !className )
 							block.removeAttribute( 'class' );
 					}
-					else
-					{
-						if ( this.state == CKEDITOR.TRISTATE_OFF && !this.isDefaultAlign )
-							block.setStyle( 'text-align', this.value );
-						else
-							block.removeStyle( 'text-align' );
-					}
+					else if ( apply )
+						block.setStyle( 'text-align', this.value );
 				}
 
@@ -157,4 +214,5 @@
 			editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, center ) );
 			editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, justify ) );
+			editor.on( 'dirChanged', onDirChanged );
 		},
 
@@ -162,7 +220,2 @@
 	});
 })();
-
-CKEDITOR.tools.extend( CKEDITOR.config,
-	{
-		justifyClasses : null
-	} );
Index: /CKEditor/branches/features/adobeair/_source/plugins/keystrokes/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/keystrokes/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/keystrokes/plugin.js	(revision 6006)
@@ -29,12 +29,8 @@
 
 		for ( var i = 0 ; i < keystrokesConfig.length ; i++ )
-		{
 			keystrokes[ keystrokesConfig[i][0] ] = keystrokesConfig[i][1];
-		}
 
 		for ( i = 0 ; i < blockedConfig.length ; i++ )
-		{
 			blockedKeystrokes[ blockedConfig[i] ] = 1;
-		}
 	}
 });
Index: /CKEditor/branches/features/adobeair/_source/plugins/link/dialogs/link.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/link/dialogs/link.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/link/dialogs/link.js	(revision 6006)
@@ -244,7 +244,5 @@
 			var item = elements.getItem( i );
 			if ( item.getAttribute( '_cke_realelement' ) && item.getAttribute( '_cke_real_element_type' ) == 'anchor' )
-			{
 				anchors.push( editor.restoreRealElement( item ) );
-			}
 		}
 
@@ -364,6 +362,9 @@
 	}
 
+	var commonLang = editor.lang.common,
+		linkLang = editor.lang.link;
+
 	return {
-		title : editor.lang.link.title,
+		title : linkLang.title,
 		minWidth : 350,
 		minHeight : 230,
@@ -371,6 +372,6 @@
 			{
 				id : 'info',
-				label : editor.lang.link.info,
-				title : editor.lang.link.info,
+				label : linkLang.info,
+				title : linkLang.info,
 				elements :
 				[
@@ -378,11 +379,11 @@
 						id : 'linkType',
 						type : 'select',
-						label : editor.lang.link.type,
+						label : linkLang.type,
 						'default' : 'url',
 						items :
 						[
-							[ editor.lang.link.toUrl, 'url' ],
-							[ editor.lang.link.toAnchor, 'anchor' ],
-							[ editor.lang.link.toEmail, 'email' ]
+							[ linkLang.toUrl, 'url' ],
+							[ linkLang.toAnchor, 'anchor' ],
+							[ linkLang.toEmail, 'email' ]
 						],
 						onChange : linkTypeChanged,
@@ -410,5 +411,5 @@
 										id : 'protocol',
 										type : 'select',
-										label : editor.lang.common.protocol,
+										label : commonLang.protocol,
 										'default' : 'http://',
 										items :
@@ -419,5 +420,5 @@
 											[ 'ftp://\u200E', 'ftp://' ],
 											[ 'news://\u200E', 'news://' ],
-											[ editor.lang.link.other , '' ]
+											[ linkLang.other , '' ]
 										],
 										setup : function( data )
@@ -437,5 +438,5 @@
 										type : 'text',
 										id : 'url',
-										label : editor.lang.common.url,
+										label : commonLang.url,
 										required: true,
 										onLoad : function ()
@@ -478,5 +479,5 @@
 												return true;
 
-											var func = CKEDITOR.dialog.validate.notEmpty( editor.lang.link.noUrl );
+											var func = CKEDITOR.dialog.validate.notEmpty( linkLang.noUrl );
 											return func.apply( this );
 										},
@@ -514,5 +515,5 @@
 								hidden : 'true',
 								filebrowser : 'info:url',
-								label : editor.lang.common.browseServer
+								label : commonLang.browseServer
 							}
 						]
@@ -529,5 +530,5 @@
 								type : 'fieldset',
 								id : 'selectAnchorText',
-								label : editor.lang.link.selectAnchor,
+								label : linkLang.selectAnchor,
 								setup : function( data )
 								{
@@ -548,5 +549,5 @@
 												id : 'anchorName',
 												'default' : '',
-												label : editor.lang.link.anchorName,
+												label : linkLang.anchorName,
 												style : 'width: 100%;',
 												items :
@@ -583,5 +584,5 @@
 												id : 'anchorId',
 												'default' : '',
-												label : editor.lang.link.anchorId,
+												label : linkLang.anchorId,
 												style : 'width: 100%;',
 												items :
@@ -625,5 +626,5 @@
 								id : 'noAnchors',
 								style : 'text-align: center;',
-								html : '<div role="label" tabIndex="-1">' + CKEDITOR.tools.htmlEncode( editor.lang.link.noAnchors ) + '</div>',
+								html : '<div role="label" tabIndex="-1">' + CKEDITOR.tools.htmlEncode( linkLang.noAnchors ) + '</div>',
 								// Focus the first element defined in above html.
 								focus : true,
@@ -652,5 +653,5 @@
 								type : 'text',
 								id : 'emailAddress',
-								label : editor.lang.link.emailAddress,
+								label : linkLang.emailAddress,
 								required : true,
 								validate : function()
@@ -662,5 +663,5 @@
 										return true;
 
-									var func = CKEDITOR.dialog.validate.notEmpty( editor.lang.link.noEmail );
+									var func = CKEDITOR.dialog.validate.notEmpty( linkLang.noEmail );
 									return func.apply( this );
 								},
@@ -685,5 +686,5 @@
 								type : 'text',
 								id : 'emailSubject',
-								label : editor.lang.link.emailSubject,
+								label : linkLang.emailSubject,
 								setup : function( data )
 								{
@@ -702,5 +703,5 @@
 								type : 'textarea',
 								id : 'emailBody',
-								label : editor.lang.link.emailBody,
+								label : linkLang.emailBody,
 								rows : 3,
 								'default' : '',
@@ -729,6 +730,6 @@
 			{
 				id : 'target',
-				label : editor.lang.link.target,
-				title : editor.lang.link.target,
+				label : linkLang.target,
+				title : linkLang.target,
 				elements :
 				[
@@ -741,16 +742,16 @@
 								type : 'select',
 								id : 'linkTargetType',
-								label : editor.lang.common.target,
+								label : commonLang.target,
 								'default' : 'notSet',
 								style : 'width : 100%;',
 								'items' :
 								[
-									[ editor.lang.common.notSet, 'notSet' ],
-									[ editor.lang.link.targetFrame, 'frame' ],
-									[ editor.lang.link.targetPopup, 'popup' ],
-									[ editor.lang.common.targetNew, '_blank' ],
-									[ editor.lang.common.targetTop, '_top' ],
-									[ editor.lang.common.targetSelf, '_self' ],
-									[ editor.lang.common.targetParent, '_parent' ]
+									[ commonLang.notSet, 'notSet' ],
+									[ linkLang.targetFrame, 'frame' ],
+									[ linkLang.targetPopup, 'popup' ],
+									[ commonLang.targetNew, '_blank' ],
+									[ commonLang.targetTop, '_top' ],
+									[ commonLang.targetSelf, '_self' ],
+									[ commonLang.targetParent, '_parent' ]
 								],
 								onChange : targetChanged,
@@ -759,4 +760,5 @@
 									if ( data.target )
 										this.setValue( data.target.type );
+									targetChanged.call( this );
 								},
 								commit : function( data )
@@ -771,5 +773,5 @@
 								type : 'text',
 								id : 'linkTargetName',
-								label : editor.lang.link.targetFrameName,
+								label : linkLang.targetFrameName,
 								'default' : '',
 								setup : function( data )
@@ -798,5 +800,5 @@
 							{
 								type : 'fieldset',
-								label : editor.lang.link.popupFeatures,
+								label : linkLang.popupFeatures,
 								children :
 								[
@@ -808,5 +810,5 @@
 												type : 'checkbox',
 												id : 'resizable',
-												label : editor.lang.link.popupResizable,
+												label : linkLang.popupResizable,
 												setup : setupPopupParams,
 												commit : commitPopupParams
@@ -815,5 +817,5 @@
 												type : 'checkbox',
 												id : 'status',
-												label : editor.lang.link.popupStatusBar,
+												label : linkLang.popupStatusBar,
 												setup : setupPopupParams,
 												commit : commitPopupParams
@@ -829,5 +831,5 @@
 												type : 'checkbox',
 												id : 'location',
-												label : editor.lang.link.popupLocationBar,
+												label : linkLang.popupLocationBar,
 												setup : setupPopupParams,
 												commit : commitPopupParams
@@ -837,5 +839,5 @@
 												type : 'checkbox',
 												id : 'toolbar',
-												label : editor.lang.link.popupToolbar,
+												label : linkLang.popupToolbar,
 												setup : setupPopupParams,
 												commit : commitPopupParams
@@ -851,5 +853,5 @@
 												type : 'checkbox',
 												id : 'menubar',
-												label : editor.lang.link.popupMenuBar,
+												label : linkLang.popupMenuBar,
 												setup : setupPopupParams,
 												commit : commitPopupParams
@@ -859,5 +861,5 @@
 												type : 'checkbox',
 												id : 'fullscreen',
-												label : editor.lang.link.popupFullScreen,
+												label : linkLang.popupFullScreen,
 												setup : setupPopupParams,
 												commit : commitPopupParams
@@ -873,5 +875,5 @@
 												type : 'checkbox',
 												id : 'scrollbars',
-												label : editor.lang.link.popupScrollBars,
+												label : linkLang.popupScrollBars,
 												setup : setupPopupParams,
 												commit : commitPopupParams
@@ -881,5 +883,5 @@
 												type : 'checkbox',
 												id : 'dependent',
-												label : editor.lang.link.popupDependent,
+												label : linkLang.popupDependent,
 												setup : setupPopupParams,
 												commit : commitPopupParams
@@ -896,5 +898,5 @@
 												widths : [ '30%', '70%' ],
 												labelLayout : 'horizontal',
-												label : editor.lang.link.popupWidth,
+												label : linkLang.popupWidth,
 												id : 'width',
 												setup : setupPopupParams,
@@ -906,5 +908,5 @@
 												labelLayout : 'horizontal',
 												widths : [ '55%', '45%' ],
-												label : editor.lang.link.popupLeft,
+												label : linkLang.popupLeft,
 												id : 'left',
 												setup : setupPopupParams,
@@ -922,5 +924,5 @@
 												labelLayout : 'horizontal',
 												widths : [ '30%', '70%' ],
-												label : editor.lang.link.popupHeight,
+												label : linkLang.popupHeight,
 												id : 'height',
 												setup : setupPopupParams,
@@ -931,5 +933,5 @@
 												type :  'text',
 												labelLayout : 'horizontal',
-												label : editor.lang.link.popupTop,
+												label : linkLang.popupTop,
 												widths : [ '55%', '45%' ],
 												id : 'top',
@@ -948,6 +950,6 @@
 			{
 				id : 'upload',
-				label : editor.lang.link.upload,
-				title : editor.lang.link.upload,
+				label : linkLang.upload,
+				title : linkLang.upload,
 				hidden : true,
 				filebrowser : 'uploadButton',
@@ -957,5 +959,5 @@
 						type : 'file',
 						id : 'upload',
-						label : editor.lang.common.upload,
+						label : commonLang.upload,
 						style: 'height:40px',
 						size : 29
@@ -964,5 +966,5 @@
 						type : 'fileButton',
 						id : 'uploadButton',
-						label : editor.lang.common.uploadSubmit,
+						label : commonLang.uploadSubmit,
 						filebrowser : 'info:url',
 						'for' : [ 'upload', 'upload' ]
@@ -972,6 +974,6 @@
 			{
 				id : 'advanced',
-				label : editor.lang.link.advanced,
-				title : editor.lang.link.advanced,
+				label : linkLang.advanced,
+				title : linkLang.advanced,
 				elements :
 				[
@@ -989,5 +991,5 @@
 										type : 'text',
 										id : 'advId',
-										label : editor.lang.link.id,
+										label : linkLang.id,
 										setup : setupAdvParams,
 										commit : commitAdvParams
@@ -996,12 +998,12 @@
 										type : 'select',
 										id : 'advLangDir',
-										label : editor.lang.link.langDir,
+										label : linkLang.langDir,
 										'default' : '',
 										style : 'width:110px',
 										items :
 										[
-											[ editor.lang.common.notSet, '' ],
-											[ editor.lang.link.langDirLTR, 'ltr' ],
-											[ editor.lang.link.langDirRTL, 'rtl' ]
+											[ commonLang.notSet, '' ],
+											[ linkLang.langDirLTR, 'ltr' ],
+											[ linkLang.langDirRTL, 'rtl' ]
 										],
 										setup : setupAdvParams,
@@ -1012,5 +1014,5 @@
 										id : 'advAccessKey',
 										width : '80px',
-										label : editor.lang.link.acccessKey,
+										label : linkLang.acccessKey,
 										maxLength : 1,
 										setup : setupAdvParams,
@@ -1027,5 +1029,5 @@
 									{
 										type : 'text',
-										label : editor.lang.link.name,
+										label : linkLang.name,
 										id : 'advName',
 										setup : setupAdvParams,
@@ -1035,5 +1037,5 @@
 									{
 										type : 'text',
-										label : editor.lang.link.langCode,
+										label : linkLang.langCode,
 										id : 'advLangCode',
 										width : '110px',
@@ -1045,5 +1047,5 @@
 									{
 										type : 'text',
-										label : editor.lang.link.tabIndex,
+										label : linkLang.tabIndex,
 										id : 'advTabIndex',
 										width : '80px',
@@ -1069,5 +1071,5 @@
 									{
 										type : 'text',
-										label : editor.lang.link.advisoryTitle,
+										label : linkLang.advisoryTitle,
 										'default' : '',
 										id : 'advTitle',
@@ -1078,5 +1080,5 @@
 									{
 										type : 'text',
-										label : editor.lang.link.advisoryContentType,
+										label : linkLang.advisoryContentType,
 										'default' : '',
 										id : 'advContentType',
@@ -1094,5 +1096,5 @@
 									{
 										type : 'text',
-										label : editor.lang.link.cssClasses,
+										label : linkLang.cssClasses,
 										'default' : '',
 										id : 'advCSSClasses',
@@ -1103,5 +1105,5 @@
 									{
 										type : 'text',
-										label : editor.lang.link.charset,
+										label : linkLang.charset,
 										'default' : '',
 										id : 'advCharset',
@@ -1118,5 +1120,5 @@
 									{
 										type : 'text',
-										label : editor.lang.link.styles,
+										label : linkLang.styles,
 										'default' : '',
 										id : 'advStyles',
@@ -1253,4 +1255,7 @@
 					onclickList.push( featureList.join( ',' ), '\'); return false;' );
 					attributes[ '_cke_pa_onclick' ] = onclickList.join( '' );
+
+					// Add the "target" attribute. (#5074)
+					removeAttributes.push( 'target' );
 				}
 				else
@@ -1295,8 +1300,10 @@
 				// Create element if current selection is collapsed.
 				var selection = editor.getSelection(),
-					ranges = selection.getRanges();
+					ranges = selection.getRanges( true );
 				if ( ranges.length == 1 && ranges[0].collapsed )
 				{
-					var text = new CKEDITOR.dom.text( attributes._cke_saved_href, editor.document );
+					// Short mailto link text view (#5736).
+					var text = new CKEDITOR.dom.text( data.type == 'email' ?
+							data.email.address : attributes._cke_saved_href, editor.document );
 					ranges[0].insertNode( text );
 					ranges[0].selectNodeContents( text );
@@ -1349,7 +1356,11 @@
 				element.setAttributes( attributes );
 				element.removeAttributes( removeAttributes );
-				// Update text view when user changes protocol #4612.
-				if (href == textView)
-					element.setHtml( attributes._cke_saved_href );
+				// Update text view when user changes protocol (#4612).
+				if ( href == textView || data.type == 'email' && textView.indexOf( '@' ) != -1 )
+				{
+					// Short mailto link text view (#5736).
+					element.setHtml( data.type == 'email' ?
+						data.email.address : attributes._cke_saved_href );
+				}
 				// Make the element display as an anchor if a name has been set.
 				if ( element.getAttribute( 'name' ) )
@@ -1378,5 +1389,5 @@
 			var linkType = this.getContentElement( 'info', 'linkType' ),
 					urlField;
-			if ( linkType && linkType.getValue( ) == 'url' )
+			if ( linkType && linkType.getValue() == 'url' )
 			{
 				urlField = this.getContentElement( 'info', 'url' );
Index: /CKEditor/branches/features/adobeair/_source/plugins/link/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/link/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/link/plugin.js	(revision 6006)
@@ -38,6 +38,6 @@
 				'background-repeat: no-repeat;' +
 				'border: 1px solid #a9a9a9;' +
-				'width: 18px;' +
-				'height: 18px;' +
+				'width: 18px !important;' +
+				'height: 18px !important;' +
 			'}\n' +
 			'a.cke_anchor' +
@@ -59,5 +59,5 @@
 				 */
 				var command = editor.getCommand( 'unlink' ),
-					element = evt.data.path.lastElement.getAscendant( 'a', true );
+					element = evt.data.path.lastElement && evt.data.path.lastElement.getAscendant( 'a', true );
 				if ( element && element.getName() == 'a' && element.getAttribute( 'href' ) )
 					command.setState( CKEDITOR.TRISTATE_OFF );
@@ -111,5 +111,5 @@
 			editor.contextMenu.addListener( function( element, selection )
 				{
-					if ( !element )
+					if ( !element || element.isReadOnly() )
 						return null;
 
@@ -177,11 +177,20 @@
 	getSelectedLink : function( editor )
 	{
-		var range;
-		try { range  = editor.getSelection().getRanges()[ 0 ]; }
+		try
+		{
+			var selection = editor.getSelection();
+			if ( selection.getType() == CKEDITOR.SELECTION_ELEMENT )
+			{
+				var selectedElement = selection.getSelectedElement();
+				if ( selectedElement.is( 'a' ) )
+					return selectedElement;
+			}
+
+			var range = selection.getRanges( true )[ 0 ];
+			range.shrink( CKEDITOR.SHRINK_TEXT );
+			var root = range.getCommonAncestor();
+			return root.getAscendant( 'a', true );
+		}
 		catch( e ) { return null; }
-
-		range.shrink( CKEDITOR.SHRINK_TEXT );
-		var root = range.getCommonAncestor();
-		return root.getAscendant( 'a', true );
 	}
 };
Index: /CKEditor/branches/features/adobeair/_source/plugins/list/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/list/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/list/plugin.js	(revision 6006)
@@ -68,5 +68,5 @@
 
 		// Convert our internal representation of a list back to a DOM forest.
-		arrayToList : function( listArray, database, baseIndex, paragraphMode )
+		arrayToList : function( listArray, database, baseIndex, paragraphMode, dir )
 		{
 			if ( !baseIndex )
@@ -81,5 +81,5 @@
 				currentListItem = null,
 				paragraphName = ( paragraphMode == CKEDITOR.ENTER_P ? 'p' : 'div' );
-			while ( true )
+			while ( 1 )
 			{
 				var item = listArray[ currentIndex ];
@@ -88,10 +88,10 @@
 					if ( !rootNode || listArray[ currentIndex ].parent.getName() != rootNode.getName() )
 					{
-						rootNode = listArray[ currentIndex ].parent.clone( false, true );
+						rootNode = listArray[ currentIndex ].parent.clone( false, 1 );
 						retval.append( rootNode );
 					}
-					currentListItem = rootNode.append( item.element.clone( false, true ) );
+					currentListItem = rootNode.append( item.element.clone( 0, 1 ) );
 					for ( var i = 0 ; i < item.contents.length ; i++ )
-						currentListItem.append( item.contents[i].clone( true, true ) );
+						currentListItem.append( item.contents[i].clone( 1, 1 ) );
 					currentIndex++;
 				}
@@ -109,7 +109,18 @@
 					else
 					{
-						// Create completely new blocks here, attributes are dropped.
-						if ( paragraphMode != CKEDITOR.ENTER_BR && item.grandparent.getName() != 'td' )
+						// Create completely new blocks here.
+						if ( dir || item.element.hasAttributes() ||
+							( paragraphMode != CKEDITOR.ENTER_BR && item.grandparent.getName() != 'td' ) )
+						{
 							currentListItem = doc.createElement( paragraphName );
+							item.element.copyAttributes( currentListItem, { type:1, value:1 } );
+							dir && currentListItem.setAttribute( 'dir', dir );
+
+							// There might be a case where there are no attributes in the element after all
+							// (i.e. when "type" or "value" are the only attributes set). In this case, if enterMode = BR,
+							// the current item should be a fragment.
+							if ( !dir && paragraphMode == CKEDITOR.ENTER_BR && !currentListItem.hasAttributes() )
+								currentListItem = new CKEDITOR.dom.documentFragment( doc );
+						}
 						else
 							currentListItem = new CKEDITOR.dom.documentFragment( doc );
@@ -117,5 +128,5 @@
 
 					for ( i = 0 ; i < item.contents.length ; i++ )
-						currentListItem.append( item.contents[i].clone( true, true ) );
+						currentListItem.append( item.contents[i].clone( 1, 1 ) );
 
 					if ( currentListItem.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT
@@ -219,5 +230,11 @@
 		}
 
-		var fakeParent = groupObj.root.getDocument().createElement( this.type );
+		var root = groupObj.root,
+			fakeParent = root.getDocument().createElement( this.type );
+		// Copy all attributes, except from 'start' and 'type'.
+		root.copyAttributes( fakeParent, { start : 1, type : 1 } );
+		// The list-style-type property should be ignored.
+		fakeParent.removeStyle( 'list-style-type' );
+
 		for ( i = 0 ; i < selectedListItems.length ; i++ )
 		{
@@ -259,4 +276,9 @@
 			commonParent = commonParent.getCommonAncestor( contents[i].getParent() );
 
+		var useComputedState = editor.config.useComputedState,
+			listDir, explicitDirection;
+
+		useComputedState = useComputedState === undefined || useComputedState;
+
 		// We want to insert things that are in the same tree level only, so calculate the contents again
 		// by expanding the selected blocks to the same tree level.
@@ -270,4 +292,20 @@
 				{
 					listContents.push( contentNode );
+
+					// Determine the lists's direction. 
+					if ( !explicitDirection && contentNode.getDirection() )
+						explicitDirection = 1;
+
+					var itemDir = contentNode.getDirection( useComputedState );
+
+					if ( listDir !== null )
+					{
+						// If at least one LI have a different direction than current listDir, we can't have listDir.
+						if ( listDir && listDir != itemDir )
+							listDir = null;
+						else
+							listDir = itemDir;
+					}
+
 					break;
 				}
@@ -284,14 +322,24 @@
 
 		listsCreated.push( listNode );
+
+		var contentBlock, listItem;
+
 		while ( listContents.length )
 		{
-			var contentBlock = listContents.shift(),
-				listItem = doc.createElement( 'li' );
-
-			// Preserve heading structure when converting to list item. (#5271)
-			if ( headerTagRegex.test( contentBlock.getName() ) )
+			contentBlock = listContents.shift();
+			listItem = doc.createElement( 'li' );
+
+			// Preserve preformat block and heading structure when converting to list item. (#5335) (#5271)
+			if ( contentBlock.is( 'pre' ) || headerTagRegex.test( contentBlock.getName() ) )
 				contentBlock.appendTo( listItem );
 			else
 			{
+				// Remove DIR attribute if it was merged into list root.
+				if ( listDir && contentBlock.getDirection() )
+				{
+					contentBlock.removeStyle( 'direction' );
+					contentBlock.removeAttribute( 'dir' );
+				}
+				
 				contentBlock.copyAttributes( listItem );
 				contentBlock.moveChildren( listItem );
@@ -300,9 +348,10 @@
 
 			listItem.appendTo( listNode );
-
-			// Append a bogus BR to force the LI to render at full height
-			if ( !CKEDITOR.env.ie )
-				listItem.appendBogus();
-		}
+		}
+
+		// Apply list root dir only if it has been explicitly declared.
+		if ( listDir && explicitDirection )
+			listNode.setAttribute( 'dir', listDir );
+
 		if ( insertAnchor )
 			listNode.insertBefore( insertAnchor );
@@ -354,5 +403,6 @@
 		}
 
-		var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode );
+		var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode,
+			groupObj.root.getAttribute( 'dir' ) );
 
 		// Compensate <br> before/after the list node if the surrounds are non-blocks.(#3836)
@@ -386,5 +436,5 @@
 			var doc = editor.document,
 				selection = editor.getSelection(),
-				ranges = selection && selection.getRanges();
+				ranges = selection && selection.getRanges( true );
 
 			// There should be at least one selected range.
@@ -404,5 +454,5 @@
 							( editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'br' ) );
 					paragraph.appendTo( body );
-					ranges = [ new CKEDITOR.dom.range( doc ) ];
+					ranges = new CKEDITOR.dom.rangeList( [ new CKEDITOR.dom.range( doc ) ] );
 					// IE exception on inserting anything when anchor inside <br>.
 					if ( paragraph.is( 'br' ) )
@@ -423,7 +473,5 @@
 					if ( enclosedNode && enclosedNode.is
 						&& this.type == enclosedNode.getName() )
-					{
-						setState.call( this, editor, CKEDITOR.TRISTATE_ON );
-					}
+							setState.call( this, editor, CKEDITOR.TRISTATE_ON );
 				}
 			}
@@ -434,10 +482,10 @@
 			// or multiple lists have to be cancelled.
 			var listGroups = [],
-				database = {};
-
-			while ( ranges.length > 0 )
-			{
-				range = ranges.shift();
-
+				database = {},
+				rangeIterator = ranges.createIterator(),
+				index = 0;
+
+			while ( ( range = rangeIterator.getNextRange() ) && ++index )
+			{
 				var boundaryNodes = range.getBoundaryNodes(),
 					startNode = boundaryNodes.startNode,
@@ -457,9 +505,15 @@
 				while ( ( block = iterator.getNextParagraph() ) )
 				{
+					// Avoid duplicate blocks get processed across ranges.
+					if( block.getCustomData( 'list_block' ) )
+						continue;
+					else
+						CKEDITOR.dom.element.setMarker( database, block, 'list_block', 1 );
+
 					var path = new CKEDITOR.dom.elementPath( block ),
 						pathElements = path.elements,
 						pathElementsCount = pathElements.length,
 						listNode = null,
-						processedFlag = false,
+						processedFlag = 0,
 						blockLimit = path.blockLimit,
 						element;
@@ -476,5 +530,5 @@
 							// should belong to a different group of paragraphs before
 							// the list. (Bug #1309)
-							blockLimit.removeCustomData( 'list_group_object' );
+							blockLimit.removeCustomData( 'list_group_object_' + index );
 
 							var groupObj = element.getCustomData( 'list_group_object' );
@@ -487,5 +541,5 @@
 								CKEDITOR.dom.element.setMarker( database, element, 'list_group_object', groupObj );
 							}
-							processedFlag = true;
+							processedFlag = 1;
 							break;
 						}
@@ -495,12 +549,12 @@
 						continue;
 
-					// No list ancestor? Group by block limit.
+					// No list ancestor? Group by block limit, but don't mix contents from different ranges.
 					var root = blockLimit;
-					if ( root.getCustomData( 'list_group_object' ) )
-						root.getCustomData( 'list_group_object' ).contents.push( block );
+					if ( root.getCustomData( 'list_group_object_' + index ) )
+						root.getCustomData( 'list_group_object_' + index ).contents.push( block );
 					else
 					{
 						groupObj = { root : root, contents : [ block ] };
-						CKEDITOR.dom.element.setMarker( database, root, 'list_group_object', groupObj );
+						CKEDITOR.dom.element.setMarker( database, root, 'list_group_object_' + index, groupObj );
 						listGroups.push( groupObj );
 					}
@@ -536,12 +590,12 @@
 						'getPrevious' : 'getNext' ]( CKEDITOR.dom.walker.whitespaces( true ) );
 					if ( sibling && sibling.getName &&
-					     sibling.getName() == listCommand.type )
+						 sibling.getName() == listCommand.type )
 					{
 						sibling.remove();
 						// Move children order by merge direction.(#3820)
-						sibling.moveChildren( listNode, rtl ? true : false );
+						sibling.moveChildren( listNode, rtl );
 					}
 				} )();
-				mergeSibling( true );
+				mergeSibling( 1 );
 			}
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/listblock/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/listblock/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/listblock/plugin.js	(revision 6006)
@@ -82,5 +82,5 @@
 					{
 						var pendingHtml = this._.pendingHtml,
-							id = 'cke_' + CKEDITOR.tools.getNextNumber();
+							id = CKEDITOR.tools.getNextId();
 
 						if ( !this._.started )
@@ -110,5 +110,5 @@
 						this._.close();
 
-						var id = 'cke_' + CKEDITOR.tools.getNextNumber();
+						var id = CKEDITOR.tools.getNextId();
 
 						this._.groups[ title ] = id;
Index: /CKEditor/branches/features/adobeair/_source/plugins/liststyle/dialogs/liststyle.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/liststyle/dialogs/liststyle.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/liststyle/dialogs/liststyle.js	(revision 6006)
@@ -13,5 +13,5 @@
 
 		range.shrink( CKEDITOR.SHRINK_TEXT );
-		return range.getCommonAncestor().getAscendant( listTag, true );
+		return range.getCommonAncestor().getAscendant( listTag, 1 );
 	}
 
@@ -29,8 +29,9 @@
 	function listStyle( editor, startupPage )
 	{
+		var lang = editor.lang.list;
 		if ( startupPage == 'bulletedListStyle' )
 		{
 			return {
-				title : editor.lang.list.bulletedTitle,
+				title : lang.bulletedTitle,
 				minWidth : 300,
 				minHeight : 50,
@@ -44,13 +45,13 @@
 							{
 								type : 'select',
-								label : editor.lang.list.type,
+								label : lang.type,
 								id : 'type',
 								style : 'width: 150px; margin: auto;',
 								items :
 								[
-									[ editor.lang.list.notset, '' ],
-									[ editor.lang.list.circle, 'circle' ],
-									[ editor.lang.list.disc,  'disc' ],
-									[ editor.lang.list.square, 'square' ]
+									[ lang.notset, '' ],
+									[ lang.circle, 'circle' ],
+									[ lang.disc,  'disc' ],
+									[ lang.square, 'square' ]
 								],
 								setup : function( element )
@@ -96,10 +97,10 @@
 			var listStyleOptions =
 			[
-				[ editor.lang.list.notset, '' ],
-				[ editor.lang.list.lowerRoman, 'lower-roman' ],
-				[ editor.lang.list.upperRoman, 'upper-roman' ],
-				[ editor.lang.list.lowerAlpha, 'lower-alpha' ],
-				[ editor.lang.list.upperAlpha, 'upper-alpha' ],
-				[ editor.lang.list.decimal, 'decimal' ]
+				[ lang.notset, '' ],
+				[ lang.lowerRoman, 'lower-roman' ],
+				[ lang.upperRoman, 'upper-roman' ],
+				[ lang.lowerAlpha, 'lower-alpha' ],
+				[ lang.upperAlpha, 'upper-alpha' ],
+				[ lang.decimal, 'decimal' ]
 			];
 
@@ -107,13 +108,13 @@
 			{
 				listStyleOptions.concat( [
-					[ editor.lang.list.armenian, 'armenian' ],
-					[ editor.lang.list.decimalLeadingZero, 'decimal-leading-zero' ],
-					[ editor.lang.list.georgian, 'georgian' ],
-					[ editor.lang.list.lowerGreek, 'lower-greek' ]
+					[ lang.armenian, 'armenian' ],
+					[ lang.decimalLeadingZero, 'decimal-leading-zero' ],
+					[ lang.georgian, 'georgian' ],
+					[ lang.lowerGreek, 'lower-greek' ]
 				]);
 			}
 
 			return {
-				title : editor.lang.list.numberedTitle,
+				title : lang.numberedTitle,
 				minWidth : 300,
 				minHeight : 50,
@@ -131,7 +132,8 @@
 								[
 									{
-										label : editor.lang.list.start,
+										label : lang.start,
 										type : 'text',
 										id : 'start',
+										validate : CKEDITOR.dialog.validate.integer( lang.validateStartNumber ),
 										setup : function( element )
 										{
@@ -146,5 +148,5 @@
 									{
 										type : 'select',
-										label : editor.lang.list.type,
+										label : lang.type,
 										id : 'type',
 										style : 'width: 100%;',
Index: /CKEditor/branches/features/adobeair/_source/plugins/liststyle/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/liststyle/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/liststyle/plugin.js	(revision 6006)
@@ -8,7 +8,7 @@
 	CKEDITOR.plugins.liststyle =
 	{
+		requires : [ 'dialog' ],
 		init : function( editor )
 		{
-
 			editor.addCommand( 'numberedListStyle', new CKEDITOR.dialogCommand( 'numberedListStyle' ) );
 			CKEDITOR.dialog.add( 'numberedListStyle', this.path + 'dialogs/liststyle.js' );
@@ -16,9 +16,10 @@
 			CKEDITOR.dialog.add( 'bulletedListStyle', this.path + 'dialogs/liststyle.js' );
 
-			//Register map group;
-			editor.addMenuGroup("list", 108);
 			// If the "menu" plugin is loaded, register the menu items.
 			if ( editor.addMenuItems )
 			{
+				//Register map group;
+				editor.addMenuGroup("list", 108);
+
 				editor.addMenuItems(
 					{
@@ -43,12 +44,18 @@
 				editor.contextMenu.addListener( function( element, selection )
 					{
-						if ( !element )
+						if ( !element || element.isReadOnly() )
 							return null;
 
-						if ( element.getAscendant( 'ol') )
-							return { numberedlist: CKEDITOR.TRISTATE_OFF };
+						while ( element )
+						{
+							var name = element.getName();
+							if ( name == 'ol' )
+								return { numberedlist: CKEDITOR.TRISTATE_OFF };
+							else if ( name == 'ul' )
+								return { bulletedlist: CKEDITOR.TRISTATE_OFF };
 
-						if ( element.getAscendant( 'ul' ) )
-							return { bulletedlist: CKEDITOR.TRISTATE_OFF };
+							element = element.getParent();
+						}
+						return null;
 					});
 			}
Index: /CKEditor/branches/features/adobeair/_source/plugins/maximize/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/maximize/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/maximize/plugin.js	(revision 6006)
@@ -11,6 +11,6 @@
 			return [];
 
-		var hijackRecord = [];
-		var hijackNames = [ 'style', 'className' ];
+		var hijackRecord = [],
+			hijackNames = [ 'style', 'className' ];
 		for ( var i = 0 ; i < hijackNames.length ; i++ )
 		{
@@ -130,10 +130,10 @@
 		{
 			var lang = editor.lang;
-			var mainDocument = CKEDITOR.document;
-			var mainWindow = mainDocument.getWindow();
+			var mainDocument = CKEDITOR.document,
+				mainWindow = mainDocument.getWindow();
 
 			// Saved selection and scroll position for the editing area.
-			var savedSelection;
-			var savedScroll;
+			var savedSelection,
+				savedScroll;
 
 			// Saved scroll position for the outer window.
@@ -195,4 +195,12 @@
 
 							// Hide scroll bars.
+							var viewPaneSize = mainWindow.getViewPaneSize();
+							var styles = 
+								{
+									overflow : 'hidden',
+									width : ( CKEDITOR.env.opera ? viewPaneSize.width : 0 ) + 'px',
+									height : ( CKEDITOR.env.opera ? viewPaneSize.height - 16 : 0 ) + 'px'
+								};
+							
 							if ( CKEDITOR.env.ie )
 							{
@@ -202,11 +210,10 @@
 							else
 							{
-								mainDocument.getBody().setStyles(
-									{
-										overflow : 'hidden',
-										width : '0px',
-										height : '0px'
-									} );
-							}
+								mainDocument.getBody().setStyles( styles );
+							}
+							
+							// #4023: [Opera] Maximize plugin
+							if ( CKEDITOR.env.opera )
+								mainDocument.getBody().getParent().setStyles( styles );
 
 							// Scroll to the top left (IE needs some time for it - #4923).
@@ -216,5 +223,4 @@
 
 							// Resize and move to top left.
-							var viewPaneSize = mainWindow.getViewPaneSize();
 							container.setStyle( 'position', 'absolute' );
 							container.$.offsetLeft;			// SAFARI BUG: See #2066.
@@ -227,4 +233,8 @@
 
 							shim =  createIframeShim( container );		// IE6 select element penetration when maximized. (#4459)
+
+							// Add cke_maximized class before resize handle since that will change things sizes (#5580)
+							container.addClass( 'cke_maximized' );
+
 							resizeHandler();
 
@@ -240,6 +250,4 @@
 							CKEDITOR.env.gecko && refreshCursor( editor );
 
-							// Add cke_maximized class.
-							container.addClass( 'cke_maximized' );
 						}
 						else if ( this.state == CKEDITOR.TRISTATE_ON )	// Restore from fullscreen if the state is on.
@@ -332,8 +340,9 @@
 				} );
 
-			// Restore the command state after mode change.
+			// Restore the command state after mode change, unless it has been changed to disabled (#6467)
 			editor.on( 'mode', function()
 				{
-					editor.getCommand( 'maximize' ).setState( savedState );
+					var command = editor.getCommand( 'maximize' );
+					command.setState( command.state == CKEDITOR.TRISTATE_DISABLED ? CKEDITOR.TRISTATE_DISABLED : savedState );
 				}, null, null, 100 );
 		}
Index: /CKEditor/branches/features/adobeair/_source/plugins/menu/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/menu/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/menu/plugin.js	(revision 6006)
@@ -191,7 +191,7 @@
 						{
 							clearTimeout( this._.showSubTimeout );
-							this._.showSubTimeout = CKEDITOR.tools.setTimeout( this._.showSubMenu, editor.config.menu_subMenuDelay, this, [ index ] );
+							this._.showSubTimeout = CKEDITOR.tools.setTimeout( this._.showSubMenu, editor.config.menu_subMenuDelay || 400, this, [ index ] );
 						},
-						this);
+						this );
 
 					this._.itemOutFn = CKEDITOR.tools.addFunction( function( index )
@@ -199,5 +199,5 @@
 							clearTimeout( this._.showSubTimeout );
 						},
-						this);
+						this );
 
 					this._.itemClickFn = CKEDITOR.tools.addFunction( function( index )
@@ -216,5 +216,5 @@
 								this.onClick && this.onClick( item );
 						},
-						this);
+						this );
 				}
 
@@ -222,6 +222,9 @@
 				sortItems( items );
 
+				var chromeRoot = editor.container.getChild( 1 ),
+					mixedContentClass = chromeRoot.hasClass( 'cke_mixed_dir_content' ) ? ' cke_mixed_dir_content' : '';
+
 				// Build the HTML that composes the menu and its items.
-				var output = [ '<div class="cke_menu" role="presentation">' ];
+				var output = [ '<div class="cke_menu' + mixedContentClass + '" role="presentation">' ];
 
 				var length = items.length,
@@ -391,5 +394,4 @@
  * config.menu_subMenuDelay = 0;
  */
-CKEDITOR.config.menu_subMenuDelay = 400;
 
 /**
Index: /CKEditor/branches/features/adobeair/_source/plugins/newpage/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/newpage/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/newpage/plugin.js	(revision 6006)
@@ -20,5 +20,5 @@
 				{
 					var command = this;
-					editor.setData( editor.config.newpage_html, function()
+					editor.setData( editor.config.newpage_html || '', function()
 					{
 						// Save the undo snapshot after all document changes are affected. (#4889)
@@ -52,3 +52,2 @@
  * config.newpage_html = '&lt;p&gt;Type your text here.&lt;/p&gt;';
  */
-CKEDITOR.config.newpage_html = '';
Index: /CKEditor/branches/features/adobeair/_source/plugins/pagebreak/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/pagebreak/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/pagebreak/plugin.js	(revision 6006)
@@ -33,8 +33,8 @@
 				'display: block;' +
 				'float: none;' +
-				'width:100%;_width:99.9%;' +
+				'width:100% !important; _width:99.9% !important;' +
 				'border-top: #999999 1px dotted;' +
 				'border-bottom: #999999 1px dotted;' +
-				'height: 5px;' +
+				'height: 5px !important;' +
 				'page-break-after: always;' +
 
@@ -63,5 +63,11 @@
 
 							if ( childStyle && ( /page-break-after\s*:\s*always/i ).test( style ) && ( /display\s*:\s*none/i ).test( childStyle ) )
-								return editor.createFakeParserElement( element, 'cke_pagebreak', 'div' );
+							{
+								var fakeImg = editor.createFakeParserElement( element, 'cke_pagebreak', 'div' );
+								var label = editor.lang.pagebreakAlt;
+								fakeImg.attributes[ 'alt' ] = label;
+								fakeImg.attributes[ 'aria-label' ] = label;
+								return fakeImg;
+							}
 						}
 					}
@@ -78,18 +84,21 @@
 	{
 		// Create the element that represents a print break.
+		var label = editor.lang.pagebreakAlt;
 		var breakObject = CKEDITOR.dom.element.createFromHtml( '<div style="page-break-after: always;"><span style="display: none;">&nbsp;</span></div>' );
 
 		// Creates the fake image used for this element.
 		breakObject = editor.createFakeElement( breakObject, 'cke_pagebreak', 'div' );
+		breakObject.setAttribute( 'alt', label );
+		breakObject.setAttribute( 'aria-label', label );
 
-		var ranges = editor.getSelection().getRanges();
+		var ranges = editor.getSelection().getRanges( true );
 
 		editor.fire( 'saveSnapshot' );
 
-		for ( var range, i = 0 ; i < ranges.length ; i++ )
+		for ( var range, i = ranges.length - 1 ; i >= 0; i-- )
 		{
 			range = ranges[ i ];
 
-			if ( i > 0 )
+			if ( i < ranges.length -1 )
 				breakObject = breakObject.clone( true );
 
@@ -101,4 +110,9 @@
 				range.select();
 			}
+
+			var previous = breakObject.getPrevious();
+
+			if ( previous && CKEDITOR.dtd[ previous.getName() ].div )
+				breakObject.move( previous );
 		}
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/panel/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/panel/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/panel/plugin.js	(revision 6006)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -32,5 +32,5 @@
 		});
 
-	this.id = CKEDITOR.tools.getNextNumber();
+	this.id = CKEDITOR.tools.getNextId();
 	this.document = document;
 
@@ -74,5 +74,5 @@
 	render : function( editor, output )
 	{
-		var id = 'cke_' + this.id;
+		var id = this.id;
 
 		output.push(
@@ -131,5 +131,5 @@
 			if ( this.forceIFrame || this.css.length )
 			{
-				var iframe = this.document.getById( 'cke_' + this.id + '_frame' ),
+				var iframe = this.document.getById( this.id + '_frame' ),
 					parentDiv = iframe.getParent(),
 					dir = parentDiv.getAttribute( 'dir' ),
@@ -166,8 +166,9 @@
 				win.$.CKEDITOR = CKEDITOR;
 
-				doc.on( 'keydown', function( evt )
+				// Arrow keys for scrolling is only preventable with 'keypress' event in Opera (#4534).  
+				doc.on( 'key' + ( CKEDITOR.env.opera? 'press':'down' ), function( evt )
 					{
 						var keystroke = evt.data.getKeystroke(),
-							dir = this.document.getById( 'cke_' + this.id ).getAttribute( 'dir' );
+							dir = this.document.getById( this.id ).getAttribute( 'dir' );
 
 						// Delegate key processing to block.
@@ -182,5 +183,5 @@
 						{
 							if ( this.onEscape && this.onEscape( keystroke ) === false )
-								evt.data.preventDefault( );
+								evt.data.preventDefault();
 						}
 					},
@@ -188,8 +189,9 @@
 
 				holder = doc.getBody();
+				holder.unselectable();
 				CKEDITOR.env.air && CKEDITOR.tools.callFunction( onLoad );
 			}
 			else
-				holder = this.document.getById( 'cke_' + this.id );
+				holder = this.document.getById( this.id );
 
 			this._.holder = holder;
@@ -221,5 +223,5 @@
 			current = this._.currentBlock,
 			holder = this.forceIFrame ?
-				this.document.getById( 'cke_' + this.id + '_frame' )
+				this.document.getById( this.id + '_frame' )
 				: this._.holder;
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/panelbutton/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/panelbutton/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/panelbutton/plugin.js	(revision 6006)
@@ -114,5 +114,5 @@
 					};
 
-				panel.onHide = function()
+				panel.onHide = function( preventOnClose )
 					{
 						if ( me.className )
@@ -123,5 +123,5 @@
 						_.on = 0;
 
-						if ( me.onClose )
+						if ( !preventOnClose && me.onClose )
 							me.onClose();
 					};
Index: /CKEditor/branches/features/adobeair/_source/plugins/pastefromword/filter/default.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/pastefromword/filter/default.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/pastefromword/filter/default.js	(revision 6006)
@@ -61,6 +61,4 @@
 				if ( child )
 					return child;
-				else
-					continue;
 			}
 		}
@@ -69,5 +67,5 @@
 	};
 
-	// Adding a (set) of styles to the element's attributes.
+	// Adding a (set) of styles to the element's 'style' attributes.
 	elementPrototype.addStyle = function( name, value, isPrepend )
 	{
@@ -121,6 +119,6 @@
 	};
 
-	var cssLengthRelativeUnit = /^(\d[.\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}$/;
+	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
 
 	var listBaseIndent = 0,
@@ -162,9 +160,9 @@
 				else
 				{
-					if ( /[l\u00B7\u2002]/.test( bulletStyle[ 1 ] ) ) //l·•
+					if ( /[l\u00B7\u2002]/.test( bulletStyle[ 1 ] ) )
 						bulletStyle = 'disc';
-					else if ( /[\u006F\u00D8]/.test( bulletStyle[ 1 ] ) )  //oØ
+					else if ( /[\u006F\u00D8]/.test( bulletStyle[ 1 ] ) )
 						bulletStyle = 'circle';
-					else if ( /[\u006E\u25C6]/.test( bulletStyle[ 1 ] ) ) //n◆
+					else if ( /[\u006E\u25C6]/.test( bulletStyle[ 1 ] ) )
 						bulletStyle = 'square';
 					else
@@ -201,6 +199,5 @@
 			{
 				// <cke:listbullet> indicate a list item.
-				var children = element.children,
-					attrs = element.attributes,
+				var attrs = element.attributes,
 					listMarker;
 
@@ -223,5 +220,5 @@
 										// Be able to deal with component/short-hand form style.
 										var values = margin.split( ' ' );
-										margin = values[ 3 ] || values[ 1 ] || values [ 0 ];
+										margin = CKEDITOR.plugins.pastefromword.utils.convertToPx( values[ 3 ] || values[ 1 ] || values [ 0 ] );
 										margin = parseInt( margin, 10 );
 
@@ -590,5 +587,4 @@
 				elementMigrateFilter = filters.elementMigrateFilter,
 				styleMigrateFilter = CKEDITOR.tools.bind( this.filters.styleMigrateFilter, this.filters ),
-				bogusAttrFilter = filters.bogusAttrFilter,
 				createListBulletMarker = this.utils.createListBulletMarker,
 				flattenList = filters.flattenList,
@@ -757,8 +753,4 @@
 						element.filterChildren();
 
-						var attrs = element.attributes,
-							parent = element.parent,
-							children = element.children;
-
 						// Is the paragraph actually a list item?
 						if ( resolveListItem( element ) )
@@ -830,5 +822,4 @@
 							styleText && parent.addStyle( styleText );
 							delete element.name;
-							return;
 						}
 						// Convert the merged into a span with all attributes preserved.
Index: /CKEditor/branches/features/adobeair/_source/plugins/pastetext/dialogs/pastetext.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/pastetext/dialogs/pastetext.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/pastetext/dialogs/pastetext.js	(revision 6006)
@@ -45,23 +45,15 @@
 							},
 							{
-								type : 'html',
+								type : 'textarea',
 								id : 'content',
-								style : 'width:340px;height:170px',
-								html :
-									'<textarea style="' +
-										'width:346px;' +
-										'height:170px;' +
-										'resize: none;' +
-										'direction:' + editor.config.contentsLangDirection + ';' +
-										'border:1px solid black;' +
-										'background-color:white">' +
-									'</textarea>',
+								className : 'cke_pastetext',
 
 								onLoad : function()
 								{
 									var label = this.getDialog().getContentElement( 'general', 'pasteMsg' ).getElement(),
-										input = this.getElement();
+										input = this.getElement().getElementsByTag( 'textarea' ).getItem( 0 );
 
 									input.setAttribute( 'aria-labelledby', label.$.id );
+									input.setStyle( 'direction', editor.config.contentsLangDirection );
 								},
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/pastetext/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/pastetext/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/pastetext/plugin.js	(revision 6006)
@@ -21,21 +21,4 @@
 					if ( !clipboardText )
 						throw 0;
-					return clipboardText;
-				},
-				function()
-				{
-					window.netscape.security.PrivilegeManager.enablePrivilege( "UniversalXPConnect" );
-
-					var clip = window.Components.classes[ "@mozilla.org/widget/clipboard;1" ]
-							.getService( window.Components.interfaces.nsIClipboard );
-					var trans = window.Components.classes[ "@mozilla.org/widget/transferable;1" ]
-							.createInstance( window.Components.interfaces.nsITransferable );
-					trans.addDataFlavor( "text/unicode" );
-					clip.getData( trans, clip.kGlobalClipboard );
-
-					var str = {}, strLength = {}, clipboardText;
-					trans.getTransferData( "text/unicode", str, strLength );
-					str = str.value.QueryInterface( window.Components.interfaces.nsISupportsString );
-					clipboardText = str.data.substring( 0, strLength.value / 2 );
 					return clipboardText;
 				}
Index: /CKEditor/branches/features/adobeair/_source/plugins/popup/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/popup/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/popup/plugin.js	(revision 6006)
@@ -4,5 +4,5 @@
 */
 
-CKEDITOR.plugins.add( 'popup');
+CKEDITOR.plugins.add( 'popup' );
 
 CKEDITOR.tools.extend( CKEDITOR.editor.prototype,
@@ -14,6 +14,7 @@
 	 * @param {String} width Popup window width.
 	 * @param {String} height Popup window height.
+	 * @param {String} options Popup window features.
 	 */
-	popup : function( url, width, height )
+	popup : function( url, width, height, options )
 	{
 		width = width || '80%';
@@ -33,6 +34,7 @@
 
 		var top = parseInt( ( window.screen.height - height ) / 2, 10 ),
-			left = parseInt( ( window.screen.width  - width ) / 2, 10 ),
-			options = 'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes' +
+			left = parseInt( ( window.screen.width  - width ) / 2, 10 );
+
+		options = ( options || 'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes' ) +
 			',width='  + width +
 			',height=' + height +
@@ -53,10 +55,10 @@
 			popupWindow.location.href = url;
 		}
-		catch (e)
+		catch ( e )
 		{
 			popupWindow = window.open( url, null, options, true );
 		}
 
-		return true ;
+		return true;
 	}
 });
Index: /CKEditor/branches/features/adobeair/_source/plugins/removeformat/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/removeformat/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/removeformat/plugin.js	(revision 6006)
@@ -36,7 +36,9 @@
 
 				var filter = CKEDITOR.plugins.removeformat.filter;
-				var ranges = editor.getSelection().getRanges();
+				var ranges = editor.getSelection().getRanges( 1 ),
+					iterator = ranges.createIterator(),
+					range;
 
-				for ( var i = 0, range ; range = ranges[ i ] ; i++ )
+				while ( ( range = iterator.getNextRange() ) )
 				{
 					if ( range.collapsed )
@@ -49,6 +51,6 @@
 
 					// The style will be applied within the bookmark boundaries.
-					var startNode	= bookmark.startNode;
-					var endNode		= bookmark.endNode;
+					var startNode	= bookmark.startNode,
+						endNode		= bookmark.endNode;
 
 					// We need to check the selection boundaries (bookmark spans) to break
@@ -65,6 +67,6 @@
 					{
 						// Let's start checking the start boundary.
-						var path = new CKEDITOR.dom.elementPath( node );
-						var pathElements = path.elements;
+						var path = new CKEDITOR.dom.elementPath( node ),
+							pathElements = path.elements;
 
 						for ( var i = 1, pathElement ; pathElement = pathElements[ i ] ; i++ )
@@ -102,7 +104,10 @@
 							// Remove elements nodes that match with this style rules.
 							if ( tagsRegex.test( currentNode.getName() ) )
-								currentNode.remove( true );
+								currentNode.remove( 1 );
 							else
+							{
 								currentNode.removeAttributes( removeAttributes );
+								editor.fire( 'removeFormatCleanup', currentNode );
+							}
 						}
 
@@ -171,2 +176,9 @@
  */
 CKEDITOR.config.removeFormatAttributes = 'class,style,lang,width,height,align,hspace,valign';
+
+/**
+ * Fired after an element was cleaned by the removeFormat plugin.
+ * @name CKEDITOR#removeFormatCleanup
+ * @event
+ * @param {Object} data.element The element that was cleaned up.
+ */
Index: /CKEditor/branches/features/adobeair/_source/plugins/resize/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/resize/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/resize/plugin.js	(revision 6006)
@@ -10,5 +10,11 @@
 		var config = editor.config;
 
-		if ( config.resize_enabled )
+		!config.resize_dir && ( config.resize_dir = 'both' );
+		( config.resize_maxWidth == undefined ) && ( config.resize_maxWidth = 3000 );
+		( config.resize_maxHeight == undefined ) && ( config.resize_maxHeight = 3000 );
+		( config.resize_minWidth == undefined ) && ( config.resize_minWidth = 750 );
+		( config.resize_minHeight == undefined ) && ( config.resize_minHeight = 250 );
+
+		if ( config.resize_enabled !== false )
 		{
 			var container = null,
@@ -58,4 +64,7 @@
 					origin = { x : $event.screenX, y : $event.screenY };
 
+					config.resize_minWidth > startSize.width && ( config.resize_minWidth = startSize.width );
+					config.resize_minHeight > startSize.height && ( config.resize_minHeight = startSize.height );
+
 					CKEDITOR.document.on( 'mousemove', dragHandler );
 					CKEDITOR.document.on( 'mouseup', dragEndHandler );
@@ -75,7 +84,7 @@
 					{
 						var direction = '';
-						if ( resizeHorizontal && !resizeVertical)
+						if ( resizeHorizontal && !resizeVertical )
 							direction = ' cke_resizer_horizontal';
-						if ( !resizeHorizontal && resizeVertical)
+						if ( !resizeHorizontal && resizeVertical )
 							direction = ' cke_resizer_vertical';
 
@@ -92,4 +101,6 @@
 /**
  * The minimum editor width, in pixels, when resizing it with the resize handle.
+ * Note: It fallbacks to editor's actual width if that's smaller than the default value.
+ * @name CKEDITOR.config.resize_minWidth
  * @type Number
  * @default 750
@@ -97,8 +108,9 @@
  * config.resize_minWidth = 500;
  */
-CKEDITOR.config.resize_minWidth = 750;
 
 /**
  * The minimum editor height, in pixels, when resizing it with the resize handle.
+ * Note: It fallbacks to editor's actual height if that's smaller than the default value.
+ * @name CKEDITOR.config.resize_minHeight
  * @type Number
  * @default 250
@@ -106,8 +118,8 @@
  * config.resize_minHeight = 600;
  */
-CKEDITOR.config.resize_minHeight = 250;
 
 /**
  * The maximum editor width, in pixels, when resizing it with the resize handle.
+ * @name CKEDITOR.config.resize_maxWidth
  * @type Number
  * @default 3000
@@ -115,8 +127,8 @@
  * config.resize_maxWidth = 750;
  */
-CKEDITOR.config.resize_maxWidth = 3000;
 
 /**
  * The maximum editor height, in pixels, when resizing it with the resize handle.
+ * @name CKEDITOR.config.resize_maxHeight
  * @type Number
  * @default 3000
@@ -124,8 +136,8 @@
  * config.resize_maxHeight = 600;
  */
-CKEDITOR.config.resize_maxHeight = 3000;
 
 /**
  * Whether to enable the resizing feature. If disabled the resize handler will not be visible.
+ * @name CKEDITOR.config.resize_enabled
  * @type Boolean
  * @default true
@@ -133,9 +145,9 @@
  * config.resize_enabled = false;
  */
-CKEDITOR.config.resize_enabled = true;
 
 /**
  * The directions to which the editor resizing is enabled. Possible values
  * are "both", "vertical" and "horizontal".
+ * @name CKEDITOR.config.resize_dir
  * @type String
  * @default 'both'
@@ -144,3 +156,2 @@
  * config.resize_dir = 'vertical';
  */
-CKEDITOR.config.resize_dir = 'both';
Index: /CKEditor/branches/features/adobeair/_source/plugins/richcombo/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/richcombo/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/richcombo/plugin.js	(revision 6006)
@@ -235,5 +235,5 @@
 				};
 
-			panel.onHide = function()
+			panel.onHide = function( preventOnClose )
 				{
 					if ( me.className )
@@ -244,5 +244,5 @@
 					me._.on = 0;
 
-					if ( me.onClose )
+					if ( !preventOnClose && me.onClose )
 						me.onClose();
 				};
Index: /CKEditor/branches/features/adobeair/_source/plugins/scayt/dialogs/options.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/scayt/dialogs/options.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/scayt/dialogs/options.js	(revision 6006)
@@ -12,5 +12,5 @@
 		i,
 		contents = [],
-		userDicActive = false,
+		userDicActive = 0,
 		dic_buttons = [
 			// [0] contains buttons for creating
@@ -19,35 +19,40 @@
 			"dic_rename,dic_delete"
 		],
-		optionsIds= [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ];
+		optionsIds = [ 'mixedCase', 'mixedWithDigits', 'allCaps', 'ignoreDomainNames' ];
 
 	// common operations
 
-	function getBOMAllOptions () {
+	function getBOMAllOptions()
+	{
 		 return document.forms.optionsbar["options"];
 	}
-	function getBOMAllLangs () {
+	function getBOMAllLangs()
+	{
 		 return document.forms.languagesbar["scayt_lang"];
 	}
 
-	function setCheckedValue(radioObj, newValue) {
-		if (!radioObj)
+	function setCheckedValue( radioObj, newValue )
+	{
+		if ( !radioObj )
 			return;
 		var radioLength = radioObj.length;
-		if (radioLength == undefined) {
-			radioObj.checked = (radioObj.value == newValue.toString());
+		if ( radioLength == undefined )
+		{
+			radioObj.checked = radioObj.value == newValue.toString();
 			return;
 		}
-		for (var i = 0; i < radioLength; i++) {
+		for ( var i = 0; i < radioLength; i++ )
+		{
 			radioObj[i].checked = false;
-			if (radioObj[i].value == newValue.toString()) {
+			if ( radioObj[i].value == newValue.toString() )
 				radioObj[i].checked = true;
-			}
-		}
-	}
-
+		}
+	}
+
+	var lang = editor.lang.scayt;
 	var tags_contents =  [
 				{
 					id : 'options',
-					label : editor.lang.scayt.optionsTab,
+					label : lang.optionsTab,
 					elements : [
 						{
@@ -78,5 +83,5 @@
 				{
 					id : 'langs',
-					label : editor.lang.scayt.languagesTab,
+					label : lang.languagesTab,
 					elements : [
 						{
@@ -93,5 +98,5 @@
 				{
 					id : 'dictionaries',
-					label : editor.lang.scayt.dictionariesTab,
+					label : lang.dictionariesTab,
 					elements : [
 						{
@@ -124,5 +129,5 @@
 				{
 					id : 'about',
-					label : editor.lang.scayt.aboutTab,
+					label : lang.aboutTab,
 					elements : [
 						{
@@ -137,5 +142,5 @@
 
 	var dialogDefiniton = {
-		title : editor.lang.scayt.title,
+		title : lang.title,
 		minWidth : 360,
 		minHeight : 220,
@@ -184,8 +189,8 @@
 		{
 			var o = getBOMAllOptions();
-			for (i in o)
+			for ( var i in o )
 				o[i].checked = false;
 
-			setCheckedValue(getBOMAllLangs(),"");
+			setCheckedValue( getBOMAllLangs(), "" );
 		},
 		contents : contents
@@ -196,5 +201,5 @@
 	tags = CKEDITOR.plugins.scayt.uiTabs;
 
-	for ( i in tags )
+	for ( var i in tags )
 	{
 		if ( tags[ i ] == 1 )
@@ -202,5 +207,5 @@
 	}
 	if ( tags[2] == 1 )
-		userDicActive = true;
+		userDicActive = 1;
 
 
@@ -209,5 +214,5 @@
 		var dialog = this,
 			lang_list = dialog.data.scayt.getLangList(),
-			buttons = [ 'dic_create','dic_delete','dic_rename','dic_restore' ],
+			buttons = [ 'dic_create', 'dic_delete', 'dic_rename', 'dic_restore' ],
 			labels = optionsIds,
 			i;
@@ -283,7 +288,7 @@
 
 		var langList = [];
-		if (tags[1] ==1 )
-		{
-			for ( i in lang_list.rtl )
+		if ( tags[1] ==1 )
+		{
+			for ( var i in lang_list.rtl )
 				langList[ langList.length ] = createOption( i, lang_list.ltr );
 
@@ -315,6 +320,6 @@
 			var suc_massage = captions["succ_dic_create"];
 
-			window.scayt.createUserDictionary(dic_name,
-				function(arg)
+			window.scayt.createUserDictionary( dic_name,
+				function( arg )
 				{
 					hide_dic_buttons ( all_buttons );
@@ -323,5 +328,5 @@
 					dic_success_message (suc_massage);
 				},
-				function(arg)
+				function( arg )
 				{
 					err_massage = err_massage.replace("%s" ,arg.dname );
@@ -337,6 +342,6 @@
 			var err_massage = captions["err_dic_rename"] || "";
 			var suc_massage = captions["succ_dic_rename"] || "";
-			window.scayt.renameUserDictionary(dic_name,
-				function(arg)
+			window.scayt.renameUserDictionary( dic_name,
+				function( arg )
 					{
 						suc_massage = suc_massage.replace("%s" , arg.dname );
@@ -344,5 +349,5 @@
 						dic_success_message ( suc_massage );
 					},
-				function(arg)
+				function( arg )
 					{
 						err_massage = err_massage.replace("%s" , arg.dname  );
@@ -352,5 +357,5 @@
 		};
 
-		dic.dic_delete = function ( el, dic_name , dic_buttons )
+		dic.dic_delete = function( el, dic_name , dic_buttons )
 		{
 			var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
@@ -360,5 +365,5 @@
 			// try to delete dictionary
 			window.scayt.deleteUserDictionary(
-				function(arg)
+				function( arg )
 				{
 					suc_massage = suc_massage.replace("%s" , arg.dname );
@@ -368,5 +373,5 @@
 					dic_success_message( suc_massage );
 				},
-				function(arg)
+				function( arg )
 				{
 					err_massage = err_massage.replace("%s" , arg.dname );
@@ -375,5 +380,5 @@
 		};
 
-		dic.dic_restore = dialog.dic_restore || function ( el, dic_name , dic_buttons )
+		dic.dic_restore = dialog.dic_restore || function( el, dic_name , dic_buttons )
 			{
 				// try to restore existing dictionary
@@ -383,5 +388,5 @@
 
 				window.scayt.restoreUserDictionary(dic_name,
-					function(arg)
+					function( arg )
 					{
 						suc_massage = suc_massage.replace("%s" , arg.dname );
@@ -390,5 +395,5 @@
 						dic_success_message( suc_massage );
 					},
-					function(arg)
+					function( arg )
 					{
 						err_massage = err_massage.replace("%s" , arg.dname );
@@ -409,5 +414,7 @@
 				var id = el.getId();
 				dic[ id ].apply( null, [ el, dic_name, dic_buttons ] );
-			}catch(err){
+			}
+			catch(err)
+			{
 				dic_error_message(" Dictionary error. ");
 			}
@@ -432,5 +439,5 @@
 		var dialog = this;
 		// for enabled options tab
-		if (tags[0] == 1){
+		if ( tags[0] == 1 ){
 			var opto = getBOMAllOptions();
 
@@ -467,6 +474,6 @@
 		if ( tags[1] == 1 )
 		{
-			var domLang = doc.getById("cke_option"+dialog.sLang);
-			setCheckedValue(domLang.$,dialog.sLang);
+			var domLang = doc.getById("cke_option" + dialog.sLang);
+			setCheckedValue( domLang.$,dialog.sLang );
 		}
 
@@ -488,5 +495,5 @@
 
 				},
-				function ()
+				function()
 				{
 					doc.getById( 'dic_name' ).setValue("");
@@ -497,33 +504,27 @@
 	};
 
-	function dic_error_message ( m )
+	function dic_error_message( m )
 	{
 		doc.getById('dic_message').setHtml('<span style="color:red;">' + m + '</span>' );
 	}
-	function dic_success_message ( m )
+	function dic_success_message( m )
 	{
 		doc.getById('dic_message').setHtml('<span style="color:blue;">' + m + '</span>') ;
 	}
-	function display_dic_buttons ( sIds )
-	{
-
+	function display_dic_buttons( sIds )
+	{
 		sIds = String( sIds );
 		var aIds = sIds.split(',');
 		for ( var i=0, l = aIds.length; i < l ; i+=1)
-		{
 			doc.getById( aIds[i] ).$.style.display = "inline";
-		}
-
-	}
-	function hide_dic_buttons ( sIds )
+	}
+	function hide_dic_buttons( sIds )
 	{
 		sIds = String( sIds );
 		var aIds = sIds.split(',');
 		for ( var i = 0, l = aIds.length; i < l ; i += 1 )
-		{
 			doc.getById( aIds[i] ).$.style.display = "none";
-		}
-	}
-	function set_dic_name ( dic_name )
+	}
+	function set_dic_name( dic_name )
 	{
 		doc.getById('dic_name').$.value= dic_name;
Index: /CKEditor/branches/features/adobeair/_source/plugins/scayt/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/scayt/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/scayt/plugin.js	(revision 6006)
@@ -11,16 +11,17 @@
 (function()
 {
-	var commandName 	= 'scaytcheck',
-		openPage		= '';
+	var commandName  = 'scaytcheck',
+		openPage = '';
 
 	// Checks if a value exists in an array
-	function in_array(needle, haystack)
+	function in_array( needle, haystack )
 	{
-		var found = false, key;
-		for (key in haystack)
-		{
-			if ((haystack[key] === needle) || ( haystack[key] == needle))
-			{
-				found = true;
+		var found = 0,
+			key;
+		for ( key in haystack )
+		{
+			if ( haystack[ key ] == needle )
+			{
+				found = 1;
 				break;
 			}
@@ -35,4 +36,5 @@
 		var createInstance = function()	// Create new instance every time Document is created.
 		{
+			var config = editor.config;
 			// Initialise Scayt instance.
 			var oParams = {};
@@ -41,8 +43,8 @@
 			// syntax : AppName.AppVersion@AppRevision
 			oParams.assocApp  = 'CKEDITOR.' + CKEDITOR.version + '@' + CKEDITOR.revision;
-			oParams.customerid = editor.config.scayt_customerid  || '1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2';
-			oParams.customDictionaryIds = editor.config.scayt_customDictionaryIds || '';
-			oParams.userDictionaryName = editor.config.scayt_userDictionaryName || '';
-			oParams.sLang = editor.config.scayt_sLang || 'en_US';
+			oParams.customerid = config.scayt_customerid  || '1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2';
+			oParams.customDictionaryIds = config.scayt_customDictionaryIds || '';
+			oParams.userDictionaryName = config.scayt_userDictionaryName || '';
+			oParams.sLang = config.scayt_sLang || 'en_US';
 
 			// Introduce SCAYT onLoad callback. (#5632)
@@ -63,18 +65,16 @@
 			{
 				if ( plugin.getScayt( editor ) && !editor.checkDirty() )
-					setTimeout( function(){ editor.resetDirty(); } );
+					setTimeout( function(){ editor.resetDirty(); }, 0 );
 			};
 
 			var scayt_custom_params = window.scayt_custom_params;
-			if ( typeof scayt_custom_params == 'object')
+			if ( typeof scayt_custom_params == 'object' )
 			{
 				for ( var k in scayt_custom_params )
-				{
 					oParams[ k ] = scayt_custom_params[ k ];
-				}
 			}
 			// needs for restoring a specific scayt control settings
-			if ( plugin.getControlId(editor) )
-				oParams.id = plugin.getControlId(editor);
+			if ( plugin.getControlId( editor ) )
+				oParams.id = plugin.getControlId( editor );
 
 			var scayt_control = new window.scayt( oParams );
@@ -86,5 +86,5 @@
 
 			// Copy config.
-			var	lastInstance = plugin.instances[ editor.name ];
+			var lastInstance = plugin.instances[ editor.name ];
 			if ( lastInstance )
 			{
@@ -101,5 +101,5 @@
 			var fTabs  = [];
 
-			for (var i = 0,l=4; i<l; i++)
+			for ( var i = 0, l=4; i < l; i++ )
 			    fTabs.push( uiTabs[i] && plugin.uiTabs[i] );
 
@@ -133,5 +133,5 @@
 		editor.on( 'beforeCommandExec', function( ev )		// Disable SCAYT before Source command execution.
 			{
-				if ( (ev.data.name == 'source' ||  ev.data.name == 'newpage') && editor.mode == 'wysiwyg' )
+				if ( ( ev.data.name == 'source' || ev.data.name == 'newpage' ) && editor.mode == 'wysiwyg' )
 				{
 					var scayt_instance = plugin.getScayt( editor );
@@ -258,5 +258,5 @@
 		// Override Image.equals method avoid CK snapshot module to add SCAYT markup to snapshots. (#5546)
 		var undoImagePrototype = CKEDITOR.plugins.undo.Image.prototype;
-		undoImagePrototype.equals =	 CKEDITOR.tools.override( undoImagePrototype.equals, function( org )
+		undoImagePrototype.equals = CKEDITOR.tools.override( undoImagePrototype.equals, function( org )
 		{
 			return function( otherImage )
@@ -299,5 +299,5 @@
 				this.controlInfo[ editor.name ][ infoOpt ] = o[ infoOpt ];
 		},
-		isControlRestored : function ( editor )
+		isControlRestored : function( editor )
 		{
 			if ( editor &&
@@ -309,13 +309,13 @@
 			return false;
 		},
-		markControlRestore : function ( editor )
-		{
-			this.setControlInfo( editor,{ restored:true } );
-		},
-		setControlId: function (editor, id)
-		{
-			this.setControlInfo( editor,{ id:id } );
-		},
-		getControlId: function (editor)
+		markControlRestore : function( editor )
+		{
+			this.setControlInfo( editor, { restored:true } );
+		},
+		setControlId: function( editor, id )
+		{
+			this.setControlInfo( editor, { id:id } );
+		},
+		getControlId: function( editor )
 		{
 			if ( editor &&
@@ -328,9 +328,9 @@
 			return null;
 		},
-		setPaused: function ( editor , bool )
-		{
-			this.setControlInfo( editor,{ paused:bool } );
-		},
-		isPaused: function (editor)
+		setPaused: function( editor , bool )
+		{
+			this.setControlInfo( editor, { paused:bool } );
+		},
+		isPaused: function( editor )
 		{
 			if ( editor &&
@@ -338,5 +338,5 @@
 					this.controlInfo[editor.name] )
 			{
-				return this.controlInfo[editor.name].paused ;
+				return this.controlInfo[editor.name].paused;
 			}
 			return undefined;
@@ -387,5 +387,5 @@
 			// Default to 'http' for unknown.
 			protocol = protocol.search( /https?:/) != -1? protocol : 'http:';
-			var baseUrl  = 'svc.spellchecker.net/spellcheck31/lf/scayt24/loader__base.js';
+			var baseUrl  = 'svc.spellchecker.net/scayt25/loader__base.js';
 
 			var scaytUrl  =  editor.config.scayt_srcUrl || ( protocol + '//' + baseUrl );
@@ -455,10 +455,8 @@
 		preserveState : true,
 		editorFocus : false,
+		canUndo : false,
 
 		exec: function( editor )
 		{
-			var autoStartup = editor.config.scayt_autoStartup;
-			autoStartup = ( autoStartup == undefined ) || autoStartup;
-
 			if ( plugin.isScaytReady( editor ) )
 			{
@@ -474,8 +472,8 @@
 				//
 				// now focus is set certainly
-				scayt_control.focus( );
+				scayt_control.focus();
 				scayt_control.setDisabled( isEnabled );
 			}
-			else if ( !autoStartup && plugin.engineLoaded >= 0 )	// Load first time
+			else if ( !editor.config.scayt_autoStartup && plugin.engineLoaded >= 0 )	// Load first time
 			{
 				this.setState( CKEDITOR.TRISTATE_DISABLED );
@@ -500,21 +498,16 @@
 			if ( items_order && items_order.length )
 			{
-				for ( var pos in items_order )
+				for ( var pos = 0 ; pos < items_order.length ; pos++ )
 					items_order_str += 'scayt_' + items_order[ pos ] + ( items_order.length != parseInt( pos, 10 ) + 1 ? ',' : '' );
 			}
 
-			// Register scayt rbc menu group.
-			if ( editor.config.scayt_contextMenuOntop )
-				// Put it on top of all context menu items
-				editor.config.menu_groups =  items_order_str + ',' + editor.config.menu_groups;
-			else
-				// Put it down
-				editor.config.menu_groups = editor.config.menu_groups + ',' +items_order_str;
+			// Put it on top of all context menu items (#5717)
+			editor.config.menu_groups =  items_order_str + ',' + editor.config.menu_groups;
 		},
 
 		init : function( editor )
 		{
-			var moreSuggestions = {};
-			var mainSuggestions = {};
+			var moreSuggestions = {},
+				mainSuggestions = {};
 
 			// Scayt command.
@@ -529,7 +522,7 @@
 			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);
+			for ( var i=0, l=3; i < l; i++ )
+			{
+				var flag = parseInt( confuiTabs[i] || '1', 10 );
 				uiTabs.push( flag );
 			}
@@ -540,16 +533,18 @@
 			var uiMuneItems = {};
 
+			var lang = editor.lang.scayt;
+
 			// always added
 			uiMuneItems.scaytToggle =
 				{
-					label : editor.lang.scayt.enable,
+					label : lang.enable,
 					command : commandName,
 					group : menuGroup
 				};
 
-			if (uiTabs[0] == 1)
+			if ( uiTabs[0] == 1 )
 				uiMuneItems.scaytOptions =
 				{
-					label : editor.lang.scayt.options,
+					label : lang.options,
 					group : menuGroup,
 					onClick : function()
@@ -560,8 +555,8 @@
 				};
 
-			if (uiTabs[1] == 1)
+			if ( uiTabs[1] == 1 )
 				uiMuneItems.scaytLangs =
 				{
-					label : editor.lang.scayt.langs,
+					label : lang.langs,
 					group : menuGroup,
 					onClick : function()
@@ -571,8 +566,8 @@
 					}
 				};
-			if (uiTabs[2] == 1)
+			if ( uiTabs[2] == 1 )
 				uiMuneItems.scaytDict =
 				{
-					label : editor.lang.scayt.dictionariesTab,
+					label : lang.dictionariesTab,
 					group : menuGroup,
 					onClick : function()
@@ -592,6 +587,5 @@
 						editor.openDialog( commandName );
 					}
-				}
-			;
+				};
 
 			uiTabs[3] = 1; // about us tab is always on
@@ -602,6 +596,6 @@
 				editor.ui.add( 'Scayt', CKEDITOR.UI_MENUBUTTON,
 					{
-						label : editor.lang.scayt.title,
-						title : CKEDITOR.env.opera ? editor.lang.scayt.opera_title : editor.lang.scayt.title,
+						label : lang.title,
+						title : CKEDITOR.env.opera ? lang.opera_title : lang.title,
 						className : 'cke_button_scayt',
 						onRender: function()
@@ -617,5 +611,5 @@
 							var isEnabled = plugin.isScaytEnabled( editor );
 
-							editor.getMenuItem( 'scaytToggle' ).label = editor.lang.scayt[ isEnabled ? 'disable' : 'enable' ];
+							editor.getMenuItem( 'scaytToggle' ).label = lang[ isEnabled ? 'disable' : 'enable' ];
 
 							return {
@@ -632,7 +626,8 @@
 			if ( editor.contextMenu && editor.addMenuItems )
 			{
-				editor.contextMenu.addListener( function(  )
-					{
-						if ( !plugin.isScaytEnabled( editor ) )
+				editor.contextMenu.addListener( function( element, selection )
+					{
+						if ( !plugin.isScaytEnabled( editor )
+								|| selection.getCommonAncestor().isReadOnly() )
 							return null;
 
@@ -685,5 +680,5 @@
 										exec: function()
 										{
-											scayt_control.replace(el, s);
+											scayt_control.replace( el, s );
 										}
 									};
@@ -711,5 +706,5 @@
 							editor.addMenuItem( 'scayt_moresuggest',
 							{
-								label : editor.lang.scayt.moreSuggestions,
+								label : lang.moreSuggestions,
 								group : 'scayt_moresuggest',
 								order : 10,
@@ -729,5 +724,5 @@
 								}
 							};
-							addButtonCommand( editor, 'ignore', editor.lang.scayt.ignore, 'scayt_ignore', ignore_command, 'scayt_control', 1 );
+							addButtonCommand( editor, 'ignore', lang.ignore, 'scayt_ignore', ignore_command, 'scayt_control', 1 );
 							mainSuggestions[ 'scayt_ignore' ] = CKEDITOR.TRISTATE_OFF;
 						}
@@ -740,5 +735,5 @@
 								}
 							};
-							addButtonCommand(editor, 'ignore_all', editor.lang.scayt.ignoreAll, 'scayt_ignore_all', ignore_all_command, 'scayt_control', 2);
+							addButtonCommand(editor, 'ignore_all', lang.ignoreAll, 'scayt_ignore_all', ignore_all_command, 'scayt_control', 2);
 							mainSuggestions['scayt_ignore_all'] = CKEDITOR.TRISTATE_OFF;
 						}
@@ -751,5 +746,5 @@
 								}
 							};
-							addButtonCommand(editor, 'add_word', editor.lang.scayt.addWord, 'scayt_add_word', addword_command, 'scayt_control', 3);
+							addButtonCommand(editor, 'add_word', lang.addWord, 'scayt_add_word', addword_command, 'scayt_control', 3);
 							mainSuggestions['scayt_add_word'] = CKEDITOR.TRISTATE_OFF;
 						}
@@ -783,6 +778,5 @@
 
 			// Start plugin
-			var autoStartup = editor.config.scayt_autoStartup;
-			if ( ( autoStartup == undefined ) || autoStartup )
+			if ( editor.config.scayt_autoStartup )
 			{
 				editor.on( 'instanceReady', function()
@@ -816,7 +810,7 @@
  * @name CKEDITOR.config.scayt_autoStartup
  * @type Boolean
- * @default true
- * @example
- * config.scayt_autoStartup = false;
+ * @default false
+ * @example
+ * config.scayt_autoStartup = true;
  */
 
@@ -939,13 +933,4 @@
 
 /**
- * Makes it possible to place the SCAYT context menu items above others.
- * @name CKEDITOR.config.scayt_contextMenuOntop
- * @type Boolean
- * @default false
- * @example
- * config.scayt_contextMenuOntop = true;
- */
-
-/**
  * Define order of placing of SCAYT context menu items by groups.
  * It must be a string with one or more of the following
Index: /CKEditor/branches/features/adobeair/_source/plugins/selection/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/selection/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/selection/plugin.js	(revision 6006)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -18,5 +18,5 @@
 			// releasing the WYSIWYG mode, so we need to check it first.
 			var sel = this.getSelection();
-			if ( !sel )
+			if ( !sel || !sel.document.getWindow().$ )
 				return;
 
@@ -106,5 +106,6 @@
 				{
 					var doc = editor.document,
-						body = doc.getBody();
+						body = doc.getBody(),
+						html = doc.getDocumentElement();
 
 					if ( CKEDITOR.env.ie )
@@ -116,5 +117,6 @@
 
 						var savedRange,
-							saveEnabled;
+							saveEnabled,
+							restoreEnabled = 1;
 
 						// "onfocusin" is fired before "onfocus". It makes it
@@ -132,11 +134,17 @@
 								if ( savedRange )
 								{
-									// Well not break because of this.
-									try
+									// 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 )
 									{
-										savedRange.select();
+										// Well not break because of this.
+										try
+										{
+											savedRange.select();
+										}
+										catch (e)
+										{}
 									}
-									catch (e)
-									{}
 
 									savedRange = null;
@@ -147,5 +155,5 @@
 							{
 								// Enable selections to be saved.
-								saveEnabled = true;
+								saveEnabled = 1;
 
 								saveSelection();
@@ -160,5 +168,6 @@
 
 								// Disable selections from being saved.
-								saveEnabled = false;
+								saveEnabled = 0;
+								restoreEnabled = 1;
 							});
 
@@ -167,17 +176,73 @@
 						if ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 )
 						{
-							doc.getWindow().on( 'blur', function( evt )
-							{
-								editor.document.$.selection.empty();
+							editor.on( 'blur', function( evt )
+							{
+								// Try/Catch to avoid errors if the editor is hidden. (#6375)
+								try
+								{
+									editor.document && editor.document.$.selection.empty();
+								}
+								catch (e) {}
 							});
 						}
 
+						// Listening on document element ensures that
+						// scrollbar is included. (#5280)
+						html.on( 'mousedown', function()
+						{
+							// Lock restore selection now, as we have
+							// a followed 'click' event which introduce
+							// new selection. (#5735)
+							restoreEnabled = 0;
+						});
+
+						html.on( 'mouseup', function()
+						{
+							restoreEnabled = 1;
+						});
+
+						// In IE6/7 the blinking cursor appears, but contents are
+						// not editable. (#5634)
+						if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.version < 8 || CKEDITOR.env.quirks ) )
+						{
+							// The 'click' event is not fired when clicking the
+							// scrollbars, so we can use it to check whether
+							// the empty space following <body> has been clicked.
+							html.on( 'click', function( evt )
+							{
+								if ( evt.data.getTarget().getName() == 'html' )
+									editor.getSelection().getRanges()[ 0 ].select();
+							});
+						}
+
+						var scroll;
 						// IE fires the "selectionchange" event when clicking
 						// inside a selection. We don't want to capture that.
-						body.on( 'mousedown', disableSave );
+						body.on( 'mousedown', function( evt )
+						{
+							// IE scrolls document to top on right mousedown
+							// when editor has no focus, remember this scroll
+							// position and revert it before context menu opens. (#5778)
+							if ( evt.data.$.button == 2 )
+							{
+								var sel = editor.document.$.selection;
+								if ( sel.type == 'None' )
+									scroll = editor.window.getScrollPosition();
+							}
+							disableSave();
+						});
+
 						body.on( 'mouseup',
-							function()
-							{
-								saveEnabled = true;
+							function( evt )
+							{
+								// Restore recorded scroll position when needed on right mouseup.
+								if ( evt.data.$.button == 2 && scroll )
+								{
+									editor.document.$.documentElement.scrollLeft = scroll.x;
+									editor.document.$.documentElement.scrollTop = scroll.y;
+								}
+								scroll = null;
+
+								saveEnabled = 1;
 								setTimeout( function()
 									{
@@ -191,5 +256,5 @@
 							function()
 							{
-								saveEnabled = true;
+								saveEnabled = 1;
 								saveSelection();
 							});
@@ -202,5 +267,5 @@
 						function disableSave()
 						{
-							saveEnabled = false;
+							saveEnabled = 0;
 						}
 
@@ -236,7 +301,9 @@
 								// Avoid saving selection from within text input. (#5747)
 								var parentTag;
-								if ( nativeSel && nativeSel.type == 'Text'
-									&& ( parentTag = nativeSel.createRange().parentElement().nodeName.toLowerCase() )
-									&& parentTag in { input: 1, textarea : 1 } )
+								if ( nativeSel && nativeSel.type && nativeSel.type != 'Control'
+									&& ( parentTag = nativeSel.createRange() )
+									&& ( parentTag = parentTag.parentElement() )
+									&& ( parentTag = parentTag.nodeName )
+									&& parentTag.toLowerCase() in { input: 1, textarea : 1 } )
 								{
 									return;
@@ -342,5 +409,5 @@
 
 		this.document = document;
-		this.isLocked = false;
+		this.isLocked = 0;
 		this._ =
 		{
@@ -476,6 +543,16 @@
 				},
 
-		getRanges :
-			CKEDITOR.env.ie ?
+		/**
+		 * Retrieve the {@link CKEDITOR.dom.range} instances that represent the current selection.
+		 * Note: Some browsers returns multiple ranges even on a sequent selection, e.g. Firefox returns
+		 * one range for each table cell when one or more table row is selected.
+		 * @return {Array}
+		 * @example
+		 * var ranges = selection.getRanges();
+		 * alert(ranges.length);
+		 */
+		getRanges : (function()
+		{
+			var func = CKEDITOR.env.ie ?
 				( function()
 				{
@@ -565,8 +642,4 @@
 					return function()
 					{
-						var cache = this._.cache;
-						if ( cache.ranges )
-							return cache.ranges;
-
 						// IE doesn't have range support (in the W3C way), so we
 						// need to do some magic to transform selections into
@@ -591,9 +664,16 @@
 							range.setEnd( new CKEDITOR.dom.node( boundaryInfo.container ), boundaryInfo.offset );
 
-							return ( cache.ranges = [ range ] );
+							// Correct an invalid IE range case on empty list item. (#5850)
+							if ( range.endContainer.getPosition( range.startContainer ) & CKEDITOR.POSITION_PRECEDING
+									&& range.endOffset <= range.startContainer.getIndex() )
+							{
+								range.collapse();
+							}
+
+							return [ range ];
 						}
 						else if ( type == CKEDITOR.SELECTION_ELEMENT )
 						{
-							var retval = this._.cache.ranges = [];
+							var retval = [];
 
 							for ( var i = 0 ; i < nativeRange.length ; i++ )
@@ -616,5 +696,5 @@
 						}
 
-						return ( cache.ranges = [] );
+						return [];
 					};
 				})()
@@ -622,7 +702,4 @@
 				function()
 				{
-					var cache = this._.cache;
-					if ( cache.ranges )
-						return cache.ranges;
 
 					// On browsers implementing the W3C range, we simply
@@ -630,14 +707,27 @@
 					// instances.
 
-					var ranges = [];
-					var sel = this.getNative();
+					var ranges = [],
+						range,
+						doc = this.document,
+						sel = this.getNative();
 
 					if ( !sel )
-						return [];
+						return ranges;
+
+					// On WebKit, it may happen that we'll have no selection
+					// available. We normalize it here by replicating the
+					// behavior of other browsers.
+					if ( !sel.rangeCount )
+					{
+						range = new CKEDITOR.dom.range( doc );
+						range.moveToElementEditStart( doc.getBody() );
+						ranges.push( range );
+					}
 
 					for ( var i = 0 ; i < sel.rangeCount ; i++ )
 					{
 						var nativeRange = sel.getRangeAt( i );
-						var range = new CKEDITOR.dom.range( this.document );
+
+						range = new CKEDITOR.dom.range( doc );
 
 						range.setStart( new CKEDITOR.dom.node( nativeRange.startContainer ), nativeRange.startOffset );
@@ -645,7 +735,99 @@
 						ranges.push( range );
 					}
-
-					return ( cache.ranges = ranges );
-				},
+					return ranges;
+				};
+
+			return function( onlyEditables )
+			{
+				var cache = this._.cache;
+				if ( cache.ranges && !onlyEditables )
+					return cache.ranges;
+				else if ( !cache.ranges )
+					cache.ranges = new CKEDITOR.dom.rangeList( func.call( this ) );
+
+				// Split range into multiple by read-only nodes.
+				if ( onlyEditables )
+				{
+					var ranges = cache.ranges;
+					for ( var i = 0; i < ranges.length; i++ )
+					{
+						var range = ranges[ i ];
+
+						// Drop range spans inside one ready-only node.
+						var parent = range.getCommonAncestor();
+						if ( parent.isReadOnly() )
+							ranges.splice( i, 1 );
+
+						if ( range.collapsed )
+							continue;
+
+						var startContainer = range.startContainer,
+							endContainer = range.endContainer,
+							startOffset = range.startOffset,
+							endOffset = range.endOffset,
+							walkerRange = range.clone();
+
+						// Range may start inside a non-editable element, restart range
+						// by the end of it.
+						var readOnly;
+						if ( ( readOnly = startContainer.isReadOnly() ) )
+							range.setStartAfter( readOnly );
+
+						// Enlarge range start/end with text node to avoid walker
+						// being DOM destructive, it doesn't interfere our checking
+						// of elements below as well.
+						if ( startContainer && startContainer.type == CKEDITOR.NODE_TEXT )
+						{
+							if ( startOffset >= startContainer.getLength() )
+								walkerRange.setStartAfter( startContainer );
+							else
+								walkerRange.setStartBefore( startContainer );
+						}
+
+						if ( endContainer && endContainer.type == CKEDITOR.NODE_TEXT )
+						{
+							if ( !endOffset )
+								walkerRange.setEndBefore( endContainer );
+							else
+								walkerRange.setEndAfter( endContainer );
+						}
+
+						// Looking for non-editable element inside the range.
+						var walker = new CKEDITOR.dom.walker( walkerRange );
+						walker.evaluator = function( node )
+						{
+							if ( node.type == CKEDITOR.NODE_ELEMENT
+								&& node.getAttribute( 'contenteditable' ) == 'false' )
+							{
+								var newRange = range.clone();
+								range.setEndBefore( node );
+
+								// Drop collapsed range around read-only elements,
+								// it make sure the range list empty when selecting
+								// only non-editable elements.
+								if ( range.collapsed )
+									ranges.splice( i--, 1 );
+
+								// Avoid creating invalid range.
+								if ( !( node.getPosition( walkerRange.endContainer ) & CKEDITOR.POSITION_CONTAINS ) )
+								{
+									newRange.setStartAfter( node );
+									if ( !newRange.collapsed )
+										ranges.splice( i + 1, 0, newRange );
+								}
+
+								return true;
+							}
+
+							return false;
+						};
+
+						walker.next();
+					}
+				}
+
+				return cache.ranges;
+			};
+		})(),
 
 		/**
@@ -684,5 +866,5 @@
 							// selected node on the start which doesn't have
 							// visual impact. ( #3231 )
-							while ( true )
+							while ( 1 )
 							{
 								var startContainer = range.startContainer,
@@ -704,5 +886,5 @@
 
 							if ( !node || node.type != CKEDITOR.NODE_ELEMENT )
-								return range.startContainer;
+								node = range.startContainer;
 
 							var child = node.getFirst();
@@ -712,22 +894,13 @@
 								child = child.getFirst();
 							}
-
-							return node;
-						}
-					}
-
-					if ( CKEDITOR.env.ie )
-					{
-						range = sel.createRange();
-						range.collapse( true );
-
-						node = range.parentElement();
-					}
-					else
-					{
-						node = sel.anchorNode;
-
-						if ( node && node.nodeType != 1 )
-							node = node.parentNode;
+						}
+						else
+						{
+							node = range.startContainer;
+							if ( node.type != CKEDITOR.NODE_ELEMENT )
+								node = node.getParent();
+						}
+
+						node = node.$;
 					}
 			}
@@ -793,5 +966,5 @@
 			this._.cache.nativeSel = {};
 
-			this.isLocked = true;
+			this.isLocked = 1;
 
 			// Save this selection inside the DOM document.
@@ -813,5 +986,5 @@
 						ranges = !selectedElement && lockedSelection.getRanges();
 
-					this.isLocked = false;
+					this.isLocked = 0;
 					this.reset();
 
@@ -827,5 +1000,5 @@
 			if  ( !lockedSelection || !restore )
 			{
-				this.isLocked = false;
+				this.isLocked = 0;
 				this.reset();
 			}
@@ -837,4 +1010,8 @@
 		},
 
+		/**
+		 *  Make the current selection of type {@link CKEDITOR.SELECTION_ELEMENT} by enclosing the specified element.
+		 * @param element
+		 */
 		selectElement : function( element )
 		{
@@ -847,5 +1024,5 @@
 				this._.cache.selectedElement = element;
 				this._.cache.startElement = element;
-				this._.cache.ranges = [ range ];
+				this._.cache.ranges = new CKEDITOR.dom.rangeList( range );
 				this._.cache.type = CKEDITOR.SELECTION_ELEMENT;
 
@@ -864,5 +1041,5 @@
 					range.select();
 				}
-				catch(e)
+				catch( e )
 				{
 					// If failed, select it as a text range.
@@ -893,4 +1070,9 @@
 		},
 
+		/**
+		 *  Adding the specified ranges to document selection preceding
+		 * by clearing up the original selection.
+		 * @param {CKEDITOR.dom.range} ranges
+		 */
 		selectRanges : function( ranges )
 		{
@@ -898,6 +1080,6 @@
 			{
 				this._.cache.selectedElement = null;
-				this._.cache.startElement = ranges[ 0 ].getTouchedStartNode();
-				this._.cache.ranges = ranges;
+				this._.cache.startElement = ranges[ 0 ] && ranges[ 0 ].getTouchedStartNode();
+				this._.cache.ranges = new CKEDITOR.dom.rangeList( ranges );
 				this._.cache.type = CKEDITOR.SELECTION_TEXT;
 
@@ -907,6 +1089,12 @@
 			if ( CKEDITOR.env.ie )
 			{
-				// IE doesn't accept multiple ranges selection, so we just
-				// select the first one.
+				if ( ranges.length > 1 )
+				{
+					// IE doesn't accept multiple ranges selection, so we join all into one.
+					var last = ranges[ ranges.length -1 ] ;
+					ranges[ 0 ].setEnd( last.endContainer, last.endOffset );
+					ranges.length = 1;
+				}
+
 				if ( ranges[ 0 ] )
 					ranges[ 0 ].select();
@@ -917,8 +1105,33 @@
 			{
 				var sel = this.getNative();
-				sel.removeAllRanges();
+
+				if ( ranges.length )
+					sel.removeAllRanges();
 
 				for ( var i = 0 ; i < ranges.length ; i++ )
 				{
+					// Joining sequential ranges introduced by
+					// readonly elements protection.
+					if ( i < ranges.length -1 )
+					{
+						var left = ranges[ i ], right = ranges[ i +1 ],
+								between = left.clone();
+						between.setStart( left.endContainer, left.endOffset );
+						between.setEnd( right.startContainer, right.startOffset );
+
+						// Don't confused by Firefox adjancent multi-ranges
+						// introduced by table cells selection.
+						if ( !between.collapsed )
+						{
+							between.shrink( CKEDITOR.NODE_ELEMENT, true );
+							if ( between.getCommonAncestor().isReadOnly())
+							{
+								right.setStart( left.startContainer, left.startOffset );
+								ranges.splice( i--, 1 );
+								continue;
+							}
+						}
+					}
+
 					var range = ranges[ i ];
 					var nativeRange = this.document.$.createRange();
@@ -928,6 +1141,8 @@
 					// element, we must add something to it otherwise the caret
 					// will not be visible.
+					// In Opera instead, the selection will be moved out of the
+					// element. (#4657)
 					if ( range.collapsed &&
-						( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) &&
+						( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) ) &&
 						startContainer.type == CKEDITOR.NODE_ELEMENT &&
 						!startContainer.getChildCount() )
@@ -947,47 +1162,30 @@
 		},
 
+		/**
+		 *  Create bookmark for every single of this selection range (from #getRanges)
+		 * by calling the {@link CKEDITOR.dom.range.prototype.createBookmark} method,
+		 * with extra cares to avoid interferon among those ranges. Same arguments are
+		 * received as with the underlay range method.
+		 */
 		createBookmarks : function( serializable )
 		{
-			var retval = [],
-				ranges = this.getRanges(),
-				length = ranges.length,
-				bookmark;
-			for ( var i = 0; i < length ; i++ )
-			{
-			    retval.push( bookmark = ranges[ i ].createBookmark( serializable, true ) );
-
-				serializable = bookmark.serializable;
-
-				var bookmarkStart = serializable ? this.document.getById( bookmark.startNode ) : bookmark.startNode,
-					bookmarkEnd = serializable ? this.document.getById( bookmark.endNode ) : bookmark.endNode;
-
-			    // Updating the offset values for rest of ranges which have been mangled(#3256).
-			    for ( var j = i + 1 ; j < length ; j++ )
-			    {
-			        var dirtyRange = ranges[ j ],
-			               rangeStart = dirtyRange.startContainer,
-			               rangeEnd = dirtyRange.endContainer;
-
-			       rangeStart.equals( bookmarkStart.getParent() ) && dirtyRange.startOffset++;
-			       rangeStart.equals( bookmarkEnd.getParent() ) && dirtyRange.startOffset++;
-			       rangeEnd.equals( bookmarkStart.getParent() ) && dirtyRange.endOffset++;
-			       rangeEnd.equals( bookmarkEnd.getParent() ) && dirtyRange.endOffset++;
-			    }
-			}
-
-			return retval;
+			return this.getRanges().createBookmarks( serializable );
 		},
 
+		/**
+		 *  Create bookmark for every single of this selection range (from #getRanges)
+		 * by calling the {@link CKEDITOR.dom.range.prototype.createBookmark2} method,
+		 * with extra cares to avoid interferon among those ranges. Same arguments are
+		 * received as with the underlay range method.
+		 */
 		createBookmarks2 : function( normalized )
 		{
-			var bookmarks = [],
-				ranges = this.getRanges();
-
-			for ( var i = 0 ; i < ranges.length ; i++ )
-				bookmarks.push( ranges[i].createBookmark2( normalized ) );
-
-			return bookmarks;
+			return this.getRanges().createBookmarks2( normalized );
 		},
 
+		/**
+		 * Select the virtual ranges denote by the bookmarks by calling #selectRanges.
+		 * @param bookmarks
+		 */
 		selectBookmarks : function( bookmarks )
 		{
@@ -1003,4 +1201,7 @@
 		},
 
+		/**
+		 * Retrieve the common ancestor node of the first range and the last range.
+		 */
 		getCommonAncestor : function()
 		{
@@ -1011,5 +1212,7 @@
 		},
 
-		// Moving scroll bar to the current selection's start position.
+		/**
+		 * Moving scroll bar to the current selection's start position.
+		 */
 		scrollIntoView : function()
 		{
@@ -1021,149 +1224,150 @@
 	};
 })();
+
 ( function()
 {
-var notWhitespaces = CKEDITOR.dom.walker.whitespaces( true );
-var fillerTextRegex = /\ufeff|\u00a0/;
-var nonCells = { table:1,tbody:1,tr:1 };
-
-CKEDITOR.dom.range.prototype.select =
-	CKEDITOR.env.ie ?
-		// V2
-		function( forceExpand )
-		{
-			var collapsed = this.collapsed;
-			var isStartMarkerAlone;
-			var dummySpan;
-
-			// IE doesn't support selecting the entire table row/cell, move the selection into cells, e.g.
-			// <table><tbody><tr>[<td>cell</b></td>... => <table><tbody><tr><td>[cell</td>...
-			if ( this.startContainer.type == CKEDITOR.NODE_ELEMENT && this.startContainer.getName() in nonCells
-				|| this.endContainer.type == CKEDITOR.NODE_ELEMENT && this.endContainer.getName() in nonCells )
-			{
-				this.shrink( CKEDITOR.NODE_ELEMENT, true );
+	var notWhitespaces = CKEDITOR.dom.walker.whitespaces( true ),
+			fillerTextRegex = /\ufeff|\u00a0/,
+			nonCells = { table:1,tbody:1,tr:1 };
+
+	CKEDITOR.dom.range.prototype.select =
+		CKEDITOR.env.ie ?
+			// V2
+			function( forceExpand )
+			{
+				var collapsed = this.collapsed;
+				var isStartMarkerAlone;
+				var dummySpan;
+
+				// IE doesn't support selecting the entire table row/cell, move the selection into cells, e.g.
+				// <table><tbody><tr>[<td>cell</b></td>... => <table><tbody><tr><td>[cell</td>...
+				if ( this.startContainer.type == CKEDITOR.NODE_ELEMENT && this.startContainer.getName() in nonCells
+					|| this.endContainer.type == CKEDITOR.NODE_ELEMENT && this.endContainer.getName() in nonCells )
+				{
+					this.shrink( CKEDITOR.NODE_ELEMENT, true );
+				}
+
+				var bookmark = this.createBookmark();
+
+				// Create marker tags for the start and end boundaries.
+				var startNode = bookmark.startNode;
+
+				var endNode;
+				if ( !collapsed )
+					endNode = bookmark.endNode;
+
+				// Create the main range which will be used for the selection.
+				var ieRange = this.document.$.body.createTextRange();
+
+				// Position the range at the start boundary.
+				ieRange.moveToElementText( startNode.$ );
+				ieRange.moveStart( 'character', 1 );
+
+				if ( endNode )
+				{
+					// Create a tool range for the end.
+					var ieRangeEnd = this.document.$.body.createTextRange();
+
+					// Position the tool range at the end.
+					ieRangeEnd.moveToElementText( endNode.$ );
+
+					// Move the end boundary of the main range to match the tool range.
+					ieRange.setEndPoint( 'EndToEnd', ieRangeEnd );
+					ieRange.moveEnd( 'character', -1 );
+				}
+				else
+				{
+					// The isStartMarkerAlone logic comes from V2. It guarantees that the lines
+					// will expand and that the cursor will be blinking on the right place.
+					// Actually, we are using this flag just to avoid using this hack in all
+					// situations, but just on those needed.
+					var next = startNode.getNext( notWhitespaces );
+					isStartMarkerAlone = ( !( next && next.getText && next.getText().match( fillerTextRegex ) )     // already a filler there?
+										  && ( forceExpand || !startNode.hasPrevious() || ( startNode.getPrevious().is && startNode.getPrevious().is( 'br' ) ) ) );
+
+					// Append a temporary <span>&#65279;</span> before the selection.
+					// This is needed to avoid IE destroying selections inside empty
+					// inline elements, like <b></b> (#253).
+					// It is also needed when placing the selection right after an inline
+					// element to avoid the selection moving inside of it.
+					dummySpan = this.document.createElement( 'span' );
+					dummySpan.setHtml( '&#65279;' );	// Zero Width No-Break Space (U+FEFF). See #1359.
+					dummySpan.insertBefore( startNode );
+
+					if ( isStartMarkerAlone )
+					{
+						// To expand empty blocks or line spaces after <br>, we need
+						// instead to have any char, which will be later deleted using the
+						// selection.
+						// \ufeff = Zero Width No-Break Space (U+FEFF). (#1359)
+						this.document.createText( '\ufeff' ).insertBefore( startNode );
+					}
+				}
+
+				// Remove the markers (reset the position, because of the changes in the DOM tree).
+				this.setStartBefore( startNode );
+				startNode.remove();
+
+				if ( collapsed )
+				{
+					if ( isStartMarkerAlone )
+					{
+						// Move the selection start to include the temporary \ufeff.
+						ieRange.moveStart( 'character', -1 );
+
+						ieRange.select();
+
+						// Remove our temporary stuff.
+						this.document.$.selection.clear();
+					}
+					else
+						ieRange.select();
+
+					this.moveToPosition( dummySpan, CKEDITOR.POSITION_BEFORE_START );
+					dummySpan.remove();
+				}
+				else
+				{
+					this.setEndBefore( endNode );
+					endNode.remove();
+					ieRange.select();
+				}
+
+				this.document.fire( 'selectionchange' );
 			}
-
-			var bookmark = this.createBookmark();
-
-			// Create marker tags for the start and end boundaries.
-			var startNode = bookmark.startNode;
-
-			var endNode;
-			if ( !collapsed )
-				endNode = bookmark.endNode;
-
-			// Create the main range which will be used for the selection.
-			var ieRange = this.document.$.body.createTextRange();
-
-			// Position the range at the start boundary.
-			ieRange.moveToElementText( startNode.$ );
-			ieRange.moveStart( 'character', 1 );
-
-			if ( endNode )
-			{
-				// Create a tool range for the end.
-				var ieRangeEnd = this.document.$.body.createTextRange();
-
-				// Position the tool range at the end.
-				ieRangeEnd.moveToElementText( endNode.$ );
-
-				// Move the end boundary of the main range to match the tool range.
-				ieRange.setEndPoint( 'EndToEnd', ieRangeEnd );
-				ieRange.moveEnd( 'character', -1 );
-			}
-			else
-			{
-				// The isStartMarkerAlone logic comes from V2. It guarantees that the lines
-				// will expand and that the cursor will be blinking on the right place.
-				// Actually, we are using this flag just to avoid using this hack in all
-				// situations, but just on those needed.
-				var next = startNode.getNext( notWhitespaces );
-				isStartMarkerAlone = ( !( next && next.getText && next.getText().match( fillerTextRegex ) )     // already a filler there?
-									  && ( forceExpand || !startNode.hasPrevious() || ( startNode.getPrevious().is && startNode.getPrevious().is( 'br' ) ) ) );
-
-				// Append a temporary <span>&#65279;</span> before the selection.
-				// This is needed to avoid IE destroying selections inside empty
-				// inline elements, like <b></b> (#253).
-				// It is also needed when placing the selection right after an inline
-				// element to avoid the selection moving inside of it.
-				dummySpan = this.document.createElement( 'span' );
-				dummySpan.setHtml( '&#65279;' );	// Zero Width No-Break Space (U+FEFF). See #1359.
-				dummySpan.insertBefore( startNode );
-
-				if ( isStartMarkerAlone )
-				{
-					// To expand empty blocks or line spaces after <br>, we need
-					// instead to have any char, which will be later deleted using the
-					// selection.
-					// \ufeff = Zero Width No-Break Space (U+FEFF). (#1359)
-					this.document.createText( '\ufeff' ).insertBefore( startNode );
-				}
-			}
-
-			// Remove the markers (reset the position, because of the changes in the DOM tree).
-			this.setStartBefore( startNode );
-			startNode.remove();
-
-			if ( collapsed )
-			{
-				if ( isStartMarkerAlone )
-				{
-					// Move the selection start to include the temporary \ufeff.
-					ieRange.moveStart( 'character', -1 );
-
-					ieRange.select();
-
-					// Remove our temporary stuff.
-					this.document.$.selection.clear();
-				}
-				else
-					ieRange.select();
-
-				this.moveToPosition( dummySpan, CKEDITOR.POSITION_BEFORE_START );
-				dummySpan.remove();
-			}
-			else
-			{
-				this.setEndBefore( endNode );
-				endNode.remove();
-				ieRange.select();
-			}
-
-			this.document.fire( 'selectionchange' );
-		}
-	:
-		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 );
+		:
+			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 );
 				}
-				else
-					throw( e );
-			}
-
-			var selection = this.document.getSelection().getNative();
-			selection.removeAllRanges();
-			selection.addRange( nativeRange );
-		};
+				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();
+				selection.removeAllRanges();
+				selection.addRange( nativeRange );
+			};
 } )();
Index: /CKEditor/branches/features/adobeair/_source/plugins/showblocks/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/showblocks/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/showblocks/plugin.js	(revision 6006)
@@ -25,7 +25,8 @@
 		'{'+
 			'background-repeat: no-repeat;'+
+			'background-position: top %3;'+
 			'border: 1px dotted gray;'+
 			'padding-top: 8px;'+
-			'padding-left: 8px;'+
+			'padding-%3: 8px;'+
 		'}'+
 
@@ -85,5 +86,5 @@
 		'}';
 
-	var cssTemplateRegex = /%1/g, cssClassRegex = /%2/g;
+	var cssTemplateRegex = /%1/g, cssClassRegex = /%2/g, backgroundPositionRegex = /%3/g;
 
 	var commandDefinition =
@@ -119,5 +120,6 @@
 			editor.addCss( cssTemplate
 				.replace( cssTemplateRegex, 'background-image: url(' + CKEDITOR.getUrl( this.path ) + 'images/block_' )
-				.replace( cssClassRegex, 'cke_show_blocks ' ) );
+				.replace( cssClassRegex, 'cke_show_blocks ' )
+				.replace( backgroundPositionRegex, editor.lang.dir == 'rtl' ? 'right' : 'left' ) );
 
 			editor.ui.addButton( 'ShowBlocks',
@@ -152,3 +154,2 @@
  * config.startupOutlineBlocks = true;
  */
-CKEDITOR.config.startupOutlineBlocks = false;
Index: /CKEditor/branches/features/adobeair/_source/plugins/showborders/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/showborders/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/showborders/plugin.js	(revision 6006)
@@ -84,4 +84,12 @@
 						command.refresh( editor );
 				});
+
+			editor.on( 'removeFormatCleanup', function( evt )
+				{
+					var element = evt.data;
+					if ( editor.getCommand( 'showborders' ).state == CKEDITOR.TRISTATE_ON &&
+						element.is( 'table' ) && ( !element.hasAttribute( 'border' ) || parseInt( element.getAttribute( 'border' ), 10 ) <= 0 ) )
+							element.addClass( showBorderClassName );
+				});
 		},
 
@@ -154,4 +162,30 @@
 					};
 			} );
+
+			var advTab = dialogDefinition.getContents( 'advanced' ),
+				classField = advTab && advTab.get( 'advCSSClasses' );
+
+			if ( classField )
+			{
+				classField.setup = CKEDITOR.tools.override( classField.setup, function( originalSetup )
+					{
+						return function()
+							{
+								originalSetup.apply( this, arguments );
+								this.setValue( this.getValue().replace( /cke_show_border/, '' ) );
+							};
+					});
+
+				classField.commit = CKEDITOR.tools.override( classField.commit, function( originalCommit )
+					{
+						return function( data, element )
+							{
+								originalCommit.apply( this, arguments );
+
+								if ( !parseInt( element.getAttribute( 'border' ), 10 ) )
+									element.addClass( 'cke_show_border' );
+							};
+					});
+			}
 		}
 	});
Index: /CKEditor/branches/features/adobeair/_source/plugins/smiley/dialogs/smiley.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/smiley/dialogs/smiley.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/smiley/dialogs/smiley.js	(revision 6006)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -9,5 +9,5 @@
 		lang = editor.lang.smiley,
 		images = config.smiley_images,
-		columns = 8,
+		columns = config.smiley_columns || 8,
 		i;
 
@@ -22,7 +22,5 @@
 			targetName = target.getName();
 
-		if ( targetName == 'td' )
-			target = target.getChild( [ 0, 0 ] );
-		else if ( targetName == 'a' )
+		if ( targetName == 'a' )
 			target = target.getChild( 0 );
 		else if ( targetName != 'img' )
@@ -39,5 +37,7 @@
 					_cke_saved_src : src,
 					title : title,
-					alt : title
+					alt : title,
+					width : target.$.width,
+					height : target.$.height
 				}
 			});
@@ -55,6 +55,6 @@
 		var relative, nodeToMove;
 
-		var keystroke = ev.getKeystroke();
-		var rtl = editor.lang.dir == 'rtl';
+		var keystroke = ev.getKeystroke(),
+			rtl = editor.lang.dir == 'rtl';
 		switch ( keystroke )
 		{
@@ -134,5 +134,5 @@
 
 	// Build the HTML for the smiley images table.
-	var labelId = 'smiley_emtions_label' + CKEDITOR.tools.getNextNumber();
+	var labelId = CKEDITOR.tools.getNextId() + '_smiley_emtions_label';
 	var html =
 	[
@@ -152,11 +152,11 @@
 		var smileyLabelId = 'cke_smile_label_' + i + '_' + CKEDITOR.tools.getNextNumber();
 		html.push(
-			'<td class="cke_dark_background cke_hand cke_centered" style="vertical-align: middle;">' +
+			'<td class="cke_dark_background cke_centered" style="vertical-align: middle;">' +
 				'<a href="javascript:void(0)" role="option"',
 					' aria-posinset="' + ( i +1 ) + '"',
 					' aria-setsize="' + size + '"',
 					' aria-labelledby="' + smileyLabelId + '"',
-					' class="cke_smile" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ', onKeydown, ', event, this );">',
-					'<img class="hand" title="', config.smiley_descriptions[i], '"' +
+					' class="cke_smile cke_hand" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ', onKeydown, ', event, this );">',
+					'<img class="cke_hand" title="', config.smiley_descriptions[i], '"' +
 						' cke_src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '" alt="', config.smiley_descriptions[i], '"',
 						' src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '"',
Index: /CKEditor/branches/features/adobeair/_source/plugins/smiley/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/smiley/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/smiley/plugin.js	(revision 6006)
@@ -83,2 +83,12 @@
 		'yes', 'heart', 'broken heart', 'kiss', 'mail'
 	];
+
+/**
+ * The number of columns to be generated by the smilies matrix.
+ * @name CKEDITOR.config.smiley_columns
+ * @type Number
+ * @default 8
+ * @since 3.3.2
+ * @example
+ * config.smiley_columns = 6;
+ */
Index: /CKEditor/branches/features/adobeair/_source/plugins/sourcearea/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/sourcearea/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/sourcearea/plugin.js	(revision 6006)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -73,10 +73,10 @@
 								setTimeout( onResize, 0 );
 							}
-							else
-							{
-								// By some yet unknown reason, we must stop the
-								// mousedown propagation for the textarea,
-								// otherwise it's not possible to place the caret
-								// inside of it (non IE).
+							// As we prevent click to put focus on editor container,
+							// while 'mousedown' inside <textarea> is also captured,
+							// but we must stop the even propagation, otherwise
+							// it's not possible to place the caret inside of it (non IE and IE9).
+							if ( document.addEventListener )
+							{
 								textarea.on( 'mousedown', function( evt )
 									{
Index: /CKEditor/branches/features/adobeair/_source/plugins/specialchar/dialogs/specialchar.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/specialchar/dialogs/specialchar.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/specialchar/dialogs/specialchar.js	(revision 6006)
@@ -16,20 +16,23 @@
 	{
 		var selection = editor.getSelection(),
-			ranges	  = selection.getRanges(),
+			ranges = selection.getRanges( true ),
 			range, textNode;
 
 		editor.fire( 'saveSnapshot' );
 
-		for ( var i = 0, len = ranges.length ; i < len ; i++ )
+		for ( var i = ranges.length - 1; i >= 0 ; i-- )
 		{
 			range = ranges[ i ];
 			range.deleteContents();
 
-			textNode =  CKEDITOR.dom.element.createFromHtml( specialChar );
+			textNode = CKEDITOR.dom.element.createFromHtml( specialChar );
 			range.insertNode( textNode );
 		}
 
-		range.moveToPosition( textNode, CKEDITOR.POSITION_AFTER_END );
-		range.select();
+		if ( range )
+		{
+			range.moveToPosition( textNode, CKEDITOR.POSITION_AFTER_END );
+			range.select();
+		}
 
 		editor.fire( 'saveSnapshot' );
@@ -110,6 +113,6 @@
 		var element = ev.getTarget();
 		var relative, nodeToMove;
-		var keystroke = ev.getKeystroke();
-		var rtl = editor.lang.dir == 'rtl';
+		var keystroke = ev.getKeystroke(),
+			rtl = editor.lang.dir == 'rtl';
 
 		switch ( keystroke )
@@ -263,5 +266,5 @@
 				chars = this.definition.chars;
 
-			var charsTableLabel =  'specialchar_table_label' + CKEDITOR.tools.getNextNumber();
+			var charsTableLabel =  CKEDITOR.tools.getNextId() + '_specialchar_table_label';
 			var html = [ '<table role="listbox" aria-labelledby="' + charsTableLabel + '"' +
 						 			' style="width: 320px; height: 100%; border-collapse: separate;"' +
@@ -345,9 +348,9 @@
 								{
 									var firstChar = this.getElement().getElementsByTag( 'a' ).getItem( 0 );
-									setTimeout(function()
+									setTimeout( function()
 									{
 										firstChar.focus();
 										onFocus( null, firstChar );
-									});
+									}, 0 );
 								},
 								onShow : function()
@@ -358,5 +361,5 @@
 											firstChar.focus();
 											onFocus( null, firstChar );
-										});
+										}, 0 );
 								},
 								onLoad : function( event )
Index: /CKEditor/branches/features/adobeair/_source/plugins/styles/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/styles/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/styles/plugin.js	(revision 6006)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -61,5 +61,5 @@
 						// Save the current state, so it can be compared next
 						// time.
-						callback.state !== currentState;
+						callback.state = currentState;
 					}
 				}
@@ -67,5 +67,5 @@
 	}
 
-	// Save the callback info, so it can be checked on the next occurence of
+	// Save the callback info, so it can be checked on the next occurrence of
 	// selectionChange.
 	styleStateChangeCallbacks.push( { style : style, fn : callback } );
@@ -138,4 +138,6 @@
 						this.type == CKEDITOR.STYLE_INLINE ?
 							removeInlineStyle
+						: this.type == CKEDITOR.STYLE_OBJECT ?
+							removeObjectStyle
 						: null ).call( this, range );
 		},
@@ -181,4 +183,8 @@
 		},
 
+		/**
+		 * Whether this style can be applied at the element path.
+ 		 * @param elementPath
+		 */
 		checkApplicable : function( elementPath )
 		{
@@ -223,4 +229,6 @@
 
 						var elementAttr = element.getAttribute( attName ) || '';
+
+						// Special treatment for 'style' attribute is required.
 						if ( attName == 'style' ?
 							compareCssText( attribs[ attName ], normalizeCssText( elementAttr, false ) )
@@ -371,7 +379,4 @@
 		var dtd = CKEDITOR.dtd[ elementName ] || ( isUnknownElement = true, CKEDITOR.dtd.span );
 
-		// Bookmark the range so we can re-select it after processing.
-		var bookmark = range.createBookmark();
-
 		// Expand the range.
 		range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
@@ -402,5 +407,5 @@
 				var nodeName = nodeType == CKEDITOR.NODE_ELEMENT ? currentNode.getName() : null;
 
-				if ( nodeName && currentNode.getAttribute( '_fck_bookmark' ) )
+				if ( nodeName && currentNode.getAttribute( '_cke_bookmark' ) )
 				{
 					currentNode = currentNode.getNextSourceNode( true );
@@ -474,8 +479,20 @@
 			{
 				// Build the style element, based on the style object definition.
-				var styleNode = getElement( this, document );
+				var styleNode = getElement( this, document ),
+					styleHasAttrs = styleNode.hasAttributes();
 
 				// Get the element that holds the entire range.
 				var parent = styleRange.getCommonAncestor();
+
+				var removeList = {
+					styles : {},
+					attrs : {},
+					// Styles cannot be removed.
+					blockedStyles : {},
+					// Attrs cannot be removed.
+					blockedAttrs : {}
+				};
+
+				var attName, styleName, value;
 
 				// Loop through the parents, removing the redundant attributes
@@ -485,20 +502,24 @@
 					if ( parent.getName() == elementName )
 					{
-						for ( var attName in def.attributes )
+						for ( attName in def.attributes )
 						{
-							if ( styleNode.getAttribute( attName ) == parent.getAttribute( attName ) )
-								styleNode.removeAttribute( attName );
+							if ( removeList.blockedAttrs[ attName ] || !( value = parent.getAttribute( styleName ) ) )
+								continue;
+
+							if ( styleNode.getAttribute( attName ) == value )
+								removeList.attrs[ attName ] = 1;
+							else
+								removeList.blockedAttrs[ attName ] = 1;
 						}
 
-						for ( var styleName in def.styles )
+						for ( styleName in def.styles )
 						{
-							if ( styleNode.getStyle( styleName ) == parent.getStyle( styleName ) )
-								styleNode.removeStyle( styleName );
-						}
-
-						if ( !styleNode.hasAttributes() )
-						{
-							styleNode = null;
-							break;
+							if ( removeList.blockedStyles[ styleName ] || !( value = parent.getStyle( styleName ) ) )
+								continue;
+
+							if ( styleNode.getStyle( styleName ) == value )
+								removeList.styles[ styleName ] = 1;
+							else
+								removeList.blockedStyles[ styleName ] = 1;
 						}
 					}
@@ -506,4 +527,13 @@
 					parent = parent.getParent();
 				}
+
+				for ( attName in removeList.attrs )
+					styleNode.removeAttribute( attName );
+
+				for ( styleName in removeList.styles )
+					styleNode.removeStyle( styleName );
+
+				if ( styleHasAttrs && !styleNode.hasAttributes() )
+					styleNode = null;
 
 				if ( styleNode )
@@ -532,4 +562,13 @@
 						styleNode.$.normalize();
 				}
+				// Style already inherit from parents, left just to clear up any internal overrides. (#5931)
+				else
+				{
+					styleNode = new CKEDITOR.dom.element( 'span' );
+					styleRange.extractContents().appendTo( styleNode );
+					styleRange.insertNode( styleNode );
+					removeFromInsideElement( this, styleNode );
+					styleNode.remove( true );
+				}
 
 				// Style applied, let's release the range, so it gets
@@ -539,7 +578,7 @@
 		}
 
-		firstNode.remove();
-		lastNode.remove();
-		range.moveToBookmark( bookmark );
+		// Remove the bookmark nodes.
+		range.moveToBookmark( boundaryNodes );
+
 		// Minimize the result range to exclude empty text nodes. (#5374)
 		range.shrink( CKEDITOR.SHRINK_TEXT );
@@ -580,10 +619,12 @@
 				if ( this.checkElementRemovable( element ) )
 				{
-					var endOfElement = range.checkBoundaryOfElement( element, CKEDITOR.END ),
-							startOfElement = !endOfElement && range.checkBoundaryOfElement( element, CKEDITOR.START );
-					if ( startOfElement || endOfElement )
+					var isStart;
+
+					if ( range.collapsed && (
+						 range.checkBoundaryOfElement( element, CKEDITOR.END ) ||
+						 ( isStart = range.checkBoundaryOfElement( element, CKEDITOR.START ) ) ) )
 					{
 						boundaryElement = element;
-						boundaryElement.match = startOfElement ? 'start' : 'end';
+						boundaryElement.match = isStart ? 'start' : 'end';
 					}
 					else
@@ -715,4 +756,39 @@
 	}
 
+	function removeObjectStyle( range )
+	{
+		var root = range.getCommonAncestor( true, true ),
+				element = root.getAscendant( this.element, true );
+
+		if ( !element )
+			return;
+
+		var style = this;
+		var def = style._.definition;
+		var attributes = def.attributes;
+		var styles = CKEDITOR.style.getStyleText( def );
+
+		// Remove all defined attributes.
+		if ( attributes )
+		{
+			for ( var att in attributes )
+			{
+				element.removeAttribute( att, attributes[ att ] );
+			}
+		}
+
+		// Assign all defined styles.
+		if ( def.styles )
+		{
+			for ( var i in def.styles )
+			{
+				if ( !def.styles.hasOwnProperty( i ) )
+					continue;
+
+				element.removeStyle( i );
+			}
+		}
+	}
+
 	function applyBlockStyle( range )
 	{
@@ -734,5 +810,5 @@
 		while ( ( block = iterator.getNextParagraph() ) )		// Only one =
 		{
-			var newBlock = getElement( this, doc );
+			var newBlock = getElement( this, doc, block );
 			replaceBlock( block, newBlock );
 		}
@@ -769,4 +845,5 @@
 	}
 
+	var nonWhitespaces = CKEDITOR.dom.walker.whitespaces( true );
 	/**
 	 * Merge a <pre> block with a previous sibling if available.
@@ -775,5 +852,5 @@
 	{
 		var previousBlock;
-		if ( !( ( previousBlock = preBlock.getPreviousSourceNode( true, CKEDITOR.NODE_ELEMENT ) )
+		if ( !( ( previousBlock = preBlock.getPrevious( nonWhitespaces ) )
 				 && previousBlock.is
 				 && previousBlock.is( 'pre') ) )
@@ -807,5 +884,5 @@
 		// Exclude the ones at header OR at tail,
 		// and ignore bookmark content between them.
-		var duoBrRegex = /(\S\s*)\n(?:\s|(<span[^>]+_fck_bookmark.*?\/span>))*\n(?!$)/gi,
+		var duoBrRegex = /(\S\s*)\n(?:\s|(<span[^>]+_cke_bookmark.*?\/span>))*\n(?!$)/gi,
 			blockName = preBlock.getName(),
 			splitedHtml = replace( preBlock.getOuterHtml(),
@@ -829,5 +906,5 @@
 			tailBookmark = '';
 
-		str = str.replace( /(^<span[^>]+_fck_bookmark.*?\/span>)|(<span[^>]+_fck_bookmark.*?\/span>$)/gi,
+		str = str.replace( /(^<span[^>]+_cke_bookmark.*?\/span>)|(<span[^>]+_cke_bookmark.*?\/span>$)/gi,
 			function( str, m1, m2 ){
 					m1 && ( headBookmark = m1 );
@@ -1041,5 +1118,5 @@
 	}
 
-	function getElement( style, targetDocument )
+	function getElement( style, targetDocument, element )
 	{
 		var el;
@@ -1056,4 +1133,8 @@
 		el = new CKEDITOR.dom.element( elementName, targetDocument );
 
+		// #6226: attributes should be copied before the new ones are applied
+		if ( element )
+			element.copyAttributes( el );
+
 		return setupElement( el, style );
 	}
@@ -1075,5 +1156,5 @@
 
 		// Assign all defined styles.
-		if ( styles )
+		if( styles )
 			el.setAttribute( 'style', styles );
 
@@ -1199,4 +1280,5 @@
 	}
 
+	// Make the comparison of attribute value easier by standardizing it.
 	function normalizeProperty( name, value, isStyle )
 	{
@@ -1206,4 +1288,5 @@
 	}
 
+	// Make the comparison of style text easier by standardizing it.
 	function normalizeCssText( unparsedCssText, nativeNormalize )
 	{
@@ -1224,5 +1307,9 @@
 		return styleText.replace( /\s*([;:])\s*/, '$1' )
 							 .replace( /([^\s;])$/, '$1;')
-							 .replace( /,\s+/g, ',' ) // Trimming spaces after comma (e.g. font-family name)(#4107).
+				 			// Trimming spaces after comma(#4107),
+				 			// remove quotations(#6403),
+				 			// mostly for differences on "font-family".
+							 .replace( /,\s+/g, ',' )
+							 .replace( /\"/g,'' )
 							 .toLowerCase();
 	}
@@ -1241,4 +1328,10 @@
 	}
 
+	/**
+	 * Compare two bunch of styles, with the speciality that value 'inherit'
+	 * is treated as a wildcard which will match any value.
+	 * @param {Object|String} source
+	 * @param {Object|String} target
+	 */
 	function compareCssText( source, target )
 	{
@@ -1247,6 +1340,4 @@
 		for( var name in source )
 		{
-			// Value 'inherit'  is treated as a wildcard,
-			// which will match any value.
 			if ( !( name in target &&
 					( target[ name ] == source[ name ]
@@ -1262,14 +1353,13 @@
 	function applyStyle( document, remove )
 	{
-		// Get all ranges from the selection.
-		var selection = document.getSelection();
-		var ranges = selection.getRanges();
-		var func = remove ? this.removeFromRange : this.applyToRange;
-
-		// Apply the style to the ranges.
-		for ( var i = 0 ; i < ranges.length ; i++ )
-			func.call( this, ranges[ i ] );
-
-		// Select the ranges again.
+		var selection = document.getSelection(),
+			ranges = selection.getRanges( true ),
+			func = remove ? this.removeFromRange : this.applyToRange,
+			range;
+
+		var iterator = ranges.createIterator();
+		while ( ( range = iterator.getNextRange() ) )
+			func.call( this, range );
+
 		selection.selectRanges( ranges );
 	}
Index: /CKEditor/branches/features/adobeair/_source/plugins/stylescombo/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/stylescombo/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/stylescombo/plugin.js	(revision 6006)
@@ -27,5 +27,5 @@
 
 						// Put all styles into an Array.
-						for ( var i = 0 ; i < stylesDefinitions.length ; i++ )
+						for ( var i = 0, count = stylesDefinitions.length ; i < count ; i++ )
 						{
 							var styleDefinition = stylesDefinitions[ i ];
@@ -72,5 +72,5 @@
 								// combo.
 								var lastType;
-								for ( var i = 0 ; i < stylesList.length ; i++ )
+								for ( var i = 0, count = stylesList.length ; i < count ; i++ )
 								{
 									style = stylesList[ i ];
@@ -109,4 +109,6 @@
 						if ( style.type == CKEDITOR.STYLE_INLINE && style.checkActive( elementPath ) )
 							style.remove( editor.document );
+						else if ( style.type == CKEDITOR.STYLE_OBJECT && style.checkActive( elementPath ) )
+							style.remove( editor.document );
 						else
 							style.apply( editor.document );
@@ -125,5 +127,5 @@
 
 								// For each element into the elements path.
-								for ( var i = 0, element ; i < elements.length ; i++ )
+								for ( var i = 0, count = elements.length, element ; i < count ; i++ )
 								{
 									element = elements[i];
@@ -153,7 +155,6 @@
 							editor.focus();
 
-						var selection = editor.getSelection();
-
-						var element = selection.getSelectedElement(),
+						var selection = editor.getSelection(),
+							element = selection.getSelectedElement(),
 							elementPath = new CKEDITOR.dom.elementPath( element || selection.getStartElement() );
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/tab/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/tab/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/tab/plugin.js	(revision 6006)
@@ -28,4 +28,76 @@
 		};
 
+	function selectNextCellCommand( backward )
+	{
+		return {
+			editorFocus : false,
+			canUndo : false,
+			modes : { wysiwyg : 1 },
+			exec : function( editor )
+			{
+				if ( editor.focusManager.hasFocus )
+				{
+					var sel = editor.getSelection(),
+						ancestor = sel.getCommonAncestor(),
+						cell;
+
+					if ( ( cell = ( ancestor.getAscendant( 'td', true ) || ancestor.getAscendant( 'th', true ) ) ) )
+					{
+						var resultRange = new CKEDITOR.dom.range( editor.document ),
+								next = CKEDITOR.tools.tryThese( function()
+								{
+									var row = cell.getParent(),
+											next = row.$.cells[ cell.$.cellIndex + ( backward ? - 1 : 1 ) ];
+
+									// Invalid any empty value.
+									next.parentNode.parentNode;
+									return next;
+								},
+								function()
+								{
+									var row = cell.getParent(),
+											table = row.getAscendant( 'table' ),
+											nextRow = table.$.rows[ row.$.rowIndex + ( backward ? - 1 : 1 ) ];
+
+									return nextRow.cells[ backward? nextRow.cells.length -1 : 0 ];
+								});
+
+						// Clone one more row at the end of table and select the first newly established cell.
+						if ( ! ( next || backward ) )
+						{
+							var table = cell.getAscendant( 'table' ).$,
+									cells = cell.getParent().$.cells;
+
+							var newRow = new CKEDITOR.dom.element( table.insertRow( -1 ), editor.document );
+
+							for ( var i = 0, count = cells.length ; i < count; i++ )
+							{
+								var newCell = newRow.append( new CKEDITOR.dom.element(
+										cells[ i ], editor.document ).clone( false, false ) );
+								!CKEDITOR.env.ie && newCell.appendBogus();
+							}
+
+							resultRange.moveToElementEditStart( newRow );
+						}
+						else if ( next )
+						{
+							next = new CKEDITOR.dom.element( next );
+							resultRange.moveToElementEditStart( next );
+							// Avoid selecting empty block makes the cursor blind.
+							if ( !( resultRange.checkStartOfBlock() && resultRange.checkEndOfBlock() ) )
+								resultRange.selectNodeContents( next );
+						}
+						else
+							return true;
+
+						resultRange.select( true );
+						return true;
+					}
+				}
+				return false;
+			}
+		};
+	}
+
 	CKEDITOR.plugins.add( 'tab',
 	{
@@ -34,5 +106,6 @@
 		init : function( editor )
 		{
-			var tabSpaces = editor.config.tabSpaces || 0,
+			var tabTools = editor.config.enableTabKeyTools !== false,
+				tabSpaces = editor.config.tabSpaces || 0,
 				tabText = '';
 
@@ -52,4 +125,14 @@
 			}
 
+			if ( tabTools )
+			{
+				editor.on( 'key', function( ev )
+				{
+					if ( ev.data.keyCode == 9 && editor.execCommand( 'selectNextCell' ) ||	// TAB
+							ev.data.keyCode == ( CKEDITOR.SHIFT + 9 ) && editor.execCommand( 'selectPreviousCell' ) )	// SHIFT+TAB
+						ev.cancel();
+				});
+			}
+
 			if ( CKEDITOR.env.webkit || CKEDITOR.env.gecko )
 			{
@@ -74,4 +157,6 @@
 			editor.addCommand( 'blur', CKEDITOR.tools.extend( blurCommand, meta ) );
 			editor.addCommand( 'blurBack', CKEDITOR.tools.extend( blurBackCommand, meta ) );
+			editor.addCommand( 'selectNextCell', selectNextCellCommand() );
+			editor.addCommand( 'selectPreviousCell', selectNextCellCommand( true ) );
 		}
 	});
@@ -260,2 +345,23 @@
  * config.tabSpaces = 4;
  */
+
+/**
+ * Allow context-sensitive tab key behaviors, including the following scenarios:
+ * <h5>When selection is anchored inside <b>table cells</b>:</h5>
+ * <ul>
+ * 		<li>If TAB is pressed, select the contents of the "next" cell. If in the last cell in the table, add a new row to it and focus its first cell.</li>
+ * 		<li>If SHIFT+TAB is pressed, select the contents of the "previous" cell. Do nothing when it's in the first cell.</li>
+ * </ul>
+ * @name CKEDITOR.config.enableTabKeyTools
+ * @type Boolean
+ * @default true
+ * @example
+ * config.enableTabKeyTools = false;
+ */
+
+// If the TAB key is not supposed to be enabled for navigation, the following
+// settings could be used alternatively:
+// config.keystrokes.push(
+//	[ CKEDITOR.ALT + 38 /*Arrow Up*/, 'selectPreviousCell' ],
+//	[ CKEDITOR.ALT + 40 /*Arrow Down*/, 'selectNextCell' ]
+// );
Index: /CKEditor/branches/features/adobeair/_source/plugins/table/dialogs/table.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/table/dialogs/table.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/table/dialogs/table.js	(revision 6006)
@@ -19,5 +19,10 @@
 	function tableDialog( editor, command )
 	{
-		var makeElement = function( name ){ return new CKEDITOR.dom.element( name, editor.document ); };
+		var makeElement = function( name )
+			{
+				return new CKEDITOR.dom.element( name, editor.document );
+			};
+
+		var dialogadvtab = editor.plugins.dialogadvtab;
 
 		return {
@@ -25,4 +30,40 @@
 			minWidth : 310,
 			minHeight : CKEDITOR.env.ie ? 310 : 280,
+
+			onLoad : function()
+			{
+				var dialog = this;
+
+				var styles = dialog.getContentElement( 'advanced', 'advStyles' );
+
+				if ( styles )
+				{
+					styles.on( 'change', function( evt )
+						{
+							// Synchronize width value.
+							var width = this.getStyle( 'width', '' ),
+								txtWidth = dialog.getContentElement( 'info', 'txtWidth' ),
+								cmbWidthType = dialog.getContentElement( 'info', 'cmbWidthType' ),
+								isPx = 1;
+
+							if ( width )
+							{
+								isPx = ( width.length < 3 || width.substr( width.length - 1 ) != '%' );
+								width = parseInt( width, 10 );
+							}
+
+							txtWidth && txtWidth.setValue( width, true );
+							cmbWidthType && cmbWidthType.setValue( isPx ? 'pixels' : 'percents', true );
+
+							// Synchronize height value.
+							var height = this.getStyle( 'height', '' ),
+								txtHeight = dialog.getContentElement( 'info', 'txtHeight' );
+
+							height && ( height = parseInt( height, 10 ) );
+							txtHeight && txtHeight.setValue( height, true );
+						});
+				}
+			},
+
 			onShow : function()
 			{
@@ -34,12 +75,11 @@
 				var rowsInput = this.getContentElement( 'info', 'txtRows' ),
 					colsInput = this.getContentElement( 'info', 'txtCols' ),
-					widthInput = this.getContentElement( 'info', 'txtWidth' );
+					widthInput = this.getContentElement( 'info', 'txtWidth' ),
+					heightInput = this.getContentElement( 'info', 'txtHeight' );
+
 				if ( command == 'tableProperties' )
 				{
-					if ( ( selectedTable = editor.getSelection().getSelectedElement() ) )
-					{
-						if ( selectedTable.getName() != 'table' )
-							selectedTable = null;
-					}
+					if ( ( selectedTable = selection.getSelectedElement() ) )
+						selectedTable = selectedTable.getAscendant( 'table', true );
 					else if ( ranges.length > 0 )
 					{
@@ -57,5 +97,5 @@
 				}
 
-				// Enable, disable and select the row, cols, width fields.
+				// Enable or disable the row, cols, width fields.
 				if ( selectedTable )
 				{
@@ -63,5 +103,4 @@
 					rowsInput && rowsInput.disable();
 					colsInput && colsInput.disable();
-					widthInput && widthInput.select();
 				}
 				else
@@ -69,6 +108,10 @@
 					rowsInput && rowsInput.enable();
 					colsInput && colsInput.enable();
-					rowsInput && rowsInput.select();
 				}
+
+				// Call the onChange method for the widht and height fields so
+				// they get reflected into the Advanced tab.
+				widthInput && widthInput.onChange();
+				heightInput && heightInput.onChange();
 			},
 			onOk : function()
@@ -77,5 +120,5 @@
 				{
 					var selection = editor.getSelection(),
-						bms = editor.getSelection().createBookmarks();
+						bms = selection.createBookmarks();
 				}
 
@@ -124,5 +167,6 @@
 						{
 							var th = theRow.getChild( i );
-							if ( th.type == CKEDITOR.NODE_ELEMENT )
+							// Skip bookmark nodes. (#6155)
+							if ( th.type == CKEDITOR.NODE_ELEMENT && !th.hasAttribute( '_cke_bookmark' ) )
 							{
 								th.renameNode( 'th' );
@@ -233,4 +277,5 @@
 											'default' : 3,
 											label : editor.lang.table.rows,
+											required : true,
 											style : 'width:5em',
 											validate : function()
@@ -258,4 +303,5 @@
 											'default' : 2,
 											label : editor.lang.table.columns,
+											required : true,
 											style : 'width:5em',
 											validate : function()
@@ -379,5 +425,5 @@
 													style : 'width:5em',
 													label : editor.lang.table.width,
-													'default' : 200,
+													'default' : 500,
 													validate : CKEDITOR.dialog.validate['number']( editor.lang.table.invalidWidth ),
 
@@ -391,4 +437,19 @@
 
 														inputElement.setAttribute( 'aria-labelledby', [ ariaLabelledByAttr, labelElement.$.id ].join( ' ' ) );
+													},
+
+													onChange : function()
+													{
+														var styles = this.getDialog().getContentElement( 'advanced', 'advStyles' );
+
+														if ( styles )
+														{
+															var value = this.getValue();
+
+															if ( value )
+																value += this.getDialog().getContentElement( 'info', 'cmbWidthType' ).getValue() == 'percents' ? '%' : 'px';
+
+															styles.updateStyle( 'width', value );
+														}
 													},
 
@@ -420,4 +481,8 @@
 															this.setValue( widthMatch[2] == 'px' ? 'pixels' : 'percents' );
 													},
+													onChange : function()
+													{
+														this.getDialog().getContentElement( 'info', 'txtWidth' ).onChange();
+													},
 													commit : commitValue
 												}
@@ -446,4 +511,15 @@
 
 														inputElement.setAttribute( 'aria-labelledby', [ ariaLabelledByAttr, labelElement.$.id ].join( ' ' ) );
+													},
+
+													onChange : function()
+													{
+														var styles = this.getDialog().getContentElement( 'advanced', 'advStyles' );
+
+														if ( styles )
+														{
+															var value = this.getValue();
+															styles.updateStyle( 'height', value && ( value + 'px' ) );
+														}
 													},
 
@@ -529,6 +605,5 @@
 										{
 											var caption = nodeList.getItem( 0 );
-											caption = ( caption.getChild( 0 ) && caption.getChild( 0 ).getText() ) || '';
-											caption = CKEDITOR.tools.trim( caption );
+											caption = CKEDITOR.tools.trim( caption.getText() );
 											this.setValue( caption );
 										}
@@ -581,5 +656,6 @@
 						}
 					]
-				}
+				},
+				dialogadvtab && dialogadvtab.createAdvancedTab( editor )
 			]
 		};
Index: /CKEditor/branches/features/adobeair/_source/plugins/table/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/table/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/table/plugin.js	(revision 6006)
@@ -59,8 +59,8 @@
 			editor.contextMenu.addListener( function( element, selection )
 				{
-					if ( !element )
+					if ( !element || element.isReadOnly() )
 						return null;
 
-					var isTable	= element.is( 'table' ) || element.hasAscendant( 'table' );
+					var isTable = element.hasAscendant( 'table', 1 );
 
 					if ( isTable )
Index: /CKEditor/branches/features/adobeair/_source/plugins/tableresize/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/tableresize/plugin.js	(revision 6006)
+++ /CKEditor/branches/features/adobeair/_source/plugins/tableresize/plugin.js	(revision 6006)
@@ -0,0 +1,450 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function()
+{
+	var pxUnit = CKEDITOR.tools.cssLength,
+		needsIEHacks = CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks || CKEDITOR.env.version < 7 );
+
+	function getWidth( el )
+	{
+		return CKEDITOR.env.ie ? el.$.clientWidth : parseInt( el.getComputedStyle( 'width' ), 10 );
+	}
+
+	function getBorderWidth( element, side )
+	{
+		var computed = element.getComputedStyle( 'border-' + side + '-width' ),
+			borderMap =
+			{
+				thin: '0px',
+				medium: '1px',
+				thick: '2px'
+			};
+
+		if ( computed.indexOf( 'px' ) < 0 )
+		{
+			// look up keywords
+			if ( computed in borderMap && element.getComputedStyle( 'border-style' ) != 'none' )
+				computed = borderMap[ computed ];
+			else
+				computed = 0;
+		}
+
+		return parseInt( computed, 10 );
+	}
+
+	// Gets the table row that contains the most columns.
+	function getMasterPillarRow( table )
+	{
+		var $rows = table.$.rows,
+			maxCells = 0, cellsCount,
+			$elected, $tr;
+
+		for ( var i = 0, len = $rows.length ; i < len; i++ )
+		{
+			$tr = $rows[ i ];
+			cellsCount = $tr.cells.length;
+
+			if ( cellsCount > maxCells )
+			{
+				maxCells = cellsCount;
+				$elected = $tr;
+			}
+		}
+
+		return $elected;
+	}
+
+	function buildTableColumnPillars( table )
+	{
+		var pillars = [],
+			pillarIndex = -1,
+			rtl = ( table.getComputedStyle( 'direction' ) == 'rtl' );
+
+		// Get the raw row element that cointains the most columns.
+		var $tr = getMasterPillarRow( table );
+
+		// Get the tbody element and position, which will be used to set the
+		// top and bottom boundaries.
+		var tbody = new CKEDITOR.dom.element( table.$.tBodies[ 0 ] ),
+			tbodyPosition = tbody.getDocumentPosition();
+
+		// Loop thorugh all cells, building pillars after each one of them.
+		for ( var i = 0, len = $tr.cells.length ; i < len ; i++ )
+		{
+			// Both the current cell and the successive one will be used in the
+			// pillar size calculation.
+			var td = new CKEDITOR.dom.element( $tr.cells[ i ] ),
+				nextTd = $tr.cells[ i + 1 ] && new CKEDITOR.dom.element( $tr.cells[ i + 1 ] );
+
+			pillarIndex += td.$.colSpan || 1;
+
+			// Calculate the pillar boundary positions.
+			var pillarLeft, pillarRight, pillarWidth, pillarPadding;
+
+			var x = td.getDocumentPosition().x;
+
+			// Calculate positions based on the current cell.
+			rtl ?
+				pillarRight = x + getBorderWidth( td, 'left' ) :
+				pillarLeft  = x + td.$.offsetWidth - getBorderWidth( td, 'right' );
+
+			// Calculate positions based on the next cell, if available.
+			if ( nextTd )
+			{
+				x =  nextTd.getDocumentPosition().x;
+
+				rtl ?
+					pillarLeft	= x + nextTd.$.offsetWidth - getBorderWidth( nextTd, 'right' ) :
+					pillarRight	= x + getBorderWidth( nextTd, 'left' );
+			}
+			// Otherwise calculate positions based on the table (for last cell).
+			else
+			{
+				x =  table.getDocumentPosition().x;
+
+				rtl ?
+					pillarLeft	= x :
+					pillarRight	= x + table.$.offsetWidth;
+			}
+
+			pillarWidth = Math.max( pillarRight - pillarLeft, 3 );
+
+			// Make the pillar touch area at least 14 pixels wide, for easy to use.
+			pillarPadding = Math.max( Math.round( 7 - ( pillarWidth / 2 ) ), 0 );
+
+			// The pillar should reflects exactly the shape of the hovered
+			// column border line.
+			pillars.push( {
+				table : table,
+				index : pillarIndex,
+				x : pillarLeft,
+				y : tbodyPosition.y,
+				width : pillarWidth,
+				height: tbody.$.offsetHeight,
+				padding : pillarPadding,
+				rtl : rtl } );
+		}
+
+		return pillars;
+	}
+
+	function getPillarAtPosition( pillars, positionX )
+	{
+		for ( var i = 0, len = pillars.length ; i < len ; i++ )
+		{
+			var pillar = pillars[ i ],
+				pad = pillar.padding;
+
+			if ( positionX >= pillar.x - pad && positionX <= ( pillar.x + pillar.width + pad ) )
+				return pillar;
+		}
+
+		return null;
+	}
+
+	function cancel( evt )
+	{
+		( evt.data || evt ).preventDefault();
+	}
+
+	function columnResizer( editor )
+	{
+		var pillar,
+			document,
+			resizer,
+			isResizing,
+			startOffset,
+			currentShift;
+
+		var leftSideCells, rightSideCells, leftShiftBoundary, rightShiftBoundary;
+
+		function detach()
+		{
+			pillar = null;
+			currentShift = 0;
+			isResizing = 0;
+
+			document.removeListener( 'mouseup', onMouseUp );
+			resizer.removeListener( 'mousedown', onMouseDown );
+			resizer.removeListener( 'mousemove', onMouseMove );
+
+			document.getBody().setStyle( 'cursor', 'auto' );
+
+			// Hide the resizer (remove it on IE7 - #5890).
+			needsIEHacks ? resizer.remove() : resizer.hide();
+		}
+
+		function resizeStart()
+		{
+			// Before starting to resize, figure out which cells to change
+			// and the boundaries of this resizing shift.
+
+			var columnIndex = pillar.index,
+				map = CKEDITOR.tools.buildTableMap( pillar.table ),
+				leftColumnCells = [],
+				rightColumnCells = [],
+				leftMinSize = Number.MAX_VALUE,
+				rightMinSize = leftMinSize,
+				rtl = pillar.rtl;
+
+			for ( var i = 0, len = map.length ; i < len ; i++ )
+			{
+				var row			= map[ i ],
+					leftCell	= row[ columnIndex + ( rtl ? 1 : 0 ) ],
+					rightCell	= row[ columnIndex + ( rtl ? 0 : 1 ) ];
+
+				leftCell	= leftCell && new CKEDITOR.dom.element( leftCell );
+				rightCell	= rightCell && new CKEDITOR.dom.element( rightCell );
+
+				if ( !leftCell || !rightCell || !leftCell.equals( rightCell ) )
+				{
+					leftCell && ( leftMinSize = Math.min( leftMinSize, getWidth( leftCell ) ) );
+					rightCell && ( rightMinSize = Math.min( rightMinSize, getWidth( rightCell ) ) );
+
+					leftColumnCells.push( leftCell );
+					rightColumnCells.push( rightCell );
+				}
+			}
+
+			// Cache the list of cells to be resized.
+			leftSideCells = leftColumnCells;
+			rightSideCells = rightColumnCells;
+
+			// Cache the resize limit boundaries.
+			leftShiftBoundary =  pillar.x - leftMinSize;
+			rightShiftBoundary = pillar.x + rightMinSize;
+
+			resizer.setOpacity( 0.5 );
+			startOffset = parseInt( resizer.getStyle( 'left' ), 10 );
+			currentShift = 0;
+			isResizing = 1;
+
+			resizer.on( 'mousemove', onMouseMove );
+
+			// Prevent the native drag behavior otherwise 'mousemove' won't fire.
+			document.on( 'dragstart', cancel );
+		}
+
+		function resizeEnd()
+		{
+			isResizing = 0;
+
+			resizer.setOpacity( 0 );
+
+			currentShift && resizeColumn();
+
+			var table = pillar.table;
+			setTimeout( function () { table.removeCustomData( '_cke_table_pillars' ); }, 0 );
+
+			document.removeListener( 'dragstart', cancel );
+		}
+
+		function resizeColumn()
+		{
+			var rtl = pillar.rtl,
+				cellsCount = rtl ? rightSideCells.length : leftSideCells.length;
+
+			// Perform the actual resize to table cells, only for those by side of the pillar.
+			for ( var i = 0 ; i < cellsCount ; i++ )
+			{
+				var leftCell = leftSideCells[ i ],
+					rightCell = rightSideCells[ i ],
+					table = pillar.table;
+
+				// Defer the resizing to avoid any interference among cells.
+				CKEDITOR.tools.setTimeout(
+					function( leftCell, leftOldWidth, rightCell, rightOldWidth, tableWidth, sizeShift )
+					{
+						leftCell && leftCell.setStyle( 'width', pxUnit( Math.max( leftOldWidth + sizeShift, 0 ) ) );
+						rightCell && rightCell.setStyle( 'width', pxUnit( Math.max( rightOldWidth - sizeShift, 0 ) ) );
+
+						// If we're in the last cell, we need to resize the table as well
+						if ( tableWidth )
+							table.setStyle( 'width', pxUnit( tableWidth + sizeShift * ( rtl ? -1 : 1 ) ) );
+					}
+					, 0,
+					this, [
+						leftCell, leftCell && getWidth( leftCell ),
+						rightCell, rightCell && getWidth( rightCell ),
+						( !leftCell || !rightCell ) && ( getWidth( table ) + getBorderWidth( table, 'left' ) + getBorderWidth( table, 'right' ) ),
+						currentShift ] );
+			}
+		}
+
+		function onMouseDown( evt )
+		{
+			cancel( evt );
+
+			resizeStart();
+
+			document.on( 'mouseup', onMouseUp, this );
+		}
+
+		function onMouseUp( evt )
+		{
+			evt.removeListener();
+
+			resizeEnd();
+		}
+
+		function onMouseMove( evt )
+		{
+			move( evt.data.$.clientX );
+		}
+
+		document = editor.document;
+
+		resizer = CKEDITOR.dom.element.createFromHtml(
+			'<div cke_temp=1 contenteditable=false unselectable=on '+
+			'style="position:absolute;cursor:col-resize;filter:alpha(opacity=0);opacity:0;' +
+				'padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"></div>', document );
+
+		// Except on IE6/7 (#5890), place the resizer after body to prevent it
+		// from being editable.
+		if ( !needsIEHacks )
+			document.getDocumentElement().append( resizer );
+
+		this.attachTo = function( targetPillar )
+		{
+			// Accept only one pillar at a time.
+			if ( isResizing )
+				return;
+
+			// On IE6/7, we append the resizer everytime we need it. (#5890)
+			if ( needsIEHacks )
+			{
+				document.getBody().append( resizer );
+				currentShift = 0;
+			}
+
+			pillar = targetPillar;
+
+			resizer.setStyles(
+				{
+					width: pxUnit( targetPillar.width ),
+					height : pxUnit( targetPillar.height ),
+					left : pxUnit( targetPillar.x ),
+					top : pxUnit( targetPillar.y )
+				});
+
+			// In IE6/7, it's not possible to have custom cursors for floating
+			// elements in an editable document. Show the resizer in that case,
+			// to give the user a visual clue.
+			needsIEHacks && resizer.setOpacity( 0.25 );
+
+			resizer.on( 'mousedown', onMouseDown, this );
+
+			document.getBody().setStyle( 'cursor', 'col-resize' );
+
+			// Display the resizer to receive events but don't show it,
+			// only change the cursor to resizable shape.
+			resizer.show();
+		};
+
+		var move = this.move = function( posX )
+		{
+			if ( !pillar )
+				return 0;
+
+			var pad = pillar.padding;
+
+			if ( !isResizing && ( posX < pillar.x - pad || posX > ( pillar.x + pillar.width + pad ) ) )
+			{
+				detach();
+				return 0;
+			}
+
+			var resizerNewPosition = posX - Math.round( resizer.$.offsetWidth / 2 );
+
+			if ( isResizing )
+			{
+				if ( resizerNewPosition == leftShiftBoundary || resizerNewPosition == rightShiftBoundary )
+					return 1;
+
+				resizerNewPosition = Math.max( resizerNewPosition, leftShiftBoundary );
+				resizerNewPosition = Math.min( resizerNewPosition, rightShiftBoundary );
+
+				currentShift = resizerNewPosition - startOffset;
+			}
+
+			resizer.setStyle( 'left', pxUnit( resizerNewPosition ) );
+
+			return 1;
+		};
+	}
+
+	function clearPillarsCache( evt )
+	{
+		var target = evt.data.getTarget();
+
+		if ( evt.name == 'mouseout' )
+		{
+			// Bypass interal mouse move.
+			if ( !target.is ( 'table' ) )
+				return;
+
+			var dest = new CKEDITOR.dom.element( evt.data.$.relatedTarget || evt.data.$.toElement );
+			while( dest && dest.$ && !dest.equals( target ) && !dest.is( 'body' ) )
+				dest = dest.getParent();
+			if ( !dest || dest.equals( target ) )
+				return;
+		}
+
+		target.getAscendant( 'table', 1 ).removeCustomData( '_cke_table_pillars' );
+		evt.removeListener();
+	}
+
+	CKEDITOR.plugins.add( 'tableresize',
+	{
+		requires : [ 'tabletools' ],
+		init : function( editor )
+		{
+			editor.on( 'contentDom', function()
+			{
+				var resizer;
+
+				editor.document.getBody().on( 'mousemove', function( evt )
+					{
+						evt = evt.data;
+
+						// If we're already attached to a pillar, simply move the
+						// resizer.
+						if ( resizer && resizer.move( evt.$.clientX ) )
+						{
+							cancel( evt );
+							return;
+						}
+
+						// Considering table, tr, td, tbody but nothing else.
+						var target = evt.getTarget(),
+							table,
+							pillars;
+
+						if ( !target.is( 'table' ) && !target.getAscendant( 'tbody', 1 ) )
+							return;
+
+						table = target.getAscendant( 'table', 1 );
+
+						if ( !( pillars = table.getCustomData( '_cke_table_pillars' ) ) )
+						{
+							// Cache table pillars calculation result.
+							table.setCustomData( '_cke_table_pillars', ( pillars = buildTableColumnPillars( table ) ) );
+							table.on( 'mouseout', clearPillarsCache );
+							table.on( 'mousedown', clearPillarsCache );
+						}
+
+						var pillar = getPillarAtPosition( pillars, evt.$.clientX );
+						if ( pillar )
+						{
+							!resizer && ( resizer = new columnResizer( editor ) );
+							resizer.attachTo( pillar );
+						}
+					});
+			});
+		}
+	});
+
+})();
Index: /CKEditor/branches/features/adobeair/_source/plugins/tabletools/dialogs/tableCell.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/tabletools/dialogs/tableCell.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/tabletools/dialogs/tableCell.js	(revision 6006)
@@ -6,16 +6,12 @@
 CKEDITOR.dialog.add( 'cellProperties', function( editor )
 	{
-		var langTable = editor.lang.table;
-		var langCell = langTable.cell;
-		var langCommon = editor.lang.common;
-		var validate = CKEDITOR.dialog.validate;
-		var widthPattern = /^(\d+(?:\.\d+)?)(px|%)$/,
-			heightPattern = /^(\d+(?:\.\d+)?)px$/;
-		var bind = CKEDITOR.tools.bind;
-
-		function spacer()
-		{
-			return { type : 'html', html : '&nbsp;' };
-		}
+		var langTable = editor.lang.table,
+			langCell = langTable.cell,
+			langCommon = editor.lang.common,
+			validate = CKEDITOR.dialog.validate,
+			widthPattern = /^(\d+(?:\.\d+)?)(px|%)$/,
+			heightPattern = /^(\d+(?:\.\d+)?)px$/,
+			bind = CKEDITOR.tools.bind,
+			spacer = { type : 'html', html : '&nbsp;' };
 
 		/**
@@ -29,9 +25,16 @@
 			{
 				releaseHandlers( this );
-				callback( this );
+				callback( this, this._.parentDialog );
+				this._.parentDialog.changeFocus( true );
 			};
 			var onCancel = function()
 			{
 				releaseHandlers( this );
+				this._.parentDialog.changeFocus();
+			};
+			var releaseHandlers = function( dialog )
+			{
+				dialog.removeListener( 'ok', onOk );
+				dialog.removeListener( 'cancel', onCancel );
 			};
 			var bindToDialog = function( dialog )
@@ -39,9 +42,4 @@
 				dialog.on( 'ok', onOk );
 				dialog.on( 'cancel', onCancel );
-			};
-			var releaseHandlers = function( dialog )
-			{
-				dialog.removeListener( 'ok', onOk );
-				dialog.removeListener( 'cancel', onCancel );
 			};
 			editor.execCommand( dialogName );
@@ -154,5 +152,5 @@
 													setup : function( selectedCell )
 													{
-														var widthMatch = widthPattern.exec( selectedCell.$.style.width );
+														var widthMatch = widthPattern.exec( selectedCell.getStyle( 'width' ) || selectedCell.getAttribute( 'width' ) );
 														if ( widthMatch )
 															this.setValue( widthMatch[2] );
@@ -213,5 +211,5 @@
 											]
 										},
-										spacer(),
+										spacer,
 										{
 											type : 'select',
@@ -244,5 +242,5 @@
 											}
 										},
-										spacer(),
+										spacer,
 										{
 											type : 'select',
@@ -326,5 +324,5 @@
 									]
 								},
-								spacer(),
+								spacer,
 								{
 									type : 'vbox',
@@ -353,5 +351,5 @@
 											}
 										},
-										spacer(),
+										spacer,
 										{
 											type : 'text',
@@ -400,5 +398,5 @@
 											}
 										},
-										spacer(),
+										spacer,
 										{
 											type : 'hbox',
@@ -451,5 +449,5 @@
 											]
 										},
-										spacer(),
+										spacer,
 										{
 											type : 'hbox',
@@ -524,4 +522,11 @@
 
 				selection.selectBookmarks( bookmarks );
+
+				// Force selectionChange event because of alignment style.
+				var firstElement = selection.getStartElement();
+				var currentPath = new CKEDITOR.dom.elementPath( firstElement );
+
+				this._.editor._.selectionPreviousPath = currentPath;
+				this._.editor.fire( 'selectionChange', { selection : selection, path : currentPath, element : firstElement } );
 			}
 		};
Index: /CKEditor/branches/features/adobeair/_source/plugins/tabletools/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/tabletools/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/tabletools/plugin.js	(revision 6006)
@@ -147,12 +147,12 @@
 
 		// Create a clone of the row.
-		var newRow = row.clone( true );
-
-		// Insert the new row before of it.
-		newRow.insertBefore( row );
-
-		// Clean one of the rows to produce the illusion of inserting an empty row
-		// before or after.
-		clearRow( insertBefore ? newRow.$ : row.$ );
+		var newRow = row.clone( 1 );
+
+		insertBefore ?
+			newRow.insertBefore( row ) :
+			newRow.insertAfter( row );
+
+		// Clean the new row.
+		clearRow( newRow.$ );
 	}
 
@@ -217,5 +217,5 @@
 		// Get the cell where the selection is placed in.
 		var startElement = selection.getStartElement();
-		var cell = startElement.getAscendant( 'td', true ) || startElement.getAscendant( 'th', true );
+		var cell = startElement.getAscendant( 'td', 1 ) || startElement.getAscendant( 'th', 1 );
 
 		if ( !cell )
@@ -235,5 +235,5 @@
 				continue;
 
-			cell = new CKEDITOR.dom.element( $row.cells[ cellIndex ].cloneNode( false ) );
+			cell = ( new CKEDITOR.dom.element( $row.cells[ cellIndex ] ) ).clone( 0 );
 
 			if ( !CKEDITOR.env.ie )
@@ -340,5 +340,5 @@
 	{
 		var startElement = selection.getStartElement();
-		var cell = startElement.getAscendant( 'td', true ) || startElement.getAscendant( 'th', true );
+		var cell = startElement.getAscendant( 'td', 1 ) || startElement.getAscendant( 'th', 1 );
 
 		if ( !cell )
@@ -399,49 +399,4 @@
 		}
 		range.select( true );
-	}
-
-	function buildTableMap( table )
-	{
-
-		var aRows = table.$.rows ;
-
-		// Row and Column counters.
-		var r = -1 ;
-
-		var aMap = [];
-
-		for ( var i = 0 ; i < aRows.length ; i++ )
-		{
-			r++ ;
-			!aMap[r] && ( aMap[r] = [] );
-
-			var c = -1 ;
-
-			for ( var j = 0 ; j < aRows[i].cells.length ; j++ )
-			{
-				var oCell = aRows[i].cells[j] ;
-
-				c++ ;
-				while ( aMap[r][c] )
-					c++ ;
-
-				var iColSpan = isNaN( oCell.colSpan ) ? 1 : oCell.colSpan ;
-				var iRowSpan = isNaN( oCell.rowSpan ) ? 1 : oCell.rowSpan ;
-
-				for ( var rs = 0 ; rs < iRowSpan ; rs++ )
-				{
-					if ( !aMap[r + rs] )
-						aMap[r + rs] = new Array() ;
-
-					for ( var cs = 0 ; cs < iColSpan ; cs++ )
-					{
-						aMap[r + rs][c + cs] = aRows[i].cells[j] ;
-					}
-				}
-
-				c += iColSpan - 1 ;
-			}
-		}
-		return aMap ;
 	}
 
@@ -499,5 +454,5 @@
 			firstCell = cells[ 0 ],
 			table = firstCell.getAscendant( 'table' ),
-			map = buildTableMap( table ),
+			map = CKEDITOR.tools.buildTableMap( table ),
 			mapHeight = map.length,
 			mapWidth = map[ 0 ].length,
@@ -634,5 +589,5 @@
 			tr = cell.getParent(),
 			table = tr.getAscendant( 'table' ),
-			map = buildTableMap( table ),
+			map = CKEDITOR.tools.buildTableMap( table ),
 			rowIndex = tr.$.rowIndex,
 			colIndex = cellInRow( map, rowIndex, cell ),
@@ -710,5 +665,5 @@
 			tr = cell.getParent(),
 			table = tr.getAscendant( 'table' ),
-			map = buildTableMap( table ),
+			map = CKEDITOR.tools.buildTableMap( table ),
 			rowIndex = tr.$.rowIndex,
 			colIndex = cellInRow( map, rowIndex, cell ),
@@ -760,7 +715,7 @@
 					exec : function( editor )
 					{
-						var selection = editor.getSelection();
-						var startElement = selection && selection.getStartElement();
-						var table = startElement && startElement.getAscendant( 'table', true );
+						var selection = editor.getSelection(),
+							startElement = selection && selection.getStartElement(),
+							table = startElement && startElement.getAscendant( 'table', 1 );
 
 						if ( !table )
@@ -773,7 +728,7 @@
 						selection.selectRanges( [ range ] );
 
-						// If the table's parent has only one child, remove it,except body,as well.( #5416 )
+						// 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.getName() != 'body' )
+						if ( parent.getChildCount() == 1 && !parent.is( 'body', 'td', 'th' ) )
 							parent.remove();
 						else
@@ -1089,5 +1044,5 @@
 				editor.contextMenu.addListener( function( element, selection )
 					{
-						if ( !element )
+						if ( !element || element.isReadOnly() )
 							return null;
 
@@ -1115,2 +1070,51 @@
 	CKEDITOR.plugins.add( 'tabletools', CKEDITOR.plugins.tabletools );
 })();
+
+/**
+ * Create a two-dimension array that reflects the actual layout of table cells,
+ * with cell spans, with mappings to the original td elements.
+ * @param table {CKEDITOR.dom.element}
+ */
+CKEDITOR.tools.buildTableMap = function ( table )
+{
+	var aRows = table.$.rows ;
+
+	// Row and Column counters.
+	var r = -1 ;
+
+	var aMap = [];
+
+	for ( var i = 0 ; i < aRows.length ; i++ )
+	{
+		r++ ;
+		!aMap[r] && ( aMap[r] = [] );
+
+		var c = -1 ;
+
+		for ( var j = 0 ; j < aRows[i].cells.length ; j++ )
+		{
+			var oCell = aRows[i].cells[j] ;
+
+			c++ ;
+			while ( aMap[r][c] )
+				c++ ;
+
+			var iColSpan = isNaN( oCell.colSpan ) ? 1 : oCell.colSpan ;
+			var iRowSpan = isNaN( oCell.rowSpan ) ? 1 : oCell.rowSpan ;
+
+			for ( var rs = 0 ; rs < iRowSpan ; rs++ )
+			{
+				if ( !aMap[r + rs] )
+					aMap[r + rs] = [];
+
+				for ( var cs = 0 ; cs < iColSpan ; cs++ )
+				{
+					aMap[r + rs][c + cs] = aRows[i].cells[j] ;
+				}
+			}
+
+			c += iColSpan - 1 ;
+		}
+	}
+	return aMap ;
+};
Index: /CKEditor/branches/features/adobeair/_source/plugins/templates/dialogs/templates.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/templates/dialogs/templates.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/templates/dialogs/templates.js	(revision 6006)
@@ -16,5 +16,5 @@
 				container.setHtml( '' );
 
-				for ( var i = 0 ; i < templatesDefinitions.length ; i++ )
+				for ( var i = 0, totalDefs = templatesDefinitions.length ; i < totalDefs ; i++ )
 				{
 					var definition = CKEDITOR.getTemplates( templatesDefinitions[ i ] ),
@@ -45,5 +45,5 @@
 
 				if ( template.image && imagesPath )
-					html += '<td class="cke_tpl_preview_img"><img src="' + CKEDITOR.getUrl( imagesPath + template.image ) + '"' + ( CKEDITOR.env.ie6Compat? ' onload="this.width=this.width"' : '' ) + ' alt="" title=""></td>';
+					html += '<td class="cke_tpl_preview_img"><img src="' + CKEDITOR.getUrl( imagesPath + template.image ) + '"' + ( CKEDITOR.env.ie6Compat ? ' onload="this.width=this.width"' : '' ) + ' alt="" title=""></td>';
 
 				html += '<td style="white-space:normal;"><span class="cke_tpl_title">' + template.title + '</span><br/>';
@@ -81,10 +81,10 @@
 						var range = new CKEDITOR.dom.range( editor.document );
 						range.moveToElementEditStart( editor.document.getBody() );
-						range.select( true );
-						setTimeout( function ()
+						range.select( 1 );
+						setTimeout( function()
 						{
 							editor.fire( 'saveSnapshot' );
 						}, 0 );
-					} );
+					});
 
 					editor.fire( 'saveSnapshot' );
@@ -147,5 +147,7 @@
 			var listContainer;
 
-			var templateListLabelId = 'cke_tpl_list_label_' + CKEDITOR.tools.getNextNumber();
+			var templateListLabelId = 'cke_tpl_list_label_' + CKEDITOR.tools.getNextNumber(),
+				lang = editor.lang.templates,
+				config = editor.config;
 			return {
 				title :editor.lang.templates.title,
@@ -158,5 +160,5 @@
 					{
 						id :'selectTpl',
-						label : editor.lang.templates.title,
+						label : lang.title,
 						elements :
 						[
@@ -170,9 +172,9 @@
 										html :
 											'<span>'  +
-												editor.lang.templates.selectPromptMsg +
+												lang.selectPromptMsg +
 											'</span>'
 									},
 									{
-										id : "templatesList",
+										id : 'templatesList',
 										type : 'html',
 										focus: true,
@@ -181,11 +183,11 @@
 												'<div class="cke_tpl_loading"><span></span></div>' +
 											'</div>' +
-											'<span class="cke_voice_label" id="' + templateListLabelId + '">' + editor.lang.templates.options+ '</span>'
+											'<span class="cke_voice_label" id="' + templateListLabelId + '">' + lang.options+ '</span>'
 									},
 									{
 										id : 'chkInsertOpt',
 										type : 'checkbox',
-										label : editor.lang.templates.insertOption,
-										'default' : editor.config.templates_replaceContent
+										label : lang.insertOption,
+										'default' : config.templates_replaceContent
 									}
 								]
@@ -202,7 +204,7 @@
 					listContainer = templatesListField.getElement();
 
-					CKEDITOR.loadTemplates( editor.config.templates_files, function()
-						{
-							var templates = editor.config.templates.split( ',' );
+					CKEDITOR.loadTemplates( config.templates_files, function()
+						{
+							var templates = ( config.templates || 'default' ).split( ',' );
 
 							if ( templates.length )
@@ -215,5 +217,5 @@
 								listContainer.setHtml(
 									'<div class="cke_tpl_empty">' +
-										'<span>' + editor.lang.templates.emptyListMsg + '</span>' +
+										'<span>' + lang.emptyListMsg + '</span>' +
 									'</div>' );
 							}
@@ -223,5 +225,5 @@
 				},
 
-				onHide : function ()
+				onHide : function()
 				{
 					this._.element.removeListener( 'keydown', keyNavigation );
Index: /CKEditor/branches/features/adobeair/_source/plugins/templates/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/templates/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/templates/plugin.js	(revision 6006)
@@ -43,5 +43,5 @@
 
 		// Look for pending template files to get loaded.
-		for ( var i = 0 ; i < templateFiles.length ; i++ )
+		for ( var i = 0, count = templateFiles.length ; i < count ; i++ )
 		{
 			if ( !loadedTemplatesFiles[ templateFiles[ i ] ] )
@@ -52,5 +52,5 @@
 		}
 
-		if ( toLoad.length > 0 )
+		if ( toLoad.length )
 			CKEDITOR.scriptLoader.load( toLoad, callback );
 		else
@@ -69,5 +69,4 @@
  * config.templates = 'my_templates';
  */
-CKEDITOR.config.templates = 'default';
 
 /**
Index: /CKEditor/branches/features/adobeair/_source/plugins/toolbar/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/toolbar/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/toolbar/plugin.js	(revision 6006)
@@ -158,5 +158,5 @@
 						editor.toolbox = new toolbox();
 
-						var labelId = 'cke_' + CKEDITOR.tools.getNextNumber();
+						var labelId = CKEDITOR.tools.getNextId();
 
 						var output = [ '<div class="cke_toolbox" role="toolbar" aria-labelledby="', labelId, '"' ],
@@ -188,5 +188,5 @@
 								continue;
 
-							var toolbarId = 'cke_' + CKEDITOR.tools.getNextNumber(),
+							var toolbarId = CKEDITOR.tools.getNextId(),
 								toolbarObj = { id : toolbarId, items : [] };
 
@@ -284,11 +284,11 @@
 								{
 									editor.execCommand( 'toolbarCollapse' );
-								} );
+								});
 
 							editor.on( 'destroy', function () {
 									CKEDITOR.tools.removeFunction( collapserFn );
-								} );
-
-							var collapserId = 'cke_' + CKEDITOR.tools.getNextNumber();
+								});
+
+							var collapserId = CKEDITOR.tools.getNextId();
 
 							editor.addCommand( 'toolbarCollapse',
@@ -296,11 +296,11 @@
 									exec : function( editor )
 									{
-										var collapser = CKEDITOR.document.getById( collapserId );
-										var toolbox = collapser.getPrevious();
-										var contents = editor.getThemeSpace( 'contents' );
-										var toolboxContainer = toolbox.getParent();
-										var contentHeight = parseInt( contents.$.style.height, 10 );
-										var previousHeight = toolboxContainer.$.offsetHeight;
-										var collapsed = !toolbox.isVisible();
+										var collapser = CKEDITOR.document.getById( collapserId ),
+											toolbox = collapser.getPrevious(),
+											contents = editor.getThemeSpace( 'contents' ),
+											toolboxContainer = toolbox.getParent(),
+											contentHeight = parseInt( contents.$.style.height, 10 ),
+											previousHeight = toolboxContainer.$.offsetHeight,
+											collapsed = !toolbox.isVisible();
 
 										if ( !collapsed )
@@ -416,4 +416,5 @@
  *     ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv'],
  *     ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
+ *     ['BidiLtr', 'BidiRtl' ],
  *     ['Link','Unlink','Anchor'],
  *     ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
@@ -434,4 +435,5 @@
 	['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv'],
 	['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
+	['BidiLtr', 'BidiRtl' ],
 	['Link','Unlink','Anchor'],
 	['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
Index: /CKEditor/branches/features/adobeair/_source/plugins/uicolor/lang/he.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/uicolor/lang/he.js	(revision 6006)
+++ /CKEditor/branches/features/adobeair/_source/plugins/uicolor/lang/he.js	(revision 6006)
@@ -0,0 +1,15 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang( 'uicolor', 'he',
+{
+	uicolor :
+	{
+		title : 'בחירת צבע ממשק משתמש',
+		preview : 'תצוגה מקדימה',
+		config : 'הדבק את הטקסט הבא לתוך הקובץ config.js',
+		predefined : 'קבוצות צבעים מוגדרות מראש'
+	}
+});
Index: /CKEditor/branches/features/adobeair/_source/plugins/uicolor/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/uicolor/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/uicolor/plugin.js	(revision 6006)
@@ -7,5 +7,5 @@
 {
 	requires : [ 'dialog' ],
-	lang : [ 'en' ],
+	lang : [ 'en', 'he' ],
 
 	init : function( editor )
Index: /CKEditor/branches/features/adobeair/_source/plugins/undo/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/undo/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/undo/plugin.js	(revision 6006)
@@ -134,5 +134,5 @@
 			{
 				if ( undoManager.currentImage && new Image( editor ).equals( undoManager.currentImage ) )
-					setTimeout( function () { undoManager.update(); }, 0 );
+					setTimeout( function() { undoManager.update(); }, 0 );
 			});
 		}
@@ -340,5 +340,5 @@
 			this.index = -1;
 
-			this.limit = this.editor.config.undoStackSize;
+			this.limit = this.editor.config.undoStackSize || 20;
 
 			this.currentImage = null;
@@ -546,5 +546,4 @@
  * config.undoStackSize = 50;
  */
-CKEDITOR.config.undoStackSize = 20;
 
 /**
Index: /CKEditor/branches/features/adobeair/_source/plugins/wsc/dialogs/wsc.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/wsc/dialogs/wsc.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/wsc/dialogs/wsc.css	(revision 6006)
@@ -71,5 +71,4 @@
 	border-bottom: #d5d59d 1px solid;
 	cursor: pointer;
-	cursor: hand;
 }
 
Index: /CKEditor/branches/features/adobeair/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/plugins/wysiwygarea/plugin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/plugins/wysiwygarea/plugin.js	(revision 6006)
@@ -15,5 +15,15 @@
 
 	// Matching an empty paragraph at the end of document.
-	var emptyParagraphRegexp = /\s*<(p|div|address|h\d|center)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\1>)?\s*(?=$|<\/body>)/gi;
+	var emptyParagraphRegexp = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;
+
+	var notWhitespaceEval = CKEDITOR.dom.walker.whitespaces( true );
+
+	function checkReadOnly( selection )
+	{
+		if ( selection.getType() == CKEDITOR.SELECTION_ELEMENT )
+			return selection.getSelectedElement().isReadOnly();
+		else
+			return selection.getCommonAncestor().isReadOnly();
+	}
 
 	function onInsertHtml( evt )
@@ -22,8 +32,11 @@
 		{
 			this.focus();
+
+			var selection = this.getSelection();
+			if ( checkReadOnly( selection ) )
+				return;
+
+			var data = evt.data;
 			this.fire( 'saveSnapshot' );
-
-			var selection = this.getSelection(),
-				data = evt.data;
 
 			if ( this.dataProcessor )
@@ -38,7 +51,32 @@
 
 				var $sel = selection.getNative();
+
+				// Delete control selections to avoid IE bugs on pasteHTML.
 				if ( $sel.type == 'Control' )
 					$sel.clear();
-				$sel.createRange().pasteHTML( data );
+				else if  ( selection.getType() == CKEDITOR.SELECTION_TEXT )
+				{
+					// Due to IE bugs on handling contenteditable=false blocks
+					// (#6005), we need to make some checks and eventually
+					// delete the selection first.
+
+					var range = selection.getRanges()[0],
+						endContainer = range && range.endContainer;
+
+					if ( endContainer &&
+ 						 endContainer.type == CKEDITOR.NODE_ELEMENT &&
+ 						 endContainer.getAttribute( 'contenteditable' ) == 'false' &&
+						 range.checkBoundaryOfElement( endContainer, CKEDITOR.END ) )
+					{
+						range.setEndAfter( range.endContainer );
+						range.deleteContents();
+					}
+				}
+
+				try
+				{
+					$sel.createRange().pasteHTML( data );
+				}
+				catch (e) {}
 
 				if ( selIsLocked )
@@ -47,4 +85,14 @@
 			else
 				this.document.$.execCommand( 'inserthtml', false, data );
+
+			// Webkit does not scroll to the cursor position after pasting (#5558)
+			if ( CKEDITOR.env.webkit )
+			{
+				this.document.$.execCommand( 'inserthtml', false, '<span id="cke_paste_marker" cke_temp="1"></span>' );
+				var marker = this.document.getById( 'cke_paste_marker' );
+				marker.scrollIntoView();
+				marker.remove();
+				marker = null;
+			}
 
 			CKEDITOR.tools.setTimeout( function()
@@ -60,12 +108,15 @@
 		{
 			this.focus();
+
+			var selection = this.getSelection();
+			if ( checkReadOnly( selection ) )
+				return;
+
 			this.fire( 'saveSnapshot' );
 
-			var element = evt.data,
+			var ranges = selection.getRanges(),
+				element = evt.data,
 				elementName = element.getName(),
 				isBlock = CKEDITOR.dtd.$block[ elementName ];
-
-			var selection = this.getSelection(),
-				ranges = selection.getRanges();
 
 			var selIsLocked = selection.isLocked;
@@ -83,5 +134,5 @@
 				range.deleteContents();
 
-				clone = !i && element || element.clone( true );
+				clone = !i && element || element.clone( 1 );
 
 				// If we're inserting a block at dtd-violated position, split
@@ -90,5 +141,5 @@
 				if ( isBlock )
 				{
-					while ( ( current = range.getCommonAncestor( false, true ) )
+					while ( ( current = range.getCommonAncestor( 0, 1 ) )
 							&& ( dtd = CKEDITOR.dtd[ current.getName() ] )
 							&& !( dtd && dtd [ elementName ] ) )
@@ -122,7 +173,15 @@
 			range.moveToPosition( lastElement, CKEDITOR.POSITION_AFTER_END );
 
-			var next = lastElement.getNextSourceNode( true );
-			if ( next && next.type == CKEDITOR.NODE_ELEMENT )
-				range.moveToElementEditStart( next );
+			// If we're inserting a block element immediatelly followed by
+			// another block element, the selection must move there. (#3100,#5436)
+			if ( isBlock )
+			{
+				var next = lastElement.getNext( notWhitespaceEval ),
+					nextName = next && next.type == CKEDITOR.NODE_ELEMENT && next.getName();
+
+				// Check if it's a block element that accepts text.
+				if ( nextName && CKEDITOR.dtd.$block[ nextName ] && CKEDITOR.dtd[ nextName ]['#'] )
+					range.moveToElementEditStart( next );
+			}
 
 			selection.selectRanges( [ range ] );
@@ -145,5 +204,5 @@
 	{
 		if ( !editor.checkDirty() )
-			setTimeout( function(){ editor.resetDirty(); } );
+			setTimeout( function(){ editor.resetDirty(); }, 0 );
 	}
 
@@ -177,4 +236,41 @@
 
 	isNotWhitespace = CKEDITOR.dom.walker.whitespaces( true );
+
+	// Gecko need a key event to 'wake up' the editing
+	// ability when document is empty.(#3864, #5781)
+	function activateEditing( editor )
+	{
+		var win = editor.window,
+			doc = editor.document,
+			body = editor.document.getBody(),
+			bodyChildsNum = body.getChildren().count();
+
+		if ( !bodyChildsNum || ( bodyChildsNum == 1&& body.getFirst().hasAttribute( '_moz_editor_bogus_node' ) ) )
+		{
+			restoreDirty( editor );
+
+			// Memorize scroll position to restore it later (#4472).
+			var hostDocument = editor.element.getDocument();
+			var hostDocumentElement = hostDocument.getDocumentElement();
+			var scrollTop = hostDocumentElement.$.scrollTop;
+			var scrollLeft = hostDocumentElement.$.scrollLeft;
+
+			// Simulating keyboard character input by dispatching a keydown of white-space text.
+			var keyEventSimulate = doc.$.createEvent( "KeyEvents" );
+			keyEventSimulate.initKeyEvent( 'keypress', true, true, win.$, false,
+				false, false, false, 0, 32 );
+			doc.$.dispatchEvent( keyEventSimulate );
+
+			if ( scrollTop != hostDocumentElement.$.scrollTop || scrollLeft != hostDocumentElement.$.scrollLeft )
+				hostDocument.getWindow().$.scrollTo( scrollLeft, scrollTop );
+
+			// Restore the original document status by placing the cursor before a bogus br created (#5021).
+			bodyChildsNum && body.getFirst().remove();
+			doc.getBody().appendBogus();
+			var nativeRange = new CKEDITOR.dom.range( doc );
+			nativeRange.setStartAt( body , CKEDITOR.POSITION_AFTER_START );
+			nativeRange.select();
+		}
+	}
 
 	/**
@@ -192,4 +288,6 @@
 			enterMode = editor.config.enterMode;
 
+		CKEDITOR.env.gecko && activateEditing( editor );
+
 		// When enterMode set to block, we'll establing new paragraph only if we're
 		// selecting inline contents right under body. (#3657)
@@ -217,17 +315,22 @@
 			if ( isBlankParagraph( fixedBlock ) )
 			{
-				var previousElement = fixedBlock.getPrevious( isNotWhitespace ),
-					nextElement = fixedBlock.getNext( isNotWhitespace );
-
-				if ( previousElement && previousElement.getName
-					 && !( previousElement.getName() in nonExitableElementNames )
-					 && isBlankParagraph( previousElement )
-					 && range.moveToElementEditStart( previousElement )
-					 || nextElement && nextElement.getName
-						&& !( nextElement.getName() in nonExitableElementNames )
-						&& isBlankParagraph( nextElement )
-						&& range.moveToElementEditStart( nextElement ) )
+				var element = fixedBlock.getNext( isNotWhitespace );
+				if ( element &&
+					 element.type == CKEDITOR.NODE_ELEMENT &&
+					 !nonExitableElementNames[ element.getName() ] )
 				{
+					range.moveToElementEditStart( element );
 					fixedBlock.remove();
+				}
+				else
+				{
+					element = fixedBlock.getPrevious( isNotWhitespace );
+					if ( element &&
+						 element.type == CKEDITOR.NODE_ELEMENT &&
+						 !nonExitableElementNames[ element.getName() ] )
+					{
+						range.moveToElementEditEnd( element );
+						fixedBlock.remove();
+					}
 				}
 			}
@@ -332,4 +435,8 @@
 						else
 						{
+							// Running inside of Firefox chrome the load event doesn't bubble like in a normal page (#5689)
+							if ( document.location.protocol == 'chrome:' )
+								CKEDITOR.event.useCapture = true;
+
 							// With FF, it's better to load the data on iframe.load. (#3894,#4058)
 							iframe.on( 'load', function( ev )
@@ -347,5 +454,32 @@
 						}
 
+						// Reset adjustment back to default (#5689)
+						if ( document.location.protocol == 'chrome:' )
+							CKEDITOR.event.useCapture = false;
+
+						// The container must be visible when creating the iframe in FF (#5956)
+						var element = editor.element,
+							isHidden = CKEDITOR.env.gecko && !element.isVisible(),
+							previousStyles = {};
+						if ( isHidden )
+						{
+							element.show();
+							previousStyles = {
+								position : element.getStyle( 'position' ),
+								top : element.getStyle( 'top' )
+							};
+							element.setStyles( { position : 'absolute', top : '-3000px' } );
+						}
+
 						mainElement.append( iframe );
+
+						if ( isHidden )
+						{
+							setTimeout( function()
+							{
+								element.hide();
+								element.setStyles( previousStyles );
+							}, 1000 );
+						}
 					};
 
@@ -406,33 +540,7 @@
 						}
 
-						// Gecko need a key event to 'wake up' the editing
-						// ability when document is empty.(#3864)
-						if ( CKEDITOR.env.gecko && !body.childNodes.length )
-						{
-							setTimeout( function()
-							{
-								restoreDirty( editor );
-
-								// Simulating keyboard character input by dispatching a keydown of white-space text.
-								var keyEventSimulate = domDocument.$.createEvent( "KeyEvents" );
-								keyEventSimulate.initKeyEvent( 'keypress', true, true, domWindow.$, false,
-									false, false, false, 0, 32 );
-								domDocument.$.dispatchEvent( keyEventSimulate );
-
-								// Restore the original document status by placing the cursor before a bogus br created (#5021).
-								domDocument.createElement( 'br', { attributes: { '_moz_editor_bogus_node' : 'TRUE', '_moz_dirty' : "" } } )
-									.replace( domDocument.getBody().getFirst() );
-								var nativeRange = new CKEDITOR.dom.range( domDocument );
-								nativeRange.setStartAt( new CKEDITOR.dom.element( body ) , CKEDITOR.POSITION_AFTER_START );
-								nativeRange.select();
-							}, 0 );
-						}
-
-						// IE, Opera and Safari may not support it and throw
-						// errors.
-						try { domDocument.execCommand( 'enableObjectResizing', false, !editor.config.disableObjectResizing ) ; } catch(e) {}
-						try { domDocument.execCommand( 'enableInlineTableEditing', false, !editor.config.disableNativeTableHandles ) ; } catch(e) {}
-
-						domWindow	= editor.window		= new CKEDITOR.dom.window( domWindow );
+						CKEDITOR.env.gecko && CKEDITOR.tools.setTimeout( activateEditing, 0, null, editor );
+
+						domWindow	= editor.window	= new CKEDITOR.dom.window( domWindow );
 						domDocument	= editor.document	= new CKEDITOR.dom.document( domDocument );
 
@@ -446,5 +554,5 @@
 
 						// Gecko/Webkit need some help when selecting control type elements. (#3448)
-						if ( !( CKEDITOR.env.ie || CKEDITOR.env.opera) )
+						if ( !( CKEDITOR.env.ie || CKEDITOR.env.opera ) )
 						{
 							domDocument.on( 'mousedown', function( ev )
@@ -455,4 +563,32 @@
 							} );
 						}
+
+						if ( CKEDITOR.env.gecko )
+						{
+							domDocument.on( 'mouseup', function( ev )
+							{
+								if ( ev.data.$.button == 2 )
+								{
+									var target = ev.data.getTarget();
+
+									// Prevent right click from selecting an empty block even
+									// when selection is anchored inside it. (#5845)
+									if ( !target.getOuterHtml().replace( emptyParagraphRegexp, '' ) )
+									{
+										var range = new CKEDITOR.dom.range( domDocument );
+										range.moveToElementEditStart( target );
+										range.select( true );
+									}
+								}
+							} );
+						}
+
+						// Prevent the browser opening links in read-only blocks. (#6032)
+						domDocument.on( 'click', function( ev )
+							{
+								ev = ev.data;
+								if ( ev.getTarget().is( 'a' ) && ev.$.button != 2 )
+									ev.preventDefault();
+							});
 
 						// Webkit: avoid from editing form control elements content.
@@ -513,4 +649,6 @@
 							});
 
+						var wasFocused;
+
 						domWindow.on( 'focus', function()
 							{
@@ -521,14 +659,21 @@
 								else if ( CKEDITOR.env.opera )
 									doc.getBody().focus();
+								// Webkit needs focus for the first time on the HTML element.
 								else if ( CKEDITOR.env.webkit )
 								{
-									// Selection will get lost after move focus
-									// to document element, save it first.
-									var sel = editor.getSelection(),
-											type = sel.getType(),
-											range = ( type != CKEDITOR.SELECTION_NONE ) && sel.getRanges()[ 0 ];
-
-									doc.getDocumentElement().focus();
-									range && range.select();
+									if ( !wasFocused )
+									{
+										editor.document.getDocumentElement().focus();
+										wasFocused = 1;
+
+										// Webkit does not scroll to the cursor position after first focus.
+										setTimeout(function()
+										{
+											doc.$.execCommand( 'inserthtml', false, '<span id="cke_focus_marker" cke_temp="1"></span>' );
+											var marker = doc.getById( 'cke_focus_marker' );
+											marker.scrollIntoView();
+											marker.remove();
+										}, 0 );
+									}
 								}
 
@@ -618,4 +763,8 @@
 									editor.fire( 'dataReady' );
 								}, 0 );
+
+								// IE, Opera and Safari may not support it and throw errors.
+								try { editor.document.$.execCommand( 'enableObjectResizing', false, !editor.config.disableObjectResizing ) ; } catch(e) {}
+								try { editor.document.$.execCommand( 'enableInlineTableEditing', false, !editor.config.disableNativeTableHandles ) ; } catch(e) {}
 
 								/*
@@ -768,7 +917,7 @@
 									data = editor.dataProcessor.toDataFormat( data, fixForBody );
 
-								// Strip the last blank paragraph within document.
+								// Reset empty if the document contains only one empty paragraph.
 								if ( config.ignoreEmptyParagraph )
-									data = data.replace( emptyParagraphRegexp, '' );
+									data = data.replace( emptyParagraphRegexp, function( match, lookback ) { return lookback; } );
 
 								if ( docType )
@@ -800,4 +949,11 @@
 
 								iframe.clearCustomData();
+
+								/*
+								* IE BUG: When destroying editor DOM with the selection remains inside
+								* editing area would break IE7/8's selection system, we have to put the editing
+								* iframe offline first. (#3812 and #5441)
+								*/
+								iframe.remove();
 							},
 
@@ -815,5 +971,16 @@
 								if ( isLoadingData )
 									isPendingFocus = true;
-								else if ( editor.window )
+								// Temporary solution caused by #6025, supposed be unified by #6154.
+								else if ( CKEDITOR.env.opera && editor.document )
+								{
+									// Required for Opera when switching focus
+									// from another iframe, e.g. panels. (#6444)
+									var iframe = editor.window.$.frameElement;
+									iframe.blur(), iframe.focus();
+									editor.document.getBody().focus();
+
+									editor.selectionChange();
+								}
+								else if ( !CKEDITOR.env.opera && editor.window )
 								{
 									editor.window.focus();
@@ -833,5 +1000,5 @@
 			// Setting voice label as window title, backup the original one
 			// and restore it before running into use.
-			editor.on( 'contentDom', function ()
+			editor.on( 'contentDom', function()
 				{
 					var title = editor.document.getElementsByTag( 'title' ).getItem( 0 );
@@ -851,4 +1018,7 @@
 				editor.addCss( selectors.join( ',' ) + '{ display:inline-block;}' );
 			}
+			// Set the HTML style to 100% to have the text cursor in affect (#6341)
+			else if ( CKEDITOR.env.gecko )
+				editor.addCss( 'html { height: 100% !important; }' );
 
 			// Switch on design mode for a short while and close it after then.
@@ -858,8 +1028,9 @@
 					{
 						editor.document.$.designMode = 'on';
-						setTimeout( function ()
+						setTimeout( function()
 						{
 							editor.document.$.designMode = 'off';
-							editor.document.getBody().focus();
+							if ( CKEDITOR.currentInstance == editor )
+								editor.document.getBody().focus();
 						}, 50 );
 				}, function ()
@@ -903,8 +1074,14 @@
 			{
 				var element = evt.data;
-				if ( element.type = CKEDITOR.NODE_ELEMENT
+				if ( element.type == CKEDITOR.NODE_ELEMENT
 						&& ( element.is( 'input' ) || element.is( 'textarea' ) ) )
 				{
-					element.setAttribute( 'contentEditable', false );
+					if ( !element.isReadOnly() )
+					{
+						element.setAttribute( 'contentEditable', false );
+						// We should flag that the element was locked by our code so
+						// it'll be editable by the editor functions (#6046).
+						element.setCustomData( '_cke_notReadOnly', 1 );
+					}
 				}
 			});
@@ -916,5 +1093,5 @@
 	if ( CKEDITOR.env.gecko )
 	{
-		( function ()
+		(function()
 		{
 			var body = document.body;
Index: /CKEditor/branches/features/adobeair/_source/skins/kama/dialog.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/kama/dialog.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/kama/dialog.css	(revision 6006)
@@ -240,4 +240,34 @@
 }
 
+/* Opera/IE doesn't leave enough padding in text input for cursor to blink in RTL. (#6087) */
+.cke_skin_kama .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_text,
+.cke_skin_kama .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_text,
+.cke_skin_kama .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_password,
+.cke_skin_kama .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_password
+{
+	padding-right: 2px;
+}
+
+/* Compensate the padding added above on container. */
+.cke_skin_kama .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text,
+.cke_skin_kama .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_text,
+.cke_skin_kama .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_password,
+.cke_skin_kama .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_password
+{
+	padding-left: 2px;
+}
+
+.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_vbox_child,
+.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_child,
+.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_first,
+.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_last
+{
+	padding-right: 2px !important;
+}
+
+.cke_skin_kama .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text {
+	padding-right: 1px;
+}
+
 .cke_skin_kama .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_text,
 .cke_skin_kama .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_password
@@ -607,5 +637,5 @@
 }
 
-.cke_skin_kama iframe.cke_dialog_ui_input_file
+.cke_skin_kama .cke_dialog_ui_input_file
 {
 	width: 100%;
@@ -677,5 +707,4 @@
 	border: outset 1px;
 	cursor: pointer;
-	cursor: hand;
 }
 
@@ -726,4 +755,25 @@
 }
 
+.cke_skin_kama .cke_dialog .cke_pastetext
+{
+	width: 346px;
+	height: 170px;
+}
+
+.cke_skin_kama .cke_dialog .cke_pastetext textarea
+{
+	width: 340px;
+	height: 170px;
+	resize: none;
+}
+
+.cke_skin_kama .cke_dialog iframe.cke_pasteframe
+{
+	width: 346px;
+	height: 130px;
+	background-color: white;
+	border: 1px solid black;
+}
+
 .cke_skin_kama .cke_dialog .cke_dark_background
 {
@@ -742,5 +792,4 @@
 {
 	cursor: pointer;
-	cursor: hand;
 }
 
@@ -775,5 +824,4 @@
 	display: inline;
 	cursor: pointer;
-	cursor: hand;
 	font-weight: bold;
 	position: relative;
@@ -784,4 +832,9 @@
 {
 	display: none;
+}
+
+.cke_skin_kama .cke_dialog_body label.cke_required
+{
+	font-weight: bold;
 }
 
Index: /CKEditor/branches/features/adobeair/_source/skins/kama/elementspath.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/kama/elementspath.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/kama/elementspath.css	(revision 6006)
@@ -37,4 +37,5 @@
 	padding: 1px 4px 0;
 	color: #60676a;
+	cursor: default;
 }
 
Index: /CKEditor/branches/features/adobeair/_source/skins/kama/icons.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/kama/icons.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/kama/icons.css	(revision 6006)
@@ -249,4 +249,14 @@
 }
 
+.cke_skin_kama .cke_mixed_dir_content .cke_button_numberedlist .cke_icon
+{
+	background-position: 0 -1217px;
+}
+
+.cke_skin_kama .cke_mixed_dir_content .cke_button_bulletedlist .cke_icon
+{
+	background-position: 0 -1233px;
+}
+
 .cke_skin_kama .cke_button_outdent .cke_icon
 {
@@ -259,4 +269,14 @@
 }
 
+.cke_skin_kama .cke_mixed_dir_content .cke_button_indent .cke_icon
+{
+	background-position: 0 -1265px;
+}
+
+.cke_skin_kama .cke_mixed_dir_content .cke_button_outdent .cke_icon
+{
+	background-position: 0 -1249px;
+}
+
 .cke_skin_kama .cke_button_justifyleft .cke_icon
 {
@@ -321,6 +341,17 @@
 	background-position: 0 -1040px;
 }
-.cke_skin_office2003 .cke_button_editdiv .cke_icon
+
+.cke_skin_kama .cke_button_editdiv .cke_icon
 {
 	background-position: 0 -1184px;
 }
+
+.cke_skin_kama .cke_button_bidirtl .cke_icon
+{
+	background-position: 0 -1072px;
+}
+
+.cke_skin_kama .cke_button_bidiltr .cke_icon
+{
+	background-position: 0 -1056px;
+}
Index: /CKEditor/branches/features/adobeair/_source/skins/kama/menu.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/kama/menu.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/kama/menu.css	(revision 6006)
@@ -45,4 +45,9 @@
 }
 
+.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon
+{
+	background-image: url(icons_rtl.png);
+}
+
 .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon
 {
@@ -61,4 +66,11 @@
 	opacity: 0.70; /* Safari, Opera and Mozilla */
 	clear: both;
+}
+
+/* IE9 insists on border box model on this element.*/
+ .cke_browser_ie9 .cke_skin_kama .cke_menuitem .cke_icon_wrapper
+{
+	width:24px;
+	height:24px;
 }
 
@@ -96,4 +108,11 @@
 	background-color: #fff;
 }
+
+/* IE9 insists on border box model on this element.*/
+.cke_browser_ie9 .cke_skin_kama .cke_menuitem .cke_label
+{
+	height:24px;
+}
+
 /* Set these after the document has been loaded and we know the dimensions*/
 .cke_skin_kama .cke_frameLoaded .cke_menuitem .cke_label
Index: /CKEditor/branches/features/adobeair/_source/skins/kama/panel.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/kama/panel.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/kama/panel.css	(revision 6006)
@@ -73,5 +73,5 @@
 	display: block;
 	border: 1px solid #fff;
-	color: inherit;
+	color: inherit !important;
 	text-decoration: none;
 	overflow: hidden;
@@ -154,6 +154,6 @@
 	height: 135px;
 	padding: 3px;
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;
+   font-size: 11px;
+   font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;
 }
 
@@ -169,5 +169,5 @@
 	width: 10px;
 	height: 10px;
-    border: #808080 1px solid;
+   border: #808080 1px solid;
 	float: left;
 }
@@ -180,12 +180,12 @@
 a.cke_colorbox
 {
-    border: #fff 1px solid;
-    padding: 2px;
-    float: left;
+	border: #fff 1px solid;
+	padding: 2px;
+	float: left;
 }
 
 .cke_rtl a.cke_colorbox
 {
-    float: right;
+	float: right;
 }
 
@@ -194,6 +194,6 @@
 a:active.cke_colorbox
 {
-    border: #316ac5 1px solid;
-    background-color: #dff1ff;
+	border: #316ac5 1px solid;
+	background-color: #dff1ff;
 }
 
@@ -201,7 +201,8 @@
 a.cke_colormore
 {
-    border: #fff 1px solid;
-    padding: 2px;
-    display: block;
+	border: #fff 1px solid;
+	padding: 2px;
+	display: block;
+	cursor: pointer;
 }
 
@@ -213,5 +214,5 @@
 a:active.cke_colormore
 {
-    border: #316ac5 1px solid;
-    background-color: #dff1ff;
-}
+	border: #316ac5 1px solid;
+	background-color: #dff1ff;
+}
Index: /CKEditor/branches/features/adobeair/_source/skins/kama/reset.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/kama/reset.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/kama/reset.css	(revision 6006)
@@ -77,2 +77,8 @@
 	cursor: default;
 }
+
+.cke_skin_kama fieldset
+{
+	padding: 10px;
+	border: 2px groove #E0DFE3;
+}
Index: /CKEditor/branches/features/adobeair/_source/skins/kama/richcombo.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/kama/richcombo.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/kama/richcombo.css	(revision 6006)
@@ -113,4 +113,5 @@
 	display: inline-block;
 	margin: 0 2px 0 4px;
+	cursor: default;
 }
 
@@ -269,2 +270,8 @@
 	line-height: 17px;
 }
+
+.cke_skin_kama .cke_rtl .cke_rcombo .cke_font .cke_text,
+.cke_skin_kama .cke_rtl .cke_rcombo .cke_fontSize .cke_text
+{
+	direction: ltr;
+}
Index: /CKEditor/branches/features/adobeair/_source/skins/kama/skin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/kama/skin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/kama/skin.js	(revision 6006)
@@ -148,5 +148,5 @@
 					var cssContent,
 						uiStyle = getStylesheet( CKEDITOR.document ),
-						cssId = '.cke_editor_' + CKEDITOR.tools.escapeCssSelector( editor.name );
+						cssId = '.' + editor.id;
 
 					var cssSelectors =
@@ -243,9 +243,9 @@
 						// ml
 						el = innerDialog.getChild( 4 );
-						el.setStyle( 'height', ( body.$.offsetHeight - 31 - 14 ) + 'px' );
+						el.setStyle( 'height', ( height + body.getChild(0).$.offsetHeight ) + 'px' );
 
 						// mr
 						el = innerDialog.getChild( 5 );
-						el.setStyle( 'height', ( body.$.offsetHeight - 31 - 14 ) + 'px' );
+						el.setStyle( 'height', ( height + body.getChild(0).$.offsetHeight ) + 'px' );
 					},
 					100 );
Index: /CKEditor/branches/features/adobeair/_source/skins/kama/toolbar.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/kama/toolbar.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/kama/toolbar.css	(revision 6006)
@@ -238,4 +238,10 @@
 	display: inline-block;
 	float: left;
+	cursor: default;
+}
+
+.cke_skin_kama .cke_rtl .cke_button .cke_icon
+{
+	background-image: url(icons_rtl.png);
 }
 
@@ -292,4 +298,5 @@
 	background-repeat: no-repeat;
 	float: left;
+	cursor: default;
 }
 
Index: /CKEditor/branches/features/adobeair/_source/skins/office2003/dialog.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/office2003/dialog.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/office2003/dialog.css	(revision 6006)
@@ -182,10 +182,4 @@
 }
 
-.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_title
-{
-	position: static !important;
-	unicode-bidi: bidi-override;
-}
-
 .cke_skin_office2003 .cke_dialog_contents
 {
@@ -332,4 +326,34 @@
 	border: 1px solid #a0a0a0;
 	padding: 1px 0px;
+}
+
+/* Opera/IE doesn't leave enough padding in text input for cursor to blink in RTL. (#6087) */
+.cke_skin_office2003 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_text,
+.cke_skin_office2003 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_text,
+.cke_skin_office2003 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_password,
+.cke_skin_office2003 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_password
+{
+	padding-right: 2px
+}
+
+/* Compensate the padding added above on container. */
+.cke_skin_office2003 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text,
+.cke_skin_office2003 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_text,
+.cke_skin_office2003 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_password,
+.cke_skin_office2003 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_password
+{
+	padding-left: 2px;
+}
+
+.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_vbox_child,
+.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_child,
+.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_first,
+.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_last
+{
+	padding-right: 2px !important;
+}
+
+.cke_skin_office2003 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text {
+	padding-right: 1px;
 }
 
@@ -538,5 +562,5 @@
 }
 
-.cke_skin_office2003 iframe.cke_dialog_ui_input_file
+.cke_skin_office2003 .cke_dialog_ui_input_file
 {
 	width: 100%;
@@ -608,5 +632,4 @@
 	border: outset 1px;
 	cursor: pointer;
-	cursor: hand;
 }
 
@@ -657,4 +680,25 @@
 }
 
+.cke_skin_office2003 .cke_dialog .cke_pastetext
+{
+	width: 346px;
+	height: 170px;
+}
+
+.cke_skin_office2003 .cke_dialog .cke_pastetext textarea
+{
+	width: 340px;
+	height: 170px;
+	resize: none;
+}
+
+.cke_skin_office2003 .cke_dialog iframe.cke_pasteframe
+{
+	width: 346px;
+	height: 130px;
+	background-color: white;
+	border: 1px solid black;
+}
+
 .cke_skin_office2003 .cke_dialog .cke_dark_background
 {
@@ -673,5 +717,4 @@
 {
 	cursor: pointer;
-	cursor: hand;
 }
 
@@ -705,5 +748,4 @@
 	display: inline;
 	cursor: pointer;
-	cursor: hand;
 	font-weight: bold;
 	position: relative;
@@ -714,4 +756,9 @@
 {
 	display: none;
+}
+
+.cke_skin_office2003 .cke_dialog_body label.cke_required
+{
+	font-weight: bold;
 }
 
Index: /CKEditor/branches/features/adobeair/_source/skins/office2003/elementspath.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/office2003/elementspath.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/office2003/elementspath.css	(revision 6006)
@@ -36,4 +36,5 @@
 	padding-right: 4px;
 	margin-bottom : 3px;
+	cursor: default;
 }
 
Index: /CKEditor/branches/features/adobeair/_source/skins/office2003/icons.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/office2003/icons.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/office2003/icons.css	(revision 6006)
@@ -249,4 +249,14 @@
 }
 
+.cke_skin_office2003 .cke_mixed_dir_content .cke_button_numberedlist .cke_icon
+{
+	background-position: 0 -1217px;
+}
+
+.cke_skin_office2003 .cke_mixed_dir_content .cke_button_bulletedlist .cke_icon
+{
+	background-position: 0 -1233px;
+}
+
 .cke_skin_office2003 .cke_button_outdent .cke_icon
 {
@@ -259,4 +269,14 @@
 }
 
+.cke_skin_office2003 .cke_mixed_dir_content .cke_button_indent .cke_icon
+{
+	background-position: 0 -1265px;
+}
+
+.cke_skin_office2003 .cke_mixed_dir_content .cke_button_outdent .cke_icon
+{
+	background-position: 0 -1249px;
+}
+
 .cke_skin_office2003 .cke_button_justifyleft .cke_icon
 {
@@ -323,2 +343,12 @@
 	background-position: 0 -1200px;
 }
+
+.cke_skin_office2003 .cke_button_bidirtl .cke_icon
+{
+	background-position: 0 -1072px;
+}
+
+.cke_skin_office2003 .cke_button_bidiltr .cke_icon
+{
+	background-position: 0 -1056px;
+}
Index: /CKEditor/branches/features/adobeair/_source/skins/office2003/menu.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/office2003/menu.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/office2003/menu.css	(revision 6006)
@@ -45,4 +45,9 @@
 }
 
+.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon
+{
+	background-image: url(icons_rtl.png);
+}
+
 .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon
 {
@@ -61,4 +66,11 @@
 	opacity: 0.70; /* Safari, Opera and Mozilla */
 	clear: both;
+}
+
+/* IE9 insists on border box model on this element.*/
+ .cke_browser_ie9 .cke_skin_office2003 .cke_menuitem .cke_icon_wrapper
+{
+	width:24px;
+	height:24px;
 }
 
@@ -96,4 +108,11 @@
 	background-color: #fff;
 }
+
+/* IE9 insists on border box model on this element.*/
+.cke_browser_ie9 .cke_skin_office2003 .cke_menuitem .cke_label
+{
+	height:24px;
+}
+
 /* Set these after the document has been loaded and we know the dimensions*/
 .cke_skin_office2003 .cke_frameLoaded .cke_menuitem .cke_label
Index: /CKEditor/branches/features/adobeair/_source/skins/office2003/panel.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/office2003/panel.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/office2003/panel.css	(revision 6006)
@@ -6,5 +6,5 @@
 .cke_skin_office2003 .cke_panel
 {
-    border: 1px solid #8f8f73;
+   border: 1px solid #8f8f73;
 	background-color: #fff;
 
@@ -55,5 +55,5 @@
 	margin: 3px;
 	padding: 0px;
-    white-space: nowrap;
+   white-space: nowrap;
 }
 
@@ -68,8 +68,8 @@
 	display: block;
 	border: 1px solid #fff;
-	color: inherit;
+	color: inherit !important;
 	text-decoration: none;
 	overflow: hidden;
-    text-overflow: ellipsis;
+   text-overflow: ellipsis;
 }
 
@@ -115,8 +115,8 @@
 .cke_panel_grouptitle
 {
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+   font-size: 11px;
+   font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
 	font-weight: bold;
-    white-space: nowrap;
+   white-space: nowrap;
 	background-color: #dcdcdc;
 	color: #000;
@@ -148,6 +148,6 @@
 {
 	padding: 3px;
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;
+   font-size: 11px;
+   font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;
 }
 
@@ -163,5 +163,5 @@
 	width: 10px;
 	height: 10px;
-    border: #808080 1px solid;
+   border: #808080 1px solid;
 	float: left;
 }
@@ -174,12 +174,12 @@
 a.cke_colorbox
 {
-    border: #fff 1px solid;
-    padding: 2px;
-    float: left;
+	border: #fff 1px solid;
+	padding: 2px;
+	float: left;
 }
 
 .cke_rtl a.cke_colorbox
 {
-    float: right;
+	float: right;
 }
 
@@ -188,6 +188,6 @@
 a:active.cke_colorbox
 {
-    border: #316ac5 1px solid;
-    background-color: #dff1ff;
+	border: #316ac5 1px solid;
+	background-color: #dff1ff;
 }
 
@@ -195,7 +195,8 @@
 a.cke_colormore
 {
-    border: #fff 1px solid;
-    padding: 2px;
-    display: block;
+	border: #fff 1px solid;
+	padding: 2px;
+	display: block;
+	cursor: pointer;
 }
 
@@ -207,5 +208,5 @@
 a:active.cke_colormore
 {
-    border: #316ac5 1px solid;
-    background-color: #dff1ff;
-}
+	border: #316ac5 1px solid;
+	background-color: #dff1ff;
+}
Index: /CKEditor/branches/features/adobeair/_source/skins/office2003/reset.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/office2003/reset.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/office2003/reset.css	(revision 6006)
@@ -77,2 +77,8 @@
 	cursor: default;
 }
+
+.cke_skin_office2003 fieldset
+{
+	padding: 10px;
+	border: 2px groove #E0DFE3;
+}
Index: /CKEditor/branches/features/adobeair/_source/skins/office2003/richcombo.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/office2003/richcombo.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/office2003/richcombo.css	(revision 6006)
@@ -61,4 +61,5 @@
 	display: inline-block;
 	float: left;
+	cursor: default;
 
 	line-height: 24px;
@@ -109,4 +110,5 @@
 	display: inline-block;
 	vertical-align: top;
+	cursor: default;
 }
 
@@ -288,2 +290,8 @@
 	float: none;
 }
+
+.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_font .cke_text,
+.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_fontSize .cke_text
+{
+	direction: ltr;
+}
Index: /CKEditor/branches/features/adobeair/_source/skins/office2003/skin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/office2003/skin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/office2003/skin.js	(revision 6006)
@@ -66,9 +66,9 @@
 						// ml
 						el = innerDialog.getChild( 4 );
-						el.setStyle( 'height', ( body.$.offsetHeight - 31 - 14 ) + 'px' );
+						el.setStyle( 'height', ( height + body.getChild(0).$.offsetHeight ) + 'px' );
 
 						// mr
 						el = innerDialog.getChild( 5 );
-						el.setStyle( 'height', ( body.$.offsetHeight - 31 - 14 ) + 'px' );
+						el.setStyle( 'height', ( height + body.getChild(0).$.offsetHeight ) + 'px' );
 					};
 				setTimeout( fixSize, 100 );
Index: /CKEditor/branches/features/adobeair/_source/skins/office2003/toolbar.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/office2003/toolbar.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/office2003/toolbar.css	(revision 6006)
@@ -306,4 +306,10 @@
 	height: 16px;
 	display: inline-block;
+	cursor: default;
+}
+
+.cke_skin_office2003 .cke_rtl .cke_button .cke_icon
+{
+	background-image: url(icons_rtl.png);
 }
 
@@ -360,4 +366,5 @@
 	_background-image: url(images/sprites_ie6.png);
 	background-repeat: no-repeat;
+	cursor: default;
 }
 
Index: /CKEditor/branches/features/adobeair/_source/skins/v2/dialog.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/v2/dialog.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/v2/dialog.css	(revision 6006)
@@ -177,10 +177,4 @@
 	cursor: move;
 	position: relative;
-}
-
-.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_title
-{
-	position: static !important;
-	unicode-bidi: bidi-override;
 }
 
@@ -337,4 +331,30 @@
 }
 
+/* Opera/IE doesn't leave enough padding in text input for cursor to blink in RTL. (#6087) */
+.cke_skin_v2 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_text,
+.cke_skin_v2 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_text,
+.cke_skin_v2 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_password,
+.cke_skin_v2 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_password
+{
+	padding-right: 2px
+}
+
+/* Compensate the padding added above on container. */
+.cke_skin_v2 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text,
+.cke_skin_v2 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_text,
+.cke_skin_v2 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_password,
+.cke_skin_v2 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_password
+{
+	padding-left: 2px;
+}
+
+.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_vbox_child,
+.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_child,
+.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_first,
+.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_last
+{
+	padding-right: 2px !important;
+}
+
 .cke_skin_v2 div.cke_dialog_ui_input_text,
 .cke_skin_v2 div.cke_dialog_ui_input_password
@@ -343,4 +363,8 @@
 	border: 1px solid #a0a0a0;
 	padding: 1px 0px;
+}
+
+.cke_skin_v2 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text {
+	padding-right: 1px;
 }
 
@@ -540,5 +564,5 @@
 }
 
-.cke_skin_v2 iframe.cke_dialog_ui_input_file
+.cke_skin_v2 .cke_dialog_ui_input_file
 {
 	width: 100%;
@@ -610,5 +634,4 @@
 	border: outset 1px;
 	cursor: pointer;
-	cursor: hand;
 }
 
@@ -659,4 +682,25 @@
 }
 
+.cke_skin_v2 .cke_dialog .cke_pastetext
+{
+	width: 346px;
+	height: 170px;
+}
+
+.cke_skin_v2 .cke_dialog .cke_pastetext textarea
+{
+	width: 340px;
+	height: 170px;
+	resize: none;
+}
+
+.cke_skin_v2 .cke_dialog iframe.cke_pasteframe
+{
+	width: 346px;
+	height: 130px;
+	background-color: white;
+	border: 1px solid black;
+}
+
 .cke_skin_v2 .cke_dialog .cke_dark_background
 {
@@ -675,5 +719,4 @@
 {
 	cursor: pointer;
-	cursor: hand;
 }
 
@@ -707,5 +750,4 @@
 	display: inline;
 	cursor: pointer;
-	cursor: hand;
 	font-weight: bold;
 	position: relative;
@@ -716,4 +758,9 @@
 {
 	display: none;
+}
+
+.cke_skin_v2 .cke_dialog_body label.cke_required
+{
+	font-weight: bold;
 }
 
Index: /CKEditor/branches/features/adobeair/_source/skins/v2/elementspath.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/v2/elementspath.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/v2/elementspath.css	(revision 6006)
@@ -36,4 +36,5 @@
 	padding-right: 4px;
 	margin-bottom : 3px;
+	cursor: default;
 }
 
Index: /CKEditor/branches/features/adobeair/_source/skins/v2/icons.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/v2/icons.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/v2/icons.css	(revision 6006)
@@ -249,4 +249,14 @@
 }
 
+.cke_skin_v2 .cke_mixed_dir_content .cke_button_numberedlist .cke_icon
+{
+	background-position: 0 -1217px;
+}
+
+.cke_skin_v2 .cke_mixed_dir_content .cke_button_bulletedlist .cke_icon
+{
+	background-position: 0 -1233px;
+}
+
 .cke_skin_v2 .cke_button_outdent .cke_icon
 {
@@ -259,4 +269,14 @@
 }
 
+.cke_skin_v2 .cke_mixed_dir_content .cke_button_indent .cke_icon
+{
+	background-position: 0 -1265px;
+}
+
+.cke_skin_v2 .cke_mixed_dir_content .cke_button_outdent .cke_icon
+{
+	background-position: 0 -1249px;
+}
+
 .cke_skin_v2 .cke_button_justifyleft .cke_icon
 {
@@ -323,2 +343,12 @@
 	background-position: 0 -1200px;
 }
+
+.cke_skin_v2 .cke_button_bidirtl .cke_icon
+{
+	background-position: 0 -1072px;
+}
+
+.cke_skin_v2 .cke_button_bidiltr .cke_icon
+{
+	background-position: 0 -1056px;
+}
Index: /CKEditor/branches/features/adobeair/_source/skins/v2/menu.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/v2/menu.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/v2/menu.css	(revision 6006)
@@ -44,4 +44,9 @@
 }
 
+.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon
+{
+	background-image: url(icons_rtl.png);
+}
+
 .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon
 {
@@ -60,4 +65,11 @@
 	opacity: 0.70; /* Safari, Opera and Mozilla */
 	clear: both;
+}
+
+/* IE9 insists on border box model on this element.*/
+ .cke_browser_ie9 .cke_skin_v2 .cke_menuitem .cke_icon_wrapper
+{
+	width:24px;
+	height:24px;
 }
 
@@ -95,4 +107,11 @@
 	background-color: #fff;
 }
+
+/* IE9 insists on border box model on this element.*/
+.cke_browser_ie9 .cke_skin_v2 .cke_menuitem .cke_label
+{
+	height:24px;
+}
+
 /* Set these after the document has been loaded and we know the dimensions*/
 .cke_skin_v2 .cke_frameLoaded .cke_menuitem .cke_label
Index: /CKEditor/branches/features/adobeair/_source/skins/v2/panel.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/v2/panel.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/v2/panel.css	(revision 6006)
@@ -55,5 +55,5 @@
 	margin: 3px;
 	padding: 0px;
-    white-space: nowrap;
+   white-space: nowrap;
 }
 
@@ -68,8 +68,8 @@
 	display: block;
 	border: 1px solid #fff;
-	color: inherit;
+	color: inherit !important;
 	text-decoration: none;
 	overflow: hidden;
-    text-overflow: ellipsis;
+   text-overflow: ellipsis;
 }
 
@@ -115,8 +115,8 @@
 .cke_panel_grouptitle
 {
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+   font-size: 11px;
+   font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
 	font-weight: bold;
-    white-space: nowrap;
+   white-space: nowrap;
 	background-color: #dcdcdc;
 	color: #000;
@@ -148,6 +148,6 @@
 {
 	padding: 3px;
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;
 }
 
@@ -163,5 +163,5 @@
 	width: 10px;
 	height: 10px;
-    border: #808080 1px solid;
+   border: #808080 1px solid;
 	float: left;
 }
@@ -174,12 +174,12 @@
 a.cke_colorbox
 {
-    border: #fff 1px solid;
-    padding: 2px;
-    float: left;
+	border: #fff 1px solid;
+	padding: 2px;
+	float: left;
 }
 
 .cke_rtl a.cke_colorbox
 {
-    float: right;
+	float: right;
 }
 
@@ -188,6 +188,6 @@
 a:active.cke_colorbox
 {
-    border: #316ac5 1px solid;
-    background-color: #dff1ff;
+	border: #316ac5 1px solid;
+	background-color: #dff1ff;
 }
 
@@ -195,7 +195,8 @@
 a.cke_colormore
 {
-    border: #fff 1px solid;
-    padding: 2px;
-    display: block;
+	border: #fff 1px solid;
+	padding: 2px;
+	display: block;
+	cursor: pointer;
 }
 
@@ -207,5 +208,5 @@
 a:active.cke_colormore
 {
-    border: #316ac5 1px solid;
-    background-color: #dff1ff;
-}
+	border: #316ac5 1px solid;
+	background-color: #dff1ff;
+}
Index: /CKEditor/branches/features/adobeair/_source/skins/v2/reset.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/v2/reset.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/v2/reset.css	(revision 6006)
@@ -77,2 +77,8 @@
 	cursor: default;
 }
+
+.cke_skin_v2 fieldset
+{
+	padding: 10px;
+	border: 2px groove #E0DFE3;
+}
Index: /CKEditor/branches/features/adobeair/_source/skins/v2/richcombo.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/v2/richcombo.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/v2/richcombo.css	(revision 6006)
@@ -70,4 +70,5 @@
 	opacity: 0.70; /* Safari, Opera and Mozilla */
 	background-color: #f1f1e3;	/* Because of IE6+ClearType */
+	cursor: default;
 }
 
@@ -104,4 +105,5 @@
 	display: inline-block;
 	vertical-align: top;
+	cursor: default;
 }
 
@@ -288,2 +290,8 @@
 	height: 22px;
 }
+
+.cke_skin_v2 .cke_rtl .cke_rcombo .cke_font .cke_text,
+.cke_skin_v2 .cke_rtl .cke_rcombo .cke_fontSize .cke_text
+{
+	direction: ltr;
+}
Index: /CKEditor/branches/features/adobeair/_source/skins/v2/skin.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/v2/skin.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/v2/skin.js	(revision 6006)
@@ -66,9 +66,9 @@
 						// ml
 						el = innerDialog.getChild( 4 );
-						el.setStyle( 'height', ( body.$.offsetHeight - 31 - 14 ) + 'px' );
+						el.setStyle( 'height', ( height + body.getChild(0).$.offsetHeight ) + 'px' );
 
 						// mr
 						el = innerDialog.getChild( 5 );
-						el.setStyle( 'height', ( body.$.offsetHeight - 31 - 14 ) + 'px' );
+						el.setStyle( 'height', ( height + body.getChild(0).$.offsetHeight ) + 'px' );
 					},
 					100 );
Index: /CKEditor/branches/features/adobeair/_source/skins/v2/toolbar.css
===================================================================
--- /CKEditor/branches/features/adobeair/_source/skins/v2/toolbar.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/skins/v2/toolbar.css	(revision 6006)
@@ -279,4 +279,10 @@
 	height: 16px;
 	display: inline-block;
+	cursor: default;
+}
+
+.cke_skin_v2 .cke_rtl .cke_button .cke_icon
+{
+	background-image: url(icons_rtl.png);
 }
 
@@ -318,4 +324,5 @@
 	_background-image: url(images/sprites_ie6.png);
 	background-repeat: no-repeat;
+	cursor: default;
 }
 
Index: /CKEditor/branches/features/adobeair/_source/themes/default/theme.js
===================================================================
--- /CKEditor/branches/features/adobeair/_source/themes/default/theme.js	(revision 6005)
+++ /CKEditor/branches/features/adobeair/_source/themes/default/theme.js	(revision 6006)
@@ -23,5 +23,5 @@
 			var html =
 				'<span class="cke_shared">' +
-				'<span class="' + editor.skinClass + ' cke_editor_' + editor.name + '">' +
+				'<span class="' + editor.skinClass + ' ' + editor.id + ' cke_editor_' + editor.name + '">' +
 				'<span class="' + CKEDITOR.env.cssClass + '">' +
 				'<span class="cke_wrapper cke_' + editor.lang.dir + '">' +
@@ -115,5 +115,5 @@
 					' id="cke_', name, '"' +
 					' onmousedown="return false;"' +
-					' class="', editor.skinClass, ' cke_editor_', name, '"' +
+					' class="', editor.skinClass, ' ', editor.id, ' cke_editor_', name, '"' +
 					' dir="', editor.lang.dir, '"' +
 					' title="', ( CKEDITOR.env.gecko ? ' ' : '' ), '"' +
@@ -167,5 +167,5 @@
 
 			var element = CKEDITOR.dom.element.createFromHtml( [
-					'<div class="cke_editor_' + editor.name.replace('.', '\\.') + '_dialog cke_skin_', editor.skinName,
+					'<div class="', editor.id, '_dialog cke_editor_', editor.name.replace('.', '\\.'), '_dialog cke_skin_', editor.skinName,
 						'" dir="', editor.lang.dir, '"' +
 						' lang="', editor.langCode, '"' +
@@ -233,26 +233,4 @@
 			editor.element.clearCustomData();
 
-			/*
-			 * IE BUG: Removing the editor DOM elements while the selection is inside
-			 * the editing area would break IE7/8's selection system. So we need to put
-			 * the selection back to the parent document without scrolling the window.
-			 * (#3812)
-			 */
-			if ( CKEDITOR.env.ie )
-			{
-				container.setStyle( 'display', 'none' );
-
-				var $range = document.body.createTextRange();
-				$range.moveToElementText( container.$ );
-				try
-				{
-					// Putting the selection to a display:none element - this will certainly
-					// fail. But! We've just put the selection document back to the parent
-					// document without scrolling the window!
-					$range.select();
-				}
-				catch ( e ) {}
-			}
-
 			if ( container )
 				container.remove();
@@ -266,4 +244,15 @@
 })() );
 
+/**
+ * Returns the DOM element that represents a theme space. The default theme defines
+ * three spaces, namely "top", "contents" and "bottom", representing the main
+ * blocks that compose the editor interface.
+ * @param {String} spaceName The space name.
+ * @returns {CKEDITOR.dom.element} The element that represents the space.
+ * @example
+ * // Hide the bottom space in the UI.
+ * var bottom = editor.getThemeSpace( 'bottom' );
+ * bottom.setStyle( 'display', 'none' );
+ */
 CKEDITOR.editor.prototype.getThemeSpace = function( spaceName )
 {
@@ -274,10 +263,26 @@
 };
 
+/**
+ * Resizes the editor interface.
+ * @param {Number|String} width The new width. It can be an pixels integer or a
+ *		CSS size value.
+ * @param {Number|String} height The new height. It can be an pixels integer or
+ *		a CSS size value.
+ * @param {Boolean} [isContentHeight] Indicates that the provided height is to
+ *		be applied to the editor contents space, not to the entire editor
+ *		interface. Defaults to false.
+ * @param {Boolean} [resizeInner] Indicates that the first inner interface
+ *		element must receive the size, not the outer element. The default theme
+ *		defines the interface inside a pair of span elements
+ *		(&lt;span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;). By default the
+ *		first span element receives the sizes. If this parameter is set to
+ *		true, the second span is sized instead.
+ * @example
+ * editor.resize( 900, 300 );
+ * @example
+ * editor.resize( '100%', 450, true );
+ */
 CKEDITOR.editor.prototype.resize = function( width, height, isContentHeight, resizeInner )
 {
-	var numberRegex = /^\d+$/;
-	if ( numberRegex.test( width ) )
-		width += 'px';
-
 	var container = this.container,
 		contents = CKEDITOR.document.getById( 'cke_contents_' + this.name ),
@@ -288,5 +293,6 @@
 	// resize it. If we don't, the browser crashes!
 	CKEDITOR.env.webkit && outer.setStyle( 'display', 'none' );
-	outer.setStyle( 'width', width );
+	// Set as border box width. (#5353)
+	outer.setSize( 'width',  width, true );
 	if ( CKEDITOR.env.webkit )
 	{
@@ -304,4 +310,11 @@
 };
 
+/**
+ * Gets the element that can be freely used to check the editor size. This method
+ * is mainly used by the resize plugin, which adds a UI handle that can be used
+ * to resize the editor.
+ * @returns {CKEDITOR.dom.element} The resizable element.
+ * @example
+ */
 CKEDITOR.editor.prototype.getResizable = function()
 {
@@ -334,2 +347,9 @@
  * };
  */
+
+/**
+ * Fired after the editor instance is resized through
+ * the {@link CKEDITOR.editor.prototype.resize} method.
+ * @name CKEDITOR#resize
+ * @event
+ */
Index: /CKEditor/branches/features/adobeair/ckeditor.pack
===================================================================
--- /CKEditor/branches/features/adobeair/ckeditor.pack	(revision 6005)
+++ /CKEditor/branches/features/adobeair/ckeditor.pack	(revision 6006)
@@ -130,4 +130,5 @@
 					'_source/core/dom/walker.js',
 					'_source/core/dom/range.js',
+					'_source/core/dom/rangelist.js',
 					'_source/core/_bootstrap.js',
 					'_source/skins/kama/skin.js',
@@ -137,4 +138,5 @@
 					'_source/plugins/a11yhelp/plugin.js',
 					'_source/plugins/basicstyles/plugin.js',
+					'_source/plugins/bidi/plugin.js',
 					'_source/plugins/blockquote/plugin.js',
 					'_source/plugins/button/plugin.js',
@@ -143,4 +145,5 @@
 					'_source/plugins/colordialog/plugin.js',
 					'_source/plugins/contextmenu/plugin.js',
+					'_source/plugins/dialogadvtab/plugin.js',
 					'_source/plugins/div/plugin.js',
 					'_source/plugins/elementspath/plugin.js',
Index: /CKEditor/branches/features/adobeair/contents.css
===================================================================
--- /CKEditor/branches/features/adobeair/contents.css	(revision 6005)
+++ /CKEditor/branches/features/adobeair/contents.css	(revision 6006)
@@ -21,5 +21,7 @@
 	/* #3658: [IE6] Editor document has horizontal scrollbar on long lines
 	To prevent this misbehavior, we show the scrollbar always */
-	_overflow-y: scroll
+	_overflow-y: scroll;
+	/* #6341: The text cursor must be set on the editor area. */
+	cursor: text;
 }
 
