Index: _source/plugins/toolbar/plugin.js
===================================================================
--- _source/plugins/toolbar/plugin.js	(revision 3516)
+++ _source/plugins/toolbar/plugin.js	(working copy)
@@ -79,6 +79,31 @@
 					contents.setStyle( 'height', ( contentHeight - dy ) + 'px' );
 				} );
 
+			var collapserKeystroke = CKEDITOR.tools.addFunction(
+				function( evt )
+				{
+					var keystroke = evt.getKeystroke();
+					var toolbox = editor.toolbox;
+					switch ( keystroke )
+					{
+						case 39 :					// RIGHT-ARROW
+						case 9 :					// TAB
+							// Put focus to first toolbar item.
+							var item = toolbox.toolbars[ 0 ].items[ 0 ];
+							item.focus();
+							evt.preventDefault();
+							break;
+						case 37 :					// LEFT-ARROW
+						case CKEDITOR.SHIFT + 9 :	// SHIFT-TAB
+							// Put focus to last toolbar item.
+							var toolbar = toolbox.toolbars[ toolbox.toolbars.length - 1 ];
+							var item = toolbar.items[ toolbar.items.length - 1 ];
+							item.focus();
+							evt.preventDefault();
+							break;
+					}
+				} );
+
 			var itemKeystroke = function( item, keystroke )
 			{
 				switch ( keystroke )
@@ -90,11 +115,16 @@
 						{ /*jsl:pass*/ }
 
 						// If available, just focus it, otherwise focus the
-						// first one.
+						// first one or the collapser.
 						if ( item )
 							item.focus();
 						else
-							editor.toolbox.focus();
+						{
+							if ( editor.toolbox.collapserId )
+								CKEDITOR.document.getById( editor.toolbox.collapserId ).focus();
+							else
+								editor.toolbox.focus();
+						}
 
 						return false;
 
@@ -105,13 +135,18 @@
 						{ /*jsl:pass*/ }
 
 						// If available, just focus it, otherwise focus the
-						// last one.
+						// last one or the collapser.
 						if ( item )
 							item.focus();
 						else
 						{
-							var lastToolbarItems = editor.toolbox.toolbars[ editor.toolbox.toolbars.length - 1 ].items;
-							lastToolbarItems[ lastToolbarItems.length - 1 ].focus();
+							if ( editor.toolbox.collapserId )
+								CKEDITOR.document.getById( editor.toolbox.collapserId ).focus();
+							else
+							{
+								var lastToolbarItems = editor.toolbox.toolbars[ editor.toolbox.toolbars.length - 1 ].items;
+								lastToolbarItems[ lastToolbarItems.length - 1 ].focus();
+							}
 						}
 
 						return false;
@@ -215,12 +250,16 @@
 
 						if ( editor.config.toolbarCanCollapse )
 						{
-							output.push( '<a class="cke_toolbox_collapser' );
+							var collapserId = editor.toolbox.collapserId = 'cke_' + CKEDITOR.tools.getNextNumber();
+							output.push( '<input type="button" class="cke_toolbox_collapser' );
 
 							if ( !expanded )
 								output.push( ' cke_toolbox_collapser_min' );
 
-							output.push( '" onclick="CKEDITOR.tools.callFunction(' + collapserFn + ',new CKEDITOR.dom.element(this))"></a>' );
+							output.push( '" onclick="CKEDITOR.tools.callFunction(' + collapserFn + ',new CKEDITOR.dom.element(this))"' +
+									' onkeydown="CKEDITOR.tools.callFunction(' + collapserKeystroke + ',new CKEDITOR.dom.event(event))"' +
+									' id="' + collapserId + '"' +
+									'></input>' );
 						}
 
 						event.data.html += output.join( '' );
Index: _source/skins/v2/toolbar.css
===================================================================
--- _source/skins/v2/toolbar.css	(revision 3516)
+++ _source/skins/v2/toolbar.css	(working copy)
@@ -16,8 +16,8 @@
 	}
 }
 
-.cke_skin_v2 a.cke_toolbox_collapser,
-.cke_skin_v2 a:hover.cke_toolbox_collapser
+.cke_skin_v2 input.cke_toolbox_collapser,
+.cke_skin_v2 input:hover.cke_toolbox_collapser
 {
 	background-image: url(images/arrowtop.gif);
 	background-repeat: no-repeat;
@@ -30,21 +30,21 @@
 	cursor: pointer;
 }
 
-.cke_skin_v2 .cke_rtl a.cke_toolbox_collapser,
-.cke_skin_v2 .cke_rtl a:hover.cke_toolbox_collapser
+.cke_skin_v2 .cke_rtl input.cke_toolbox_collapser,
+.cke_skin_v2 .cke_rtl input:hover.cke_toolbox_collapser
 {
 	float: left;
 }
 
-.cke_skin_v2 a.cke_toolbox_collapser_min,
-.cke_skin_v2 a:hover.cke_toolbox_collapser_min
+.cke_skin_v2 input.cke_toolbox_collapser_min,
+.cke_skin_v2 input:hover.cke_toolbox_collapser_min
 {
 	background-image: url(images/arrowleft.gif);
 	margin: 2px;
 }
 
-.cke_skin_v2 .cke_rtl a.cke_toolbox_collapser_min,
-.cke_skin_v2 .cke_rtl a:hover.cke_toolbox_collapser_min
+.cke_skin_v2 .cke_rtl input.cke_toolbox_collapser_min,
+.cke_skin_v2 .cke_rtl input:hover.cke_toolbox_collapser_min
 {
 	background-image: url(images/arrowright.gif);
 }
