Index: src/wp-admin/css/themes.css
===================================================================
--- src/wp-admin/css/themes.css	(revision 31929)
+++ src/wp-admin/css/themes.css	(working copy)
@@ -1141,7 +1141,7 @@
 	font-size: 18px;
 	font-style: normal;
 	margin: 0;
-	padding: 100px 0 0;
+	padding: 0;
 	text-align: center;
 	display: none;
 }
Index: src/wp-admin/js/theme.js
===================================================================
--- src/wp-admin/js/theme.js	(revision 31929)
+++ src/wp-admin/js/theme.js	(working copy)
@@ -79,8 +79,7 @@
 
 		// Render and append
 		this.view.render();
-		this.$el.find( '.themes' ).remove();
-		this.$el.append( this.view.el ).addClass( 'rendered' );
+		this.$el.empty().append( this.view.el ).addClass( 'rendered' );
 		this.$el.append( '<br class="clear"/>' );
 	},
 
@@ -157,6 +156,7 @@
 		// Useful for resetting the views when you clean the input
 		if ( this.terms === '' ) {
 			this.reset( themes.data.themes );
+			$( 'body' ).removeClass( 'no-results' );
 		}
 
 		// Trigger an 'update' event
@@ -831,6 +831,9 @@
 	// The theme count element
 	count: $( '.wp-core-ui .theme-count' ),
 
+	// The live themes count
+	liveThemeCount: 0,
+
 	initialize: function( options ) {
 		var self = this;
 
@@ -854,8 +857,10 @@
 		this.listenTo( self.collection, 'query:success', function( count ) {
 			if ( _.isNumber( count ) ) {
 				self.count.text( count );
+				self.announceSearchResults( count );
 			} else {
 				self.count.text( self.collection.length );
+				self.announceSearchResults( self.collection.length );
 			}
 		});
 
@@ -926,7 +931,10 @@
 		}
 
 		// Display a live theme count for the collection
-		this.count.text( this.collection.count ? this.collection.count : this.collection.length );
+		this.liveThemeCount = this.collection.count ? this.collection.count : this.collection.length;
+		this.count.text( this.liveThemeCount );
+
+		this.announceSearchResults( this.liveThemeCount );
 	},
 
 	// Iterates through each instance of the collection
@@ -1078,6 +1086,15 @@
 			self.theme.trigger( 'theme:expand', previousModel.cid );
 
 		}
+	},
+
+	// Dispatch audible search results feedback message
+	announceSearchResults: function( count ) {
+		if ( 0 === count ) {
+			wp.a11y.speak( l10n.noThemesFound );
+		} else {
+			wp.a11y.speak( l10n.themesFound.replace( '%d', count ) );
+		}
 	}
 });
 
@@ -1091,7 +1108,8 @@
 
 	attributes: {
 		placeholder: l10n.searchPlaceholder,
-		type: 'search'
+		type: 'search',
+		'aria-describedby': 'live-search-desc'
 	},
 
 	events: {
@@ -1113,7 +1131,7 @@
 	},
 
 	// Runs a search on the theme collection.
-	search: function( event ) {
+	search: _.debounce( function( event ) {
 		var options = {};
 
 		// Clear on escape.
@@ -1141,7 +1159,7 @@
 		} else {
 			themes.router.navigate( themes.router.baseUrl( '' ) );
 		}
-	},
+	}, 250 ),
 
 	pushState: function( event ) {
 		var url = themes.router.baseUrl( '' );
Index: src/wp-admin/theme-install.php
===================================================================
--- src/wp-admin/theme-install.php	(revision 31929)
+++ src/wp-admin/theme-install.php	(working copy)
@@ -44,11 +44,13 @@
 	),
 	'l10n' => array(
 		'addNew' => __( 'Add New Theme' ),
-		'search'  => __( 'Search Themes' ),
+		'search' => __( 'Search Themes' ),
 		'searchPlaceholder' => __( 'Search themes...' ), // placeholder (no ellipsis)
 		'upload' => __( 'Upload Theme' ),
 		'back'   => __( 'Back' ),
-		'error'  => __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="https://wordpress.org/support/">support forums</a>.' )
+		'error'  => __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="https://wordpress.org/support/">support forums</a>.' ),
+		'themesFound'   => __( 'Number of Themes found: %d' ),
+		'noThemesFound' => __( 'No themes found. Try a different search.' ),
 	),
 	'installedThemes' => array_keys( $installed_themes ),
 ) );
@@ -70,7 +72,7 @@
 
 $help_overview =
 	'<p>' . sprintf(__('You can find additional themes for your site by using the Theme Browser/Installer on this screen, which will display themes from the <a href="%s" target="_blank">WordPress.org Theme Directory</a>. These themes are designed and developed by third parties, are available free of charge, and are compatible with the license WordPress uses.'), 'https://wordpress.org/themes/') . '</p>' .
-	'<p>' . __('You can Search for themes by keyword, author, or tag, or can get more specific and search by criteria listed in the feature filter. Alternately, you can browse the themes that are Featured, Popular, or Latest. When you find a theme you like, you can preview it or install it.') . '</p>' .
+	'<p>' . __( 'You can Search for themes by keyword, author, or tag, or can get more specific and search by criteria listed in the feature filter.' ) . ' <span id="live-search-desc">' . __( 'The search results will be updated as you type.' ) . '</span> ' . __( 'Alternately, you can browse the themes that are Featured, Popular, or Latest. When you find a theme you like, you can preview it or install it.' ) . '</p>' .
 	'<p>' . __('You can Upload a theme manually if you have already downloaded its ZIP archive onto your computer (make sure it is from a trusted and original source). You can also do it the old-fashioned way and copy a downloaded theme&#8217;s folder via FTP into your <code>/wp-content/themes</code> directory.') . '</p>';
 
 get_current_screen()->add_help_tab( array(
@@ -166,10 +168,10 @@
 			</div>
 		</div>
 	</div>
-	<div class="theme-browser content-filterable" aria-live="polite">
-		<p class="no-themes"><?php _e( 'No themes found. Try a different search.' ); ?></p>
-	</div>
+	<div class="theme-browser content-filterable"></div>
 	<div class="theme-install-overlay wp-full-overlay expanded"></div>
+
+	<p class="no-themes"><?php _e( 'No themes found. Try a different search.' ); ?></p>
 	<span class="spinner"></span>
 
 	<br class="clear" />
Index: src/wp-admin/themes.php
===================================================================
--- src/wp-admin/themes.php	(revision 31929)
+++ src/wp-admin/themes.php	(working copy)
@@ -46,7 +46,8 @@
 		'<p>' . __( 'From this screen you can:' ) . '</p>' .
 		'<ul><li>' . __( 'Hover or tap to see Activate and Live Preview buttons' ) . '</li>' .
 		'<li>' . __( 'Click on the theme to see the theme name, version, author, description, tags, and the Delete link' ) . '</li>' .
-		'<li>' . __( 'Click Customize for the current theme or Live Preview for any other theme to see a live preview' ) . '</li></ul>' .
+		'<li>' . __( 'Click Customize for the current theme or Live Preview for any other theme to see a live preview' ) . '</li>' .
+		'<li>' . __( 'Search to filter the installed themes.' ) . ' <span id="live-search-desc">' . __( 'The search results will be updated as you type.' ) . '</span></li></ul>' .
 		'<p>' . __( 'The current theme is displayed highlighted as the first theme.' ) . '</p>';
 
 	get_current_screen()->add_help_tab( array(
@@ -107,9 +108,11 @@
 		'adminUrl'      => parse_url( admin_url(), PHP_URL_PATH ),
 	),
  	'l10n' => array(
- 		'addNew' => __( 'Add New Theme' ),
- 		'search'  => __( 'Search Installed Themes' ),
+ 		'addNew'            => __( 'Add New Theme' ),
+ 		'search'            => __( 'Search Installed Themes' ),
  		'searchPlaceholder' => __( 'Search installed themes...' ), // placeholder (no ellipsis)
+		'themesFound'       => __( 'Number of Themes found: %d' ),
+		'noThemesFound'     => __( 'No themes found. Try a different search.' ),
   	),
 ) );
 
@@ -198,7 +201,7 @@
 
 ?>
 
-<div class="theme-browser" aria-live="polite">
+<div class="theme-browser">
 	<div class="themes">
 
 <?php
@@ -255,10 +258,11 @@
 <?php endforeach; ?>
 	<br class="clear" />
 	</div>
-	<p class="no-themes"><?php _e( 'No themes found. Try a different search.' ); ?></p>
 </div>
 <div class="theme-overlay"></div>
 
+<p class="no-themes"><?php _e( 'No themes found. Try a different search.' ); ?></p>
+
 <?php
 // List broken themes, if any.
 if ( ! is_multisite() && current_user_can('edit_themes') && $broken_themes = wp_get_themes( array( 'errors' => true ) ) ) {
Index: src/wp-includes/script-loader.php
===================================================================
--- src/wp-includes/script-loader.php	(revision 31929)
+++ src/wp-includes/script-loader.php	(working copy)
@@ -499,7 +499,7 @@
 
 		$scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable', 'jquery-ui-droppable' ), false, 1 );
 
-		$scripts->add( 'theme', "/wp-admin/js/theme$suffix.js", array( 'wp-backbone' ), false, 1 );
+		$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 );
 		did_action( 'init' ) && $scripts->localize( 'inline-edit-post', 'inlineEditL10n', array(
