diff --git a/web/ons-demo/js/app.js b/web/ons-demo/js/app.js
index 432710f..2ceee48 100644
--- a/web/ons-demo/js/app.js
+++ b/web/ons-demo/js/app.js
@@ -252,28 +252,25 @@
 function updateControllers(model) {
 	var controllers = d3.select('#controllerList').selectAll('.controller').data(model.controllers);
 	controllers.enter().append('div')
-		.attr('class', function (d) {
+		.each(function (c) {
+			controllerColorMap[c] = colors.pop();
+			d3.select(document.body).classed(controllerColorMap[c] + '-selected', true);
+		})
+		.text(function (d) {
+			return d;
+		});
 
+	controllers.attr('class', function (d) {
 			var color = 'color0';
 			if (model.activeControllers.indexOf(d) != -1) {
 				color = controllerColorMap[d];
-				if (!color) {
-					color = controllerColorMap[d] = colors.pop();
-				}
-			} else {
-				controllerColorMap[d] = color;
 			}
 			var className = 'controller ' + color;
 			return className;
 		});
-	controllers.text(function (d) {
-		return d;
-	});
-	controllers.exit().remove();
 
-	model.controllers.forEach(function (c) {
-		d3.select(document.body).classed(controllerColorMap[c] + '-selected', true);
-	});
+	// this should never be needed
+	// controllers.exit().remove();
 
 	controllers.on('click', function (c, index) {
 		var allSelected = true;
@@ -304,7 +301,7 @@
 	updateModel(function (newModel) {
 		console.log('Update time: ' + (Date.now() - d)/1000 + 's');
 
-		if (true || !oldModel && JSON.stringify(oldModel) != JSON.stringify(newModel)) {
+		if (!oldModel || JSON.stringify(oldModel) != JSON.stringify(newModel)) {
 			updateControllers(newModel);
 			updateTopology(svg, newModel);
 		} else {
