diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Force.js b/web/gui/src/main/webapp/app/view/topo2/topo2Force.js
index 89fbae4..55b5baa 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Force.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Force.js
@@ -206,6 +206,10 @@
             t2tbs = _t2tbs_;
 
             var onZoom = function () {
+                if (!t2rs.isLoadComplete()) {
+                    return;
+                }
+
                 var nodes = [].concat(
                         t2rs.regionNodes(),
                         t2rs.regionLinks()
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Region.js b/web/gui/src/main/webapp/app/view/topo2/topo2Region.js
index d79cea9..a03c839 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Region.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Region.js
@@ -58,9 +58,12 @@
 
                     this.model = new RegionModel();
                 },
+                isLoadComplete: function() {
+                    return this.bgRendered && this.regionData && this.peers;
+                },
                 loaded: function (key, value) {
                     this[key] = value;
-                    if (this.bgRendered && this.regionData && this.peers) {
+                    if (this.isLoadComplete()) {
                         this.startRegion();
                     }
                 },
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Select.js b/web/gui/src/main/webapp/app/view/topo2/topo2Select.js
index e172e0d..49fbfe7 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Select.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Select.js
@@ -149,6 +149,7 @@
     var SelectionService = function () {
         instance = this;
         this.selectedNodes = [];
+        this.selectionOrder = [];
     };
 
     SelectionService.prototype = {
@@ -173,16 +174,18 @@
         },
         selectObject: function (node, multiSelectEnabled) {
 
-            var event = d3.event;
-
-            if (multiSelectEnabled && !event.shiftKey || !multiSelectEnabled) {
-                this.clearSelection();
-            }
-
-            var nodeIndex = _.indexOf(this.selectedNodes, node);
+            var event = d3.event,
+                nodeIndex = _.indexOf(this.selectionOrder, node.get('id'));
 
             if (nodeIndex < 0) {
+
+                if (multiSelectEnabled && !event.shiftKey || !multiSelectEnabled) {
+                    this.clearSelection();
+                }
+
                 this.selectedNodes.push(node);
+                this.selectionOrder.push(node.get('id'));
+
                 node.select();
             } else {
                 this.removeNode(node, nodeIndex);
@@ -192,6 +195,7 @@
         },
         removeNode: function (node, index) {
             this.selectedNodes.splice(index, 1);
+            this.selectionOrder.splice(index, 1);
             node.deselect();
         },
         clearSelection: function () {
@@ -200,6 +204,7 @@
             });
 
             this.selectedNodes = [];
+            this.selectionOrder = [];
             this.updateDetails();
         },
         clickConsumed: function (x) {
