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; });
