Index: wp-admin/includes/plugin-install.php
===================================================================
--- wp-admin/includes/plugin-install.php	(revision 19601)
+++ wp-admin/includes/plugin-install.php	(working copy)
@@ -40,6 +40,8 @@
 	$args = apply_filters('plugins_api_args', $args, $action);
 	$res = apply_filters('plugins_api', false, $action, $args);
 
+	$args->wp_version = $GLOBALS['wp_version']; // temporary (?)
+
 	if ( false === $res ) {
 		$request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );
 		if ( is_wp_error($request) ) {
@@ -101,7 +103,7 @@
 		$tags = array();
 		foreach ( (array)$api_tags as $tag )
 			$tags[ $tag['name'] ] = (object) array(
-									'link' => esc_url( self_admin_url('plugin-install.php?tab=search&type=tag&s=' . urlencode($tag['name'])) ),
+									'link' => esc_url( self_admin_url('plugin-install.php?tab=search&s=tag:' . urlencode($tag['name'])) ),
 									'name' => $tag['name'],
 									'id' => sanitize_title_with_dashes($tag['name']),
 									'count' => $tag['count'] );
@@ -117,16 +119,10 @@
  * @since 2.7.0
  */
 function install_search_form(){
-	$type = isset($_REQUEST['type']) ? stripslashes( $_REQUEST['type'] ) : '';
 	$term = isset($_REQUEST['s']) ? stripslashes( $_REQUEST['s'] ) : '';
 
 	?><form id="search-plugins" method="get" action="">
 		<input type="hidden" name="tab" value="search" />
-		<select name="type" id="typeselector">
-			<option value="term"<?php selected('term', $type) ?>><?php _e('Term'); ?></option>
-			<option value="author"<?php selected('author', $type) ?>><?php _e('Author'); ?></option>
-			<option value="tag"<?php selected('tag', $type) ?>><?php _ex('Tag', 'Plugin Installer'); ?></option>
-		</select>
 		<input type="text" name="s" value="<?php echo esc_attr($term) ?>" />
 		<label class="screen-reader-text" for="plugin-search-input"><?php _e('Search Plugins'); ?></label>
 		<?php submit_button( __( 'Search Plugins' ), 'button', 'plugin-search-input', false ); ?>
Index: wp-admin/includes/class-wp-plugin-install-list-table.php
===================================================================
--- wp-admin/includes/class-wp-plugin-install-list-table.php	(revision 19601)
+++ wp-admin/includes/class-wp-plugin-install-list-table.php	(working copy)
@@ -33,7 +33,6 @@
 		$tabs['featured'] = _x( 'Featured','Plugin Installer' );
 		$tabs['popular']  = _x( 'Popular','Plugin Installer' );
 		$tabs['new']      = _x( 'Newest','Plugin Installer' );
-		$tabs['updated']  = _x( 'Recently Updated','Plugin Installer' );
 
 		$nonmenu_tabs = array( 'plugin-information' ); //Valid actions to perform which do not have a Menu item.
 
@@ -48,9 +47,30 @@
 
 		switch ( $tab ) {
 			case 'search':
-				$type = isset( $_REQUEST['type'] ) ? stripslashes( $_REQUEST['type'] ) : '';
 				$term = isset( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : '';
+				$type = isset( $_REQUEST['type'] ) ? $_REQUEST['type'] : '';
 
+				if ( 'tag:' == substr( $term, 0, 4 ) ) {
+					$type = 'tag';
+					$term = substr( $term, 4 );
+				} elseif ( 'author:' == substr( $term, 0, 7 ) ) {
+					$type = 'author';
+					$term = substr( $term, 7 );
+				} elseif ( 'author' == $type ) {
+					$_REQUEST['s'] = 'author:' . $_REQUEST['s'];
+				} elseif ( 'tag' == $type ) {
+					$_REQUEST['s'] = 'tag:' . $_REQUEST['s'];
+				} else {
+					$type = 'term';
+				}
+
+				add_action( 'install_plugins_table_header', 'install_search_form' );
+
+				if ( ! $term ) {
+					$args = false;
+					break;
+				}
+
 				switch ( $type ) {
 					case 'tag':
 						$args['tag'] = sanitize_title_with_dashes( $term );
@@ -63,13 +83,11 @@
 						break;
 				}
 
-				add_action( 'install_plugins_table_header', 'install_search_form' );
 				break;
 
 			case 'featured':
 			case 'popular':
 			case 'new':
-			case 'updated':
 				$args['browse'] = $tab;
 				break;
 
@@ -87,6 +105,9 @@
 
 		$this->items = $api->plugins;
 
+		if ( 'author' == $type && isset( $api->info['author'] ) )
+			$this->plugin_author = $api->info['author'];
+
 		$this->set_pagination_args( array(
 			'total_items' => $api->info['results'],
 			'per_page' => $per_page,
@@ -94,7 +115,8 @@
 	}
 
 	function no_items() {
-		_e( 'No plugins match your request.' );
+		if ( isset( $this->items ) )
+			_e( 'No plugins match your request.' );
 	}
 
 	function get_views() {
@@ -120,7 +142,16 @@
 				<img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" class="ajax-loading list-ajax-loading" alt="" />
 				<br class="clear" />
 			</div>
-		<?php } else { ?>
+		<?php
+			if ( isset( $this->plugin_author ) ) {
+				echo '<div style="margin:10px 10px">';
+				$gravatar = ( is_ssl() ? 'https://secure.gravatar.com/avatar/' : 'http://0.gravatar.com/avatar/' ) . $this->plugin_author['gravatar'] . '?s=64';
+				echo '<img src="' . esc_url( $gravatar ) . '" class="gravatar" style="float:left; margin: 0 10px 10px 0" />';
+				echo '<h3>' . esc_html( $this->plugin_author['name'] ) . '</h3>';
+				echo '<p><a href="' . esc_url( $this->plugin_author['url'] ) . '">' . esc_html( $this->plugin_author['url'] ) . '</a></p>';
+				echo '</div>';
+			}
+		} else { ?>
 			<div class="tablenav bottom">
 				<?php $this->pagination( $which ); ?>
 				<img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" class="ajax-loading list-ajax-loading" alt="" />
@@ -182,7 +213,7 @@
 
 			$author = $plugin['author'];
 			if ( ! empty( $plugin['author'] ) )
-				$author = ' <cite>' . sprintf( __( 'By %s' ), $author ) . '.</cite>';
+				$author = ' ' . sprintf( __( 'By %s.' ), $author );
 
 			$author = wp_kses( $author, $plugins_allowedtags );
 
