Index: src/wp-admin/css/list-tables.css
===================================================================
--- src/wp-admin/css/list-tables.css	(revision 29610)
+++ src/wp-admin/css/list-tables.css	(working copy)
@@ -595,6 +595,11 @@
 	padding: 2px 8px 0 0;
 }
 
+.wp-filter .actions {
+	display: inline-block;
+	vertical-align: middle;
+}
+
 .tablenav .delete {
 	margin-right: 20px;
 }
@@ -617,11 +622,18 @@
 	color: #2ea2cc;
 }
 
-.view-switch {
+tablenav .view-switch {
 	float: right;
 	margin: 5px 16px 0 8px;
 }
 
+.wp-filter .view-switch {
+	display: inline-block;
+	vertical-align: middle;
+	padding: 14px 0;
+	margin: 0 20px 0 0;
+}
+
 .view-switch a {
 	text-decoration: none;
 }
@@ -1437,7 +1449,8 @@
 		display: block;
 	}
 
-	.tablenav.top .actions, .view-switch {
+	.tablenav.top .actions,
+	.tablenav .view-switch {
 		display: none;
 	}
 
Index: src/wp-admin/css/media.css
===================================================================
--- src/wp-admin/css/media.css	(revision 29610)
+++ src/wp-admin/css/media.css	(working copy)
@@ -507,16 +507,6 @@
 	border: 4px dashed #bbb;
 }
 
-.media-frame.mode-grid .media-toolbar select {
-	margin-top: 1px;
-	font-size: inherit;
-}
-
-.media-frame.mode-grid .attachments-browser .bulk-select {
-	display: inline-block;
-	margin: 0 10px 0 0;
-}
-
 .media-frame.mode-grid .attachments,
 .media-frame.mode-select .attachments {
 	padding: 2px;
@@ -524,8 +514,8 @@
 
 .media-frame.mode-select .attachments-browser.fixed .attachments {
 	position: relative;
-	top: 80px; /* prevent jumping up when the toolbar becomes fixed */
-	padding-bottom: 80px; /* offset for above so the bottom doesn't get cut off */
+	top: 97px; /* prevent jumping up when the toolbar becomes fixed */
+	padding-bottom: 97px; /* offset for above so the bottom doesn't get cut off */
 }
 
 .media-frame.mode-grid .attachment:focus,
@@ -571,54 +561,29 @@
  *
  * This should be OOCSS'd so both use a shared selector.
  */
-.media-frame.mode-grid .attachments-browser .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);
-	-webkit-box-sizing: border-box;
-	-moz-box-sizing: border-box;
-	box-sizing: border-box;
-	color: #555;
-	display: inline-block;
-	font-size: 13px;
-	margin: 20px 0;
-	padding: 0 20px;
-	position: relative;
-	width: 100%;
+
+.media-frame.mode-grid .media-toolbar {
+	margin: 20px 0 16px;
 	height: auto;
-	border: none;
 }
 
-.media-frame.mode-select .attachments-browser.fixed .media-toolbar {
-	position: fixed;
-	top: 32px;
-	left: auto;
-	right: 20px;
-	margin-top: 0;
+.media-frame.mode-grid .media-toolbar select {
+	margin: 0 10px 0 0;
+	font-size: inherit;
 }
 
-.media-frame.mode-grid input[type="search"] {
-	margin: 1px;
-	padding: 3px 5px;
-	position: absolute;
-	right: 10px;
-	top: 9px;
-	font-size: 16px;
-	font-weight: 300;
-	line-height: 1.5;
-	width: 280px;
+.media-frame.mode-grid .media-toolbar-secondary > .media-button {
+	margin-top: 10px;
+	margin-bottom: 10px;
 }
 
-.media-frame.mode-grid .view-switch {
+.media-frame.mode-grid .attachments-browser .bulk-select {
 	display: inline-block;
-	float: none;
-	vertical-align: middle;
-	padding: 15px 0;
-	margin: 0 20px 0 0;
+	margin: 0 10px 0 0;
 }
 
-.media-frame.mode-grid select {
-	margin: 0 10px 0 0;
+.media-frame.mode-grid .search {
+	margin-top: 0;
 }
 
 .media-frame.mode-grid .spinner {
@@ -629,6 +594,14 @@
 	margin-right: 10px;
 }
 
+.media-frame.mode-select .attachments-browser.fixed .media-toolbar {
+	position: fixed;
+	top: 32px;
+	left: auto;
+	right: 20px;
+	margin-top: 0;
+}
+
 .media-frame.mode-grid .attachments-browser {
 	padding: 0;
 }
@@ -1152,17 +1125,9 @@
  */
 
 @media only screen and (max-width: 1120px) {
-	.media-frame.mode-grid .attachments-browser .media-toolbar-primary,
 	.media-frame.mode-grid .attachments-browser .media-toolbar-secondary {
 		float: none;
 	}
-
-	.media-frame.mode-grid input[type="search"] {
-		margin: 20px 0;
-		position: static;
-		width: 100%;
-		max-width: 280px;
-	}
 }
 
 @media only screen and ( max-width: 782px ) {
Index: src/wp-admin/includes/class-wp-media-list-table.php
===================================================================
--- src/wp-admin/includes/class-wp-media-list-table.php	(revision 29610)
+++ src/wp-admin/includes/class-wp-media-list-table.php	(working copy)
@@ -91,10 +91,13 @@
 	}
 
 	protected function extra_tablenav( $which ) {
+		if ( 'bar' !== $which ) {
+			return;
+		}
 ?>
-		<div class="alignleft actions">
+		<div class="actions">
 <?php
-		if ( 'top' == $which && !is_singular() && !$this->detached && !$this->is_trash ) {
+		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 */
@@ -131,8 +134,6 @@
 		global $mode;
 
 		parent::pagination( $which );
-
-		$this->view_switcher( $mode );
 	}
 
 	/**
@@ -167,6 +168,36 @@
 <?php
 	}
 
+	/**
+	 * Override parent views so we can use the filter bar display.
+	 */
+	public function views() {
+		global $mode;
+
+		$views = $this->get_views();
+
+		/** This filter is documented in wp-admin/inclues/class-wp-list-table.php */
+		$views = apply_filters( "views_{$this->screen->id}", $views );
+?>
+<div class="wp-filter">
+	<?php $this->view_switcher( $mode ); ?>
+
+	<ul class="filter-links">
+		<?php
+		if ( ! empty( $views ) ) {
+			foreach ( $views as $class => $view ) {
+				$views[ $class ] = "\t<li class='$class'>$view";
+			}
+			echo implode( " </li>\n", $views ) . "</li>\n";
+		}
+		?>
+	</ul>
+
+	<?php $this->extra_tablenav( 'bar' ); ?>
+</div>
+<?php
+	}
+
 	public function get_columns() {
 		$posts_columns = array();
 		$posts_columns['cb'] = '<input type="checkbox" />';
Index: src/wp-includes/js/media-grid.js
===================================================================
--- src/wp-includes/js/media-grid.js	(revision 29610)
+++ src/wp-includes/js/media-grid.js	(working copy)
@@ -179,7 +179,8 @@
 			$browser = this.$('.attachments-browser');
 			$toolbar = $browser.find('.media-toolbar');
 
-			if ( $browser.offset().top < this.$window.scrollTop() + this.$adminBar.height() ) {
+			// Offset doesn't appear to take top margin into account, hence +20
+			if ( ( $browser.offset().top + 20 ) < this.$window.scrollTop() + this.$adminBar.height() ) {
 				$browser.addClass( 'fixed' );
 				$toolbar.css('width', $browser.width() + 'px');
 			} else {
Index: src/wp-includes/js/media-views.js
===================================================================
--- src/wp-includes/js/media-views.js	(revision 29610)
+++ src/wp-includes/js/media-views.js	(working copy)
@@ -3937,7 +3937,7 @@
 	 */
 	media.view.Toolbar = media.View.extend({
 		tagName:   'div',
-		className: 'media-toolbar',
+		className: 'media-toolbar wp-filter',
 
 		initialize: function() {
 			var state = this.controller.state(),
@@ -3949,7 +3949,7 @@
 			// The toolbar is composed of two `PriorityList` views.
 			this.primary   = new media.view.PriorityList();
 			this.secondary = new media.view.PriorityList();
-			this.primary.$el.addClass('media-toolbar-primary');
+			this.primary.$el.addClass('media-toolbar-primary search-form');
 			this.secondary.$el.addClass('media-toolbar-secondary');
 
 			this.views.set([ this.secondary, this.primary ]);
