diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Background.js b/web/gui/src/main/webapp/app/view/topo2/topo2Background.js
index 7aee3ed..f0312f5 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Background.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Background.js
@@ -77,16 +77,7 @@
                             pan = zoomPan(this.zoomData),
                             scale = zoomScale(this.zoomData);
 
-                        // TODO: test for same background... avoid reload on same
-
-                        //  Avoid re-loading the background / sprite layer
-                        //  if the type and ID are same as last time.
-
-                        //  For example, europe map can be panned/zoomed to
-                        //   focus on different countries
-
                         if (this.bgType === 'geo') {
-
                             // Hide Sprite Layer and show Map
                             t2sls.hide();
                             t2ms.show();
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Map.js b/web/gui/src/main/webapp/app/view/topo2/topo2Map.js
index 2c28ec0..06a5885 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Map.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Map.js
@@ -29,7 +29,7 @@
     var MapSelectionDialog;
 
     // internal state
-    var instance, mapG, zoomLayer, zoomer;
+    var instance, mapG, zoomLayer, zoomer, currentMap;
 
     function init() {
         this.appendElement('#topo2-background', 'g');
@@ -37,9 +37,16 @@
         zoomer = t2zs.getZoomer();
     }
 
-    // TODO: to be re-worked: map-id, filePath, scale/pan to be passed as params
     function setUpMap(mapId, mapFilePath, mapScale) {
 
+        if (currentMap === mapId) {
+            return new Promise(function(resolve) {
+                resolve();
+            });
+        }
+
+        currentMap = mapId;
+
         var loadMap = ms.loadMapInto,
             promise, cfilter;
 
@@ -59,21 +66,6 @@
         return promise;
     }
 
-    // TODO: deprecated - the layout will tell us which map
-    //   no longer stored in user preferences
-    function currentMap() {
-        return ps.getPrefs(
-            'topo2_mapid',
-            {
-                mapid: 'usa',
-                mapscale: 1,
-                mapfilepath: '*continental_us',
-                tint: 'off'
-            },
-            $loc.search()
-        );
-    }
-
     // TODO: deprecated - maps are defined per layout on the server side.
     function setMap(map) {
         ps.setPrefs('topo2_mapid', map);
@@ -102,6 +94,10 @@
         this.node().style('stroke-width', (2.0 / sc) + 'px');
     }
 
+    function getCurrentMap() {
+        return currentMap;
+    }
+
     angular.module('ovTopo2')
     .factory('Topo2MapService', [
         '$log', '$location', 'Topo2ViewController', 'PrefsService',
@@ -132,7 +128,8 @@
                 setUpMap: setUpMap,
                 openMapSelection: openMapSelection,
                 resetZoom: resetZoom,
-                zoomCallback: zoomCallback
+                zoomCallback: zoomCallback,
+                getCurrentMap: getCurrentMap
             });
 
             return instance || new MapLayer();
