diff --git a/web/gui/src/main/webapp/app/fw/svg/glyph.js b/web/gui/src/main/webapp/app/fw/svg/glyph.js
index 621436c..844d0f3 100644
--- a/web/gui/src/main/webapp/app/fw/svg/glyph.js
+++ b/web/gui/src/main/webapp/app/fw/svg/glyph.js
@@ -139,7 +139,7 @@
             function register(viewBox, data, overwrite) {
                 var dmap = d3.map(data),
                     dups = [],
-                    ok, msg;
+                    ok;
 
                 dmap.forEach(function (key, value) {
                     if (!overwrite && glyphs.get(key)) {
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 c736149..a14a038 100644
--- a/web/gui/src/main/webapp/app/fw/svg/map.js
+++ b/web/gui/src/main/webapp/app/fw/svg/map.js
@@ -42,12 +42,12 @@
     'use strict';
 
     // injected references
-    var $log, fs;
+    var $log, $http, $q, fs;
 
     // internal state
     var maps = d3.map(),
         msgMs = 'MapService.',
-        bundledUrlPrefix = 'data/map/';
+        bundledUrlPrefix = '../data/map/';
 
     function getUrl(id) {
         if (id[0] === '*') {
@@ -57,38 +57,61 @@
     }
 
     angular.module('onosSvg')
-        .factory('MapService', ['$log', 'FnService',
+        .factory('MapService', ['$log', '$http', '$q', 'FnService',
 
-        function (_$log_, _fs_) {
+        function (_$log_, _$http_, _$q_, _fs_) {
             $log = _$log_;
+            $http = _$http_;
+            $q = _$q_;
             fs = _fs_;
 
             function clearCache() {
                 maps = d3.map();
             }
 
+            // NOTE: It is expected that mapLayer is a D3 selection of the
+            //       <g> element (a child of zoomLayer) into which the map
+            //       path data will be rendered.
+            function renderMap(mapLayer) {
+                // TODO ---
+                $log.log('Hey, let\'s render the map...');
+            }
+
             function fetchGeoMap(id) {
                 if (!fs.isS(id)) {
                     return null;
                 }
+                var url = getUrl(id);
 
-                var geomap = maps.get(id);
+                var promise = maps.get(id);
 
-                if (!geomap) {
+                if (!promise) {
                     // need to fetch the data and build the object...
-                    geomap = {
-                        id: id,
-                        url: getUrl(id),
-                        wasCached: false
-                    };
-                    // TODO: use $http service to load map data asynchronously
+                    var deferred = $q.defer();
+                    promise = deferred.promise;
 
-                    maps.set(id, geomap);
+                    $http.get(url)
+                        .success(function (data) {
+                            deferred.resolve(data);
+                        })
+                        .error(function (msg, code) {
+                            deferred.reject(msg);
+                            $log.warn(msg, code);
+                        });
+
+                    promise.meta = {
+                        id: id,
+                        url: url,
+                        wasCached: false,
+                        render: renderMap
+                    };
+
+                    maps.set(id, promise);
                 } else {
-                    geomap.wasCached = true;
+                    promise.meta.wasCached = true;
                 }
 
-                return geomap;
+                return promise;
             }
 
             return {
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 603a5a1..cca389c 100644
--- a/web/gui/src/main/webapp/app/view/topo/topo.js
+++ b/web/gui/src/main/webapp/app/view/topo/topo.js
@@ -29,7 +29,7 @@
     ];
 
     // references to injected services etc.
-    var $log, ks, zs, gs;
+    var $log, ks, zs, gs, ms;
 
     // DOM elements
     var svg, defs;
@@ -106,14 +106,15 @@
     angular.module('ovTopo', moduleDependencies)
 
         .controller('OvTopoCtrl', [
-            '$log', 'KeyService', 'ZoomService', 'GlyphService',
+            '$log', 'KeyService', 'ZoomService', 'GlyphService', 'MapService',
 
-        function (_$log_, _ks_, _zs_, _gs_) {
+        function (_$log_, _ks_, _zs_, _gs_, _ms_) {
             var self = this;
             $log = _$log_;
             ks = _ks_;
             zs = _zs_;
             gs = _gs_;
+            ms = _ms_;
 
             // exported state
             self.message = 'Topo View Rocks!';
diff --git a/web/gui/src/main/webapp/tests/app/fw/svg/map-spec.js b/web/gui/src/main/webapp/tests/app/fw/svg/map-spec.js
index 159f36b..5dfb1d6 100644
--- a/web/gui/src/main/webapp/tests/app/fw/svg/map-spec.js
+++ b/web/gui/src/main/webapp/tests/app/fw/svg/map-spec.js
@@ -20,9 +20,7 @@
  @author Simon Hunt
  */
 describe('factory: fw/svg/map.js', function() {
-    var $log, fs, ms, d3Elem, geomap;
-
-    var urlPrefix = 'data/map/';
+    var $log, fs, ms, d3Elem, promise;
 
     beforeEach(module('onosUtil', 'onosSvg'));
 
@@ -49,51 +47,61 @@
     });
 
     it('should return null when no parameters given', function () {
-        geomap = ms.fetchGeoMap();
-        expect(geomap).toBeNull();
+        promise = ms.fetchGeoMap();
+        expect(promise).toBeNull();
     });
 
     it('should augment the id of a bundled map', function () {
         var id = '*foo';
-        geomap = ms.fetchGeoMap(id);
-        expect(geomap).toBeDefined();
-        expect(geomap.id).toBe(id);
-        expect(geomap.url).toBe('data/map/foo.json');
+        promise = ms.fetchGeoMap(id);
+        expect(promise.meta).toBeDefined();
+        expect(promise.meta.id).toBe(id);
+        expect(promise.meta.url).toBe('../data/map/foo.json');
     });
 
     it('should treat an external id as the url itself', function () {
         var id = 'some/path/to/foo';
-        geomap = ms.fetchGeoMap(id);
-        expect(geomap).toBeDefined();
-        expect(geomap.id).toBe(id);
-        expect(geomap.url).toBe(id + '.json');
+        promise = ms.fetchGeoMap(id);
+        expect(promise.meta).toBeDefined();
+        expect(promise.meta.id).toBe(id);
+        expect(promise.meta.url).toBe(id + '.json');
     });
 
     it('should cache the returned objects', function () {
         var id = 'foo';
-        geomap = ms.fetchGeoMap(id);
-        expect(geomap).toBeDefined();
-        expect(geomap.wasCached).toBeFalsy();
-        expect(geomap.tagged).toBeUndefined();
+        promise = ms.fetchGeoMap(id);
+        expect(promise).toBeDefined();
+        expect(promise.meta.wasCached).toBeFalsy();
+        expect(promise.tagged).toBeUndefined();
 
-        geomap.tagged = 'I woz here';
+        promise.tagged = 'I woz here';
 
-        geomap = ms.fetchGeoMap(id);
-        expect(geomap).toBeDefined();
-        expect(geomap.wasCached).toBeTruthy();
-        expect(geomap.tagged).toEqual('I woz here');
+        promise = ms.fetchGeoMap(id);
+        expect(promise).toBeDefined();
+        expect(promise.meta.wasCached).toBeTruthy();
+        expect(promise.tagged).toEqual('I woz here');
     });
 
     it('should clear the cache when asked', function () {
         var id = 'foo';
-        geomap = ms.fetchGeoMap(id);
-        expect(geomap.wasCached).toBeFalsy();
+        promise = ms.fetchGeoMap(id);
+        expect(promise.meta.wasCached).toBeFalsy();
 
-        geomap = ms.fetchGeoMap(id);
-        expect(geomap.wasCached).toBeTruthy();
+        promise = ms.fetchGeoMap(id);
+        expect(promise.meta.wasCached).toBeTruthy();
 
         ms.clearCache();
-        geomap = ms.fetchGeoMap(id);
-        expect(geomap.wasCached).toBeFalsy();
+        promise = ms.fetchGeoMap(id);
+        expect(promise.meta.wasCached).toBeFalsy();
+    });
+
+    it('should load USA into cache', function () {
+        var id = '*continental_us';
+        promise = ms.fetchGeoMap(id);
+        expect(promise).toBeDefined();
+        expect(promise.meta.id).toBe(id);
+        expect(promise.meta.url).toBe('../data/map/continental_us.json');
+        // TODO: WIP -- after a pause, the data should be there!!!
+
     });
 });
