Index: src/wp-includes/js/media/routers/manage.js
===================================================================
--- src/wp-includes/js/media/routers/manage.js	(revision 37978)
+++ src/wp-includes/js/media/routers/manage.js	(working copy)
@@ -9,7 +9,8 @@
 var Router = Backbone.Router.extend({
 	routes: {
 		'upload.php?item=:slug':    'showItem',
-		'upload.php?search=:query': 'search'
+		'upload.php?search=:query': 'search',
+		'upload.php':               'reset'
 	},
 
 	// Map routes against the page URL
@@ -17,6 +18,14 @@
 		return 'upload.php' + url;
 	},
 
+	reset: function( query ) {
+		var frame = wp.media.frames.edit;
+
+		if ( frame ) {
+			frame.close();
+		}
+	},
+
 	// Respond to the search route by filling the search field and trigggering the input event
 	search: function( query ) {
 		jQuery( '#media-search-input' ).val( query ).trigger( 'input' );
@@ -25,18 +34,20 @@
 	// Show the modal with a specific item
 	showItem: function( query ) {
 		var media = wp.media,
-			library = media.frame.state().get('library'),
+			frame = media.frames.browse,
+			library = frame.state().get('library'),
 			item;
 
 		// Trigger the media frame to open the correct item
 		item = library.findWhere( { id: parseInt( query, 10 ) } );
+
 		if ( item ) {
-			media.frame.trigger( 'edit:attachment', item );
+			frame.trigger( 'edit:attachment', item );
 		} else {
 			item = media.attachment( query );
-			media.frame.listenTo( item, 'change', function( model ) {
-				media.frame.stopListening( item );
-				media.frame.trigger( 'edit:attachment', model );
+			frame.listenTo( item, 'change', function( model ) {
+				frame.stopListening( item );
+				frame.trigger( 'edit:attachment', model );
 			} );
 			item.fetch();
 		}
Index: src/wp-includes/js/media/views/frame/edit-attachments.js
===================================================================
--- src/wp-includes/js/media/views/frame/edit-attachments.js	(revision 37978)
+++ src/wp-includes/js/media/views/frame/edit-attachments.js	(working copy)
@@ -59,15 +59,20 @@
 		// Bind default title creation.
 		this.on( 'title:create:default', this.createTitle, this );
 
-		// Close the modal if the attachment is deleted.
-		this.listenTo( this.model, 'change:status destroy', this.close, this );
-
 		this.on( 'content:create:edit-metadata', this.editMetadataMode, this );
 		this.on( 'content:create:edit-image', this.editImageMode, this );
 		this.on( 'content:render:edit-image', this.editImageModeRender, this );
+		this.on( 'refresh', this.rerender, this );
 		this.on( 'close', this.detach );
+
+		this.bindModelHandlers();
 	},
 
+	bindModelHandlers: function() {
+		// Close the modal if the attachment is deleted.
+		this.listenTo( this.model, 'change:status destroy', this.close, this );
+	},
+
 	createModal: function() {
 		// Initialize modal container view.
 		if ( this.options.modal ) {
@@ -82,7 +87,6 @@
 
 			// Completely destroy the modal DOM element when closing it.
 			this.modal.on( 'close', _.bind( function() {
-				this.modal.remove();
 				$( 'body' ).off( 'keydown.media-modal' ); /* remove the keydown event */
 				// Restore the original focus item if possible
 				$( 'li.attachment[data-id="' + this.model.get( 'id' ) +'"]' ).focus();
@@ -100,7 +104,10 @@
 	 */
 	createStates: function() {
 		this.states.add([
-			new wp.media.controller.EditAttachmentMetadata( { model: this.model } )
+			new wp.media.controller.EditAttachmentMetadata({
+				model:   this.model,
+				library: this.library
+			})
 		]);
 	},
 
@@ -166,7 +173,13 @@
 	/**
 	 * Rerender the view.
 	 */
-	rerender: function() {
+	rerender: function( model ) {
+		this.stopListening( this.model );
+
+		this.model = model;
+
+		this.bindModelHandlers();
+
 		// Only rerender the `content` region.
 		if ( this.content.mode() !== 'edit-metadata' ) {
 			this.content.mode( 'edit-metadata' );
@@ -185,8 +198,7 @@
 			this.$( '.left' ).blur();
 			return;
 		}
-		this.model = this.library.at( this.getCurrentIndex() - 1 );
-		this.rerender();
+		this.trigger( 'refresh', this.library.at( this.getCurrentIndex() - 1 ) );
 		this.$( '.left' ).focus();
 	},
 
@@ -198,8 +210,7 @@
 			this.$( '.right' ).blur();
 			return;
 		}
-		this.model = this.library.at( this.getCurrentIndex() + 1 );
-		this.rerender();
+		this.trigger( 'refresh', this.library.at( this.getCurrentIndex() + 1 ) );
 		this.$( '.right' ).focus();
 	},
 
Index: src/wp-includes/js/media/views/frame/manage.js
===================================================================
--- src/wp-includes/js/media/views/frame/manage.js	(revision 37978)
+++ src/wp-includes/js/media/views/frame/manage.js	(working copy)
@@ -77,6 +77,8 @@
 		this.bindRegionModeHandlers();
 		this.render();
 		this.bindSearchHandler();
+
+		wp.media.frames.browse = this;
 	},
 
 	bindSearchHandler: function() {
@@ -97,18 +99,21 @@
 
 		// Update the URL when entering search string (at most once per second)
 		search.on( 'input', _.bind( input, this ) );
-		searchView.val( currentSearch ).trigger( 'input' );
 
-		this.gridRouter.on( 'route:search', function () {
-			var href = window.location.href;
-			if ( href.indexOf( 'mode=' ) > -1 ) {
-				href = href.replace( /mode=[^&]+/g, 'mode=list' );
-			} else {
-				href += href.indexOf( '?' ) > -1 ? '&mode=list' : '?mode=list';
-			}
-			href = href.replace( 'search=', 's=' );
-			listMode.prop( 'href', href );
-		} );
+		this.gridRouter
+			.on( 'route:search', function () {
+				var href = window.location.href;
+				if ( href.indexOf( 'mode=' ) > -1 ) {
+					href = href.replace( /mode=[^&]+/g, 'mode=list' );
+				} else {
+					href += href.indexOf( '?' ) > -1 ? '&mode=list' : '?mode=list';
+				}
+				href = href.replace( 'search=', 's=' );
+				listMode.prop( 'href', href );
+			})
+			.on( 'route:reset', function() {
+				searchView.val( '' ).trigger( 'input' );
+			});
 	},
 
 	/**
@@ -200,12 +205,16 @@
 	 */
 	openEditAttachmentModal: function( model ) {
 		// Create a new EditAttachment frame, passing along the library and the attachment model.
-		wp.media( {
-			frame:       'edit-attachments',
-			controller:  this,
-			library:     this.state().get('library'),
-			model:       model
-		} );
+		if ( wp.media.frames.edit ) {
+			wp.media.frames.edit.open().trigger( 'refresh', model );
+		} else {
+			wp.media.frames.edit = wp.media( {
+				frame:       'edit-attachments',
+				controller:  this,
+				library:     this.state().get('library'),
+				model:       model
+			} );
+		}
 	},
 
 	/**
Index: src/wp-includes/js/media-grid.js
===================================================================
--- src/wp-includes/js/media-grid.js	(revision 37978)
+++ src/wp-includes/js/media-grid.js	(working copy)
@@ -51,7 +51,8 @@
 var Router = Backbone.Router.extend({
 	routes: {
 		'upload.php?item=:slug':    'showItem',
-		'upload.php?search=:query': 'search'
+		'upload.php?search=:query': 'search',
+		'upload.php':               'reset'
 	},
 
 	// Map routes against the page URL
@@ -59,6 +60,14 @@
 		return 'upload.php' + url;
 	},
 
+	reset: function( query ) {
+		var frame = wp.media.frames.edit;
+
+		if ( frame ) {
+			frame.close();
+		}
+	},
+
 	// Respond to the search route by filling the search field and trigggering the input event
 	search: function( query ) {
 		jQuery( '#media-search-input' ).val( query ).trigger( 'input' );
@@ -67,18 +76,20 @@
 	// Show the modal with a specific item
 	showItem: function( query ) {
 		var media = wp.media,
-			library = media.frame.state().get('library'),
+			frame = media.frames.browse,
+			library = frame.state().get('library'),
 			item;
 
 		// Trigger the media frame to open the correct item
 		item = library.findWhere( { id: parseInt( query, 10 ) } );
+
 		if ( item ) {
-			media.frame.trigger( 'edit:attachment', item );
+			frame.trigger( 'edit:attachment', item );
 		} else {
 			item = media.attachment( query );
-			media.frame.listenTo( item, 'change', function( model ) {
-				media.frame.stopListening( item );
-				media.frame.trigger( 'edit:attachment', model );
+			frame.listenTo( item, 'change', function( model ) {
+				frame.stopListening( item );
+				frame.trigger( 'edit:attachment', model );
 			} );
 			item.fetch();
 		}
@@ -401,15 +412,20 @@
 		// Bind default title creation.
 		this.on( 'title:create:default', this.createTitle, this );
 
-		// Close the modal if the attachment is deleted.
-		this.listenTo( this.model, 'change:status destroy', this.close, this );
-
 		this.on( 'content:create:edit-metadata', this.editMetadataMode, this );
 		this.on( 'content:create:edit-image', this.editImageMode, this );
 		this.on( 'content:render:edit-image', this.editImageModeRender, this );
+		this.on( 'refresh', this.rerender, this );
 		this.on( 'close', this.detach );
+
+		this.bindModelHandlers();
 	},
 
+	bindModelHandlers: function() {
+		// Close the modal if the attachment is deleted.
+		this.listenTo( this.model, 'change:status destroy', this.close, this );
+	},
+
 	createModal: function() {
 		// Initialize modal container view.
 		if ( this.options.modal ) {
@@ -424,7 +440,6 @@
 
 			// Completely destroy the modal DOM element when closing it.
 			this.modal.on( 'close', _.bind( function() {
-				this.modal.remove();
 				$( 'body' ).off( 'keydown.media-modal' ); /* remove the keydown event */
 				// Restore the original focus item if possible
 				$( 'li.attachment[data-id="' + this.model.get( 'id' ) +'"]' ).focus();
@@ -442,7 +457,10 @@
 	 */
 	createStates: function() {
 		this.states.add([
-			new wp.media.controller.EditAttachmentMetadata( { model: this.model } )
+			new wp.media.controller.EditAttachmentMetadata({
+				model:   this.model,
+				library: this.library
+			})
 		]);
 	},
 
@@ -508,7 +526,13 @@
 	/**
 	 * Rerender the view.
 	 */
-	rerender: function() {
+	rerender: function( model ) {
+		this.stopListening( this.model );
+
+		this.model = model;
+
+		this.bindModelHandlers();
+
 		// Only rerender the `content` region.
 		if ( this.content.mode() !== 'edit-metadata' ) {
 			this.content.mode( 'edit-metadata' );
@@ -527,8 +551,7 @@
 			this.$( '.left' ).blur();
 			return;
 		}
-		this.model = this.library.at( this.getCurrentIndex() - 1 );
-		this.rerender();
+		this.trigger( 'refresh', this.library.at( this.getCurrentIndex() - 1 ) );
 		this.$( '.left' ).focus();
 	},
 
@@ -540,8 +563,7 @@
 			this.$( '.right' ).blur();
 			return;
 		}
-		this.model = this.library.at( this.getCurrentIndex() + 1 );
-		this.rerender();
+		this.trigger( 'refresh', this.library.at( this.getCurrentIndex() + 1 ) );
 		this.$( '.right' ).focus();
 	},
 
@@ -662,6 +684,8 @@
 		this.bindRegionModeHandlers();
 		this.render();
 		this.bindSearchHandler();
+
+		wp.media.frames.browse = this;
 	},
 
 	bindSearchHandler: function() {
@@ -682,18 +706,21 @@
 
 		// Update the URL when entering search string (at most once per second)
 		search.on( 'input', _.bind( input, this ) );
-		searchView.val( currentSearch ).trigger( 'input' );
 
-		this.gridRouter.on( 'route:search', function () {
-			var href = window.location.href;
-			if ( href.indexOf( 'mode=' ) > -1 ) {
-				href = href.replace( /mode=[^&]+/g, 'mode=list' );
-			} else {
-				href += href.indexOf( '?' ) > -1 ? '&mode=list' : '?mode=list';
-			}
-			href = href.replace( 'search=', 's=' );
-			listMode.prop( 'href', href );
-		} );
+		this.gridRouter
+			.on( 'route:search', function () {
+				var href = window.location.href;
+				if ( href.indexOf( 'mode=' ) > -1 ) {
+					href = href.replace( /mode=[^&]+/g, 'mode=list' );
+				} else {
+					href += href.indexOf( '?' ) > -1 ? '&mode=list' : '?mode=list';
+				}
+				href = href.replace( 'search=', 's=' );
+				listMode.prop( 'href', href );
+			})
+			.on( 'route:reset', function() {
+				searchView.val( '' ).trigger( 'input' );
+			});
 	},
 
 	/**
@@ -785,12 +812,16 @@
 	 */
 	openEditAttachmentModal: function( model ) {
 		// Create a new EditAttachment frame, passing along the library and the attachment model.
-		wp.media( {
-			frame:       'edit-attachments',
-			controller:  this,
-			library:     this.state().get('library'),
-			model:       model
-		} );
+		if ( wp.media.frames.edit ) {
+			wp.media.frames.edit.open().trigger( 'refresh', model );
+		} else {
+			wp.media.frames.edit = wp.media( {
+				frame:       'edit-attachments',
+				controller:  this,
+				library:     this.state().get('library'),
+				model:       model
+			} );
+		}
 	},
 
 	/**
