Index: wp-admin/js/theme.js
===================================================================
--- wp-admin/js/theme.js	(revision 27830)
+++ wp-admin/js/theme.js	(working copy)
@@ -269,6 +269,9 @@
 					self.add( data.themes );
 					self.trigger( 'query:success' );
 
+					// We are done loading themes for now.
+					self.loadingThemes = false;
+
 				}).fail( function() {
 					self.trigger( 'query:fail' );
 				});
@@ -331,7 +334,10 @@
 				}
 			}
 		});
-	}
+	},
+
+	// Static status controller for when we are loading themes.
+	loadingThemes: false
 });
 
 // This is the view that controls each theme item
@@ -1149,7 +1155,17 @@
 
 		// Bump `collection.currentQuery.page` and request more themes if we hit the end of the page.
 		this.listenTo( this, 'theme:end', function() {
+
+			// Make sure we are not already loading
+			if ( self.collection.loadingThemes ) {
+				return;
+			}
+
+			// Set loadingThemes to true and bump page instance of currentQuery.
+			self.collection.loadingThemes = true;
 			self.collection.currentQuery.page++;
+
+			// Use currentQuery.page to build the themes request.
 			_.extend( self.collection.currentQuery.request, { page: self.collection.currentQuery.page } );
 			self.collection.query( self.collection.currentQuery.request );
 		});
