Index: /CKEditor/branches/features/contenteditable/CHANGES.html
===================================================================
--- /CKEditor/branches/features/contenteditable/CHANGES.html	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/CHANGES.html	(revision 5659)
@@ -41,7 +41,9 @@
 	<ul>
 		<li><a href="http://dev.fckeditor.net/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>
-	</ul>
-	<h3>
-			CKEditor 3.3.1 (SVN)</h3>
+		<li><a href="http://dev.fckeditor.net/ticket/5628">#5628</a> : Port 'DragResizeTable' plugin from FCKEditor 2.x.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/979">#979</a> : New configuration 'enableTabKeyTools' to allow using 'Tab' key to navigate through table cells.</li>
+	</ul>
+	<h3>
+			CKEditor 3.3.2 (SVN)</h3>
 	<p>
 			New features:</p>
@@ -52,5 +54,19 @@
 			Fixed issues:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/5780">#5780</a> : Text selection lost when open some of the dialogs.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/1644">#1644</a> : Removed references to cursor:hand in the stylesheets.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5411">#5411</a> : anchor, hidden, page-break objects (images) can't no longer be resized.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5456">#5456</a> : Initial focus incorect in api_dialog sample page.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5628">#5628</a> : Incorrect &lt;pre&gt; siblings merging.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5829">#5829</a> : Adding validation for start number field in list style dialog.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5845">#5845</a> : Context menu on empty list item loses selection.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5860">#5860</a> : [IE] &gt; in attribute values are incorrectly escaped.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5905">#5905</a> : SCAYT is not any more enabled by default.</li>
+	</ul>
+	<h3>
+			CKEditor 3.3.1</h3>
+	<p>
+			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>
@@ -59,5 +75,12 @@
 		<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.fckeditor.net/ticket/5840">#5840</a> : Some dialog access keys are conflicting with "Ctrl + A", select all text behavior on text input.</li>
 	</ul>
 	<h3>
Index: /CKEditor/branches/features/contenteditable/_dev/releaser/release.bat
===================================================================
--- /CKEditor/branches/features/contenteditable/_dev/releaser/release.bat	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_dev/releaser/release.bat	(revision 5659)
@@ -11,3 +11,3 @@
 :: rmdir /S /Q release
 
-java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.3.1 SVN" ckeditor_3.3.1_svn --run-before-release=langtool.bat
+java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.3.2 SVN" ckeditor_3.3.2_svn --run-before-release=langtool.bat
Index: /CKEditor/branches/features/contenteditable/_dev/releaser/release.sh
===================================================================
--- /CKEditor/branches/features/contenteditable/_dev/releaser/release.sh	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_dev/releaser/release.sh	(revision 5659)
@@ -13,4 +13,4 @@
 
 pushd $DIR
-java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.3.1 SVN" ckeditor_3.3.1_svn --run-before-release=$LANGTOOL
+java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.3.2 SVN" ckeditor_3.3.2_svn --run-before-release=$LANGTOOL
 popd
Index: /CKEditor/branches/features/contenteditable/_samples/api_dialog.html
===================================================================
--- /CKEditor/branches/features/contenteditable/_samples/api_dialog.html	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_samples/api_dialog.html	(revision 5659)
@@ -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/contenteditable/_source/core/dom/range.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/core/dom/range.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/core/dom/range.js	(revision 5659)
@@ -698,5 +698,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()
@@ -1167,11 +1167,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 +1194,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 +1222,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 +1239,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 )
@@ -1639,10 +1647,10 @@
 			   : CKEDITOR.POSITION_BEFORE_END );
 
-			var walker = new CKEDITOR.dom.walker( walkerRange ),
-			 retval = false;
+			var walker = new CKEDITOR.dom.walker( walkerRange );
 			walker.evaluator = elementBoundaryEval;
 			return walker[ checkType == CKEDITOR.START ?
 				'checkBackward' : 'checkForward' ]();
 		},
+
 		// Calls to this function may produce changes to the DOM. The range may
 		// be updated to reflect such changes.
@@ -1792,5 +1800,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
@@ -1844,5 +1852,5 @@
 /**
  * Check boundary types.
- * @see CKEDITOR.dom.range::checkBoundaryOfElement
+ * @see CKEDITOR.dom.range.prototype.checkBoundaryOfElement
  */
 CKEDITOR.START = 1;
@@ -1850,4 +1858,8 @@
 CKEDITOR.STARTEND = 3;
 
+/**
+ * Shrink range types.
+ * @see CKEDITOR.dom.range.prototype.shrink
+ */
 CKEDITOR.SHRINK_ELEMENT = 1;
 CKEDITOR.SHRINK_TEXT = 2;
Index: /CKEditor/branches/features/contenteditable/_source/core/dom/walker.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/core/dom/walker.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/core/dom/walker.js	(revision 5659)
@@ -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 )
-	{
-	},
 
 	/**
Index: /CKEditor/branches/features/contenteditable/_source/core/tools.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/core/tools.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/core/tools.js	(revision 5659)
@@ -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,5 +343,5 @@
 		htmlEncodeAttr : function( text )
 		{
-			return text.replace( /"/g, '&quot;' ).replace( /</g, '&lt;' ).replace( />/, '&gt;' );
+			return text.replace( /"/g, '&quot;' ).replace( /</g, '&lt;' ).replace( />/g, '&gt;' );
 		},
 
@@ -669,4 +674,8 @@
 		},
 
+		/**
+		 * Append the 'px' length unit to the size if it's missing.
+		 * @param length
+		 */
 		cssLength : (function()
 		{
@@ -678,4 +687,9 @@
 		})(),
 
+		/**
+		 * String specified by {@param str} repeats {@param times} times.
+		 * @param str
+		 * @param times
+		 */
 		repeat : function( str, times )
 		{
@@ -683,4 +697,8 @@
 		},
 
+		/**
+		 * Return the first successfully executed function's return value that
+		 * doesn't throw any exception.
+		 */
 		tryThese : function()
 		{
Index: /CKEditor/branches/features/contenteditable/_source/lang/_translationstatus.txt
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/_translationstatus.txt	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/_translationstatus.txt	(revision 5659)
@@ -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: 238
+ar.js      Found: 451 Missing: 74
+bg.js      Found: 280 Missing: 245
+bn.js      Found: 281 Missing: 244
+bs.js      Found: 187 Missing: 338
+ca.js      Found: 490 Missing: 35
+cs.js      Found: 411 Missing: 114
+cy.js      Found: 452 Missing: 73
+da.js      Found: 404 Missing: 121
+de.js      Found: 444 Missing: 81
+el.js      Found: 286 Missing: 239
+en-au.js   Found: 369 Missing: 156
+en-ca.js   Found: 369 Missing: 156
+en-gb.js   Found: 370 Missing: 155
+eo.js      Found: 259 Missing: 266
+es.js      Found: 524 Missing: 1
+et.js      Found: 301 Missing: 224
+eu.js      Found: 403 Missing: 122
+fa.js      Found: 302 Missing: 223
+fi.js      Found: 518 Missing: 7
+fo.js      Found: 420 Missing: 105
+fr-ca.js   Found: 301 Missing: 224
+fr.js      Found: 403 Missing: 122
+gl.js      Found: 283 Missing: 242
+gu.js      Found: 300 Missing: 225
+he.js      Found: 523 Missing: 2
+hi.js      Found: 302 Missing: 223
+hr.js      Found: 404 Missing: 121
+hu.js      Found: 445 Missing: 80
+is.js      Found: 307 Missing: 218
+it.js      Found: 404 Missing: 121
+ja.js      Found: 413 Missing: 112
+km.js      Found: 275 Missing: 250
+ko.js      Found: 293 Missing: 232
+lt.js      Found: 306 Missing: 219
+lv.js      Found: 283 Missing: 242
+mn.js      Found: 300 Missing: 225
+ms.js      Found: 265 Missing: 260
+nb.js      Found: 470 Missing: 55
+nl.js      Found: 494 Missing: 31
+no.js      Found: 470 Missing: 55
+pl.js      Found: 411 Missing: 114
+pt-br.js   Found: 402 Missing: 123
+pt.js      Found: 282 Missing: 243
+ro.js      Found: 301 Missing: 224
+ru.js      Found: 467 Missing: 58
+sk.js      Found: 302 Missing: 223
+sl.js      Found: 410 Missing: 115
+sr-latn.js Found: 276 Missing: 249
+sr.js      Found: 275 Missing: 250
+sv.js      Found: 299 Missing: 226
+th.js      Found: 287 Missing: 238
+tr.js      Found: 494 Missing: 31
+uk.js      Found: 404 Missing: 121
+vi.js      Found: 481 Missing: 44
+zh-cn.js   Found: 404 Missing: 121
+zh.js      Found: 404 Missing: 121
Index: /CKEditor/branches/features/contenteditable/_source/lang/af.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/af.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/af.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/ar.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/ar.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/ar.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/bg.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/bg.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/bg.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/bn.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/bn.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/bn.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/bs.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/bs.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/bs.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/ca.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/ca.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/ca.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/cs.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/cs.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/cs.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/cy.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/cy.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/cy.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/da.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/da.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/da.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/de.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/de.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/de.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/el.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/el.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/el.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/en-au.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/en-au.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/en-au.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/en-ca.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/en-ca.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/en-ca.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/en-gb.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/en-gb.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/en-gb.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/en.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/en.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/en.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type',
 		start				: 'Start',
+		validateStartNumber				:'List start number must be a whole number.',
 		circle				: 'Circle',
 		disc				: 'Disc',
Index: /CKEditor/branches/features/contenteditable/_source/lang/eo.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/eo.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/eo.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/es.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/es.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/es.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Tipo',
 		start				: 'Inicio',
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Círculo',
 		disc				: 'Disco',
Index: /CKEditor/branches/features/contenteditable/_source/lang/et.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/et.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/et.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/eu.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/eu.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/eu.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/fa.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/fa.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/fa.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/fi.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/fi.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/fi.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Tyyppi',
 		start				: 'Alku',
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Ympyrä',
 		disc				: 'Levy',
Index: /CKEditor/branches/features/contenteditable/_source/lang/fo.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/fo.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/fo.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/fr-ca.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/fr-ca.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/fr-ca.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/fr.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/fr.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/fr.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/gl.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/gl.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/gl.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/gu.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/gu.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/gu.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/he.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/he.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/he.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'סוג',
 		start				: 'תחילת מספור',
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'עיגול ריק',
 		disc				: 'עיגול מלא',
Index: /CKEditor/branches/features/contenteditable/_source/lang/hi.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/hi.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/hi.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/hr.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/hr.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/hr.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/hu.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/hu.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/hu.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/is.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/is.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/is.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/it.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/it.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/it.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/ja.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/ja.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/ja.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/km.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/km.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/km.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/ko.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/ko.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/ko.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/lt.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/lt.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/lt.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/lv.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/lv.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/lv.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/mn.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/mn.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/mn.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/ms.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/ms.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/ms.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/nb.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/nb.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/nb.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/nl.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/nl.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/nl.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/no.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/no.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/no.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/pl.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/pl.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/pl.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/pt-br.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/pt-br.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/pt-br.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/pt.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/pt.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/pt.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/ro.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/ro.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/ro.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/ru.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/ru.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/ru.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/sk.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/sk.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/sk.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/sl.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/sl.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/sl.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/sr-latn.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/sr-latn.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/sr-latn.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/sr.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/sr.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/sr.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/sv.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/sv.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/sv.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/th.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/th.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/th.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/tr.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/tr.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/tr.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/uk.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/uk.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/uk.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/vi.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/vi.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/vi.js	(revision 5659)
@@ -197,4 +197,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',
Index: /CKEditor/branches/features/contenteditable/_source/lang/zh-cn.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/zh-cn.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/zh-cn.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/lang/zh.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/lang/zh.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/lang/zh.js	(revision 5659)
@@ -197,4 +197,5 @@
 		type				: 'Type', // MISSING
 		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
 		circle				: 'Circle', // MISSING
 		disc				: 'Disc', // MISSING
Index: /CKEditor/branches/features/contenteditable/_source/plugins/basicstyles/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/basicstyles/plugin.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/basicstyles/plugin.js	(revision 5659)
@@ -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/contenteditable/_source/plugins/find/dialogs/find.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/find/dialogs/find.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/find/dialogs/find.js	(revision 5659)
@@ -329,5 +329,5 @@
 						cursors = this._.cursors;
 
-				if ( ( lastCursor = cursors[ cursors.length - 1 ] ) )
+				if ( ( lastCursor = cursors[ cursors.length - 1 ] ) && lastCursor.textNode )
 					nextRangeWalker = new characterWalker( getRangeAfterCursor( lastCursor ) );
 				// In case it's an empty range (no cursors), figure out next range from walker (#4951).
Index: /CKEditor/branches/features/contenteditable/_source/plugins/forms/dialogs/form.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/forms/dialogs/form.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/forms/dialogs/form.js	(revision 5659)
@@ -105,5 +105,5 @@
 						label : editor.lang.form.action,
 						'default' : '',
-						accessKey : 'A'
+						accessKey : 'T'
 					},
 					{
Index: /CKEditor/branches/features/contenteditable/_source/plugins/forms/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/forms/plugin.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/forms/plugin.js	(revision 5659)
@@ -28,6 +28,6 @@
 				'background-repeat: no-repeat;' +
 				'border: 1px solid #a9a9a9;' +
-				'width: 16px;' +
-				'height: 16px;' +
+				'width: 16px !important;' +
+				'height: 16px !important;' +
 			'}' );
 
Index: /CKEditor/branches/features/contenteditable/_source/plugins/htmldataprocessor/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/htmldataprocessor/plugin.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/htmldataprocessor/plugin.js	(revision 5659)
@@ -184,5 +184,5 @@
 					delete element.attributes[ 'class' ];
 				},
-				
+
 				body : function( element )
 				{
Index: /CKEditor/branches/features/contenteditable/_source/plugins/image/dialogs/image.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/image/dialogs/image.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/image/dialogs/image.js	(revision 5659)
@@ -576,5 +576,5 @@
 							type : 'text',
 							label : editor.lang.image.alt,
-							accessKey : 'A',
+							accessKey : 'T',
 							'default' : '',
 							onChange : function()
Index: /CKEditor/branches/features/contenteditable/_source/plugins/link/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/link/plugin.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/link/plugin.js	(revision 5659)
@@ -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' +
Index: /CKEditor/branches/features/contenteditable/_source/plugins/liststyle/dialogs/liststyle.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/liststyle/dialogs/liststyle.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/liststyle/dialogs/liststyle.js	(revision 5659)
@@ -93,4 +93,25 @@
 		else if ( startupPage == 'numberedListStyle'  )
 		{
+
+			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' ]
+			];
+
+			if ( !CKEDITOR.env.ie || CKEDITOR.env.version > 7 )
+			{
+				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' ]
+				]);
+			}
+
 			return {
 				title : editor.lang.list.numberedTitle,
@@ -113,4 +134,5 @@
 										type : 'text',
 										id : 'start',
+										validate : CKEDITOR.dialog.validate.integer( editor.lang.list.validateStartNumber ),
 										setup : function( element )
 										{
@@ -128,17 +150,5 @@
 										id : 'type',
 										style : 'width: 100%;',
-										items :
-										[
-											[ editor.lang.list.notset, '' ],
-											[ editor.lang.list.armenian, 'armenian' ],
-											[ editor.lang.list.georgian, 'georgian' ],
-											[ 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.lowerGreek, 'lower-greek' ],
-											[ editor.lang.list.decimal, 'decimal' ],
-											[ editor.lang.list.decimalLeadingZero, 'decimal-leading-zero' ]
-										],
+										items : listStyleOptions,
 										setup : function( element )
 										{
Index: /CKEditor/branches/features/contenteditable/_source/plugins/pagebreak/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/pagebreak/plugin.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/pagebreak/plugin.js	(revision 5659)
@@ -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;' +
 
Index: /CKEditor/branches/features/contenteditable/_source/plugins/pastefromword/filter/default.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/pastefromword/filter/default.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/pastefromword/filter/default.js	(revision 5659)
@@ -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,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 )
 	{
@@ -122,5 +120,5 @@
 
 	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 emptyMarginRegex = /^(?:\b0[^\s]*\s*){1,4}$/;		// e.g. 0px 0pt 0px
 
 	var listBaseIndent = 0,
@@ -201,6 +199,5 @@
 			{
 				// <cke:listbullet> indicate a list item.
-				var children = element.children,
-					attrs = element.attributes,
+				var attrs = element.attributes,
 					listMarker;
 
@@ -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/contenteditable/_source/plugins/scayt/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/scayt/plugin.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/scayt/plugin.js	(revision 5659)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -358,6 +358,6 @@
 		loadEngine : function( editor )
 		{
-			// SCAYT doesn't work with Opera.
-			if ( CKEDITOR.env.opera )
+			// SCAYT doesn't work with Firefox2, Opera.
+			if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 || CKEDITOR.env.opera )
 				return editor.fire( 'showScaytState' );
 
@@ -383,5 +383,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 );
@@ -409,4 +409,5 @@
 								{
 									type : 'text/javascript',
+									async : 'true',
 									src : scaytUrl
 								}
@@ -453,7 +454,4 @@
 		exec: function( editor )
 		{
-			var autoStartup = editor.config.scayt_autoStartup;
-			autoStartup = ( autoStartup == undefined ) || autoStartup;
-
 			if ( plugin.isScaytReady( editor ) )
 			{
@@ -472,5 +470,5 @@
 				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 );
@@ -779,6 +777,5 @@
 
 			// Start plugin
-			var autoStartup = editor.config.scayt_autoStartup;
-			if ( ( autoStartup == undefined ) || autoStartup )
+			if ( editor.config.scayt_autoStartup )
 			{
 				editor.on( 'instanceReady', function()
@@ -812,7 +809,7 @@
  * @name CKEDITOR.config.scayt_autoStartup
  * @type Boolean
- * @default true
- * @example
- * config.scayt_autoStartup = false;
+ * @default false
+ * @example
+ * config.scayt_autoStartup = true;
  */
 
Index: /CKEditor/branches/features/contenteditable/_source/plugins/selection/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/selection/plugin.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/selection/plugin.js	(revision 5659)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -477,7 +477,11 @@
 
 		/**
-		 * Retrieve the DOM ranges that present this selection..
-		 * @param {Boolean} onlyEditables Skip non-editable elements by splitting the range into multiple.  
-		 * @return {CKEDITOR.dom.ranges} ranges
+		 * 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 ()
@@ -928,4 +932,8 @@
 		},
 
+		/**
+		 *  Make the current selection of type {@link CKEDITOR.SELECTION_ELEMENT} by enclosing the specified element.
+		 * @param element
+		 */
 		selectElement : function( element )
 		{
@@ -984,4 +992,9 @@
 		},
 
+		/**
+		 *  Adding the specified ranges to document selection preceding
+		 * by clearing up the original selection.
+		 * @param {CKEDITOR.dom.range} ranges
+		 */
 		selectRanges : function( ranges )
 		{
@@ -1069,4 +1082,10 @@
 		},
 
+		/**
+		 *  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 )
 		{
@@ -1074,4 +1093,10 @@
 		},
 
+		/**
+		 *  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 )
 		{
@@ -1079,4 +1104,8 @@
 		},
 
+		/**
+		 * Select the virtual ranges denote by the bookmarks by calling #selectRanges.
+		 * @param bookmarks
+		 */
 		selectBookmarks : function( bookmarks )
 		{
@@ -1092,4 +1121,7 @@
 		},
 
+		/**
+		 * Retrieve the common ancestor node of the first range and the last range.
+		 */
 		getCommonAncestor : function()
 		{
@@ -1100,5 +1132,7 @@
 		},
 
-		// Moving scroll bar to the current selection's start position.
+		/**
+		 * Moving scroll bar to the current selection's start position.
+		 */
 		scrollIntoView : function()
 		{
@@ -1110,149 +1144,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 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 );
-
+	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();
-
-					// 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 );
+				}
+
+				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 );
 				}
-				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/contenteditable/_source/plugins/sourcearea/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/sourcearea/plugin.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/sourcearea/plugin.js	(revision 5659)
@@ -192,4 +192,5 @@
 		{
 			modes : { wysiwyg:1, source:1 },
+			editorFocus : false,
 
 			exec : function( editor )
Index: /CKEditor/branches/features/contenteditable/_source/plugins/styles/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/styles/plugin.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/styles/plugin.js	(revision 5659)
@@ -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 } );
@@ -181,4 +181,8 @@
 		},
 
+		/**
+		 * Whether this style can be applied at the element path.
+ 		 * @param elementPath
+		 */
 		checkApplicable : function( elementPath )
 		{
@@ -223,4 +227,6 @@
 
 						var elementAttr = element.getAttribute( attName ) || '';
+
+						// Special treatment for 'style' attribute is required.
 						if ( attName == 'style' ?
 							compareCssText( attribs[ attName ], normalizeCssText( elementAttr, false ) )
@@ -766,4 +772,5 @@
 	}
 
+	var nonWhitespaces = CKEDITOR.dom.walker.whitespaces( true );
 	/**
 	 * Merge a <pre> block with a previous sibling if available.
@@ -772,5 +779,5 @@
 	{
 		var previousBlock;
-		if ( !( ( previousBlock = preBlock.getPreviousSourceNode( true, CKEDITOR.NODE_ELEMENT ) )
+		if ( !( ( previousBlock = preBlock.getPrevious( nonWhitespaces ) )
 				 && previousBlock.is
 				 && previousBlock.is( 'pre') ) )
@@ -1196,4 +1203,5 @@
 	}
 
+	// Make the comparison of attribute value easier by standardizing it.
 	function normalizeProperty( name, value, isStyle )
 	{
@@ -1203,4 +1211,5 @@
 	}
 
+	// Make the comparison of style text easier by standardizing it.
 	function normalizeCssText( unparsedCssText, nativeNormalize )
 	{
@@ -1238,4 +1247,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 )
 	{
@@ -1244,6 +1259,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 ]
Index: /CKEditor/branches/features/contenteditable/_source/plugins/tab/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/tab/plugin.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/tab/plugin.js	(revision 5659)
@@ -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,21 @@
  * 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;
+ */
+
+CKEDITOR.config.keystrokes.push(
+	[ CKEDITOR.ALT + 38 /*Arrow Up*/, 'selectPreviousCell' ],
+	[ CKEDITOR.ALT + 40 /*Arrow Down*/, 'selectNextCell' ]
+);
Index: /CKEditor/branches/features/contenteditable/_source/plugins/tableresize/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/tableresize/plugin.js	(revision 5659)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/tableresize/plugin.js	(revision 5659)
@@ -0,0 +1,317 @@
+/*
+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;
+
+	function getCellWidth( cell )
+	{
+		return CKEDITOR.env.ie ? cell.$.clientWidth : parseInt( cell.getComputedStyle( 'width' ), 10 );
+	}
+
+	function getCellBorderWidth( cell, side )
+	{
+		var computed = cell.getComputedStyle( 'border-' + side + '-width' ),
+			borderMap =
+			{
+				thin: '2px',
+				medium: '4px',
+				thick: '6px'
+			};
+
+		if ( computed.indexOf( 'px' ) < 0 )
+		{
+			// look up keywords
+			if ( computed in borderMap && cell.getComputedStyle( 'border-style' ) != 'none' )
+				computed = borderMap[ computed ];
+			else
+				computed = 0;
+		}
+
+		return computed;
+	}
+
+	function buildTableColumnPillars( tableElement )
+	{
+		var table = tableElement.$;
+
+		// Elect the table row that contains the most columns.
+		var maxCells = 0, elected;
+		for ( var i = 0, rowCount = table.rows.length ; i < rowCount; i++ )
+		{
+			var tr = table.rows[ i ], cellsCount = tr.cells.length;
+
+			if ( cellsCount > maxCells )
+			{
+				maxCells = cellsCount;
+				elected = tr;
+			}
+		}
+		
+		tr = elected;
+		var columnIndex = -1, pillars = [];
+		var tbody = new CKEDITOR.dom.element( table.tBodies[ 0 ] ),
+				tbodyPosition = tbody.getDocumentPosition();
+		for ( var j = 0, colCount = tr.cells.length ; j < colCount ; j++ )
+		{
+			var td = new CKEDITOR.dom.element( tr.cells[ j ] ),
+					nextTd = tr.cells[ j + 1 ] && new CKEDITOR.dom.element( tr.cells[ j + 1 ] );
+
+			columnIndex += td.$.colSpan || 1;
+			var cellPosition =  td.getDocumentPosition(),
+					rangeLeft = cellPosition.x + td.$.offsetWidth - parseInt( getCellBorderWidth ( td, 'right' ), 10 );
+
+			if ( nextTd )
+			{
+				cellPosition =  nextTd.getDocumentPosition();
+				var rangeRight = cellPosition.x + parseInt( getCellBorderWidth( nextTd, 'left' ), 10 );
+
+				// Compsensate for too "slim" line between columns, make the pillar shown easier.
+				if ( rangeRight - rangeLeft < 8 )
+				{
+					rangeLeft-= 4;
+					rangeRight += 4;
+				}
+
+				var columnWidth = rangeRight - rangeLeft;
+
+				// The pillar should reflects exactly the shape of the hovered column border line.
+				pillars.push({ table : tableElement, index : columnIndex, x : rangeLeft, y : tbodyPosition.y , width : columnWidth, height: tbody.$.offsetHeight });
+			}
+		}
+
+		return pillars;
+	}
+
+	function getPillarAtPosition( pillars, position )
+	{
+		for ( var i = 0, length = pillars.length; i < length; i++ )
+		{
+			if ( position.x > pillars[ i ].x && position.x - pillars[ i ].x < pillars[ i ].width )
+				return pillars[ i ];
+		}
+		return null;
+	}
+
+	function cancel( evt )
+	{
+		evt.data.preventDefault();
+	}
+	
+	function columnResizer( editor )
+	{
+		var pillar, document, resizer, startOffset, currentShift;
+		
+		var leftSideCells, rightSideCells, leftShiftBoundary, rightShiftBoundary;
+		
+		function detach()
+		{
+			pillar = null;
+			currentShift = null;
+			document.removeListener( 'mousemove', onMouseMove );
+			document.removeListener( 'mouseup', onMouseUp );
+			resizer.removeListener( 'mousedown', onMouseDown );
+			resizer.removeListener( 'mouseout', onMouseOut );
+			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;
+
+			for ( var i = 0, rowCount = map.length; i < rowCount; i++ )
+			{
+				var row = map[ i ],
+						leftCell = new CKEDITOR.dom.element( row[ columnIndex ] ),
+						rightCell = new CKEDITOR.dom.element( row[ columnIndex + 1 ] );
+
+				if ( !leftCell.equals( rightCell ) )
+				{
+					leftMinSize = Math.min( leftMinSize, getCellWidth( leftCell ) );
+					rightMinSize = Math.min( rightMinSize, getCellWidth( rightCell ) );
+					leftColumnCells.push( leftCell );
+					rightColumnCells.push( rightCell );
+				}
+			}
+
+			leftSideCells = leftColumnCells;
+			rightSideCells = rightColumnCells;
+			leftShiftBoundary =  pillar.x - leftMinSize;
+			rightShiftBoundary = pillar.x + rightMinSize;
+			
+			resizer.setOpacity( 0.5 );
+			startOffset = parseInt( resizer.getStyle( 'left' ), 10 );
+			currentShift = 0;
+			document.on( 'mousemove', onMouseMove, this );
+			// Prevent the native drag behavior otherwise the above 'mousemove' won't fired.
+			document.on( 'dragstart', cancel, this );
+		}
+		
+		function resizeEnd()
+		{
+			resizer.setOpacity( 0 );
+			currentShift && resizeColumn();
+			
+			var table = pillar.table;
+			setTimeout( function () { table.removeCustomData( '_cke_table_pillars' ); }, 0 );
+
+			detach();
+		}
+		
+		function resizeColumn()
+		{
+			// Perform the actual resize to table cells, only for those by side of the pillar.
+			for ( var i = 0, count = leftSideCells.length; i < count; i++ )
+			{
+				var leftCell = leftSideCells[ i ],
+						rightCell = rightSideCells[ i ];
+
+				// Defer the resizing to avoid any interference among cells.
+				( function( leftCell, leftOldWidth, rightCell, rightOldWidth, sizeShift )
+				{
+					CKEDITOR.tools.setTimeout( function()
+					{
+						leftCell.setStyle( 'width', pxUnit(  leftOldWidth + sizeShift ) );
+						rightCell.setStyle( 'width', pxUnit(  rightOldWidth - sizeShift ) );
+
+					}, 0, this );
+
+				}).call( this, leftCell, getCellWidth( leftCell ),
+						rightCell, getCellWidth( rightCell ), currentShift );
+			}
+		}
+		
+		function onMouseMove( evt )
+		{
+			var mouseOffset = evt.data.$.clientX,
+					resizerNewPosition = mouseOffset - Math.round( parseInt( resizer.getComputedStyle( 'width' ), 10 ) / 2 );
+
+			// Boundaries checking.
+			if ( resizerNewPosition > leftShiftBoundary && resizerNewPosition < rightShiftBoundary )
+			{
+				resizer.setStyle( 'left', pxUnit( resizerNewPosition ) );
+				currentShift = resizerNewPosition - startOffset;
+			}
+
+			cancel( evt );
+		}
+		
+		function onMouseDown( evt )
+		{
+			cancel( evt );
+			resizeStart();
+			document.on( 'mouseup', onMouseUp, this );
+		}
+		
+		function onMouseUp()
+		{
+			resizeEnd();
+		}
+		
+		function onMouseOut()
+		{
+			// Don't detach during resizing.
+			!currentShift && detach();
+		}
+		
+		document = editor.document;
+		resizer = CKEDITOR.dom.element.createFromHtml( '<div style="position: absolute; cursor: col-resize; ' +
+			'filter:alpha(opacity=0);opacity:0;padding:0;background-color:#004;background-image:none;border: 0px none;"></div>' );
+
+		// Place the resizer after body to prevent it from being editable.
+		document.getDocumentElement().append( resizer );
+		this.attachTo = function( targetPillar )
+		{
+			// Accept only one pillar at a time.
+			if ( currentShift )
+				return;
+
+			pillar = targetPillar;
+			resizer.setStyles(
+			{
+				width: pxUnit( targetPillar.width ),
+				height : pxUnit( targetPillar.height ),
+				left : pxUnit( targetPillar.x ),
+				top : pxUnit( targetPillar.y )
+			});
+
+			resizer.on( 'mousedown', onMouseDown, this );
+			resizer.on( 'mouseout', onMouseOut, this );
+
+			// Display the resizer to receive events but don't show it,
+			// only change the cursor to resizable shape.
+			resizer.show();
+		}; 
+	}
+
+	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.equals( target ) && !dest.is( 'body' ) )
+				dest = dest.getParent();
+			if ( !dest || dest.equals( target ) )
+				return;
+		}
+		
+		target.getAscendant( 'table', true ).removeCustomData( '_cke_table_pillars' );
+		evt && 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;
+
+					// Considering table, tr, td, tbody but nothing else.
+					var target = evt.getTarget();
+					if ( !( target.is( 'table' ) || target.getAscendant( 'tbody', true ) ) )
+						return;
+
+					var table = target.getAscendant( 'table', true ),
+							pillars;
+
+					if ( !( pillars = table.getCustomData( '_cke_table_pillars' ) ) )
+					{
+						// Cache table pillars caculation result.
+						table.setCustomData( '_cke_table_pillars', ( pillars = buildTableColumnPillars( table ) ) );
+						table.on( 'mouseout', clearPillarsCache );
+						table.on( 'mousedown', clearPillarsCache );
+					}
+
+					var pillar = getPillarAtPosition( pillars, { x : evt.$.clientX, y : evt.$.clientY } );
+					if ( pillar )
+					{
+						!resizer && ( resizer = new columnResizer( editor ) );
+						resizer.attachTo( pillar );
+					}
+				});
+			});
+		}
+	});
+
+} )( );
Index: /CKEditor/branches/features/contenteditable/_source/plugins/tabletools/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/tabletools/plugin.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/tabletools/plugin.js	(revision 5659)
@@ -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 ),
@@ -1115,2 +1070,52 @@
 	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/contenteditable/_source/plugins/wsc/dialogs/wsc.css
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/wsc/dialogs/wsc.css	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/wsc/dialogs/wsc.css	(revision 5659)
@@ -71,5 +71,4 @@
 	border-bottom: #d5d59d 1px solid;
 	cursor: pointer;
-	cursor: hand;
 }
 
Index: /CKEditor/branches/features/contenteditable/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/wysiwygarea/plugin.js	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/wysiwygarea/plugin.js	(revision 5659)
@@ -15,5 +15,5 @@
 
 	// 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 = /\s*<(p|div|address|h\d|center|li)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\1>)?\s*(?=$|<\/body>)/gi;
 
 	function checkReadOnly( selection )
@@ -464,4 +464,24 @@
 						}
 
+						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 );
+									}
+								}
+							} );
+						}
+
 						// Webkit: avoid from editing form control elements content.
 						if ( CKEDITOR.env.webkit )
@@ -497,5 +517,6 @@
 								if ( evt.data.getTarget().equals( htmlElement ) )
 								{
-									CKEDITOR.env.gecko && blinkCursor();
+									if ( CKEDITOR.env.gecko && CKEDITOR.env.version >= 10900 )
+										blinkCursor();
 									focusGrabber.focus();
 								}
@@ -511,5 +532,8 @@
 							{
 								var doc = editor.document;
-								if ( CKEDITOR.env.gecko || CKEDITOR.env.opera )
+
+								if ( CKEDITOR.env.gecko && CKEDITOR.env.version >= 10900 )
+									blinkCursor();
+								else if ( CKEDITOR.env.opera )
 									doc.getBody().focus();
 								else if ( CKEDITOR.env.webkit )
@@ -845,11 +869,28 @@
 
 			// Switch on design mode for a short while and close it after then.
-			function blinkCursor()
+			function blinkCursor( retry )
 			{
-				editor.document.$.designMode = 'on';
-				setTimeout( function ()
-				{
-					editor.document.$.designMode = 'off';
-				}, 50 );
+				CKEDITOR.tools.tryThese(
+					function()
+					{
+						editor.document.$.designMode = 'on';
+						setTimeout( function ()
+						{
+							editor.document.$.designMode = 'off';
+							editor.document.getBody().focus();
+						}, 50 );
+					},
+					function()
+					{
+						// The above call is known to fail when parent DOM
+						// tree layout changes may break design mode. (#5782)
+						// Refresh the 'contentEditable' is a cue to this.
+						editor.document.$.designMode = 'off';
+						var body = editor.document.getBody();
+						body.setAttribute( 'contentEditable', false );
+						body.setAttribute( 'contentEditable', true );
+						// Try it again once..
+						!retry && blinkCursor( 1 );
+					});
 			}
 
Index: /CKEditor/branches/features/contenteditable/_source/skins/kama/dialog.css
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/skins/kama/dialog.css	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/skins/kama/dialog.css	(revision 5659)
@@ -677,5 +677,4 @@
 	border: outset 1px;
 	cursor: pointer;
-	cursor: hand;
 }
 
@@ -742,5 +741,4 @@
 {
 	cursor: pointer;
-	cursor: hand;
 }
 
@@ -775,5 +773,4 @@
 	display: inline;
 	cursor: pointer;
-	cursor: hand;
 	font-weight: bold;
 	position: relative;
Index: /CKEditor/branches/features/contenteditable/_source/skins/office2003/dialog.css
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/skins/office2003/dialog.css	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/skins/office2003/dialog.css	(revision 5659)
@@ -608,5 +608,4 @@
 	border: outset 1px;
 	cursor: pointer;
-	cursor: hand;
 }
 
@@ -673,5 +672,4 @@
 {
 	cursor: pointer;
-	cursor: hand;
 }
 
@@ -705,5 +703,4 @@
 	display: inline;
 	cursor: pointer;
-	cursor: hand;
 	font-weight: bold;
 	position: relative;
Index: /CKEditor/branches/features/contenteditable/_source/skins/v2/dialog.css
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/skins/v2/dialog.css	(revision 5658)
+++ /CKEditor/branches/features/contenteditable/_source/skins/v2/dialog.css	(revision 5659)
@@ -610,5 +610,4 @@
 	border: outset 1px;
 	cursor: pointer;
-	cursor: hand;
 }
 
@@ -675,5 +674,4 @@
 {
 	cursor: pointer;
-	cursor: hand;
 }
 
@@ -707,5 +705,4 @@
 	display: inline;
 	cursor: pointer;
-	cursor: hand;
 	font-weight: bold;
 	position: relative;
