Index: wp-admin/includes/meta-boxes.php
===================================================================
--- wp-admin/includes/meta-boxes.php	(revision 22946)
+++ wp-admin/includes/meta-boxes.php	(working copy)
@@ -1020,7 +1020,7 @@
 			$thumbnailId.val( thumbnailId );
 
 			if ( frame ) {
-				selection = frame.get('library').get('selection');
+				selection = frame.state('library').get('selection');
 
 				if ( -1 === thumbnailId )
 					selection.clear();
@@ -1055,7 +1055,7 @@
 
 			frame = wp.media( options );
 
-			frame.get('library').set( 'filterable', 'uploaded' );
+			frame.state('library').set( 'filterable', 'uploaded' );
 
 			frame.toolbar.on( 'activate:select', function() {
 				frame.toolbar.view().set({
Index: wp-admin/js/custom-background.js
===================================================================
--- wp-admin/js/custom-background.js	(revision 22946)
+++ wp-admin/js/custom-background.js	(working copy)
@@ -57,7 +57,7 @@
 				});
 			});
 
-			frame.state('library');
+			frame.setState('library');
 		});
 	});
 })(jQuery);
\ No newline at end of file
Index: wp-admin/js/custom-header.js
===================================================================
--- wp-admin/js/custom-header.js	(revision 22946)
+++ wp-admin/js/custom-header.js	(working copy)
@@ -40,7 +40,7 @@
 				});
 			});
 
-			frame.state('library');
+			frame.setState('library');
 		});
 	});
 }(jQuery));
Index: wp-includes/js/media-editor.js
===================================================================
--- wp-includes/js/media-editor.js	(revision 22946)
+++ wp-includes/js/media-editor.js	(working copy)
@@ -393,11 +393,11 @@
 				}, this );
 			}, this );
 
-			workflow.get('gallery-edit').on( 'update', function( selection ) {
+			workflow.state('gallery-edit').on( 'update', function( selection ) {
 				this.insert( wp.media.gallery.shortcode( selection ).string() );
 			}, this );
 
-			workflow.get('embed').on( 'select', function() {
+			workflow.state('embed').on( 'select', function() {
 				var embed = workflow.state().toJSON();
 
 				embed.url = embed.url || '';
Index: wp-includes/js/media-models.js
===================================================================
--- wp-includes/js/media-models.js	(revision 22946)
+++ wp-includes/js/media-models.js	(working copy)
@@ -31,7 +31,7 @@
 
 		delete attributes.frame;
 		// Set the default state.
-		frame.state( frame.options.state );
+		frame.setState( frame.options.state );
 		// Render, attach, and open the frame.
 		return frame.render().attach().open();
 	};
Index: wp-includes/js/media-views.js
===================================================================
--- wp-includes/js/media-views.js	(revision 22946)
+++ wp-includes/js/media-views.js	(working copy)
@@ -143,31 +143,28 @@
 	// Add events to the `StateMachine`.
 	_.extend( media.controller.StateMachine.prototype, Backbone.Events, {
 
-		// Fetch a state model.
+		// Fetch a state.
 		//
+		// If no `id` is provided, returns the active state.
+		//
 		// Implicitly creates states.
-		get: function( id ) {
+		state: function( id ) {
 			// Ensure that the `states` collection exists so the `StateMachine`
 			// can be used as a mixin.
 			this.states = this.states || new Backbone.Collection();
 
-			if ( ! this.states.get( id ) )
+			// Default to the active state.
+			id = id || this._state;
+
+			if ( id && ! this.states.get( id ) )
 				this.states.add({ id: id });
 			return this.states.get( id );
 		},
 
-		// Selects or returns the active state.
-		//
-		// If a `id` is provided, sets that as the current state.
-		// If no parameters are provided, returns the current state object.
-		state: function( id ) {
-			var previous;
+		// Sets the active state.
+		setState: function( id ) {
+			var previous = this.state();
 
-			if ( ! id )
-				return this._state ? this.get( this._state ) : null;
-
-			previous = this.state();
-
 			// Bail if we're trying to select the current state, if we haven't
 			// created the `states` collection, or are trying to select a state
 			// that does not exist.
@@ -176,15 +173,20 @@
 
 			if ( previous ) {
 				previous.trigger('deactivate');
-				this._previous = previous.id;
+				this._lastState = previous.id;
 			}
 
 			this._state = id;
 			this.state().trigger('activate');
 		},
 
-		previous: function() {
-			return this._previous;
+		// Returns the previous active state.
+		//
+		// Call the `state()` method with no parameters to retrieve the current
+		// active state.
+		lastState: function() {
+			if ( this._lastState )
+				return this.state( this._lastState );
 		}
 	});
 
@@ -427,10 +429,10 @@
 				previous = this.previous('excludeState');
 
 			if ( previous )
-				this.frame.get( previous ).off( 'change:library', this._excludeStateLibrary, this );
+				this.frame.state( previous ).off( 'change:library', this._excludeStateLibrary, this );
 
 			if ( current )
-				this.frame.get( current ).on( 'change:library', this._excludeStateLibrary, this );
+				this.frame.state( current ).on( 'change:library', this._excludeStateLibrary, this );
 		},
 
 		_excludeStateLibrary: function() {
@@ -439,7 +441,7 @@
 			if ( ! current )
 				return;
 
-			this.set( 'exclude', this.frame.get( current ).get('library') );
+			this.set( 'exclude', this.frame.state( current ).get('library') );
 		}
 	});
 
@@ -474,8 +476,8 @@
 		uploading: function( attachment ) {
 			var library = this.get('libraryState');
 
-			this.frame.get( library ).get('selection').add( attachment );
-			this.frame.state( library );
+			this.frame.state( library ).get('selection').add( attachment );
+			this.frame.setState( library );
 		}
 	});
 
@@ -1119,7 +1121,7 @@
 
 			// Generate the tab states.
 			_.each( tabs, function( title, id ) {
-				var frame = this.get( 'iframe:' + id ).set( _.defaults({
+				var frame = this.state( 'iframe:' + id ).set( _.defaults({
 					tab:     id,
 					src:     tabUrl + '&tab=' + id,
 					title:   title,
@@ -1146,7 +1148,7 @@
 
 			_.each( media.view.settings.tabs, function( title, id ) {
 				views[ 'iframe:' + id ] = {
-					text: this.get( 'iframe:' + id ).get('title'),
+					text: this.state( 'iframe:' + id ).get('title'),
 					priority: 200
 				};
 			}, this );
@@ -1164,7 +1166,7 @@
 			window.tb_remove = function() {
 				frame.close();
 				frame.reset();
-				frame.state( frame.options.state );
+				frame.setState( frame.options.state );
 				frame._tb_remove.call( window );
 			};
 		},
@@ -1319,7 +1321,7 @@
 							controller.state().trigger( options.event );
 							controller.reset();
 							if ( options.state )
-								controller.state( options.state );
+								controller.setState( options.state );
 						}
 					}
 				}
@@ -1449,7 +1451,8 @@
 		},
 
 		galleryMenu: function() {
-			var previous = this.previous(),
+			var lastState = this.lastState(),
+				previous = lastState && lastState.id,
 				frame = this;
 
 			this.menu.view( new media.view.Menu({
@@ -1460,7 +1463,7 @@
 						priority: 20,
 						click:    function() {
 							if ( previous )
-								frame.state( previous );
+								frame.setState( previous );
 							else
 								frame.close();
 						}
@@ -1578,7 +1581,7 @@
 
 							controller.reset();
 							// @todo: Make the state activated dynamic (instead of hardcoded).
-							controller.state('upload');
+							controller.setState('upload');
 						}
 					}
 				}
@@ -1597,7 +1600,7 @@
 						click: function() {
 							var controller = this.controller,
 								state = controller.state(),
-								edit = controller.get('gallery-edit');
+								edit = controller.state('gallery-edit');
 
 							edit.get('library').add( state.get('selection').models );
 							state.trigger('reset');
@@ -2066,7 +2069,7 @@
 				controller.reset();
 
 			if ( options.state )
-				controller.state( options.state );
+				controller.setState( options.state );
 		}
 	});
 
@@ -2102,7 +2105,7 @@
 				return function() {
 					var controller = this.controller,
 						selection = controller.state().get('selection'),
-						edit = controller.get( state ),
+						edit = controller.state( state ),
 						models = filter ? filter( selection ) : selection.models;
 
 					edit.set( 'library', new media.model.Selection( models, {
@@ -2110,7 +2113,7 @@
 						multiple: true
 					}) );
 
-					this.controller.state( state );
+					this.controller.setState( state );
 				};
 			};
 
@@ -2375,7 +2378,7 @@
 			if ( options.click )
 				options.click.call( this );
 			else if ( options.state )
-				this.controller.state( options.state );
+				this.controller.setState( options.state );
 		},
 
 		render: function() {
Index: wp-includes/js/tinymce/plugins/wpgallery/editor_plugin_src.js
===================================================================
--- wp-includes/js/tinymce/plugins/wpgallery/editor_plugin_src.js	(revision 22946)
+++ wp-includes/js/tinymce/plugins/wpgallery/editor_plugin_src.js	(working copy)
@@ -28,7 +28,7 @@
 
 				frame = gallery.edit( '[' + ed.dom.getAttrib( el, 'title' ) + ']' );
 
-				frame.get('gallery-edit').on( 'update', function( selection ) {
+				frame.state('gallery-edit').on( 'update', function( selection ) {
 					var shortcode = gallery.shortcode( selection ).string().slice( 1, -1 );
 					ed.dom.setAttrib( el, 'title', shortcode );
 				});
@@ -49,7 +49,7 @@
 					});
 				}
 			});
-			
+
 			ed.onMouseDown.add(function(ed, e) {
 				if ( e.target.nodeName == 'IMG' && ed.dom.hasClass(e.target, 'wpGallery') ) {
 					ed.plugins.wordpress._hideButtons();
