Index: wp-includes/js/wp-backbone.js
===================================================================
--- wp-includes/js/wp-backbone.js	(revision 26857)
+++ wp-includes/js/wp-backbone.js	(working copy)
@@ -381,4 +381,55 @@
 
 		ready: function() {}
 	});
+
+	// Backbone.History.prototype
+	// --------------------------
+	//
+	// Extends Backbone.History to support urls with GET queries in WordPress
+	// Supports basic form ?param=value passing 'paramvalue' as the fragment
+	_.extend( Backbone.History.prototype, {
+
+		// Keep original fragment resolver available
+		originalFragment: Backbone.History.prototype.getFragment,
+
+		// ### Get the fragment
+		//
+		// If history constructor includes 'queryUri' param
+		// Use our own getFragment resolver to handle the location changes
+		//
+		// Appends 'location.search' to pathname in order to deal with
+		// query variables present in URI
+		//
+		// Returns fragment '?paramvalue'
+		getFragment: function( fragment, forcePushState ) {
+			var root;
+
+			// If queryUri is not set via Backbone.history.start
+			// return the original fragment handler
+			if ( ! Backbone.history.options.queryUri ) {
+				return this.originalFragment.apply( this, arguments );
+			}
+
+			// If we got this far, parse this.location.search
+			// since we have a URL with query vars
+			if ( fragment == null ) {
+				if ( this._hasPushState || ! this._wantsHashChange || forcePushState ) {
+
+					// Constructs fragment attaching the query parameters
+					fragment = this.location.pathname + this.location.search;
+					root = this.root.replace( /\/$/, '' );
+
+					if ( ! fragment.indexOf( root ) ) {
+						fragment = fragment.slice( root.length );
+					}
+
+				} else {
+					fragment = this.getHash();
+				}
+			}
+
+			return fragment.replace(/^\/+|\/+$/g, '');
+		}
+	});
+
 }(jQuery));
