diff --git a/web/gui/src/main/webapp/network.js b/web/gui/src/main/webapp/network.js
index dfaed19..00dee39 100644
--- a/web/gui/src/main/webapp/network.js
+++ b/web/gui/src/main/webapp/network.js
@@ -28,6 +28,7 @@
 
     // configuration data
     var config = {
+        useLiveData: true,
         debugOn: false,
         debug: {
             showNodeXY: false,
@@ -37,10 +38,18 @@
             layering: true,
             collisionPrevention: true
         },
-        jsonUrl: 'rs/topology/graph',
-        jsonPrefix: '',
-        XjsonUrl: 'json/network.json',
-        XjsonPrefix: 'json/',
+        data: {
+            live: {
+                jsonUrl: 'rs/topology/graph',
+                detailPrefix: 'rs/topology/graph/',
+                detailSuffix: ''
+            },
+            fake: {
+                jsonUrl: 'json/network2.json',
+                detailPrefix: 'json/',
+                detailSuffix: '.json'
+            }
+        },
         iconUrl: {
             device: 'img/device.png',
             host: 'img/host.png',
@@ -109,6 +118,22 @@
         return config.debugOn && config.debug[what];
     }
 
+    function urlData() {
+        return config.data[config.useLiveData ? 'live' : 'fake'];
+    }
+
+    function networkJsonUrl() {
+        return urlData().jsonUrl;
+    }
+
+    function detailJsonUrl(id) {
+        var u = urlData(),
+            encId = config.useLiveData ? encodeURIComponent(id)
+                : id.replace(/[^a-z0-9]/gi, '_');
+        return u.detailPrefix + encId + u.detailSuffix;
+    }
+
+
     // load the topology view of the network
     function loadNetworkView() {
         // Hey, here I am, calling something on the ONOS api:
@@ -117,10 +142,11 @@
         resize();
 
         // go get our network data from the server...
-        d3.json(config.jsonUrl, function (err, data) {
+        var url = networkJsonUrl();
+        d3.json(url , function (err, data) {
             if (err) {
                 alert('Oops! Error reading JSON...\n\n' +
-                    'URL: ' + config.jsonUrl + '\n\n' +
+                    'URL: ' + url + '\n\n' +
                     'Error: ' + err.message);
                 return;
             }
@@ -898,21 +924,13 @@
         flyinPane(null);
     }
 
-    function detailUrl(id) {
-        if (config.jsonPrefix) {
-            var safeId = id.replace(/[^a-z0-9]/gi, '_');
-            return config.jsonPrefix + safeId + '.json';
-        }
-        return config.jsonUrl + '/' + encodeURIComponent(id);
-    }
-
     function flyinPane(obj) {
         var pane = d3.select('#flyout'),
             url;
 
         if (obj) {
             // go get details of the selected object from the server...
-            url = detailUrl(obj.id);
+            url = detailJsonUrl(obj.id);
             d3.json(url, function (err, data) {
                 if (err) {
                     alert('Oops! Error reading JSON...\n\n' +
