diff --git a/web/ons-demo/js/app.js b/web/ons-demo/js/app.js
index 7d6774c..02dbc5d 100644
--- a/web/ons-demo/js/app.js
+++ b/web/ons-demo/js/app.js
@@ -18,7 +18,9 @@
 var svg;
 var updateTopology;
 var pendingLinks = {};
-var pendingFlows = {};
+var selectedFlows = [];
+
+var pendingTimeout = 10000;
 
 var colors = [
 	'color1',
@@ -66,8 +68,6 @@
 			attr('id', 'viewbox').append('svg:g').attr('transform', 'translate(500 500)');
 }
 
-var selectedFlows = [null, null, null];
-
 function updateSelectedFlowsTopology() {
 	// DRAW THE FLOWS
 	var flows = d3.select('svg').selectAll('.flow').data(selectedFlows);
@@ -88,7 +88,7 @@
 				return;
 			}
 			var pts = [];
-			if (d.pending) {
+			if (!d.dataPath.flowEntries) {
 				// create a temporary vector to indicate the pending flow
 				var s1 = d3.select(document.getElementById(d.dataPath.srcPort.dpid.value));
 				var s2 = d3.select(document.getElementById(d.dataPath.dstPort.dpid.value));
@@ -139,6 +139,7 @@
 function updateSelectedFlowsTable() {
 	function rowEnter(d) {
 		var row = d3.select(this);
+		row.append('div').classed('deleteFlow', true);
 		row.append('div').classed('flowId', true);
 		row.append('div').classed('srcDPID', true);
 		row.append('div').classed('dstDPID', true);
@@ -160,6 +161,22 @@
 
 	function rowUpdate(d) {
 		var row = d3.select(this);
+		row.select('.deleteFlow').on('click', function () {
+			if (d) {
+				var prompt = 'Delete flow ' + d.flowId.value + '?';
+				if (confirm(prompt)) {
+					deleteFlow(d);
+					d.pending = true;
+					updateSelectedFlows();
+
+					setTimeout(function () {
+						d.pending = false;
+						updateSelectedFlows();
+					}, pendingTimeout)
+				};
+			}
+		});
+
 		row.select('.flowId')
 			.text(function (d) {
 				if (d) {
@@ -228,6 +245,9 @@
 		});
 		selectedFlows = newSelectedFlows;
 	}
+	while (selectedFlows.length < 3) {
+		selectedFlows.push(null);
+	}
 
 	updateSelectedFlowsTable();
 	updateSelectedFlowsTopology();
@@ -783,7 +803,7 @@
 
 					setTimeout(function () {
 						deselectFlow(flow);
-					}, 10000);
+					}, pendingTimeout);
 				}
 			} else {
 				var map = linkMap[srcData.dpid];
@@ -828,7 +848,7 @@
 								delete pendingLinks[makeLinkKey(link2)];
 
 								updateTopology();
-							}, 10000);
+							}, pendingTimeout);
 						}
 					}
 				}
diff --git a/web/ons-demo/js/controller.js b/web/ons-demo/js/controller.js
index 35df661..fd3f6ae 100644
--- a/web/ons-demo/js/controller.js
+++ b/web/ons-demo/js/controller.js
@@ -35,13 +35,11 @@
 		callURL(url);
 	},
 	delFlowCmd: function (flow) {
-		alert('delete flow')
+		var url = '/proxy/gui/delflow/' + flow.flowId.value;
+		callURL(url);
 	}
 };
 
-// http://gui3.onlab.us:8081/gui/addflow/<src_dpid>/<src_port>/<dst_dpid>/<dst_port>/<srcMAC>/<dstMAC>
-// http://gui3.onlab.us:8081/gui/delflow/<flow_id>
-
 function linkUp(link) {
 	controllerFunctions.linkCmd('up', link);
 }
