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 11aef1d..e895214 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
@@ -383,12 +383,15 @@
 
 
     private ObjectNode jsonClosedRegion(UiRegion region) {
-        return objectNode()
+        ObjectNode node = objectNode()
                 .put("id", region.idAsString())
                 .put("name", region.name())
                 .put("nodeType", REGION)
                 .put("nDevs", region.deviceCount());
         // TODO: complete closed-region details
+
+        addMetaUi(node, region.idAsString());
+        return node;
     }
 
     /**
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2NodeModel.js b/web/gui/src/main/webapp/app/view/topo2/topo2NodeModel.js
index d4917a3..09e6ef0 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2NodeModel.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2NodeModel.js
@@ -63,6 +63,7 @@
 
         // If the device contains explicit LONG/LAT data, use that to position
         if (setLongLat(node)) {
+            // Indicate we want to update cached meta data...
             return true;
         }
 
@@ -114,29 +115,37 @@
         angular.extend(node, xy);
     }
 
-    function setLongLat(node) {
-        var loc = node.location,
+    function setLongLat(el) {
+        var loc = el.get('location'),
             coord;
 
         if (loc && loc.type === 'lnglat') {
+
+            if (loc.lat === 0 && loc.lng === 0) {
+                return false;
+            }
+
             coord = coordFromLngLat(loc);
-            node.fixed = true;
-            node.px = node.x = coord[0];
-            node.py = node.y = coord[1];
+            el.fixed = true;
+            el.x = el.px = coord[0];
+            el.y = el.py = coord[1];
+
             return true;
         }
     }
 
     function coordFromLngLat(loc) {
         var p = t2mcs.projection();
-        return p ? p.invert([loc.lng, loc.lat]) : [0, 0];
+        return p ? p([loc.lng, loc.lat]) : [0, 0];
     }
 
     angular.module('ovTopo2')
     .factory('Topo2NodeModel',
         ['Topo2Model', 'FnService', 'RandomService', 'Topo2PrefsService',
-        'SvgUtilService', 'IconService', 'ThemeService', 'Topo2MapConfigService',
-        function (Model, _fn_, _RandomService_, _ps_, _sus_, _is_, _ts_, _t2mcs_) {
+        'SvgUtilService', 'IconService', 'ThemeService',
+        'Topo2MapConfigService',
+        function (Model, _fn_, _RandomService_, _ps_, _sus_, _is_, _ts_,
+            _t2mcs_) {
 
             randomService = _RandomService_;
             ts = _ts_;
@@ -148,6 +157,8 @@
 
             return Model.extend({
                 initialize: function () {
+                    this.set('class', this.nodeType);
+                    this.set('svgClass', this.svgClassName());
                     this.node = this.createNode();
                 },
                 createNode: function () {
