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 1c2ea67..0e93868 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Force.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Force.js
@@ -34,16 +34,18 @@
 
     // ========================== Helper Functions
 
-    function init(_svg_, _forceG_, _uplink_, _dim_, zoomer, _opts_) {
+    function init(_svg_, _forceG_, _uplink_, _dim_, _zoomer_, _opts_) {
+
         svg = _svg_;
-        forceG = _forceG_;
         uplink = _uplink_;
         dim = _dim_;
+        zoomer = _zoomer_;
         opts = _opts_;
 
-        t2bcs.addLayout(t2ls);
+
         t2bgs.init();
-        t2ls = t2ls(svg, forceG, uplink, dim, zoomer, opts);
+        t2ls.init(svg, uplink, dim, zoomer, opts);
+        t2bcs.addLayout(t2ls);
         t2rs.layout = t2ls;
         t2ss.init(svg, zoomer);
     }
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Layout.js b/web/gui/src/main/webapp/app/view/topo2/topo2Layout.js
index 75105ba..c3bfd58 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Layout.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Layout.js
@@ -97,7 +97,7 @@
                       ViewController) {
 
                 var Layout = ViewController.extend({
-                    initialize: function (svg, forceG, uplink, dim, zoomer, opts) {
+                    init: function (svg, forceG, uplink, dim, zoomer, opts) {
                         $log.debug('initialize Layout');
                         instance = this;
 
@@ -371,7 +371,7 @@
                     return instance || new Layout(svg, forceG, uplink, dim, zoomer, opts);
                 }
 
-                return getInstance;
+                return getInstance();
             }
         ]
     );
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Link.js b/web/gui/src/main/webapp/app/view/topo2/topo2Link.js
index be8d03c..e644c7c 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Link.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Link.js
@@ -174,7 +174,7 @@
                         data.push(point);
                     }
 
-                    var entering = d3.select('#topo2-portLabels')
+                    var entering = d3.select('.topo2-portLabels')
                         .selectAll('.portLabel')
                         .data(data)
                         .enter().append('g')
@@ -204,7 +204,7 @@
             },
             unenhance: function () {
                 this.set('enhanced', false);
-                d3.select('#topo2-portLabels').selectAll('.portLabel').remove();
+                d3.select('.topo2-portLabels').selectAll('.portLabel').remove();
             },
             getSelected: function () {
                 return this.collection.filter(function (m) {
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2NodePosition.js b/web/gui/src/main/webapp/app/view/topo2/topo2NodePosition.js
index e29c45b..f30401f 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2NodePosition.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2NodePosition.js
@@ -128,6 +128,12 @@
     }
 
     function coordFromXY(loc) {
+
+        // Something this is wrong in the config
+        if (!t2sls.getWidth() || !t2sls.getHeight()) {
+            return [0, 0];
+        }
+
         var scale = 1000 / t2sls.getWidth(),
             yOffset = (1000 - (t2sls.getHeight() * scale)) / 2;
 
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 c9972a9..ad99749 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Select.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Select.js
@@ -21,15 +21,15 @@
 (function () {
     'use strict';
 
-    var t2rs;
+    var t2rs, t2zs;
 
     // internal state
     var consumeClick,
         zoomer,
         previousNearestLink;    // previous link to mouse position
 
-    function init(svg, _zoomer_) {
-        zoomer = _zoomer_;
+    function init(svg) {
+        zoomer = t2zs.getZoomer();
         svg.on('mousemove', mouseMoveHandler);
         svg.on('click', mouseClickHandler);
     }
@@ -61,7 +61,6 @@
         var mp = getLogicalMousePosition(this),
             link = computeNearestLink(mp);
 
-        // link.enhance();
         if (link) {
             if (previousNearestLink && previousNearestLink !== link) {
                 previousNearestLink.unenhance();
@@ -158,10 +157,11 @@
 
     angular.module('ovTopo2')
     .factory('Topo2SelectService', [
-        'Topo2RegionService',
-        function (_t2rs_) {
+        'Topo2RegionService', 'Topo2ZoomService',
+        function (_t2rs_, _t2zs_) {
 
             t2rs = _t2rs_;
+            t2zs = _t2zs_;
 
             return {
                 init: init,
