diff --git a/server/djrandom/frontend/static/js/djr/djr.js b/server/djrandom/frontend/static/js/djr/djr.js
index 3f9f0f692dbbbac50605beb9ff52298eadd00dbd..d3d6a5262b46dbf650a057f33c9c608e7eed7c52 100644
--- a/server/djrandom/frontend/static/js/djr/djr.js
+++ b/server/djrandom/frontend/static/js/djr/djr.js
@@ -9,7 +9,8 @@ djr = {};
 // Global state (with Player instance).
 djr.state = {
   backend: null,
-  player: null
+  player: null,
+  loadingCount: 0
 };
 
 // Initialize the Player and add all our onclick handlers.
@@ -158,9 +159,15 @@ djr.player = function() {
 };
 
 // Show/hide the 'loader' animated GIF.
+// Keep a counter so we can nest calls.
 djr.loading = function(active) {
   var loader = $('#loaderImg');
   if (active) {
+    djr.state.loaderCount += 1;
+  } else {
+    djr.state.loaderCount -= 1;
+  }
+  if (djr.state.loaderCount > 0) {
     loader.show();
   } else {
     loader.hide();