diff --git a/tools/test/topos/regions-bayarea-grid.sh b/tools/test/topos/regions-bayarea-grid.sh
index 80716cf..d890495 100755
--- a/tools/test/topos/regions-bayarea-grid.sh
+++ b/tools/test/topos/regions-bayarea-grid.sh
@@ -268,7 +268,7 @@
 
 onos ${host} <<-EOF
 
-layout-add root @bayareaGEO . . 0.4
+layout-add root @bayareaGEO . . 4.5 0.0 0.0
 
 layout-add lC01 +segmentRouting c01 . 0.9 5.2 -4.0
 layout-add lC02 +segmentRouting c02
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java
index e133775..b407171 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java
@@ -210,21 +210,20 @@
      *
      * @param layout the layout to transform
      * @param crumbs list of layouts in bread-crumb order
-     * @param rid    current region id
      * @return a JSON representation of the data
      */
-    ObjectNode layout(UiTopoLayout layout, List<UiTopoLayout> crumbs, String rid) {
+    ObjectNode layout(UiTopoLayout layout, List<UiTopoLayout> crumbs) {
         ObjectNode result = objectNode()
                 .put("id", layout.id().toString())
                 .put("parent", nullIsEmpty(layout.parent()))
                 .put("region", nullIsEmpty(layout.regionId()))
                 .put("regionName", UiRegion.safeName(layout.region()));
         addCrumbs(result, crumbs);
-        addBgRef(result, layout, rid);
+        addBgRef(result, layout);
         return result;
     }
 
-    private void addBgRef(ObjectNode result, UiTopoLayout layout, String rid) {
+    private void addBgRef(ObjectNode result, UiTopoLayout layout) {
         String mapId = layout.geomap();
         String sprId = layout.sprites();
 
@@ -235,10 +234,10 @@
             result.put("bgType", GRID).put("bgId", sprId);
         }
 
-        attachZoomData(result, layout, rid);
+        attachZoomData(result, layout);
     }
 
-    private void attachZoomData(ObjectNode result, UiTopoLayout layout, String rid) {
+    private void attachZoomData(ObjectNode result, UiTopoLayout layout) {
 
         ObjectNode zoomData = objectNode();
 
@@ -246,6 +245,7 @@
         addCfgZoomData(zoomData, layout);
 
         // next, retrieve user-set zoom data, if we have it
+        String rid = layout.regionId().toString();
         ObjectNode userZoom = metaUi.get(contextKey(rid, ZOOM_KEY));
         if (userZoom != null) {
             zoomData.set("usr", userZoom);
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2ViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2ViewMessageHandler.java
index e5946f9..3c93110 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2ViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2ViewMessageHandler.java
@@ -19,7 +19,6 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.ImmutableSet;
 import org.onlab.osgi.ServiceDirectory;
-import org.onosproject.net.region.Region;
 import org.onosproject.ui.RequestHandler;
 import org.onosproject.ui.UiConnection;
 import org.onosproject.ui.UiMessageHandler;
@@ -95,14 +94,9 @@
 
     // ==================================================================
 
-    private String currentRegionId() {
-        Region current = topoSession.currentLayout().region();
-        return current == null ? "(root)" : current.id().toString();
-    }
-
     private ObjectNode mkLayoutMessage(UiTopoLayout currentLayout) {
         List<UiTopoLayout> crumbs = topoSession.breadCrumbs();
-        return t2json.layout(currentLayout, crumbs, currentRegionId());
+        return t2json.layout(currentLayout, crumbs);
     }
 
     private ObjectNode mkRegionMessage(UiTopoLayout currentLayout) {
@@ -115,7 +109,8 @@
     private ObjectNode mkPeersMessage(UiTopoLayout currentLayout) {
         Set<UiNode> peers = topoSession.getPeerNodes(currentLayout);
         ObjectNode peersPayload = objectNode();
-        peersPayload.set("peers", t2json.closedNodes(currentRegionId(), peers));
+        String rid = currentLayout.regionId().toString();
+        peersPayload.set("peers", t2json.closedNodes(rid, peers));
         return peersPayload;
     }
 
@@ -211,7 +206,8 @@
         public void process(ObjectNode payload) {
             // NOTE: metadata for a node is stored within the context of the
             //       current region.
-            t2json.updateMeta(currentRegionId(), payload);
+            String rid = topoSession.currentLayout().regionId().toString();
+            t2json.updateMeta(rid, payload);
         }
     }
 
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 29c6a93..525cd07 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Background.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Background.js
@@ -70,7 +70,8 @@
                         this.zoomData = data.bgZoom;
 
                         var _this = this,
-                            pan = zoomPan(this.zoomData);
+                            pan = zoomPan(this.zoomData),
+                            scale = zoomScale(this.zoomData);
 
                         if (this.bgType === 'geo') {
 
@@ -78,12 +79,12 @@
                             t2sls.hide();
                             t2ms.show();
 
-                            t2ms.setUpMap(data.bgId, data.bgFilePath, zoomScale(data.bgZoom))
+                            t2ms.setUpMap(data.bgId, data.bgFilePath, scale)
                             .then(function (proj) {
                                 t2mcs.projection(proj);
                                 $log.debug('** We installed the projection:', proj);
                                 _this.region.loaded('bgRendered', true);
-                                t2zs.panAndZoom(pan, zoomScale(_this.zoomData), 1000);
+                                t2zs.panAndZoom(pan, scale, 1000);
                             });
                         } else if (this.bgType === 'grid') {
 
@@ -94,7 +95,7 @@
                             t2sls.loadLayout(data.bgId).then(function (spriteLayout) {
                                 _this.background.layout = spriteLayout;
                                 _this.region.loaded('bgRendered', true);
-                                t2zs.panAndZoom(pan, zoomScale(_this.zoomData), 1000);
+                                t2zs.panAndZoom(pan, scale, 1000);
                             });
                         } else {
                             // No background type - Tell the region the background is ready for placing nodes
@@ -112,7 +113,6 @@
                     }
                 });
 
-
                 return instance || new BackgroundView();
             }
         ]);
