Index: src/wp-admin/theme-install.php
===================================================================
--- src/wp-admin/theme-install.php	(revision 27965)
+++ src/wp-admin/theme-install.php	(working copy)
@@ -33,6 +33,13 @@
 	'new'      => __( 'Newest Themes' ),
 );
 
+$installed_themes = search_theme_directories();
+foreach ( $installed_themes as $k => $v ) {
+	if ( false !== strpos( $k, '/' ) ) {
+		unset( $installed_themes[ $k ] );
+	}
+}
+
 wp_localize_script( 'theme', '_wpThemeSettings', array(
 	'themes'   => false,
 	'settings' => array(
@@ -51,6 +58,7 @@
 		'back'   => __( 'Back' ),
 		'error'  => ( 'There was a problem trying to load the themes. Please, try again.' ), // @todo improve
 	),
+	'installedThemes' => array_keys( $installed_themes ),
 	'browse' => array(
 		'sections' => $sections,
 	),
@@ -187,7 +195,11 @@
 	<h3 class="theme-name">{{ data.name }}</h3>
 
 	<div class="theme-actions">
+	<# if ( -1 === _.indexOf( _wpThemeSettings.installedThemes, data.slug ) ) { #>
 		<a class="button button-primary" href="{{ data.installURI }}"><?php esc_html_e( 'Install' ); ?></a>
+	<# } else { #>
+		<a class="button button-primary disabled" href="#"><?php esc_html_e( 'Installed' ); ?></a>
+	<# } #>
 		<a class="button button-secondary preview install-theme-preview" href="#"><?php esc_html_e( 'Preview' ); ?></a>
 	</div>
 </script>
@@ -196,7 +208,11 @@
 	<div class="wp-full-overlay-sidebar">
 		<div class="wp-full-overlay-header">
 			<a href="#" class="close-full-overlay button-secondary"><?php _e( 'Close' ); ?></a>
+		<# if ( -1 === _.indexOf( _wpThemeSettings.installedThemes, data.slug ) ) { #>
 			<a href="{{ data.installURI }}" class="button button-primary theme-install"><?php _e( 'Install' ); ?></a>
+		<# } else { #>
+			<a class="button button-primary theme-install disabled" href="#"><?php esc_html_e( 'Installed' ); ?></a>
+		<# } #>
 		</div>
 		<div class="wp-full-overlay-sidebar-content">
 			<div class="install-theme-info">
