diff --git a/web/ons-demo/css/skin.default.css b/web/ons-demo/css/skin.default.css
index ea8d0b9..c81acb8 100644
--- a/web/ons-demo/css/skin.default.css
+++ b/web/ons-demo/css/skin.default.css
@@ -59,7 +59,6 @@
 	padding: .25em;
 }
 
-
 #logo {
 	height: 50px;
 }
@@ -94,6 +93,7 @@
 	visibility: hidden
 }
 
+.color0-selected .color0,
 .color1-selected .color1,
 .color2-selected .color2,
 .color3-selected .color3,
@@ -109,74 +109,80 @@
 	opacity: 1;
 }
 
+.color0 {
+	opacity: .25;
+	fill: #444;
+	background-color: #444;
+}
+
 .color1 {
-	opacity: .35;
+	opacity: .25;
 	fill: #EC0033;
 	background-color: #EC0033;
 }
 
 .color2 {
-	opacity: .35;
+	opacity: .25;
 	fill: #FFBA00;
 	background-color: #FFBA00;
 }
 
 .color3 {
-	opacity: .35;
+	opacity: .25;
 	fill: #3714B0;
 	background-color: #3714B0;
 }
 
 .color4 {
-	opacity: .35;
+	opacity: .25;
 	fill: #B12C49;
 	background-color: #B12C49;
 }
 
 .color5 {
-	opacity: .35;
+	opacity: .25;
 	fill: #402C84;
 	background-color: #402C84;
 }
 
 .color6 {
-	opacity: .35;
+	opacity: .25;
 	fill: #990021;
 	background-color: #990021;
 }
 
 .color7 {
-	opacity: .35;
+	opacity: .25;
 	fill: #990021;
 	background-color: ;
 }
 
 .color8 {
-	opacity: .35;
+	opacity: .25;
 	fill: #A67900;
 	background-color: #A67900;
 }
 
 .color9 {
-	opacity: .35;
+	opacity: .25;
 	fill: #F53D65;
 	background-color: #F53D65;
 }
 
 .color10 {
-	opacity: .35;
+	opacity: .25;
 	fill: #1F0772;
 	background-color: #1F0772;
 }
 
 .color11 {
-	opacity: .35;
+	opacity: .25;
 	fill: #F56E8B;
 	background-color: #F56E8B;
 }
 
 .color12 {
-	opacity: .35;
+	opacity: .25;
 	fill: #6949D7;
 	background-color: #6949D7;
 }
diff --git a/web/ons-demo/data/configuration.json b/web/ons-demo/data/configuration.json
index bf5c855..ab304eb 100644
--- a/web/ons-demo/data/configuration.json
+++ b/web/ons-demo/data/configuration.json
@@ -5,16 +5,23 @@
 		"00:00:20:4e:7f:51:8a:35",
 		"00:00:00:00:00:00:ba:12",
 		"00:00:00:00:ba:5e:ba:13",
-		"00:00:00:16:97:08:9a:46"
+		"00:00:00:16:97:08:9a:46",
+
+		"00:00:0e:46:7a:3a:69:45",
+		"00:00:16:00:9d:ff:8f:4f",
+		"00:00:5e:80:3f:db:d7:4d",
+		"00:00:82:4f:75:82:a3:4b",
+		"00:00:36:7d:90:c9:4f:49",
+		"00:00:4e:27:27:d7:48:45"
 	],
 	"aggregation": [
-		"00:00:00:00:00:00:01:00",
-		"00:00:00:00:00:00:02:00",
-		"00:00:00:00:00:00:03:00",
-		"00:00:00:00:00:00:04:00",
-		"00:00:00:00:00:00:05:00",
-		"00:00:00:00:00:00:06:00",
-		"00:00:00:00:00:00:07:00",
-		"00:00:00:00:00:00:08:00"
+		"00:00:00:00:00:00:01:01",
+		"00:00:00:00:00:00:02:01",
+		"00:00:00:00:00:00:03:01",
+		"00:00:00:00:00:00:04:01",
+		"00:00:00:00:00:00:05:01",
+		"00:00:00:00:00:00:06:01",
+		"00:00:00:00:00:00:07:01",
+		"00:00:00:00:00:00:08:01"
 	]
 }
\ No newline at end of file
diff --git a/web/ons-demo/data/controllers.json b/web/ons-demo/data/controllers.json
new file mode 100644
index 0000000..db2f5ad
--- /dev/null
+++ b/web/ons-demo/data/controllers.json
@@ -0,0 +1,10 @@
+[
+	"onosgui1",
+	"onosgui2",
+	"onosgui3",
+	"onosgui4",
+	"onosgui5",
+	"onosgui6",
+	"onosgui7",
+	"onosgui8"
+]
\ No newline at end of file
diff --git a/web/ons-demo/index.html b/web/ons-demo/index.html
index ef2cd65..eb3d2c0 100644
--- a/web/ons-demo/index.html
+++ b/web/ons-demo/index.html
@@ -5,6 +5,7 @@
 	<link rel="stylesheet" href="css/skin.default.css" type="text/css"/>
 	<script src="js/d3.v3.js" charset="utf-8"></script>
 	<script src="js/async.js"></script>
+	<script src="js/utils.js"></script>
 	<script src="js/model.js"></script>
 </head>
 
@@ -24,8 +25,8 @@
 	<div class='header'>
 		<div id='status'>
 			<div class='status'><span class='static'>Last updated:</span><span id='lastUpdate' class='dynamic'>Mon Mar 18 11:11:12 PDT 2013</span></div>
-			<div class='status'><span class='dynamic' id='activeFlows'>4000</span><span class='static'>Flows</span></div>
-			<div class='status'><span class='dynamic' id='activeSwitches'>200</span><span class='static'>Active Switches</span></div>
+			<div class='status'><span class='dynamic' id='activeFlows'>????</span><span class='static'>Flows</span></div>
+			<div class='status'><span class='dynamic' id='activeSwitches'>???</span><span class='static'>Active Switches</span></div>
 		</div>
 		<div id='traceButton' class='button'>Trace</div>
 	</div>
diff --git a/web/ons-demo/js/app.js b/web/ons-demo/js/app.js
index 068eb79..3eb2e7d 100644
--- a/web/ons-demo/js/app.js
+++ b/web/ons-demo/js/app.js
@@ -90,7 +90,11 @@
 //		rings[1].angles[i] = k * i;
 		var range = aggRanges[s.dpid];
 
-		rings[1].angles[i] = (range.min + range.max)/2;
+		if (range) {
+			rings[1].angles[i] = (range.min + range.max)/2;
+		} else {
+			rings[1].angles[i] = 0;
+		}
 	});
 
 	// arrange core switches at equal increments
@@ -213,11 +217,18 @@
 	var controllers = d3.select('#controllerList').selectAll('.controller').data(model.controllers);
 	controllers.enter().append('div')
 		.attr('class', function (d) {
-			var color = controllerColorMap[d];
-			if (!color) {
-				color = controllerColorMap[d] = colors.pop();
+
+			var color = 'color0';
+			if (model.activeControllers.indexOf(d) != -1) {
+				color = controllerColorMap[d];
+				if (!color) {
+					color = controllerColorMap[d] = colors.pop();
+				}
+			} else {
+				controllerColorMap[d] = color;
 			}
-			return 'controller ' + color;
+			var className = 'controller ' + color;
+			return className;
 		});
 	controllers.text(function (d) {
 		return d;
@@ -236,7 +247,9 @@
 
 var oldModel;
 function sync(svg) {
+	var d = Date.now();
 	updateModel(function (newModel) {
+		console.log('Update time: ' + (Date.now() - d)/1000 + 's');
 
 		if (!oldModel && JSON.stringify(oldModel) != JSON.stringify(newModel)) {
 			updateControllers(newModel);
diff --git a/web/ons-demo/js/model.js b/web/ons-demo/js/model.js
index ad45469..82e66c1 100644
--- a/web/ons-demo/js/model.js
+++ b/web/ons-demo/js/model.js
@@ -5,8 +5,9 @@
 		edgeSwitches: [],
 		aggregationSwitches: [],
 		coreSwitches: [],
-		flows: results.flows,
+		flows: [],
 		controllers: results.controllers,
+		activeControllers: results.activeControllers,
 		links: results.links
 	}
 
@@ -48,41 +49,73 @@
 	return model;
 }
 
+var urls = {
+	links: '/wm/core/topology/links/json',
+	switches: '/wm/core/topology/switches/all/json',
+	flows: '/wm/flow/getall/json',
+	activeControllers: '/wm/registry/controllers/json',
+	controllers: '/data/controllers.json',
+	mapping: '/wm/registry/switches/json',
+	configuration: 'data/configuration.json'
+}
+
+var mockURLs = {
+	links: 'data/wm_core_topology_links_json.json',
+	switches: 'data/wm_core_topology_switches_all_json.json',
+	flows: 'data/wm_flow_getall_json.json',
+	activeControllers: 'data/wm_registry_controllers_json.json',
+	controllers: '/data/controllers.json',
+	mapping: 'data/wm_registry_switches_json.json',
+	configuration: 'data/configuration.json'
+}
+
+var proxyURLs = {
+	links: '/proxy/wm/core/topology/links/json',
+	switches: '/proxy/wm/core/topology/switches/all/json',
+	flows: '/proxy/wm/flow/getall/json',
+	activeControllers: '/proxy/wm/registry/controllers/json',
+	controllers: 'data/controllers.json',
+	mapping: '/proxy/wm/registry/switches/json',
+	configuration: 'data/configuration.json'
+}
+
+var params = parseURLParameters();
+if (params.mock) {
+	urls = mockURLs;
+}
+if (params.proxy) {
+	urls = proxyURLs;
+}
+
+function makeRequest(url) {
+	return function (cb) {
+		d3.json(url, function (error, result) {
+			if (error) {
+				error = url + ' : ' + error.status;
+			}
+
+			cb(error, result);
+		});
+	}
+}
+
+
 function updateModel(cb) {
 	async.parallel({
-	    links: function(cb) {
-			d3.json('data/wm_core_topology_links_json.json', function (error, result) {
-				cb(error, result);
-			});
-	    },
-	    switches: function(cb) {
-			d3.json('data/wm_core_topology_switches_all_json.json', function (error, result) {
-				cb(error, result);
-			});
-	    },
-	    flows: function(cb) {
-			d3.json('data/wm_flow_getall_json.json', function (error, result) {
-				cb(error, result);
-			});
-	    },
-	    controllers: function(cb) {
-			d3.json('data/wm_registry_controllers_json.json', function (error, result) {
-				cb(error, result);
-			});
-	    },
-	    mapping: function(cb) {
-			d3.json('data/wm_registry_switches_json.json', function (error, result) {
-				cb(error, result);
-			});
-	    },
-	    configuration: function(cb) {
-			d3.json('data/configuration.json', function (error, result) {
-				cb(error, result);
-			});
-	    },
+	    links: makeRequest(urls.links),
+	    switches: makeRequest(urls.switches),
+	    controllers: makeRequest(urls.controllers),
+	    activeControllers: makeRequest(urls.activeControllers),
+	    mapping: makeRequest(urls.mapping),
+	    configuration: makeRequest(urls.configuration)
+//	    flows: makeRequest(urls.flows),
 	},
 	function(err, results) {
-		var model = toD3(results);
-		cb(model);
+		if (!err) {
+			var model = toD3(results);
+			cb(model);
+		} else {
+			alert(JSON.stringify(err));
+		}
 	});
 }
\ No newline at end of file
diff --git a/web/ons-demo/js/utils.js b/web/ons-demo/js/utils.js
new file mode 100644
index 0000000..17100b1
--- /dev/null
+++ b/web/ons-demo/js/utils.js
@@ -0,0 +1,14 @@
+function parseURLParameters() {
+	var parameters = {};
+
+	var search = location.href.split('?')[1];
+	if (search) {
+		search.split('&').forEach(function (param) {
+			var key = param.split('=')[0];
+			var value = param.split('=')[1];
+			parameters[key] = decodeURIComponent(value);
+		});
+	}
+
+	return parameters;
+}
\ No newline at end of file
diff --git a/web/restapi2.py b/web/restapi2.py
index 93404b4..a8188d8 100755
--- a/web/restapi2.py
+++ b/web/restapi2.py
@@ -53,6 +53,77 @@
 
   return response
 
+## PROXY API (allows development where the webui is served from someplace other than the ONOS_HOST)##
+ONOS_HOST="http://gui3.onlab.us:8080"
+
+@app.route("/proxy/wm/core/topology/switches/all/json")
+def switches():
+  try:
+    command = "curl -s %s/wm/core/topology/switches/all/json" % (ONOS_HOST)
+    print command
+    result = os.popen(command).read()
+  except:
+    print "REST IF has issue"
+    exit
+
+  resp = Response(result, status=200, mimetype='application/json')
+  return resp
+
+@app.route("/proxy/wm/core/topology/links/json")
+def links():
+  try:
+    command = "curl -s %s/wm/core/topology/links/json" % (ONOS_HOST)
+    print command
+    result = os.popen(command).read()
+  except:
+    print "REST IF has issue"
+    exit
+
+  resp = Response(result, status=200, mimetype='application/json')
+  return resp
+
+@app.route("/proxy/wm/flow/getall/json")
+def flows():
+  try:
+    command = "curl -s %s/wm/flow/getall/json" % (ONOS_HOST)
+    print command
+    result = os.popen(command).read()
+  except:
+    print "REST IF has issue"
+    exit
+
+  resp = Response(result, status=200, mimetype='application/json')
+  return resp
+
+@app.route("/proxy/wm/registry/controllers/json")
+def registry_controllers():
+  try:
+    command = "curl -s %s/wm/registry/controllers/json" % (ONOS_HOST)
+    print command
+    result = os.popen(command).read()
+  except:
+    print "REST IF has issue"
+    exit
+
+  resp = Response(result, status=200, mimetype='application/json')
+  return resp
+
+@app.route("/proxy/wm/registry/switches/json")
+def registry_switches():
+  try:
+    command = "curl -s %s/wm/registry/switches/json" % (ONOS_HOST)
+    print command
+    result = os.popen(command).read()
+  except:
+    print "REST IF has issue"
+    exit
+
+  resp = Response(result, status=200, mimetype='application/json')
+  return resp
+
+
+
+
 ## REST API ##
 #@app.route("/wm/topology/links/json")
 #def links():
