Index: /CKEditor/branches/versions/3.5.x/CHANGES.html
===================================================================
--- /CKEditor/branches/versions/3.5.x/CHANGES.html	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/CHANGES.html	(revision 6126)
@@ -74,5 +74,5 @@
 		<li><a href="http://dev.ckeditor.com/ticket/6644">#6644</a> : Restrict onmousedown handler to the toolbar area.</li>
 		<li><a href="http://dev.ckeditor.com/ticket/6656">#6656</a> : Panelbutton's buttons became active when clicking on source.</li>
-		<li><a href="http://dev.ckeditor.com/ticket/5404">#5404</a> : Whitespaces (NBSP) were incorrectly added into empty table cells and list items.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6248">#6248</a> : Whitespaces (NBSP) were incorrectly added into empty table cells and list items.</li>
 		<li><a href="http://dev.ckeditor.com/ticket/6575">#6575</a> : Tabs disappearing in Link dialog after specific action sequence.</li>
 		<li><a href="http://dev.ckeditor.com/ticket/6510">#6510</a> : Margin mirroring doesn't respect style configuration.</li>
@@ -86,4 +86,6 @@
 		<li><a href="http://dev.ckeditor.com/ticket/6330">#6330</a> : List bullet form MS Word with Roman numbering are not preserved.</li>
 		<li><a href="http://dev.ckeditor.com/ticket/6720">#6720</a> : Attribute protection might detect wrong elements.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6580">#6580</a> : [IE9] Flash dialog doesn't get filled up.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6447">#6447</a> : Outdent list with "indentClasses" config doesn't work.</li>
 	</ul>
 	<h3>
Index: /CKEditor/branches/versions/3.5.x/_source/core/config.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/config.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/core/config.js	(revision 6126)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -351,5 +351,5 @@
 	/**
 	 * List of regular expressions to be executed over the input HTML,
-	 * indicating code that must stay untouched.
+	 * indicating HTML source code that matched must <strong>not</strong> present in WYSIWYG mode for editing.
 	 * @type Array
 	 * @default [] (empty array)
Index: /CKEditor/branches/versions/3.5.x/_source/core/dom/document.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/dom/document.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/core/dom/document.js	(revision 6126)
@@ -151,5 +151,5 @@
 		getElementsByTag : function( tagName, namespace )
 		{
-			if ( !CKEDITOR.env.ie && namespace )
+			if ( !( CKEDITOR.env.ie && ! ( document.documentMode > 8 ) ) && namespace )
 				tagName = namespace + ':' + tagName;
 			return new CKEDITOR.dom.nodeList( this.$.getElementsByTagName( tagName ) );
Index: /CKEditor/branches/versions/3.5.x/_source/core/dom/element.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/dom/element.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/core/dom/element.js	(revision 6126)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -614,5 +614,5 @@
 			var nodeName = this.$.nodeName.toLowerCase();
 
-			if ( CKEDITOR.env.ie )
+			if ( CKEDITOR.env.ie && ! ( document.documentMode > 8 ) )
 			{
 				var scopeName = this.$.scopeName;
@@ -721,7 +721,4 @@
 			var thisLength = thisAttribs.length,
 				otherLength = otherAttribs.length;
-
-			if ( !CKEDITOR.env.ie && thisLength != otherLength )
-				return false;
 
 			for ( var i = 0 ; i < thisLength ; i++ )
Index: /CKEditor/branches/versions/3.5.x/_source/core/dom/node.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/dom/node.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/core/dom/node.js	(revision 6126)
@@ -661,4 +661,22 @@
 		},
 
+		/**
+		 * Checks is this node is read-only (should not be changed). It
+		 * additionaly returns the element, if any, which defines the read-only
+		 * state of this node. It may be the node itself or any of its parent
+		 * nodes.
+		 * @returns {CKEDITOR.dom.element|Boolean} An element containing
+		 *		read-only attributes or "false" if none is found.
+		 * @since 3.5
+		 * @example
+		 * // For the following HTML:
+		 * // <div contenteditable="false">Some <b>text</b></div>
+		 * 
+		 * // If "ele" is the above <div>
+		 * ele.getReadOnlyRoot();  // the <div> element
+		 *
+		 * // If "ele" is the above <b>
+		 * ele.getReadOnlyRoot();  // the <div> element
+		 */
 		isReadOnly : function()
 		{
Index: /CKEditor/branches/versions/3.5.x/_source/core/dom/walker.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/core/dom/walker.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/core/dom/walker.js	(revision 6126)
@@ -335,14 +335,13 @@
 		'table-cell' : 1,
 		'table-caption' : 1
-	},
-	blockBoundaryNodeNameMatch = { hr : 1 };
+	};
 
 	CKEDITOR.dom.element.prototype.isBlockBoundary = function( customNodeNames )
 	{
-		var nodeNameMatches = CKEDITOR.tools.extend( {},
-													blockBoundaryNodeNameMatch, customNodeNames || {} );
-
-		return blockBoundaryDisplayMatch[ this.getComputedStyle( 'display' ) ] ||
-			nodeNameMatches[ this.getName() ];
+		var nodeNameMatches = CKEDITOR.tools.extend( {}, CKEDITOR.dtd.$block, customNodeNames || {} );
+
+		// Don't consider floated formatting as block boundary, fall back to dtd check in that case. (#6297)  
+		return this.getComputedStyle( 'float' ) == 'none' && blockBoundaryDisplayMatch[ this.getComputedStyle( 'display' ) ]
+				|| nodeNameMatches[ this.getName() ];
 	};
 
Index: /CKEditor/branches/versions/3.5.x/_source/lang/de.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/lang/de.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/lang/de.js	(revision 6126)
@@ -741,5 +741,5 @@
 		title		: 'Über CKEditor',
 		dlgTitle	: 'Über CKEditor',
-		moreInfo	: 'Für Informationen Liztenzbestimmungen besuchen sie bitte unsere Webseite:',
+		moreInfo	: 'Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:',
 		copy		: 'Copyright &copy; $1. Alle Rechte vorbehalten.'
 	},
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/bidi/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/bidi/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/bidi/plugin.js	(revision 6126)
@@ -49,5 +49,5 @@
 		var editor = evt.editor,
 			chromeRoot = editor.container.getChild( 1 ),
-			directionNode = getElementForDirection( evt.data.path.lastElement );
+			directionNode = evt.data.path.block || evt.data.path.blockLimit;
 
 		if ( directionNode && editor.lang.dir != directionNode.getComputedStyle( 'direction' ) )
@@ -124,5 +124,11 @@
 		// like a mirror. (#5910)
 		if ( dir != dirBefore )
-			editor.fire( 'dirChanged', element );
+		{
+			editor.fire( 'dirChanged',
+				{
+					node : element,
+					dir : dir
+				} );
+		}
 
 		editor.forceNextSelectionCheck();
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/dialog/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/dialog/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/dialog/plugin.js	(revision 6126)
@@ -1039,5 +1039,5 @@
 		{
 			var tab = this._.tabs[id] && this._.tabs[id][0];
-			if ( !tab || this._.pageCount == 1 )
+			if ( !tab || this._.pageCount == 1 || !tab.isVisible() )
 				return;
 			// Switch to other tab first when we're hiding the active tab.
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/enterkey/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/enterkey/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/enterkey/plugin.js	(revision 6126)
@@ -99,5 +99,6 @@
 			else
 			{
-				var newBlock;
+				var newBlock,
+					newBlockDir;
 
 				if ( previousBlock )
@@ -116,5 +117,9 @@
 
 				if ( !newBlock )
+				{
 					newBlock = doc.createElement( blockTag );
+					if ( previousBlock && ( newBlockDir = previousBlock.getDirection() ) )
+						newBlock.setAttribute( 'dir', newBlockDir );
+				}
 				// Force the enter block unless we're talking of a list item.
 				else if ( forceMode && !newBlock.is( 'li' ) )
@@ -223,13 +228,26 @@
 			if ( !forceMode && isEndOfBlock && headerTagRegex.test( startBlockTag ) )
 			{
-				// Insert a <br> after the current paragraph.
-				doc.createElement( 'br' ).insertAfter( startBlock );
-
-				// A text node is required by Gecko only to make the cursor blink.
-				if ( CKEDITOR.env.gecko )
-					doc.createText( '' ).insertAfter( startBlock );
-
-				// IE has different behaviors regarding position.
-				range.setStartAt( startBlock.getNext(), CKEDITOR.env.ie ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_START );
+				var newBlock,
+					newBlockDir;
+					
+				if ( newBlockDir = startBlock.getDirection() )
+				{
+					newBlock = doc.createElement( 'div' );
+					newBlock.setAttribute( 'dir', newBlockDir );
+					newBlock.insertAfter( startBlock );
+					range.setStart( newBlock, 0 );
+				}
+				else
+				{
+					// Insert a <br> after the current paragraph.
+					doc.createElement( 'br' ).insertAfter( startBlock );
+
+					// A text node is required by Gecko only to make the cursor blink.
+					if ( CKEDITOR.env.gecko )
+						doc.createText( '' ).insertAfter( startBlock );
+
+					// IE has different behaviors regarding position.
+					range.setStartAt( startBlock.getNext(), CKEDITOR.env.ie ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_START );
+				}
 			}
 			else
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/floatpanel/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/floatpanel/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/floatpanel/plugin.js	(revision 6126)
@@ -61,4 +61,6 @@
 				dir : editor.lang.dir
 			};
+
+			editor.on( 'mode', function(){ this.hide(); }, this );
 		},
 
@@ -124,8 +126,9 @@
 				element.setStyles(
 					{
-						top : 0,
+						top : top + 'px',
 						left: 0,
 						display	: ''
 					});
+
 				// Don't use display or visibility style because we need to
 				// calculate the rendering layout later and focus the element.
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/htmldataprocessor/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/htmldataprocessor/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/htmldataprocessor/plugin.js	(revision 6126)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -273,5 +273,5 @@
 	}
 
-	var protectAttributeRegex = /<((?:a|area|img|input)[\s\S]*?\s)((href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))([^>]*)>/gi,
+	var protectAttributeRegex = /<((?:a|area|img|input)\b[\s\S]*?\s)((href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))([^>]*)>/gi,
 		findSavedSrcRegex = /\sdata-cke-saved-src\s*=/;
 
@@ -502,7 +502,7 @@
 /**
  * Whether to force using "&" instead of "&amp;amp;" in elements attributes
- * values. It's not recommended to change this setting for compliance with the
- * W3C XHTML 1.0 standards
- * (<a href="http://www.w3.org/TR/xhtml1/#C_12">C.12, XHTML 1.0</a>).
+ * values, it's not recommended to change this setting for compliance with the
+ * W3C XHTML 1.0 standards (<a href="http://www.w3.org/TR/xhtml1/#C_12">C.12, XHTML 1.0</a>).
+ * @name CKEDITOR.config.forceSimpleAmpersand
  * @name CKEDITOR.config.forceSimpleAmpersand
  * @type Boolean
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/indent/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/indent/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/indent/plugin.js	(revision 6126)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -248,8 +248,6 @@
 					indentStep = Math.min( indentStep, editor.config.indentClasses.length );
 					indentStep = Math.max( indentStep, 0 );
-					var className = CKEDITOR.tools.ltrim( element.$.className.replace( self.classNameRegex, '' ) );
-					if ( indentStep < 1 )
-						element.$.className = className;
-					else
+					element.$.className = CKEDITOR.tools.ltrim( element.$.className.replace( self.classNameRegex, '' ) );
+					if ( indentStep > 0 )
 						element.addClass( editor.config.indentClasses[ indentStep - 1 ] );
 				}
@@ -393,6 +391,6 @@
 			{
 				var range = new CKEDITOR.dom.range( editor.document );
-				range.setStartBefore( e.data );
-				range.setEndAfter( e.data );
+				range.setStartBefore( e.data.node );
+				range.setEndAfter( e.data.node );
 
 				var walker = new CKEDITOR.dom.walker( range ),
@@ -404,5 +402,5 @@
 					{
 						// A child with the defined dir is to be ignored.
-						if ( !node.equals( e.data ) && node.getDirection() )
+						if ( !node.equals( e.data.node ) && node.getDirection() )
 						{
 							range.setStartAfter( node );
@@ -411,4 +409,19 @@
 						}
 
+						// Switch alignment classes.
+						var classes = editor.config.indentClasses;
+						if ( classes )
+						{
+							var suffix = ( e.data.dir == 'ltr' ) ? [ '_rtl', '' ] : [ '', '_rtl' ];
+							for ( var i = 0; i < classes.length; i++ )
+							{
+								if ( node.hasClass( classes[ i ] + suffix[ 0 ] ) )
+								{
+									node.removeClass( classes[ i ] + suffix[ 0 ] );
+									node.addClass( classes[ i ] + suffix[ 1 ] );
+								}
+							}
+						}
+
 						// Switch the margins.
 						var marginLeft = node.getStyle( 'margin-right' ),
@@ -428,4 +441,5 @@
 /**
  * Size of each indentation step
+ * @name CKEDITOR.config.indentOffset
  * @type Number
  * @default 40
@@ -436,4 +450,5 @@
  /**
  * Unit for the indentation style
+ * @name CKEDITOR.config.indentUnit
  * @type String
  * @default 'px'
@@ -445,4 +460,5 @@
  * List of classes to use for indenting the contents. If it's null, no classes will be used
  * and instead the {@link #indentUnit} and {@link #indentOffset} properties will be used.
+ * @name CKEDITOR.config.indentClasses
  * @type Array
  * default null
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/justify/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/justify/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/justify/plugin.js	(revision 6126)
@@ -88,6 +88,6 @@
 
 		var range = new CKEDITOR.dom.range( editor.document );
-		range.setStartBefore( e.data );
-		range.setEndAfter( e.data );
+		range.setStartBefore( e.data.node );
+		range.setEndAfter( e.data.node );
 
 		var walker = new CKEDITOR.dom.walker( range ),
@@ -99,5 +99,5 @@
 			{
 				// A child with the defined dir is to be ignored.
-				if ( !node.equals( e.data ) && node.getDirection() )
+				if ( !node.equals( e.data.node ) && node.getDirection() )
 				{
 					range.setStartAfter( node );
@@ -107,4 +107,22 @@
 
 				// Switch the alignment.
+				var classes = editor.config.justifyClasses;
+				if ( classes )
+				{
+					// The left align class.
+					if ( node.hasClass( classes[ 0 ] ) )
+					{
+						node.removeClass( classes[ 0 ] );
+						node.addClass( classes[ 2 ] );
+					}
+					// The right align class.
+					else if ( node.hasClass( classes[ 2 ] ) )
+					{
+						node.removeClass( classes[ 2 ] );
+						node.addClass( classes[ 0 ] );
+					}
+				}
+
+				// Always switch CSS margins.
 				var style = 'text-align';
 				var align = node.getStyle( style );
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/link/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/link/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/link/plugin.js	(revision 6126)
@@ -70,8 +70,11 @@
 				var element = CKEDITOR.plugins.link.getSelectedLink( editor ) || evt.data.element;
 
-				if ( element.is( 'a' ) )
-					evt.data.dialog =  ( element.getAttribute( 'name' ) && !element.getAttribute( 'href' ) ) ? 'anchor' : 'link';
-				else if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'anchor' )
-					evt.data.dialog = 'anchor';
+				if ( !element.isReadOnly() )
+				{
+					if ( element.is( 'a' ) )
+						evt.data.dialog =  ( element.getAttribute( 'name' ) && !element.getAttribute( 'href' ) ) ? 'anchor' : 'link';
+					else if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'anchor' )
+						evt.data.dialog = 'anchor';
+				}
 			});
 
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/list/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/list/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/list/plugin.js	(revision 6126)
@@ -12,4 +12,8 @@
 	var listNodeNames = { ol : 1, ul : 1 },
 		emptyTextRegex = /^[\n\r\t ]*$/;
+
+	var whitespaces = CKEDITOR.dom.walker.whitespaces(),
+		bookmarks = CKEDITOR.dom.walker.bookmark(),
+		nonEmpty = function( node ){ return !( whitespaces( node ) || bookmarks( node ) ); };
 
 	CKEDITOR.plugins.list = {
@@ -134,9 +138,17 @@
 						 && currentIndex != listArray.length - 1 )
 					{
-						if ( currentListItem.getLast()
-								&& currentListItem.getLast().type == CKEDITOR.NODE_ELEMENT
-								&& currentListItem.getLast().getAttribute( 'type' ) == '_moz' )
-							currentListItem.getLast().remove();
-						currentListItem.appendBogus();
+						var last = currentListItem.getLast();
+						if ( last && last.type == CKEDITOR.NODE_ELEMENT
+								&& last.getAttribute( 'type' ) == '_moz' )
+						{
+							last.remove();
+						}
+
+						if ( !( last = currentListItem.getLast( nonEmpty )
+							&& last.type == CKEDITOR.NODE_ELEMENT
+							&& last.getName() in CKEDITOR.dtd.$block ) )
+						{
+							currentListItem.append( doc.createElement( 'br' ) );
+						}
 					}
 
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/menubutton/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/menubutton/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/menubutton/plugin.js	(revision 6126)
@@ -47,5 +47,5 @@
 			menu.onHide = CKEDITOR.tools.bind( function()
 				{
-					this.setState( _.previousState );
+					this.setState( this.modes && this.modes[ editor.mode ] ? _.previousState : CKEDITOR.TRISTATE_DISABLED );
 				},
 				this );
@@ -53,7 +53,5 @@
 			// Initialize the menu items at this point.
 			if ( this.onMenu )
-			{
 				menu.addListener( this.onMenu );
-			}
 		}
 
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/pastefromword/filter/default.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/pastefromword/filter/default.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/pastefromword/filter/default.js	(revision 6126)
@@ -121,4 +121,7 @@
 	var cssLengthRelativeUnit = /^([.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz){1}?/i;
 	var emptyMarginRegex = /^(?:\b0[^\s]*\s*){1,4}$/;		// e.g. 0px 0pt 0px
+	var romanLiternalPattern = '^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$',
+		lowerRomanLiteralRegex = new RegExp( romanLiternalPattern ),
+		upperRomanLiteralRegex = new RegExp( romanLiternalPattern.toUpperCase() );
 
 	var listBaseIndent = 0,
@@ -145,6 +148,8 @@
 					if ( !isNaN( bulletStyle[ 1 ] ) )
 						bulletStyle = 'decimal';
-					// No way to distinguish between Roman numerals and Alphas,
-					// detect them as a whole.
+					else if ( lowerRomanLiteralRegex.test( bulletStyle[ 1 ] ) )
+						bulletStyle = 'lower-roman';
+					else if ( upperRomanLiteralRegex.test( bulletStyle[ 1 ] ) )
+						bulletStyle = 'upper-roman';
 					else if ( /^[a-z]+$/.test( bulletStyle[ 1 ] ) )
 						bulletStyle = 'lower-alpha';
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/richcombo/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/richcombo/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/richcombo/plugin.js	(revision 6126)
@@ -245,5 +245,5 @@
 						this.element.getFirst().removeClass( me.className + '_panel' );
 
-					me.setState( CKEDITOR.TRISTATE_OFF );
+					me.setState( me.modes && me.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );
 
 					me._.on = 0;
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/styles/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/styles/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/styles/plugin.js	(revision 6126)
@@ -13,6 +13,6 @@
  * editing area. The current state is passed to the function. The possible
  * states are {@link CKEDITOR.TRISTATE_ON} and {@link CKEDITOR.TRISTATE_OFF}.
- * @param {CKEDITOR.style} The style to be watched.
- * @param {Function} The function to be called when the style state changes.
+ * @param {CKEDITOR.style} style The style to be watched.
+ * @param {Function} callback The function to be called when the style state changes.
  * @example
  * // Create a style object for the &lt;b&gt; element.
@@ -1409,5 +1409,5 @@
 /**
  * Gets the current styleSet for this instance
- * @param {Function} The function to be called with the styles data.
+ * @param {Function} callback The function to be called with the styles data.
  * @example
  * editor.getStylesSet( function( stylesDefinitions ) {} );
Index: /CKEditor/branches/versions/3.5.x/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.5.x/_source/plugins/wysiwygarea/plugin.js	(revision 6125)
+++ /CKEditor/branches/versions/3.5.x/_source/plugins/wysiwygarea/plugin.js	(revision 6126)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -18,4 +18,11 @@
 
 	var notWhitespaceEval = CKEDITOR.dom.walker.whitespaces( true );
+
+	// Elements that could have empty new line around, including table, pre-formatted block, hr, page-break. (#6554)
+	function nonExitable( element )
+	{
+		return ( element.getName() in nonExitableElementNames )
+				|| element.isBlockBoundary() && CKEDITOR.dtd.$empty[ element.getName() ];
+	}
 
 	function checkReadOnly( selection )
@@ -318,5 +325,5 @@
 				if ( element &&
 					 element.type == CKEDITOR.NODE_ELEMENT &&
-					 !nonExitableElementNames[ element.getName() ] )
+					 !nonExitable( element ) )
 				{
 					range.moveToElementEditStart( element );
@@ -328,5 +335,5 @@
 					if ( element &&
 						 element.type == CKEDITOR.NODE_ELEMENT &&
-						 !nonExitableElementNames[ element.getName() ] )
+						 !nonExitable( element ) )
 					{
 						range.moveToElementEditEnd( element );
@@ -1027,5 +1034,5 @@
 					focusGrabber = editor.container.append( CKEDITOR.dom.element.createFromHtml(
 						// Use 'span' instead of anything else to fly under the screen-reader radar. (#5049)
-						'<span tabindex="-1" style="position:absolute; left:-10000" role="presentation"></span>' ) );
+						'<span tabindex="-1" style="position:absolute;" role="presentation"></span>' ) );
 
 					focusGrabber.on( 'focus', function()
