diff --git a/web/ons-demo/css/skin.default.css b/web/ons-demo/css/skin.default.css
index 4efa334..9ecc00f 100644
--- a/web/ons-demo/css/skin.default.css
+++ b/web/ons-demo/css/skin.default.css
@@ -164,7 +164,7 @@
 	display: -webkit-box;
 	-webkit-box-pack: center;
 	-webkit-box-align: center;
-	width: 3em;
+	width: 4em;
 }
 
 
@@ -237,6 +237,10 @@
 	pointer-events: none;
 }
 
+text.label {
+	fill: #888;
+}
+
 path {
 	stroke: rgba(255, 255, 255, .25);
 	stroke-width: 1.5px;
diff --git a/web/ons-demo/data/configuration.json b/web/ons-demo/data/configuration.json
index 27d2393..4d38d5f 100644
--- a/web/ons-demo/data/configuration.json
+++ b/web/ons-demo/data/configuration.json
@@ -73,7 +73,7 @@
 			"lat": 34.102708,
 			"lng": -118.238983,
 			"label": "LA",
-			"fanOutAngle": 300
+			"fanOutAngle": 315
 		}
 	}
 }
\ No newline at end of file
diff --git a/web/ons-demo/js/app.js b/web/ons-demo/js/app.js
index c6438fa..2689b43 100644
--- a/web/ons-demo/js/app.js
+++ b/web/ons-demo/js/app.js
@@ -21,8 +21,6 @@
 			if (modelChanged) {
 				updateControllers();
 				updateSelectedFlows();
-				reconcilePendingLinks(model);
-				updateLinkMap(links);
 				updateTopology();
 			}
 
diff --git a/web/ons-demo/js/flows.js b/web/ons-demo/js/flows.js
index 29fc4fa..ae148e7 100644
--- a/web/ons-demo/js/flows.js
+++ b/web/ons-demo/js/flows.js
@@ -26,7 +26,7 @@
 				return;
 			}
 			var pts = [];
-			if (!d.dataPath.flowEntries) {
+			if (d.createPending) {
 				// create a temporary vector to indicate the pending flow
 				var s1 = d3.select(document.getElementById(d.srcDpid));
 				var s2 = d3.select(document.getElementById(d.dstDpid));
@@ -43,7 +43,7 @@
 				pt2 = pt2.matrixTransform(s2[0][0].getCTM());
 				pts.push(pt2);
 
-			} else {
+			} else if (d.dataPath && d.dataPath.flowEntries) {
 				d.dataPath.flowEntries.forEach(function (flowEntry) {
 					var s = d3.select(document.getElementById(flowEntry.dpid.value));
 					// s[0] is null if the flow entry refers to a non-existent switch
@@ -186,7 +186,6 @@
 	flows.exit().remove();
 }
 
-// TODO: cancel the interval when the flow is desel
 function startIPerfForFlow(flow) {
 	var duration = 10000; // seconds
 	var interval = 100; // ms. this is defined by the server
diff --git a/web/ons-demo/js/map.js b/web/ons-demo/js/map.js
index 382cb26..d40c9cb 100644
--- a/web/ons-demo/js/map.js
+++ b/web/ons-demo/js/map.js
@@ -116,7 +116,7 @@
 	});
 }
 
-function updateLinkLines() {
+function drawLinkLines() {
 
 	// key on link dpids since these will come/go during demo
 	var linkLines = linksLayer.selectAll('.link').data(links, function (d) {
@@ -227,12 +227,36 @@
 
 	if (d.label) {
 		g.append('svg:text')
+			.classed('label', true)
 			.text(d.label)
-			.attr('x', d.x + width)
-			.attr('y', d.y + width);
+			.attr("text-anchor", "end")
+			.attr('x', d.x - width)
+			.attr('y', d.y - width);
 	}
 }
 
+function labelsEnter(switches) {
+	return labelsLayer.selectAll('g').data(switches, function (d) {
+		return d.dpid;
+	}).enter().append('svg:g')
+		.classed('nolabel', true)
+		.attr("id", function (data) {
+			return data.dpid + '-label';
+		})
+		.append("svg:text")
+			.text(function (data) {return data.dpid;})
+			.attr('x', function (d) {
+				return d.x;
+			})
+			.attr('y', function (d) {
+				return d.y;
+			})
+			.attr("text-anchor", function (d) {
+				return d.x > 500 ? "end" : "start";
+			})
+
+}
+
 function switchesEnter(switches) {
 	return switchLayer.selectAll('g').data(switches, function (d) {
 		return d.dpid;
@@ -251,29 +275,6 @@
 				.each(switchEnter);
 }
 
-// function labelsEnter(className, model) {
-// 			.enter().append("svg:g")
-// 			.classed('nolabel', true)
-// 			.attr("id", function (data) {
-// 				return data.dpid + '-label';
-// 			})
-
-
-// 	return topology.selectAll('.'+className).data(makeSwitchesModel(model))
-// 		.enter()
-// 			.append('svg:g')
-// 				.attr("id", function (d) {
-// 					return d.dpid;
-// 				})
-// 				.classed('core', true)
-// 				.attr('x', function (d) {
-// 					return d.x;
-// 				})
-// 				.attr('y', function (d) {
-// 					return d.y;
-// 				})
-// 				.each(switchEnter);
-// }
 
 function switchesUpdate(switches) {
 	switches.each(function (d) {
@@ -307,11 +308,9 @@
 
 	switchesUpdate(switchesEnter(switches));
 
+	drawLinkLines();
 
-
-
-
-	updateLinkLines();
+	labelsEnter(switches);
 }
 
 })();
\ No newline at end of file
diff --git a/web/ons-demo/js/topology.js b/web/ons-demo/js/topology.js
index 9801302..7f91de8 100644
--- a/web/ons-demo/js/topology.js
+++ b/web/ons-demo/js/topology.js
@@ -10,6 +10,9 @@
 
 	/* currently rings.js and map.js can be included to define the topology display */
 
+	reconcilePendingLinks(model);
+	updateLinkMap(links);
+
 	drawTopology();
 
 	// setup the mouseover behaviors
