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
