diff --git a/web/gui/src/main/webapp/app/fw/svg/map.js b/web/gui/src/main/webapp/app/fw/svg/map.js
index 366204c..759f372 100644
--- a/web/gui/src/main/webapp/app/fw/svg/map.js
+++ b/web/gui/src/main/webapp/app/fw/svg/map.js
@@ -44,7 +44,7 @@
             fs = _fs_;
             gds = _gds_;
 
-            function loadMapInto(mapLayer, id) {
+            function loadMapInto(mapLayer, id, opts) {
                 var promise = gds.fetchTopoData(id);
                 if (!promise) {
                     $log.warn('Failed to load map: ' + id);
@@ -52,7 +52,7 @@
                 }
 
                 promise.then(function () {
-                    var gen = gds.createPathGenerator(promise.topodata);
+                    var gen = gds.createPathGenerator(promise.topodata, opts);
 
                     mapLayer.selectAll('path')
                         .data(gen.geodata.features)
diff --git a/web/gui/src/main/webapp/app/onos.css b/web/gui/src/main/webapp/app/onos.css
index 3152a08..1ab5954 100644
--- a/web/gui/src/main/webapp/app/onos.css
+++ b/web/gui/src/main/webapp/app/onos.css
@@ -39,6 +39,8 @@
 
 #view {
     padding: 6px;
+    width: 100%;
+    height: 100%;
 }
 
 #view h2 {
diff --git a/web/gui/src/main/webapp/app/onos.js b/web/gui/src/main/webapp/app/onos.js
index 8f4a618..a8669db 100644
--- a/web/gui/src/main/webapp/app/onos.js
+++ b/web/gui/src/main/webapp/app/onos.js
@@ -44,6 +44,37 @@
 
     angular.module('onosApp', moduleDependencies)
 
+        // Create a resize directive, that we can apply to elements to
+        // respond to window resize events.
+        .directive('resize', ['$window', function ($window) {
+            return function (scope, element, attrs) {
+                var w = angular.element($window);
+                scope.$watch(function () {
+                    return {
+                        h: window.innerHeight,
+                        w: window.innerWidth
+                    };
+                }, function (newVal, oldVal) {
+                    scope.windowHeight = newVal.h;
+                    scope.windowWidth = newVal.w;
+
+                    scope.resizeWithOffset = function (offH, offW) {
+                        var oh = offH || 0,
+                            ow = offW || 0;
+                        scope.$eval(attrs.notifier);
+                        return {
+                            height: (newVal.h - oh) + 'px',
+                            width: (newVal.w - ow) + 'px'
+                        };
+                    };
+                }, true);
+
+                w.bind('resize', function () {
+                    scope.$apply();
+                });
+            };
+        }])
+
         .controller('OnosCtrl', [
             '$log', '$route', '$routeParams', '$location',
             'KeyService', 'ThemeService', 'GlyphService',
diff --git a/web/gui/src/main/webapp/app/view/topo/topo.css b/web/gui/src/main/webapp/app/view/topo/topo.css
index ddd0246..48c879a 100644
--- a/web/gui/src/main/webapp/app/view/topo/topo.css
+++ b/web/gui/src/main/webapp/app/view/topo/topo.css
@@ -29,5 +29,13 @@
 }
 
 #ov-topo svg {
-    background-color: #dde;
+    background-color: #fff;
+    border: 1px solid red;
 }
+
+#ov-topo svg #topo-map {
+    stroke-width: 2px;
+    /*stroke: #eee;*/
+    stroke: #445;
+    fill: transparent;
+}
\ No newline at end of file
diff --git a/web/gui/src/main/webapp/app/view/topo/topo.html b/web/gui/src/main/webapp/app/view/topo/topo.html
index 9fec03a..2e25c74 100644
--- a/web/gui/src/main/webapp/app/view/topo/topo.html
+++ b/web/gui/src/main/webapp/app/view/topo/topo.html
@@ -1,4 +1,7 @@
 <!-- Topology View partial HTML -->
 <div id="ov-topo">
-    <svg viewBox="0 0 1000 1000"></svg>
+    <svg viewBox="0 0 1000 1000"
+         resize
+         ng-style="resizeWithOffset(56, 12)"
+         notifier="notifyResize(params)"></svg>
 </div>
diff --git a/web/gui/src/main/webapp/app/view/topo/topo.js b/web/gui/src/main/webapp/app/view/topo/topo.js
index a5bec59..733e0c0 100644
--- a/web/gui/src/main/webapp/app/view/topo/topo.js
+++ b/web/gui/src/main/webapp/app/view/topo/topo.js
@@ -29,10 +29,10 @@
     ];
 
     // references to injected services etc.
-    var $log, ks, zs, gs, ms;
+    var $log, $window, ks, zs, gs, ms;
 
     // DOM elements
-    var svg, defs, zoomLayer, map;
+    var ovtopo, svg, defs, zoomLayer, map;
 
     // Internal state
     var zoomer;
@@ -104,8 +104,22 @@
     // --- Background Map ------------------------------------------------
 
     function setUpMap() {
-        map = zoomLayer.append('g').attr('id', '#topo-map');
+        map = zoomLayer.append('g').attr('id', 'topo-map');
+        //ms.loadMapInto(map, '*continental_us', {mapFillScale:0.5});
         ms.loadMapInto(map, '*continental_us');
+
+        // temp code for calibration
+        var points = [
+            [0, 0], [0, 1000], [1000, 0], [1000, 1000]
+        ];
+        map.selectAll('circle')
+            .data(points)
+            .enter()
+            .append('circle')
+            .attr('cx', function (d) { return d[0]; })
+            .attr('cy', function (d) { return d[1]; })
+            .attr('r', 5)
+            .style('fill', 'red');
     }
 
     // --- Controller Definition -----------------------------------------
@@ -113,21 +127,26 @@
     angular.module('ovTopo', moduleDependencies)
 
         .controller('OvTopoCtrl', [
-            '$log', 'KeyService', 'ZoomService', 'GlyphService', 'MapService',
+            '$log', '$window',
+            'KeyService', 'ZoomService', 'GlyphService', 'MapService',
 
-        function (_$log_, _ks_, _zs_, _gs_, _ms_) {
+        function (_$log_, _$window_, _ks_, _zs_, _gs_, _ms_) {
             var self = this;
             $log = _$log_;
+            $window = _$window_;
             ks = _ks_;
             zs = _zs_;
             gs = _gs_;
             ms = _ms_;
 
-            // exported state
-            self.message = 'Topo View Rocks!';
+            self.notifyResize = function () {
+                $log.log('Hey, we changed size');
+            };
 
             // svg layer and initialization of components
-            svg = d3.select('#ov-topo svg');
+            ovtopo = d3.select('#ov-topo');
+            svg = ovtopo.select('svg');
+
             setUpKeys();
             setUpDefs();
             setUpZoom();
