Index: src/wp-admin/css/edit.css
===================================================================
--- src/wp-admin/css/edit.css	(revision 34243)
+++ src/wp-admin/css/edit.css	(working copy)
@@ -1084,13 +1084,13 @@
 }
 
 .ac_results {
+	display: none;
+	margin: -1px 0 0;
 	padding: 0;
-	margin: 0;
 	list-style: none;
 	position: absolute;
 	z-index: 10000;
-	display: none;
-	border: 1px solid #808080;
+	border: 1px solid #5b9dd9;
 	background-color: #fff;
 }
 
@@ -1099,15 +1099,16 @@
 }
 
 .ac_results li {
-	padding: 2px 5px;
+	margin: 0;
+	padding: 5px 10px;
 	white-space: nowrap;
-	color: #101010;
-	text-align: left;
+	cursor: pointer;
 }
 
-.ac_over {
-	background-color: #f0f0b8;
-	cursor: pointer;
+.ac_results .ac_over,
+.ac_over .ac_match {
+	background-color: #0073aa;
+	color: #fff;
 }
 
 .ac_match {
Index: src/wp-includes/js/jquery/suggest.js
===================================================================
--- src/wp-includes/js/jquery/suggest.js	(revision 34243)
+++ src/wp-includes/js/jquery/suggest.js	(working copy)
@@ -12,29 +12,60 @@
  *
  */
 
-(function($) {
+window.wp = window.wp || {};
 
+( function( $, wp ) {
+
+	var uid = 1,
+		l10n = window.suggestL10n;
+
 	$.suggest = function(input, options) {
 		var $input, $results, timeout, prevLength, cache, cacheSize;
 
-		$input = $(input).attr("autocomplete", "off");
-		$results = $("<ul/>");
+		$input = $( input ).attr({
+			'autocomplete': 'off',
+			'autocorrect': 'off',
+			'autocapitalize': 'none',
+			'spellcheck': 'false',
+			'role': 'combobox',
+			'aria-owns': 'results-list-' + uid,
+			'aria-autocomplete': 'list',
+			'aria-expanded': 'false'
+		});
 
-		timeout = false;		// hold timeout ID for suggestion results to appear
-		prevLength = 0;			// last recorded length of $input.val()
-		cache = [];				// cache MRU list
-		cacheSize = 0;			// size of cache in chars (bytes?)
+		$results = $("<ul/>").attr({
+			'id': 'results-list-' + uid,
+			'role': 'listbox'
+		});
 
+		// Increment the unique ID in case of multiple suggest on the same page.
+		uid++;
+
+		// Hold timeout ID for suggestion results to appear.
+		timeout = false;
+		// Last recorded length of $input.val().
+		prevLength = 0;
+		// Cache MRU list
+		cache = [];
+		// Size of cache in chars (bytes?).
+		cacheSize = 0;
+
 		$results.addClass(options.resultsClass).appendTo('body');
 
+		resetPosition();
 
-		resetPosition();
 		$(window)
 			.load(resetPosition)		// just in case user is changing size of page while loading
 			.resize(resetPosition);
 
-		$input.blur(function() {
-			setTimeout(function() { $results.hide() }, 200);
+		$input.blur( function() {
+			if ( timeout ) {
+				clearTimeout( timeout );
+			}
+
+			setTimeout( function() {
+				hideItems();
+			}, 200 );
 		});
 
 		$input.keydown(processKey);
@@ -48,7 +79,6 @@
 			});
 		}
 
-
 		function processKey(e) {
 
 			// handling up/down/escape requires results to be visible
@@ -80,12 +110,12 @@
 						break;
 
 					case 27: //	escape
-						$results.hide();
+						hideItems();
 						break;
 
 				}
 
-			} else if ($input.val().length != prevLength) {
+			} else if ( $input.val().length != prevLength ) {
 
 				if (timeout)
 					clearTimeout(timeout);
@@ -94,10 +124,8 @@
 
 			}
 
-
 		}
 
-
 		function suggest() {
 
 			var q = $.trim($input.val()), multipleSepPos, items;
@@ -120,7 +148,7 @@
 
 					$.get(options.source, {q: q}, function(txt) {
 
-						$results.hide();
+						hideItems();
 
 						items = parseTxt(txt, q);
 
@@ -132,14 +160,11 @@
 				}
 
 			} else {
-
-				$results.hide();
-
+				hideItems();
 			}
 
 		}
 
-
 		function checkCache(q) {
 			var i;
 			for (i = 0; i < cache.length; i++)
@@ -170,22 +195,32 @@
 		}
 
 		function displayItems(items) {
-			var html = '', i;
+			var html = '', i, ariaLabel;
 			if (!items)
 				return;
 
 			if (!items.length) {
-				$results.hide();
+				hideItems();
 				return;
 			}
 
 			resetPosition(); // when the form moves after the page has loaded
 
-			for (i = 0; i < items.length; i++)
-				html += '<li>' + items[i] + '</li>';
+			for ( i = 0; i < items.length; i++ ) {
+				uid++;
+				ariaLabel = '<span>' + items[i] + '</span>';
+				ariaLabel = $( ariaLabel ).text();
+				html += '<li role="option" id="suggestion-' + uid + '" aria-label="' + ariaLabel + '">' + items[i] + '</li>';
+			}
 
 			$results.html(html).show();
 
+			$input.attr( 'aria-expanded', 'true' );
+
+			setTimeout( function() {
+				wp.a11y.speak( l10n.suggestionsFound.replace( '%d', items.length ) );
+			}, 10 );
+
 			$results
 				.children('li')
 				.mouseover(function() {
@@ -200,6 +235,11 @@
 
 		}
 
+		function hideItems() {
+			$results.hide();
+			$input.attr( 'aria-expanded', 'false' );
+		}
+
 		function parseTxt(txt, q) {
 
 			var items = [], tokens = txt.split(options.delimiter), i, token;
@@ -249,8 +289,9 @@
 				} else {
 					$input.val($currentResult.text());
 				}
-				$results.hide();
-				$input.trigger('change');
+				hideItems();
+				$input.trigger( 'change' ).removeAttr( 'aria-activedescendant' );
+				wp.a11y.speak( 'Selected: ' + $currentResult.text() );
 
 				if (options.onSelect)
 					options.onSelect.apply($input[0]);
@@ -263,27 +304,41 @@
 
 			$currentResult = getCurrentResult();
 
-			if ($currentResult)
+			if ( $currentResult ) {
 				$currentResult
 					.removeClass(options.selectClass)
 					.next()
 						.addClass(options.selectClass);
-			else
+
+				if ( $currentResult.next().length ) {
+					$input.attr( 'aria-activedescendant', $currentResult.next().attr( 'id' ) );
+				} else {
+					$input.removeAttr( 'aria-activedescendant' );
+				}
+			} else {
 				$results.children('li:first-child').addClass(options.selectClass);
-
+				$input.attr( 'aria-activedescendant', $results.children('li:first-child').attr( 'id' ) );
+			}
 		}
 
 		function prevResult() {
 			var $currentResult = getCurrentResult();
 
-			if ($currentResult)
+			if ( $currentResult ) {
 				$currentResult
 					.removeClass(options.selectClass)
 					.prev()
 						.addClass(options.selectClass);
-			else
+
+				if ( $currentResult.prev().length ) {
+					$input.attr( 'aria-activedescendant', $currentResult.prev().attr( 'id' ) );
+				} else {
+					$input.removeAttr( 'aria-activedescendant' );
+				}
+			} else {
 				$results.children('li:last-child').addClass(options.selectClass);
-
+				$input.attr( 'aria-activedescendant', $results.children('li:last-child').attr( 'id' ) );
+			}
 		}
 	}
 
@@ -313,4 +368,4 @@
 
 	};
 
-})(jQuery);
+})( jQuery, window.wp );
Index: src/wp-includes/script-loader.php
===================================================================
--- src/wp-includes/script-loader.php	(revision 34243)
+++ src/wp-includes/script-loader.php	(working copy)
@@ -235,6 +235,10 @@
 	// jQuery plugins
 	$scripts->add( 'jquery-color', "/wp-includes/js/jquery/jquery.color.min.js", array('jquery'), '2.1.1', 1 );
 	$scripts->add( 'suggest', "/wp-includes/js/jquery/suggest$suffix.js", array('jquery'), '1.1-20110113', 1 );
+	did_action( 'init' ) && $scripts->localize( 'suggest', 'suggestL10n', array(
+		'suggestionsFound' => __( 'Suggestions found: %d' ),
+	) );
+
 	$scripts->add( 'schedule', '/wp-includes/js/jquery/jquery.schedule.js', array('jquery'), '20m', 1 );
 	$scripts->add( 'jquery-query', "/wp-includes/js/jquery/jquery.query.js", array('jquery'), '2.1.7', 1 );
 	$scripts->add( 'jquery-serialize-object', "/wp-includes/js/jquery/jquery.serialize-object.js", array('jquery'), '0.2', 1 );
@@ -481,7 +485,7 @@
 
 		$scripts->add( 'postbox', "/wp-admin/js/postbox$suffix.js", array('jquery-ui-sortable'), false, 1 );
 
-		$scripts->add( 'tags-box', "/wp-admin/js/tags-box$suffix.js", array( 'jquery', 'suggest' ), false, 1 );
+		$scripts->add( 'tags-box', "/wp-admin/js/tags-box$suffix.js", array( 'jquery', 'suggest', 'wp-a11y' ), false, 1 );
 		did_action( 'init' ) && $scripts->localize( 'tags-box', 'tagsBoxL10n', array(
 			'tagDelimiter' => _x( ',', 'tag delimiter' ),
 		) );
@@ -541,7 +545,7 @@
 
 		$scripts->add( 'theme', "/wp-admin/js/theme$suffix.js", array( 'wp-backbone', 'wp-a11y' ), false, 1 );
 
-		$scripts->add( 'inline-edit-post', "/wp-admin/js/inline-edit-post$suffix.js", array( 'jquery', 'suggest' ), false, 1 );
+		$scripts->add( 'inline-edit-post', "/wp-admin/js/inline-edit-post$suffix.js", array( 'jquery', 'suggest', 'wp-a11y' ), false, 1 );
 		did_action( 'init' ) && $scripts->localize( 'inline-edit-post', 'inlineEditL10n', array(
 			'error' => __('Error while saving the changes.'),
 			'ntdeltitle' => __('Remove From Bulk Edit'),
