Index: trunk/src/wp-admin/css/forms.css
===================================================================
--- trunk/src/wp-admin/css/forms.css	(revision 29047)
+++ trunk/src/wp-admin/css/forms.css	(working copy)
@@ -751,9 +751,70 @@
 	margin: -3px 3px;
 }
 
+/*------------------------------------------------------------------------------
+  21.0 - Upload File
+------------------------------------------------------------------------------*/
+
+.wp-upload-container {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	margin: 0px 0 0;
+	padding: 0;
+	width: 100%;
+	overflow: hidden;
+	position: relative;
+	top: 10px;
+}
+.wp-upload-container-hidden {
+	display: none;
+}
+.wp-upload-container .wp-upload-form {
+	background: #fafafa;
+	border: 1px solid #e5e5e5;
+	padding: 30px;
+	margin: 30px auto;
+	max-width: 380px;
+}
+.wp-upload-container .install-help {
+	color: #999;
+	font-size: 18px;
+	font-style: normal;
+	margin: 0;
+	padding: 40px 0 0;
+	text-align: center;
+}
+
+body.show-upload-container .hide-on-upload,
+body.show-upload-container .wp-upload-show {
+	display: none;
+}
+body.show-upload-container .wp-upload-container-hidden {
+	display: block;
+}
+
+.wp-upload-hide {
+	display: none;
+}
+body.show-upload-container .wp-upload-hide {
+	display: inline;
+}
+
 /* =Media Queries
 -------------------------------------------------------------- */
 
+@media only screen and (max-width: 1120px) {
+	.wp-upload-container .wp-upload-form {
+		margin: 20px 0;
+		max-width: 100%;
+	}
+	.wp-upload-container .install-help {
+		font-size: 15px;
+		padding: 20px 0 0;
+		text-align: left;
+	}
+}
+
 @media screen and ( max-width: 782px ) {
 	/* Input Elements */
 	textarea {
Index: trunk/src/wp-admin/css/themes.css
===================================================================
--- trunk/src/wp-admin/css/themes.css	(revision 29047)
+++ trunk/src/wp-admin/css/themes.css	(working copy)
@@ -1103,51 +1103,6 @@
 	position: relative;
 	width: 100%;
 }
-.theme-install-php a.upload,
-.theme-install-php a.browse-themes {
-	cursor: pointer;
-}
-.theme-install-php a.browse-themes,
-.theme-install-php.show-upload-theme a.upload {
-	display: none;
-}
-.theme-install-php.show-upload-theme a.browse-themes {
-	display: inline;
-}
-.upload-theme {
-	-webkit-box-sizing: border-box;
-	-moz-box-sizing: border-box;
-	box-sizing: border-box;
-	display: none;
-	margin: 0px 0 0;
-	padding: 0;
-	width: 100%;
-	overflow: hidden;
-	position: relative;
-	top: 10px;
-}
-body.show-upload-theme .upload-theme {
-	display: block;
-}
-.upload-theme .wp-upload-form {
-	background: #fafafa;
-	border: 1px solid #e5e5e5;
-	padding: 30px;
-	margin: 30px auto;
-	max-width: 380px;
-}
-.upload-theme .install-help {
-	color: #999;
-	font-size: 18px;
-	font-style: normal;
-	margin: 0;
-	padding: 40px 0 0;
-	text-align: center;
-}
-body.show-upload-theme .upload-theme + .theme-navigation,
-body.show-upload-theme .upload-theme + .theme-navigation + .theme-browser {
-	display: none;
-}
 .theme-navigation .theme-count {
 	margin-left: 0;
 	position: absolute;
@@ -1340,7 +1295,7 @@
 body.no-results p.no-themes {
 	display: block;
 }
-body.show-upload-theme p.no-themes {
+body.show-upload-container p.no-themes {
 	display: none !important;
 }
 
@@ -1358,15 +1313,6 @@
 	.more-filters-container {
 		border-bottom: 1px solid #eee;
 	}
-	.upload-theme .wp-upload-form {
-		margin: 20px 0;
-		max-width: 100%;
-	}
-	.upload-theme .install-help {
-		font-size: 15px;
-		padding: 20px 0 0;
-		text-align: left;
-	}
 	.more-filters-container .filters-group {
 		margin-bottom: 0;
 		margin-top: 5px;
Index: trunk/src/wp-admin/includes/class-wp-plugin-install-list-table.php
===================================================================
--- trunk/src/wp-admin/includes/class-wp-plugin-install-list-table.php	(revision 29047)
+++ trunk/src/wp-admin/includes/class-wp-plugin-install-list-table.php	(working copy)
@@ -27,9 +27,9 @@
 		// These are the tabs which are shown on the page
 		$tabs = array();
 		$tabs['dashboard'] = __( 'Search' );
-		if ( 'search' == $tab )
+		if ( 'search' == $tab ) {
 			$tabs['search']	= __( 'Search Results' );
-		$tabs['upload']    = __( 'Upload' );
+		}
 		$tabs['featured']  = _x( 'Featured', 'Plugin Installer' );
 		$tabs['popular']   = _x( 'Popular', 'Plugin Installer' );
 		$tabs['new']       = _x( 'Newest', 'Plugin Installer' );
@@ -46,7 +46,7 @@
 		 * @since 2.7.0
 		 *
 		 * @param array $tabs The tabs shown on the Plugin Install screen. Defaults are 'dashboard', 'search',
-		 *                    'upload', 'featured', 'popular', 'new', and 'favorites'.
+		 *                    'featured', 'popular', 'new', and 'favorites'.
 		 */
 		$tabs = apply_filters( 'install_plugins_tabs', $tabs );
 
@@ -112,7 +112,7 @@
 		 * Filter API request arguments for each Plugin Install screen tab.
 		 *
 		 * The dynamic portion of the hook name, $tab, refers to the plugin install tabs.
-		 * Default tabs are 'dashboard', 'search', 'upload', 'featured', 'popular', 'new',
+		 * Default tabs are 'dashboard', 'search', 'featured', 'popular', 'new',
 		 * and 'favorites'.
 		 *
 		 * @since 3.7.0
Index: trunk/src/wp-admin/includes/plugin-install.php
===================================================================
--- trunk/src/wp-admin/includes/plugin-install.php	(revision 29047)
+++ trunk/src/wp-admin/includes/plugin-install.php	(working copy)
@@ -126,7 +126,7 @@
 
 function install_dashboard() {
 	?>
-	<p><?php printf( __( 'Plugins extend and expand the functionality of WordPress. You may automatically install plugins from the <a href="%1$s">WordPress Plugin Directory</a> or upload a plugin in .zip format via <a href="%2$s">this page</a>.' ), 'https://wordpress.org/plugins/', self_admin_url( 'plugin-install.php?tab=upload' ) ); ?></p>
+	<p><?php printf( __( 'Plugins extend and expand the functionality of WordPress. You may automatically install plugins from the <a href="%1$s">WordPress Plugin Directory</a> or <a href="%2$s" class="wp-upload-show">upload a plugin</a> in .zip format.' ), 'https://wordpress.org/plugins/', self_admin_url( 'plugin-install.php?upload' ) ); ?></p>
 
 	<h4><?php _e('Search') ?></h4>
 	<?php install_search_form( false ); ?>
@@ -187,14 +187,15 @@
  */
 function install_plugins_upload( $page = 1 ) {
 ?>
-	<h4><?php _e('Install a plugin in .zip format'); ?></h4>
-	<p class="install-help"><?php _e('If you have a plugin in a .zip format, you may install it by uploading it here.'); ?></p>
-	<form method="post" enctype="multipart/form-data" class="wp-upload-form" action="<?php echo self_admin_url('update.php?action=upload-plugin'); ?>">
-		<?php wp_nonce_field( 'plugin-upload'); ?>
-		<label class="screen-reader-text" for="pluginzip"><?php _e('Plugin zip file'); ?></label>
-		<input type="file" id="pluginzip" name="pluginzip" />
-		<?php submit_button( __( 'Install Now' ), 'button', 'install-plugin-submit', false ); ?>
-	</form>
+	<div class="wp-upload-container wp-upload-container-hidden">
+		<p class="install-help"><?php _e( 'If you have a plugin in a .zip format, you may install it by uploading it here.' ); ?></p>
+		<form method="post" enctype="multipart/form-data" class="wp-upload-form" action="<?php echo self_admin_url( 'update.php?action=upload-plugin' ); ?>">
+			<?php wp_nonce_field( 'plugin-upload' ); ?>
+			<label class="screen-reader-text" for="pluginzip"><?php _e( 'Plugin zip file' ); ?></label>
+			<input type="file" id="pluginzip" name="pluginzip" />
+			<?php submit_button( __( 'Install Now' ), 'button', 'install-plugin-submit', false ); ?>
+		</form>
+	</div>
 <?php
 }
 add_action('install_plugins_upload', 'install_plugins_upload', 10, 1);
Index: trunk/src/wp-admin/includes/theme-install.php
===================================================================
--- trunk/src/wp-admin/includes/theme-install.php	(revision 29047)
+++ trunk/src/wp-admin/includes/theme-install.php	(working copy)
@@ -136,13 +136,15 @@
 
 function install_themes_upload() {
 ?>
-<p class="install-help"><?php _e('If you have a theme in a .zip format, you may install it by uploading it here.'); ?></p>
-<form method="post" enctype="multipart/form-data" class="wp-upload-form" action="<?php echo self_admin_url('update.php?action=upload-theme'); ?>">
-	<?php wp_nonce_field( 'theme-upload'); ?>
-	<input type="file" name="themezip" />
-	<?php submit_button( __( 'Install Now' ), 'button', 'install-theme-submit', false ); ?>
-</form>
-	<?php
+	<div class="wp-upload-container wp-upload-container-hidden">
+		<p class="install-help"><?php _e( 'If you have a theme in a .zip format, you may install it by uploading it here.' ); ?></p>
+		<form method="post" enctype="multipart/form-data" class="wp-upload-form" action="<?php echo self_admin_url( 'update.php?action=upload-theme' ); ?>">
+			<?php wp_nonce_field( 'theme-upload' ); ?>
+			<input type="file" name="themezip" />
+			<?php submit_button( __( 'Install Now' ), 'button', 'install-theme-submit', false ); ?>
+		</form>
+	</div>
+<?php
 }
 // add_action('install_themes_upload', 'install_themes_upload', 10, 0);
 
Index: trunk/src/wp-admin/js/theme.js
===================================================================
--- trunk/src/wp-admin/js/theme.js	(revision 29047)
+++ trunk/src/wp-admin/js/theme.js	(working copy)
@@ -1497,14 +1497,14 @@
 	searchContainer: $( '.theme-navigation' ),
 
 	uploader: function() {
-		$( 'a.upload' ).on( 'click', function( event ) {
+		$( '.wp-upload-show' ).on( 'click', function( event ) {
 			event.preventDefault();
-			$( 'body' ).addClass( 'show-upload-theme' );
+			$( 'body' ).addClass( 'show-upload-container' );
 			themes.router.navigate( themes.router.baseUrl( '?upload' ), { replace: true } );
 		});
-		$( 'a.browse-themes' ).on( 'click', function( event ) {
+		$( '.wp-upload-hide' ).on( 'click', function( event ) {
 			event.preventDefault();
-			$( 'body' ).removeClass( 'show-upload-theme' );
+			$( 'body' ).removeClass( 'show-upload-container' );
 			themes.router.navigate( themes.router.baseUrl( '' ), { replace: true } );
 		});
 	},
@@ -1642,7 +1642,7 @@
 
 		// Support the `upload` route by going straight to upload section
 		themes.router.on( 'route:upload', function() {
-			$( 'a.upload' ).trigger( 'click' );
+			$( '.wp-upload-show' ).trigger( 'click' );
 		});
 
 		// The `search` route event. The router populates the input field.
Index: trunk/src/wp-admin/plugin-install.php
===================================================================
--- trunk/src/wp-admin/plugin-install.php	(revision 29047)
+++ trunk/src/wp-admin/plugin-install.php	(working copy)
@@ -29,7 +29,22 @@
 $title = __('Install Plugins');
 $parent_file = 'plugins.php';
 
-wp_enqueue_script( 'plugin-install' );
+wp_localize_script( 'plugin', '_wpPluginSettings', array(
+	'plugins' => false,
+	'settings' => array(
+		'isInstall'     => true,
+		'canInstall'    => current_user_can( 'install_plugins' ),
+		'installURI'    => current_user_can( 'install_plugins' ) ? self_admin_url( 'plugin-install.php' ) : null,
+		'adminUrl'      => parse_url( self_admin_url(), PHP_URL_PATH )
+	),
+	'l10n' => array(
+		'pluginInformation' => __('Plugin Information:'),
+		'ays' => __('Are you sure you want to install this plugin?')
+	),
+) );
+
+wp_enqueue_script( 'plugin' );
+
 if ( 'plugin-information' != $tab )
 	add_thickbox();
 
@@ -73,24 +88,33 @@
 include(ABSPATH . 'wp-admin/admin-header.php');
 ?>
 <div class="wrap">
-<h2><?php echo esc_html( $title ); ?></h2>
+	<h2>
+		<?php echo esc_html( $title ); ?>
+		
+		<a href="#" class="wp-upload-show add-new-h2"><?php echo __( 'Upload Plugin' ); ?></a>
+		<a href="#" class="wp-upload-hide add-new-h2"><?php echo __( 'Browse', 'plugins' ); ?></a>
+	</h2>
 
-<?php $wp_list_table->views(); ?>
+	<?php install_plugins_upload(); ?>
 
-<br class="clear" />
-<?php
-/**
- * Fires after the plugins list table in each tab of the Install Plugins screen.
- *
- * The dynamic portion of the action hook, $tab, allows for targeting
- * individual tabs, for instance 'install_plugins_plugin-information'.
- *
- * @since 2.7.0
- *
- * @param int $paged The current page number of the plugins list table.
- */
-?>
-<?php do_action( "install_plugins_$tab", $paged ); ?>
+	<div class="hide-on-upload">
+		<?php $wp_list_table->views(); ?>
+	
+		<br class="clear" />
+	
+		<?php
+		/**
+		 * Fires after the plugins list table in each tab of the Install Plugins screen.
+		 *
+		 * The dynamic portion of the action hook, $tab, allows for targeting
+		 * individual tabs, for instance 'install_plugins_plugin-information'.
+		 *
+		 * @since 2.7.0
+		 *
+		 * @param int $paged The current page number of the plugins list table.
+		 */
+		do_action( "install_plugins_$tab", $paged ); ?>
+	</div>
 </div>
 <?php
 /**
Index: trunk/src/wp-admin/theme-install.php
===================================================================
--- trunk/src/wp-admin/theme-install.php	(revision 29047)
+++ trunk/src/wp-admin/theme-install.php	(working copy)
@@ -125,16 +125,16 @@
 		 */
 		$tabs = apply_filters( 'install_themes_tabs', $tabs );
 		foreach ( $tabs as $tab_slug => $tab_name ) {
-			echo '<a href="#" class="' . esc_attr( $tab_slug ) . ' add-new-h2">' . $tab_name . '</a>';
+			$visibility = $tab_slug == 'upload' ? ' wp-upload-show' : ' wp-upload-hide';
+			
+			echo '<a href="#" class="' . esc_attr( $tab_slug ) . $visibility . ' add-new-h2">' . $tab_name . '</a>';
 		}
 		?>
 	</h2>
 
-	<div class="upload-theme">
 	<?php install_themes_upload(); ?>
-	</div>
-
-	<div class="theme-navigation">
+	
+	<div class="theme-navigation hide-on-upload">
 		<span class="theme-count"></span>
 		<a class="theme-section" href="#" data-sort="featured"><?php _ex( 'Featured', 'themes' ); ?></a>
 		<a class="theme-section" href="#" data-sort="popular"><?php _ex( 'Popular', 'themes' ); ?></a>
@@ -175,7 +175,7 @@
 			</div>
 		</div>
 	</div>
-	<div class="theme-browser"></div>
+	<div class="theme-browser hide-on-upload"></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>
Index: trunk/src/wp-includes/script-loader.php
===================================================================
--- trunk/src/wp-includes/script-loader.php	(revision 29047)
+++ trunk/src/wp-includes/script-loader.php	(working copy)
@@ -486,11 +486,7 @@
 			'error' => __('Error while saving the changes.')
 		) );
 
-		$scripts->add( 'plugin-install', "/wp-admin/js/plugin-install$suffix.js", array( 'jquery', 'thickbox' ), false, 1 );
-		did_action( 'init' ) && $scripts->localize( 'plugin-install', 'plugininstallL10n', array(
-			'plugin_information' => __('Plugin Information:'),
-			'ays' => __('Are you sure you want to install this plugin?')
-		) );
+		$scripts->add( 'plugin', "/wp-admin/js/plugin$suffix.js", array( 'wp-backbone' ), false, 1 );
 
 		$scripts->add( 'updates', "/wp-admin/js/updates$suffix.js", array( 'jquery' ) );
 
