Index: CKEditor/branches/features/aria/_source/lang/en.js
===================================================================
--- CKEditor/branches/features/aria/_source/lang/en.js	(revision 4899)
+++ CKEditor/branches/features/aria/_source/lang/en.js	(revision 4903)
@@ -531,4 +531,5 @@
 	{
 		label : 'Styles',
+		panelTitle : 'Formatting Styles',
 		panelVoiceLabel : 'Select a style',
 		panelTitle1 : 'Block Styles',
@@ -592,4 +593,6 @@
 		textColorTitle : 'Text Color',
 		bgColorTitle : 'Background Color',
+		panelTitle : 'Colors',
+		panelVoiceLabel : 'Select a color',
 		auto : 'Automatic',
 		more : 'More Colors...'
Index: CKEditor/branches/features/aria/_source/plugins/colorbutton/plugin.js
===================================================================
--- CKEditor/branches/features/aria/_source/plugins/colorbutton/plugin.js	(revision 4899)
+++ CKEditor/branches/features/aria/_source/plugins/colorbutton/plugin.js	(revision 4903)
@@ -32,10 +32,10 @@
 					panel :
 					{
-						css : editor.skin.editor.css
+						css : editor.skin.editor.css,
+						aria : { role : 'listbox', 'aria-label' : lang.panelTitle, 'aria-describedby' : lang.panelVoiceLabel }
 					},
 
-					onBlock : function( panel, blockName )
+					onBlock : function( panel, block )
 					{
-						var block = panel.addBlock( blockName );
 						block.autoSize = true;
 						block.element.addClass( 'cke_colorblock' );
@@ -56,5 +56,6 @@
 		{
 			var output = [],
-				colors = config.colorButton_colors.split( ',' );
+				colors = config.colorButton_colors.split( ',' ),
+				total = colors.length + ( config.colorButton_enableMore ? 2 : 1 );
 
 			var clickFn = CKEDITOR.tools.addFunction( function( color, type )
@@ -99,5 +100,6 @@
 					' title="', lang.auto, '"' +
 					' onclick="CKEDITOR.tools.callFunction(', clickFn, ',null,\'', type, '\');return false;"' +
-					' href="javascript:void(\'', lang.auto, '\')">' +
+					' href="javascript:void(\'', lang.auto, '\')"' +
+					' role="option" aria-posinset="1" aria-setsize="', total, '">' +
 					'<table cellspacing=0 cellpadding=0 width="100%">' +
 						'<tr>' +
@@ -126,5 +128,6 @@
 							' title="', colorLabel, '"' +
 							' onclick="CKEDITOR.tools.callFunction(', clickFn, ',\'#', colorCode, '\',\'', type, '\'); return false;"' +
-							' href="javascript:void(\'', colorLabel, '\')">' +
+							' href="javascript:void(\'', colorLabel, '\')"' +
+							' role="option" aria-posinset="', ( i + 2 ), '" aria-setsize="', total, '">' +
 							'<span class="cke_colorbox" style="background-color:#', colorCode, '"></span>' +
 						'</a>' +
@@ -142,5 +145,6 @@
 								' title="', lang.more, '"' +
 								' onclick="CKEDITOR.tools.callFunction(', clickFn, ',\'?\',\'', type, '\');return false;"' +
-								' href="javascript:void(\'', lang.more, '\')">',
+								' href="javascript:void(\'', lang.more, '\')"',
+								' role="option" aria-posinset="', total, '" aria-setsize="', total, '">', 
 								lang.more,
 							'</a>' +
Index: CKEditor/branches/features/aria/_source/plugins/floatpanel/plugin.js
===================================================================
--- CKEditor/branches/features/aria/_source/plugins/floatpanel/plugin.js	(revision 4899)
+++ CKEditor/branches/features/aria/_source/plugins/floatpanel/plugin.js	(revision 4903)
@@ -238,28 +238,13 @@
 								} );
 
+							// Set the panel frame focus, so the blur event gets fired.
+							block.element.focus();
+							// We need this get fired manually because of unfired focus() function.
+							this.allowBlur( true );
+
 						} , this );
 
 						panel.isLoaded ? panelLoad() : panel.onLoad = panelLoad;
 
-						// Set the panel frame focus, so the blur event gets fired.
-						CKEDITOR.tools.setTimeout( function()
-							{
-								if ( definition.voiceLabel )
-								{
-									if ( CKEDITOR.env.gecko )
-									{
-										var container = iframe.getParent();
-										container.setAttribute( 'role', 'region' );
-										container.setAttribute( 'title', definition.voiceLabel );
-										iframe.setAttribute( 'role', 'region' );
-										iframe.setAttribute( 'title', ' ' );
-									}
-								}
-
-								iframe.$.contentWindow.focus();
-								// We need this get fired manually because of unfired focus() function.
-								this.allowBlur( true );
-
-							}, 0, this);
 					}, 0, this);
 				this.visible = 1;
Index: CKEditor/branches/features/aria/_source/plugins/font/plugin.js
===================================================================
--- CKEditor/branches/features/aria/_source/plugins/font/plugin.js	(revision 4899)
+++ CKEditor/branches/features/aria/_source/plugins/font/plugin.js	(revision 4903)
@@ -31,12 +31,10 @@
 				label : lang.label,
 				title : lang.panelTitle,
-				voiceLabel : lang.voiceLabel,
 				className : 'cke_' + ( styleType == 'size' ? 'fontSize' : 'font' ),
-				multiSelect : false,
-
 				panel :
 				{
 					css : editor.skin.editor.css.concat( config.contentsCss ),
-					voiceLabel : lang.panelVoiceLabel
+					multiSelect : false,
+					aria : { 'aria-label' : lang.panelTitle, 'aria-describedby' : lang.panelVoiceLabel }
 				},
 
Index: CKEditor/branches/features/aria/_source/plugins/format/plugin.js
===================================================================
--- CKEditor/branches/features/aria/_source/plugins/format/plugin.js	(revision 4899)
+++ CKEditor/branches/features/aria/_source/plugins/format/plugin.js	(revision 4903)
@@ -28,12 +28,10 @@
 				label : lang.label,
 				title : lang.panelTitle,
-				voiceLabel : lang.voiceLabel,
 				className : 'cke_format',
-				multiSelect : false,
-
 				panel :
 				{
 					css : editor.skin.editor.css.concat( config.contentsCss ),
-					voiceLabel : lang.panelVoiceLabel
+					multiSelect : false,
+					aria : { 'aria-label' : lang.panelTitle, 'aria-describedby' : lang.panelVoiceLabel }
 				},
 
Index: CKEditor/branches/features/aria/_source/plugins/listblock/plugin.js
===================================================================
--- CKEditor/branches/features/aria/_source/plugins/listblock/plugin.js	(revision 4899)
+++ CKEditor/branches/features/aria/_source/plugins/listblock/plugin.js	(revision 4903)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -19,10 +19,16 @@
 				base : CKEDITOR.ui.panel.block,
 
-				$ : function( blockHolder, multiSelect )
+				$ : function( blockHolder, blockDefinition )
 				{
+					blockDefinition = blockDefinition || {};
+
+					var aria = blockDefinition.aria || ( blockDefinition.aria = {} );
+					( this.multiSelect = !!blockDefinition.multiSelect ) &&
+						( aria[ 'aria-multiselectable' ] = true );
+					// Provide default role of 'listbox'.
+					!aria.role && ( aria.role = 'listbox' );
+					
 					// Call the base contructor.
-					this.base( blockHolder );
-
-					this.multiSelect = !!multiSelect;
+					this.base.apply( this, arguments );
 
 					var keys = this.keys;
@@ -82,4 +88,5 @@
 							pendingHtml.push( '<ul class=cke_panel_list>' );
 							this._.started = 1;
+							this._.size = this._.size || 0;
 						}
 
@@ -88,8 +95,10 @@
 						pendingHtml.push(
 							'<li id=', id, ' class=cke_panel_listItem>' +
-								'<a _cke_focus=1 hidefocus=true' +
+								'<a id="', id, '_option" _cke_focus=1 hidefocus=true' +
 									' title="', title || value, '"' +
 									' href="javascript:void(\'', value, '\')"' +
-									' onclick="CKEDITOR.tools.callFunction(', this._.getClick(), ',\'', value, '\'); return false;">',
+									' onclick="CKEDITOR.tools.callFunction(', this._.getClick(), ',\'', value, '\'); return false;"',
+									' role="option"' +
+									' aria-posinset="' + ++this._.size + '">',
 									html || value,
 								'</a>' +
@@ -112,4 +121,11 @@
 						this._.close();
 						this.element.appendHtml( this._.pendingHtml.join( '' ) );
+
+						var items = this._.items,
+							doc = this.element.getDocument();
+						for ( var value in items )
+							doc.getById( items[ value ] + '_option' ).setAttribute( 'aria-setsize', this._.size );
+						delete this._.size;
+
 						this._.pendingHtml = [];
 					},
@@ -174,5 +190,10 @@
 							this.unmarkAll();
 
-						this.element.getDocument().getById( this._.items[ value ] ).addClass( 'cke_selected' );
+						var itemId = this._.items[ value ],
+							item = this.element.getDocument().getById( itemId );
+						item.addClass( 'cke_selected' );
+
+						this.element.getDocument().getById( itemId + '_option' ).setAttribute( 'aria-selected', true );
+						this.element.setAttribute( 'aria-activedescendant', itemId + '_option' );
 					},
 
Index: CKEditor/branches/features/aria/_source/plugins/menu/plugin.js
===================================================================
--- CKEditor/branches/features/aria/_source/plugins/menu/plugin.js	(revision 4899)
+++ CKEditor/branches/features/aria/_source/plugins/menu/plugin.js	(revision 4903)
@@ -296,6 +296,4 @@
 
 			var htmlLabel = this.label;
-			if ( state == CKEDITOR.TRISTATE_DISABLED )
-				htmlLabel = this.editor.lang.common.unavailable.replace( '%1', htmlLabel );
 
 			if ( this.className )
Index: CKEditor/branches/features/aria/_source/plugins/panel/plugin.js
===================================================================
--- CKEditor/branches/features/aria/_source/plugins/panel/plugin.js	(revision 4899)
+++ CKEditor/branches/features/aria/_source/plugins/panel/plugin.js	(revision 4903)
@@ -199,5 +199,6 @@
 	addBlock : function( name, block )
 	{
-		block = this._.blocks[ name ] = block || new CKEDITOR.ui.panel.block( this.getHolderElement() );
+		block = this._.blocks[ name ] = block instanceof CKEDITOR.ui.panel.block ?  block
+				: new CKEDITOR.ui.panel.block( this.getHolderElement(), block );
 
 		if ( !this._.currentBlock )
@@ -241,5 +242,5 @@
 CKEDITOR.ui.panel.block = CKEDITOR.tools.createClass(
 {
-	$ : function( blockHolder )
+	$ : function( blockHolder, blockDefinition )
 	{
 		this.element = blockHolder.append(
@@ -248,4 +249,5 @@
 					attributes :
 					{
+						'tabIndex' : -1,
 						'class' : 'cke_panel_block'
 					},
@@ -255,4 +257,8 @@
 					}
 				}) );
+
+		blockDefinition = blockDefinition || {};
+		var aria = blockDefinition.aria;
+		aria && this.element.setAttributes( aria );
 
 		this.keys = {};
Index: CKEditor/branches/features/aria/_source/plugins/panelbutton/plugin.js
===================================================================
--- CKEditor/branches/features/aria/_source/plugins/panelbutton/plugin.js	(revision 4899)
+++ CKEditor/branches/features/aria/_source/plugins/panelbutton/plugin.js	(revision 4903)
@@ -1,3 +1,3 @@
-﻿/*
+/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -58,4 +58,9 @@
 							|| CKEDITOR.document;
 
+			panelDefinition.block =
+			{
+				aria : panelDefinition.aria
+			};
+
 			this.hasArrow = true;
 
@@ -89,6 +94,8 @@
 
 				var panelDefinition = this._.panelDefinition || {},
+					 panelBlockDefinition = this._.panelDefinition.block,
 					panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(),
 					panel = this._.panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ),
+					block = panel.addBlock( _.id, panelBlockDefinition ),
 					me = this;
 
@@ -127,7 +134,7 @@
 
 				if ( this.onBlock )
-					this.onBlock( panel, _.id );
+					this.onBlock( panel, block );
 
-				panel.getBlock( _.id ).onHide = function()
+				block.onHide = function()
 						{
 								_.on = 0;
Index: CKEditor/branches/features/aria/_source/plugins/richcombo/plugin.js
===================================================================
--- CKEditor/branches/features/aria/_source/plugins/richcombo/plugin.js	(revision 4899)
+++ CKEditor/branches/features/aria/_source/plugins/richcombo/plugin.js	(revision 4903)
@@ -45,4 +45,9 @@
 
 		panelDefinition.className = ( panelDefinition.className || '' ) + ' cke_rcombopanel';
+		panelDefinition.block =
+		{
+			multiSelect : panelDefinition.multiSelect,
+			aria : panelDefinition.aria
+		};
 
 		this._ =
@@ -206,9 +211,10 @@
 			if ( this._.panel )
 				return;
-
+			
 			var panelDefinition = this._.panelDefinition,
+				panelBlockDefinition = this._.panelDefinition.block,
 				panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(),
 				panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ),
-				list = panel.addListBlock( this.id, this.multiSelect ),
+				list = panel.addListBlock( this.id, panelBlockDefinition ),
 				me = this;
 
Index: CKEditor/branches/features/aria/_source/plugins/stylescombo/plugin.js
===================================================================
--- CKEditor/branches/features/aria/_source/plugins/stylescombo/plugin.js	(revision 4899)
+++ CKEditor/branches/features/aria/_source/plugins/stylescombo/plugin.js	(revision 4903)
@@ -21,12 +21,11 @@
 					label : lang.label,
 					title : lang.panelTitle,
-					voiceLabel : lang.voiceLabel,
 					className : 'cke_styles',
-					multiSelect : true,
 
 					panel :
 					{
 						css : editor.skin.editor.css.concat( config.contentsCss ),
-						voiceLabel : lang.panelVoiceLabel
+						multiSelect : true,
+						aria : { 'aria-label' : lang.panelTitle, 'aria-describedby' : lang.panelVoiceLabel }
 					},
 
