Index: /CKEditor/branches/features/aria/_source/lang/en.js
===================================================================
--- /CKEditor/branches/features/aria/_source/lang/en.js	(revision 4907)
+++ /CKEditor/branches/features/aria/_source/lang/en.js	(revision 4908)
@@ -556,4 +556,10 @@
 	},
 
+	contextMenu :
+	{
+		panelTitle : 'context menu options',
+		panelVoiceLabel: ''
+	},
+
 	div :
 	{
Index: /CKEditor/branches/features/aria/_source/plugins/contextmenu/plugin.js
===================================================================
--- /CKEditor/branches/features/aria/_source/plugins/contextmenu/plugin.js	(revision 4907)
+++ /CKEditor/branches/features/aria/_source/plugins/contextmenu/plugin.js	(revision 4908)
@@ -36,4 +36,17 @@
 			},
 			this);
+
+		this._.definiton =
+		{
+			panel:
+			{
+				className : editor.skinClass + ' cke_contextmenu',
+				aria :
+				{
+					'aria-label' : editor.lang.contextMenu.panelTitle,
+					'aria-describedby' : editor.lang.contextMenu.panelVoiceLabel
+				}
+			}
+		};
 	},
 
@@ -52,5 +65,5 @@
 			else
 			{
-				menu = this._.menu = new CKEDITOR.menu( editor );
+				menu = this._.menu = new CKEDITOR.menu( editor, this._.definiton );
 				menu.onClick = CKEDITOR.tools.bind( function( item )
 				{
Index: /CKEditor/branches/features/aria/_source/plugins/menu/plugin.js
===================================================================
--- /CKEditor/branches/features/aria/_source/plugins/menu/plugin.js	(revision 4907)
+++ /CKEditor/branches/features/aria/_source/plugins/menu/plugin.js	(revision 4908)
@@ -52,6 +52,7 @@
 	CKEDITOR.menu = CKEDITOR.tools.createClass(
 	{
-		$ : function( editor, level )
-		{
+		$ : function( editor, definition )
+		{
+			definition = this._.definition = definition || {};
 			this.id = 'cke_' + CKEDITOR.tools.getNextNumber();
 
@@ -59,5 +60,17 @@
 			this.items = [];
 
-			this._.level = level || 1;
+			this._.level = definition.level || 1;
+
+			var panelDefinition = CKEDITOR.tools.extend( {}, definition.panel,
+			{
+				css : editor.skin.editor.css,
+				level : this._.level - 1,
+				block : {}
+			} );
+
+			var aria = panelDefinition.block.aria = ( panelDefinition.aria || {} );
+			// Provide default role of 'menu'.
+			!aria.role && ( aria.role = 'menu' );
+			this._.panelDefinition = panelDefinition;
 		},
 
@@ -84,5 +97,6 @@
 				else
 				{
-					menu = this._.subMenu = new CKEDITOR.menu( this.editor, this._.level + 1 );
+					menu = this._.subMenu = new CKEDITOR.menu( this.editor,
+								   CKEDITOR.tools.extend( {}, this._.definition, { level : this._.level + 1 }, true ) );
 					menu.parent = this;
 					menu.onClick = CKEDITOR.tools.bind( this.onClick, this );
@@ -136,11 +150,8 @@
 				if ( !panel )
 				{
-					panel = this._.panel = new CKEDITOR.ui.floatPanel( this.editor, CKEDITOR.document.getBody(),
-						{
-							css : editor.skin.editor.css,
-							level : this._.level - 1,
-							className : editor.skinClass + ' cke_contextmenu'
-						},
-						this._.level);
+					panel = this._.panel = new CKEDITOR.ui.floatPanel( this.editor,
+						CKEDITOR.document.getBody(),
+						this._.panelDefinition,
+						this._.level );
 
 					panel.onEscape = CKEDITOR.tools.bind( function()
@@ -158,5 +169,5 @@
 
 					// Create an autosize block inside the panel.
-					var block = panel.addBlock( this.id );
+					var block = panel.addBlock( this.id, this._.panelDefinition.block );
 					block.autoSize = true;
 
@@ -300,4 +311,6 @@
 				classes += ' ' + this.className;
 
+			var hasSubMenu = this.getItems;
+
 			output.push(
 				'<span class="cke_menuitem">' +
@@ -307,5 +320,9 @@
 					' tabindex="-1"' +
 					'_cke_focus=1' +
-					' hidefocus="true"' );
+					' hidefocus="true"' +
+					' role="menuitem"' +
+					( hasSubMenu ? 'aria-haspopup="true"' : '' ) +
+					( state == CKEDITOR.TRISTATE_DISABLED ? 'aria-disabled="true"' : '' ) +
+					( state == CKEDITOR.TRISTATE_ON ? 'aria-pressed="true"' : '' ) );
 
 			// Some browsers don't cancel key events in the keydown but in the
@@ -339,5 +356,5 @@
 						'<span class="cke_label">' );
 
-			if ( this.getItems )
+			if ( hasSubMenu )
 			{
 				output.push(
