Index: src/wp-admin/includes/class-wp-media-list-table.php
===================================================================
--- src/wp-admin/includes/class-wp-media-list-table.php	(revision 29253)
+++ src/wp-admin/includes/class-wp-media-list-table.php	(working copy)
@@ -43,6 +43,29 @@
 		) );
 	}
 
+	public function search_box( $text, $input_id ) {
+		if ( empty( $_REQUEST['s'] ) && !$this->has_items() )
+			return;
+
+		$input_id = $input_id . '-search-input';
+
+		if ( ! empty( $_REQUEST['orderby'] ) )
+			echo '<input type="hidden" name="orderby" value="' . esc_attr( $_REQUEST['orderby'] ) . '" />';
+		if ( ! empty( $_REQUEST['order'] ) )
+			echo '<input type="hidden" name="order" value="' . esc_attr( $_REQUEST['order'] ) . '" />';
+		if ( ! empty( $_REQUEST['post_mime_type'] ) )
+			echo '<input type="hidden" name="post_mime_type" value="' . esc_attr( $_REQUEST['post_mime_type'] ) . '" />';
+		if ( ! empty( $_REQUEST['detached'] ) )
+			echo '<input type="hidden" name="detached" value="' . esc_attr( $_REQUEST['detached'] ) . '" />';
+?>
+<div class="media-toolbar-primary">
+	<label class="screen-reader-text" for="<?php echo $input_id ?>"><?php echo $text; ?>:</label>
+	<input type="search" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>" />
+	<?php submit_button( $text, 'button', false, false, array('id' => 'search-submit') ); ?>
+</div>
+<?php
+	}
+
 	protected function get_views() {
 		global $wpdb, $post_mime_types, $avail_post_mime_types;
 
@@ -85,11 +108,40 @@
 		return $actions;
 	}
 
-	protected function extra_tablenav( $which ) {
-?>
-		<div class="alignleft actions">
-<?php
-		if ( 'top' == $which && !is_singular() && !$this->detached && !$this->is_trash ) {
+	protected function display_tablenav( $which ) {
+		$mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode'];
+
+		if ( 'bottom' === $which ) {
+			?>
+			<div class="media-toolbar">
+				<div class="media-toolbar-secondary">
+					<?php $this->bulk_actions(); ?>
+				</div>
+			</div>
+			<?php
+
+			return;
+		}
+		
+		$this->pagination( $which );
+		?>
+		<div class="media-toolbar">
+			<div class="media-toolbar-secondary">
+				<?php $this->view_switcher( $mode ); ?>
+				<?php $this->extra_tablenav(); ?>
+				<?php $this->bulk_actions(); ?>
+			</div>
+		
+			<?php $this->search_box( __( 'Search Media' ), 'media' ); ?>
+		</div>
+		<?php
+	}
+
+	protected function extra_tablenav() {
+
+		echo '<div class="filters">';
+
+		if ( !is_singular() && !$this->detached && !$this->is_trash ) {
 			$this->months_dropdown( 'attachment' );
 
 			/** This action is documented in wp-admin/includes/class-wp-posts-list-table.php */
@@ -101,9 +153,10 @@
 			submit_button( __( 'Scan for lost attachments' ), 'secondary', 'find_detached', false );
 		} elseif ( $this->is_trash && current_user_can( 'edit_others_posts' ) ) {
 			submit_button( __( 'Empty Trash' ), 'apply', 'delete_all', false );
-		} ?>
-		</div>
-<?php
+		}
+
+		echo '</div>';
+
 	}
 
 	public function current_action() {
@@ -128,11 +181,83 @@
 	}
 
 	protected function pagination( $which ) {
-		global $mode;
+		if ( empty( $this->_pagination_args ) ) {
+			return;
+		}
 
-		parent::pagination( $which );
+		$total_items = $this->_pagination_args['total_items'];
+		$total_pages = $this->_pagination_args['total_pages'];
+		$infinite_scroll = false;
+		if ( isset( $this->_pagination_args['infinite_scroll'] ) ) {
+			$infinite_scroll = $this->_pagination_args['infinite_scroll'];
+		}
 
-		$this->view_switcher( $mode );
+		$output = '<span class="displaying-num">' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . '</span>';
+
+		$current = $this->get_pagenum();
+
+		$current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
+
+		$current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
+
+		$page_links = array();
+
+		$disable_first = $disable_last = '';
+		if ( $current == 1 ) {
+			$disable_first = ' disabled';
+		}
+		if ( $current == $total_pages ) {
+			$disable_last = ' disabled';
+		}
+		$page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
+			'first-page' . $disable_first,
+			esc_attr__( 'Go to the first page' ),
+			esc_url( remove_query_arg( 'paged', $current_url ) ),
+			'&laquo;'
+		);
+
+		$page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
+			'prev-page' . $disable_first,
+			esc_attr__( 'Go to the previous page' ),
+			esc_url( add_query_arg( 'paged', max( 1, $current-1 ), $current_url ) ),
+			'&lsaquo;'
+		);
+
+		if ( 'bottom' == $which ) {
+			$html_current_page = $current;
+		} else {
+			$html_current_page = sprintf( "<input class='current-page' title='%s' type='text' name='paged' value='%s' size='%d' />",
+				esc_attr__( 'Current page' ),
+				$current,
+				strlen( $total_pages )
+			);
+		}
+		$html_total_pages = sprintf( "<span class='total-pages'>%s</span>", number_format_i18n( $total_pages ) );
+		$page_links[] = '<span class="paging-input">' . sprintf( _x( '%1$s of %2$s', 'paging' ), $html_current_page, $html_total_pages ) . '</span>';
+
+		$page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
+			'next-page' . $disable_last,
+			esc_attr__( 'Go to the next page' ),
+			esc_url( add_query_arg( 'paged', min( $total_pages, $current+1 ), $current_url ) ),
+			'&rsaquo;'
+		);
+
+		$page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
+			'last-page' . $disable_last,
+			esc_attr__( 'Go to the last page' ),
+			esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ),
+			'&raquo;'
+		);
+
+		$pagination_links_class = 'pagination-links';
+		if ( ! empty( $infinite_scroll ) ) {
+			$pagination_links_class = ' hide-if-js';
+		}
+		$output .= "\n<span class='$pagination_links_class'>" . join( "\n", $page_links ) . '</span>';
+
+		$this->_pagination = "<div class='alignright tablenav-pages'>$output</div>";
+
+		echo $this->_pagination;
 	}
 
 	/**
Index: src/wp-admin/upload.php
===================================================================
--- src/wp-admin/upload.php	(revision 29253)
+++ src/wp-admin/upload.php	(working copy)
@@ -200,6 +200,7 @@
 $parent_file = 'upload.php';
 
 wp_enqueue_script( 'media' );
+wp_enqueue_style( 'media-views' );
 
 add_screen_option( 'per_page', array('label' => _x( 'Media items', 'items per page (screen options)' )) );
 
@@ -288,10 +289,8 @@
 
 <?php $wp_list_table->views(); ?>
 
-<form id="posts-filter" action="" method="get">
+<form id="posts-filter" class="<?php echo $mode; ?>-view" action="" method="get">
 
-<?php $wp_list_table->search_box( __( 'Search Media' ), 'media' ); ?>
-
 <?php $wp_list_table->display(); ?>
 
 <div id="ajax-response"></div>
Index: src/wp-includes/css/media-views.css
===================================================================
--- src/wp-includes/css/media-views.css	(revision 29253)
+++ src/wp-includes/css/media-views.css	(working copy)
@@ -19,12 +19,6 @@
 	line-height: 16px;
 }
 
-.media-frame select,
-.wp-admin .media-frame select {
-	line-height: 28px;
-	margin-top: 3px;
-}
-
 .media-frame a {
 	border-bottom: none;
 	color: #21759b;
@@ -218,6 +212,16 @@
 	height: 100%;
 }
 
+.wp-admin .media-toolbar select {
+	height: 32px;
+	line-height: 30px;
+	margin-top: 1px;
+}
+
+.post-php .media-toolbar-secondary select {
+	margin-top: 10px;
+}
+
 .media-toolbar-primary > .media-button,
 .media-toolbar-primary > .media-button-group {
 	margin-left: 10px;
@@ -628,8 +632,7 @@
 	max-height: 100%;
 }
 
-.media-frame-content .crop-content .upload-errors
-{
+.media-frame-content .crop-content .upload-errors {
 	position: absolute;
 	width: 300px;
 	top: 50%;
@@ -657,7 +660,6 @@
  * Attachment Browser Filters
  */
 .media-frame select.attachment-filters {
-	margin-top: 11px;
 	margin-right: 10px;
 }
 
@@ -1009,7 +1011,8 @@
 }
 
 .attachments-browser .attachments,
-.attachments-browser .uploader-inline {
+.attachments-browser .uploader-inline,
+.post-php .attachments-browser .media-toolbar {
 	position: absolute;
 	top: 50px;
 	left: 0;
@@ -1019,6 +1022,16 @@
 	outline: none;
 }
 
+.attachments-browser .attachments {
+	margin-top: 10px;
+}
+
+.post-php .attachments-browser .media-toolbar {
+	top: 0;
+	margin: 0;
+	width: auto;
+}
+
 .attachments-browser .uploader-inline:not(.hidden) + .attachments {
 	top: 350px;
 }
@@ -2625,12 +2638,8 @@
 	margin-top: 0;
 }
 
-.media-grid-view .media-toolbar select {
-	margin-top: 1px;
-	font-size: inherit;
-}
-
-.media-grid-view .attachments-browser .bulk-select {
+.media-toolbar .filters,
+.media-toolbar .bulk-select {
 	display: inline-block;
 }
 
@@ -2639,7 +2648,7 @@
  *
  * This should be OOCSS'd so both use a shared selector.
  */
-.media-grid-view .attachments-browser .media-toolbar {
+.media-toolbar {
 	background: #fff;
 	-webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
 	box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
@@ -2657,7 +2666,15 @@
 	border: none;
 }
 
-.media-grid-view input[type="search"] {
+.list-view .media-toolbar {
+	margin-top: 0;
+}
+
+.list-view .media-toolbar-primary {
+	padding-top: 10px;
+}
+
+.media-toolbar input[type="search"] {
 	margin: 1px;
 	padding: 3px 5px;
 	position: absolute;
@@ -2667,9 +2684,22 @@
 	font-weight: 300;
 	line-height: 1.5;
 	width: 280px;
+	-webkit-border-radius: 3px;
+	   -moz-border-radius: 3px;
+			border-radius: 3px;
 }
 
-.media-grid-view .view-switch {
+.wp-core-ui .media-toolbar .button {
+	height: 32px;
+	line-height: 30px;
+	vertical-align: middle;
+}
+
+.list-view .media-toolbar input[type="search"] {
+	position: static;
+}
+
+.media-toolbar .view-switch {
 	display: inline-block;
 	float: none;
 	vertical-align: middle;
@@ -2677,8 +2707,9 @@
 	margin: 0 20px 0 0;
 }
 
-.media-grid-view select {
+.media-toolbar select {
 	margin: 0 10px 0 0;
+	font-size: inherit;
 }
 
 .media-grid-view .spinner {
