diff --git a/planetstack/core/xoslib/dashboards/xosAdminDashboard.html b/planetstack/core/xoslib/dashboards/xosAdminDashboard.html
index d8e083a..78eb8e2 100644
--- a/planetstack/core/xoslib/dashboards/xosAdminDashboard.html
+++ b/planetstack/core/xoslib/dashboards/xosAdminDashboard.html
@@ -5,6 +5,7 @@
 <script src="{{ STATIC_URL }}/js/vendor/backbone.babysitter.js"></script>
 <script src="{{ STATIC_URL }}/js/vendor/backbone.marionette.js"></script>
 
+<link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
 <link rel="stylesheet" type="text/css" href="{% static 'css/xosAdminDashboard.css' %}" media="all" >
 <link rel="stylesheet" type="text/css" href="{% static 'css/xosAdminSite.css' %}" media="all" >
 
diff --git a/planetstack/core/xoslib/dashboards/xosAdminWholePage.html b/planetstack/core/xoslib/dashboards/xosAdminWholePage.html
index ddcd683..da9f364 100644
--- a/planetstack/core/xoslib/dashboards/xosAdminWholePage.html
+++ b/planetstack/core/xoslib/dashboards/xosAdminWholePage.html
@@ -5,6 +5,7 @@
 <script src="{{ STATIC_URL }}/js/vendor/backbone.babysitter.js"></script>
 <script src="{{ STATIC_URL }}/js/vendor/backbone.marionette.js"></script>
 
+<link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
 <link rel="stylesheet" type="text/css" href="{% static 'css/xosAdminWholePage.css' %}" media="all" >
 <link rel="stylesheet" type="text/css" href="{% static 'css/xosAdminSite.css' %}" media="all" >
 
diff --git a/planetstack/core/xoslib/static/css/xosAdminSite.css b/planetstack/core/xoslib/static/css/xosAdminSite.css
index f5942de..5ecaa8e 100644
--- a/planetstack/core/xoslib/static/css/xosAdminSite.css
+++ b/planetstack/core/xoslib/static/css/xosAdminSite.css
@@ -65,3 +65,20 @@
     display: none;
 }
 
+/* undo what planetstack.css does to the progressbar */
+#xos-startup-progress .ui-progressbar-value {
+    background-color: rgb(204,204,204) !important;
+    background-image: url(http://code.jquery.com/ui/1.11.2/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png) !important;
+    border-top: 1px !important;
+    border-right: 1px !important;
+    border-left: 1px !important;
+}
+
+#xos-detail-button-box {
+    display: none;
+}
+
+#xos-listview-button-box {
+    display: none;
+}
+
diff --git a/planetstack/core/xoslib/static/js/xosAdminSite.js b/planetstack/core/xoslib/static/js/xosAdminSite.js
index 99cf851..212c1b4 100644
--- a/planetstack/core/xoslib/static/js/xosAdminSite.js
+++ b/planetstack/core/xoslib/static/js/xosAdminSite.js
@@ -134,6 +134,24 @@
     });
 };
 
+XOSAdminApp.startNavigation = function() {
+    Backbone.history.start();
+    XOSAdminApp.navigationStarted = true;
+}
+
+XOSAdminApp.collectionLoadChange = function() {
+    stats = xos.getCollectionStatus();
+
+    if (!XOSAdminApp.navigationStarted) {
+        if (stats["isLoaded"] + stats["failedLoad"] >= stats["startedLoad"]) {
+            XOSAdminApp.startNavigation();
+        } else {
+            $("#detail").html("<h3>Loading...</h3><div id='xos-startup-progress'></div>");
+            $("#xos-startup-progress").progressbar({value: stats["completedLoad"], max: stats["startedLoad"]});
+        }
+    }
+};
+
 XOSAdminApp.on("start", function() {
      XOSAdminApp.buildViews();
 
@@ -143,10 +161,11 @@
 
      XOSAdminApp.rewriteLinks();
 
-     if (Backbone.history) {
-         console.log("history start");
-         Backbone.history.start();
-     }
+     // fire it once to initially show the progress bar
+     XOSAdminApp.collectionLoadChange();
+
+     // fire it each time the collection load status is updated
+     Backbone.on("xoslib:collectionLoadChange", XOSAdminApp.collectionLoadChange);
 });
 
 $(document).ready(function(){
diff --git a/planetstack/core/xoslib/static/js/xoslib/xos-backbone.js b/planetstack/core/xoslib/static/js/xoslib/xos-backbone.js
index 75a3e45..36df6eb 100644
--- a/planetstack/core/xoslib/static/js/xoslib/xos-backbone.js
+++ b/planetstack/core/xoslib/static/js/xoslib/xos-backbone.js
@@ -78,6 +78,8 @@
 
         initialize: function(){
           this.isLoaded = false;
+          this.failedLoad = false;
+          this.startedLoad = false;
           this.sortVar = 'name';
           this.sortOrder = 'asc';
           this.on( "sort", this.sorted );
@@ -87,7 +89,7 @@
         foreignCollections: [],
 
         sorted: function() {
-            this.isLoaded = true;
+            //console.log("sorted " + this.modelName);
         },
 
         simpleComparator: function( model ){
@@ -113,6 +115,43 @@
             }
         },
 
+        fetchSuccess: function(collection, response, options) {
+            this.failedLoad = false;
+            if (!this.isLoaded) {
+                this.isLoaded = true;
+                Backbone.trigger("xoslib:collectionLoadChange", this);
+            }
+            if (options["orig_success"]) {
+                options["orig_success"](collection, response, options);
+            }
+        },
+
+        fetchFailure: function(collection, response, options) {
+            if ((!this.isLoaded) && (!this.failedLoad)) {
+                this.failedLoad=true;
+                Backbone.trigger("xoslib:collectionLoadChange", this);
+            }
+            if (options["orig_failure"]) {
+                options["orig_failure"](collection, response, options);
+            }
+        },
+
+        fetch: function(options) {
+            var self=this;
+            if (!this.startedLoad) {
+                this.startedLoad=true;
+                Backbone.trigger("xoslib:collectionLoadChange", this);
+            }
+            if (options == undefined) {
+                options = {};
+            }
+            options["orig_success"] = options["success"];
+            options["orig_failure"] = options["failure"];
+            options["success"] = function(collection, response, options) { self.fetchSuccess.call(self, collection, response, options); };
+            options["failure"] = this.fetchFailure;
+            Backbone.Collection.prototype.fetch.call(this, options);
+        },
+
         startPolling: function() {
             if (!this._polling) {
                 var collection=this;
@@ -229,10 +268,12 @@
         lib[collectionName] = new lib[collectionClassName]();
 
         lib.allCollectionNames.push(collectionName);
+        lib.allCollections.push(lib[collectionName]);
     };
 
     function xoslib() {
         this.allCollectionNames = [];
+        this.allCollections = [];
 
         define_model(this, {urlRoot: SLIVER_API,
                             relatedCollections: {"networkSlivers": "sliver"},
@@ -303,6 +344,24 @@
                             modelName: "slicePlus"});
 
         this.listObjects = function() { return this.allCollectionNames; };
+
+        this.getCollectionStatus = function() {
+            stats = {isLoaded: 0, failedLoad: 0, startedLoad: 0};
+            for (index in this.allCollections) {
+                collection = this.allCollections[index];
+                if (collection.isLoaded) {
+                    stats["isLoaded"] = stats["isLoaded"] + 1;
+                }
+                if (collection.failedLoad) {
+                    stats["failedLoad"] = stats["failedLoad"] + 1;
+                }
+                if (collection.startedLoad) {
+                    stats["startedLoad"] = stats["startedLoad"] + 1;
+                }
+            }
+            stats["completedLoad"] = stats["failedLoad"] + stats["isLoaded"];
+            return stats;
+        };
     };
 
     xos = new xoslib();
diff --git a/planetstack/core/xoslib/static/js/xoslib/xosHelper.js b/planetstack/core/xoslib/static/js/xoslib/xosHelper.js
index 0fc9496..b8e0347 100644
--- a/planetstack/core/xoslib/static/js/xoslib/xosHelper.js
+++ b/planetstack/core/xoslib/static/js/xoslib/xosHelper.js
@@ -138,7 +138,13 @@
     detailShower: function(detailName, collection_name, regionName, title) {
         var app=this;
         showModelId = function(model_id) {
-            showModel = function(model) {
+            $("#contentTitle").html(templateFromId("#xos-title-detail")({"title": title}));
+
+            collection = xos[collection_name];
+            model = collection.get(model_id);
+            if (model == undefined) {
+                app[regionName].show(new HTMLView({html: "failed to load object " + model_id + " from collection " + collection_name}));
+            } else {
                 detailViewClass = app[detailName];
                 detailView = new detailViewClass({model: model});
                 app[regionName].show(detailView);
@@ -146,33 +152,6 @@
                 $("#xos-detail-button-box").show();
                 $("#xos-listview-button-box").hide();
             }
-
-            $("#contentTitle").html(templateFromId("#xos-title-detail")({"title": title}));
-
-            collection = xos[collection_name];
-            model = collection.get(model_id);
-            if (model == undefined) {
-                if (!collection.isLoaded) {
-                    // If the model cannot be found, then maybe it's because
-                    // we haven't finished loading the collection yet. So wait for
-                    // the sort event to complete, then try again.
-                    collection.once("sort", function() {
-                        collection = xos[collection_name];
-                        model = collection.get(model_id);
-                        if (model == undefined) {
-                            // We tried. It's not here. Complain to the user.
-                            app[regionName].show(new HTMLView({html: "failed to load object " + model_id + " from collection " + collection_name}));
-                        } else {
-                            showModel(model);
-                        }
-                    });
-                } else {
-                    // The collection was loaded, the user must just be asking for something we don't have.
-                    app[regionName].show(new HTMLView({html: "failed to load object " + model_id + " from collection " + collection_name}));
-                }
-            } else {
-                showModel(model);
-            }
         }
         return showModelId;
     },
