diff --git a/web/js/controller-status.js b/web/js/controller-status.js
index 509b344..75cc5cc 100644
--- a/web/js/controller-status.js
+++ b/web/js/controller-status.js
@@ -8,7 +8,6 @@
     var width = (barWidth + 10) * 4
     var height = 50;
 
-
     var Servers = d3.select("#servers").
 	append("svg:svg").
 	attr("width", 800).
@@ -45,6 +44,19 @@
 	    append("svg:text").
 	    attr("x", function(datum, index) { return x(index); }).
 	    attr("y", function(datum) { return 20; }).
+	    attr("fill", function(datum, index) { 
+		if (index == 0){
+		    return "red"
+		}else if (index == 1){
+		    return "blue"
+		}else if (index == 2){
+		    return "green"
+		}else if (index == 3){
+		    return "orange"
+		}else{
+		    return "black"
+		}
+	    }).
 	    text(function(datum) { return datum.name; });
 
 	controller_rect.
@@ -54,7 +66,19 @@
 	    attr("y", function(datum) { return height - y(datum.onos); }).
 	    attr("height", function(datum) { return y(datum.onos); }).
 	    attr("width", barWidth).
-	    attr("fill", "#2d578b");
+	    attr("fill", function(datum, index) { 
+		if (index == 0){
+		    return "red"
+		}else if (index == 1){
+		    return "blue"
+		}else if (index == 2){
+		    return "green"
+		}else if (index == 3){
+		    return "orange"
+		}else{
+		    return "black"
+		}
+	    });
 
 	controller_text.
 	    enter().
@@ -85,12 +109,25 @@
 	    attr("width", barWidth).
 	    attr('fill', 'white'); 
 
+
 	controller_rect.
 	    attr("x", function(datum, index) { return x(index); }).
 	    attr("y", function(datum) { return height - y(datum.onos); }).
 	    attr("height", function(datum) { return y(datum.onos); }).
 	    attr("width", barWidth).
-	    attr("fill", "#2d578b");
+	    attr("fill", function(datum, index) { 
+		if (index == 0){
+		    return "red"
+		}else if (index == 1){
+		    return "blue"
+		}else if (index == 2){
+		    return "green"
+		}else if (index == 3){
+		    return "orange"
+		}else{
+		    return "black"
+		}
+	    });
 
 	controller_text.
 	    text(function(){return "ONOS"}).
@@ -121,7 +158,18 @@
 	controller_text.exit().remove();
 	cassandra_rect.exit().remove();
 	cassandra_text.exit().remove();
+
+	setInterval(function() {
+            $.ajax({
+		url: data_source,
+		success: function(json) {
+		    draw(json)
+		},
+		dataType: "json"
+            });
+	}, 3000); 
     }
+/*
     $("#more").click( function() {
         $.ajax({
 	    url: 'http://gui.onlab.us:8080/controller_status1',
@@ -140,6 +188,6 @@
 	    dataType: "json"
         });
     });
-
+*/
 }
 
diff --git a/web/js/onos-topology.js b/web/js/onos-topology.js
index 57016c4..8573f7c 100644
--- a/web/js/onos-topology.js
+++ b/web/js/onos-topology.js
@@ -1,9 +1,10 @@
 function gui(data_source){
     var width = 960,
     height = 500;
+    var radius = 8;
     var color = d3.scale.category20();
 
-    var svg = d3.select("body").append("svg:svg")
+    var svg = d3.select("#topology").append("svg:svg")
 	.attr("width", width)
 	.attr("height", height);
 
@@ -216,12 +217,12 @@
 	    .attr("class", function(d) { return "link"; });
 
         circle.enter().append("svg:circle")
-	    .attr("r", 8)
+	    .attr("r", radius)
 	    .call(node_drag);
 //            .call(force.drag);
 
 	text.enter().append("svg:text")
-	    .attr("x", 8)
+	    .attr("x", radius)
 	    .attr("y", ".31em")
 	    .text(function(d) { return d.name.split(":")[5] + d.name.split(":")[6] + d.name.split(":")[7] });
 
@@ -310,13 +311,17 @@
 	});
 //	circle.attr("cx", function(d) { return d.x; }).attr("cy", function(d) { return d.y; });
 	circle.attr("transform", function(d) {
-	    return "translate(" + d.x + "," + d.y + ")";
+	    x = Math.max(radius, Math.min(width - radius, d.x));
+	    y = Math.max(radius, Math.min(height - radius, d.y)); 
+//	    return "translate(" + d.x + "," + d.y + ")";
+	    return "translate(" + x + "," + y + ")";
 	})
+
 	circle.attr("fill", function(d) {
-	    if (d.group == 1){return "red";}
+	    ;	    if (d.group == 1){return "red";}
 	    else if (d.group == 2){return "blue";}
 	    else if (d.group == 3){return "green";}
-	    else if (d.group == 3){return "orange";}
+	    else if (d.group == 4){return "orange";}
 	    else{ return "gray"; }
 	});
 //	text.attr("x", function(d) { return d.x; }).attr("y", function(d) { return d.y; });
diff --git a/web/topology_rest.py b/web/topology_rest.py
index 1b4fdca..16a0f24 100755
--- a/web/topology_rest.py
+++ b/web/topology_rest.py
@@ -498,6 +498,26 @@
   pp.pprint(resp)
   return resp
 
+@app.route("/controller_status")
+def controller_status():
+  onos_check="ssh -i ~/.ssh/onlabkey.pem %s ONOS/start-onos.sh status | awk '{print $1}'"
+  #cassandra_check="ssh -i ~/.ssh/onlabkey.pem %s ONOS/start-cassandra.sh status"
+
+  cont_status=[]
+  for i in controllers:
+    status={}
+    onos=os.popen(onos_check % i).read()[:-1]
+    status["name"]=i
+    status["onos"]=onos
+    status["cassandra"]=1
+    cont_status.append(status)
+
+  js = json.dumps(cont_status)
+  resp = Response(js, status=200, mimetype='application/json')
+  pp.pprint(js)
+  return resp
+
+
 
 if __name__ == "__main__":
   if len(sys.argv) > 1 and sys.argv[1] == "-d":
