diff --git a/build.xml b/build.xml
index 5883e9af0e5334244223421c47062ffb2f900338..58f4b71df0c067390cb53bc34c346cc70b3e432a 100644
--- a/build.xml
+++ b/build.xml
@@ -19,15 +19,15 @@
    limitations under the License.
 -->
 
-
 <project default="dist" name="Floodlight">
-
     <property name="target" location="target"/>
     <property name="build" location="${target}/bin"/>
     <property name="build-test" location="${target}/bin-test"/>
+    <property name="build-coverage" location="${target}/bin-coverage"/>
     <property name="test-output" location="${target}/test"/>
+    <property name="coverage-output" location="${target}/coverage"/>
     <property name="source" location="src/main/java"/>
-	<property name="resources" location="src/main/resources/"/>
+    <property name="resources" location="src/main/resources/"/>
     <property name="source-test" location="src/test/java"/>
     <property name="python-src" location="src/main/python"/>
     <property name="docs" location="${target}/docs"/>
@@ -69,6 +69,19 @@
         </fileset>
     </path>
 
+    <patternset id="lib-cobertura">
+        <include name="cobertura-1.9.4.1.jar"/>
+        <include name="asm-3.0.jar"/>
+        <include name="asm-tree-3.0.jar"/>
+        <include name="oro/jakarta-oro-2.0.8.jar"/>
+        <include name="log4j-1.2.9.jar"/>
+    </patternset>
+    <path id="classpath-cobertura">
+        <fileset dir="lib">
+            <patternset refid="lib-cobertura"/>
+	</fileset>
+    </path>
+
     <patternset id="lib-test">
         <include name="junit-4.8.2.jar"/>
         <include name="org.easymock_2.5.2.jar"/>
@@ -76,6 +89,7 @@
     <path id="classpath-test">
         <fileset dir="lib">
             <patternset refid="lib-test"/>
+            <patternset refid="lib-cobertura"/>
             <patternset refid="lib"/>
         </fileset>
         <fileset dir="${target}/lib">
@@ -138,8 +152,13 @@
 
     <target name="tests" depends="test"/>
     <target name="test" depends="compile-test">
-        <junit failureproperty="junit.failure" printsummary="on">
+        <junit fork="true" forkmode="once"
+	       failureproperty="junit.failure"
+	       printsummary="on">
+  	    <sysproperty key="net.sourceforge.cobertura.datafile"
+			 file="${target}/cobertura.ser" />
             <classpath>
+                <pathelement location="${build-coverage}"/>
                 <pathelement location="${build}"/>
                 <pathelement location="${build-test}"/>
                 <path refid="classpath-test"/>
@@ -155,7 +174,33 @@
         <fail if="junit.failure" message="Unit test(s) failed.  See reports!"/>
     </target>
 
-    <target name="dist" depends="compile,compile-tests">
+    <taskdef classpathref="classpath-cobertura" resource="tasks.properties"/>
+    <target name="clean-instrument">
+        <delete file="${target}/cobertura.ser"/>
+        <delete dir="${build-coverage}"/>
+    </target>
+    <target name="instrument" depends="compile,compile-test,clean-instrument">
+      <cobertura-instrument datafile="${target}/cobertura.ser"
+			    todir="${build-coverage}"
+			    classpathref="classpath-cobertura">
+	<fileset dir="${build}">
+	  <include name="**/*.class"/>
+	</fileset>
+      </cobertura-instrument>
+    </target>
+    <target name="coverage-report">
+        <cobertura-report format="html"
+			  datafile="${target}/cobertura.ser"
+			  destdir="${coverage-output}"
+			  srcdir="${source}"/>
+        <cobertura-report format="xml"
+			  datafile="${target}/cobertura.ser"
+			  destdir="${coverage-output}"
+			  srcdir="${source}"/>
+    </target>
+    <target name="coverage" depends="instrument,test,coverage-report"/>
+
+    <target name="dist" depends="compile,compile-test">
         <jar destfile="${floodlight-jar}" filesetmanifest="mergewithoutmain">
             <manifest>
                 <attribute name="Main-Class" value="${main-class}"/>
@@ -181,6 +226,7 @@
         	<fileset dir="${resources}"/>
             <zipgroupfileset dir="lib">
                 <patternset refid="lib-test"/>
+                <patternset refid="lib-cobertura"/>
             </zipgroupfileset>
             <zipgroupfileset dir="${target}/lib">
                 <patternset refid="genlib"/>
diff --git a/lib/asm-3.0.jar b/lib/asm-3.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..112f5bd4aecd5f9b7b3540f2c1a2a67b552e1d8b
Binary files /dev/null and b/lib/asm-3.0.jar differ
diff --git a/lib/asm-tree-3.0.jar b/lib/asm-tree-3.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..2a4b20856c0cff5a70575665d4583ef5ace0eed6
Binary files /dev/null and b/lib/asm-tree-3.0.jar differ
diff --git a/lib/cobertura-1.9.4.1.jar b/lib/cobertura-1.9.4.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..b7332491cdac15e27f1dab3fe22bc6b811f089f1
Binary files /dev/null and b/lib/cobertura-1.9.4.1.jar differ
diff --git a/lib/log4j-1.2.9.jar b/lib/log4j-1.2.9.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a6568b01a2179f5b20473a1dcee4c67da062b327
Binary files /dev/null and b/lib/log4j-1.2.9.jar differ
diff --git a/lib/oro/jakarta-oro-2.0.8.jar b/lib/oro/jakarta-oro-2.0.8.jar
new file mode 100644
index 0000000000000000000000000000000000000000..23488d2600f5f4784c0ba2be5baa4c41f396f616
Binary files /dev/null and b/lib/oro/jakarta-oro-2.0.8.jar differ
diff --git a/lib/packetstreamer-thrift.jar b/lib/packetstreamer-thrift.jar
new file mode 100644
index 0000000000000000000000000000000000000000..215dffc10525f03560141531e16414ea47a791e3
Binary files /dev/null and b/lib/packetstreamer-thrift.jar differ
diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/NodePortTupleJSONSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/NodePortTupleJSONSerializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..d3b44b95ec2f4588c81071d21a144d5bf0327de0
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/NodePortTupleJSONSerializer.java
@@ -0,0 +1,29 @@
+package net.floodlightcontroller.core.web.serializers;
+
+import java.io.IOException;
+
+import net.floodlightcontroller.topology.NodePortTuple;
+
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.JsonProcessingException;
+import org.codehaus.jackson.map.JsonSerializer;
+import org.codehaus.jackson.map.SerializerProvider;
+import org.openflow.util.HexString;
+
+public class NodePortTupleJSONSerializer extends JsonSerializer<NodePortTuple> {
+
+    @Override
+    public void serialize(NodePortTuple ntp, JsonGenerator jgen,
+                          SerializerProvider sp) throws IOException,
+                                                  JsonProcessingException {
+        jgen.writeStartObject();
+        jgen.writeStringField("switch", HexString.toHexString(ntp.getNodeId()));
+        jgen.writeNumberField("port", ntp.getPortId());
+        jgen.writeEndObject();
+    }
+
+    @Override
+    public Class<NodePortTuple> handledType() {
+        return NodePortTuple.class;
+    }
+}
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
index 151c599507d98a4baf34fec46a10bad011603ab3..e4a8a10369ed7ebea8c86a1086ceaa8b8f470149 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
@@ -67,7 +67,6 @@ import net.floodlightcontroller.packet.Ethernet;
 import net.floodlightcontroller.packet.IPv4;
 import net.floodlightcontroller.packet.LLDP;
 import net.floodlightcontroller.packet.LLDPTLV;
-import net.floodlightcontroller.restserver.IRestApiService;
 import net.floodlightcontroller.routing.IRoutingService;
 import net.floodlightcontroller.storage.IResultSet;
 import net.floodlightcontroller.storage.IStorageSourceService;
@@ -75,7 +74,6 @@ import net.floodlightcontroller.storage.IStorageSourceListener;
 import net.floodlightcontroller.storage.OperatorPredicate;
 import net.floodlightcontroller.storage.StorageException;
 import net.floodlightcontroller.threadpool.IThreadPoolService;
-import net.floodlightcontroller.topology.web.TopologyWebRoutable;
 import net.floodlightcontroller.util.EventHistory;
 import net.floodlightcontroller.util.EventHistory.EvAction;
 
@@ -142,7 +140,6 @@ public class LinkDiscoveryManager
     protected IFloodlightProviderService floodlightProvider;
     protected IStorageSourceService storageSource;
     protected IRoutingService routingEngine;
-    protected IRestApiService restApi;
     protected IThreadPoolService threadPool;
     
     private static final byte[] LLDP_STANDARD_DST_MAC_STRING = 
@@ -1311,8 +1308,6 @@ public class LinkDiscoveryManager
                         IFloodlightService>();
         // We are the class that implements the service
         m.put(ILinkDiscoveryService.class, this);
-        //m.put(ITopologyService.class, this);
-        
         return m;
     }
 
@@ -1323,7 +1318,6 @@ public class LinkDiscoveryManager
         l.add(IFloodlightProviderService.class);
         l.add(IStorageSourceService.class);
         l.add(IRoutingService.class);
-        l.add(IRestApiService.class);
         l.add(IThreadPoolService.class);
         return l;
     }
@@ -1334,7 +1328,6 @@ public class LinkDiscoveryManager
         floodlightProvider = context.getServiceImpl(IFloodlightProviderService.class);
         storageSource = context.getServiceImpl(IStorageSourceService.class);
         routingEngine = context.getServiceImpl(IRoutingService.class);
-        restApi = context.getServiceImpl(IRestApiService.class);
         threadPool = context.getServiceImpl(IThreadPoolService.class);
         
         // We create this here because there is no ordering guarantee
@@ -1438,13 +1431,6 @@ public class LinkDiscoveryManager
         floodlightProvider.addOFSwitchListener(this);
         floodlightProvider.addHAListener(this);
         floodlightProvider.addInfoProvider("summary", this);
-        
-        // init our rest api
-        if (restApi != null) {
-            restApi.addRestletRoutable(new TopologyWebRoutable());
-        } else {
-            log.error("Could not instantiate REST API");
-        }
 
         setControllerTLV();
     }
diff --git a/src/main/java/net/floodlightcontroller/topology/ITopologyService.java b/src/main/java/net/floodlightcontroller/topology/ITopologyService.java
index d38e6c3c6901f5c1e23957405d95da503d8f662a..1d8c58b619e1e3a37e46178b8f7d7f8b73028d01 100644
--- a/src/main/java/net/floodlightcontroller/topology/ITopologyService.java
+++ b/src/main/java/net/floodlightcontroller/topology/ITopologyService.java
@@ -51,8 +51,24 @@ public interface ITopologyService extends IFloodlightService  {
      */
     public boolean inSameIsland(long switch1, long switch2);
 
+    /**
+     * Adds a listener to get topology notifications
+     * @param listener The module that wants to listen for events
+     */
     public void addListener(ITopologyListener listener);
 
+    /**
+     * Gets the set of ports that belong to a broadcast domain.
+     * @return The set of ports that belong to a broadcast domain.
+     */
+    public Set<NodePortTuple> getBroadcastDomainLinks();
+    
+    /**
+     * Returns that set of links that are tunnel links.
+     * @return The set of links that are tunnel links.
+     */
+    public Set<NodePortTuple> getTunnelLinks();
+    
     public boolean isBroadcastDomainPort(long sw, short port);
 
     public boolean isAllowed(long sw, short portId);
diff --git a/src/main/java/net/floodlightcontroller/topology/TopologyInstance.java b/src/main/java/net/floodlightcontroller/topology/TopologyInstance.java
index 56c14224a65a9e9f6e4777e9e54dffb2b21e48e7..d69a6ec2ca2858b7eda863b9172a2227b722cdd2 100644
--- a/src/main/java/net/floodlightcontroller/topology/TopologyInstance.java
+++ b/src/main/java/net/floodlightcontroller/topology/TopologyInstance.java
@@ -36,15 +36,14 @@ public class TopologyInstance {
     protected Set<Long> switches;
     protected Set<NodePortTuple> broadcastDomainPorts;
     protected Set<NodePortTuple> tunnelPorts;
-    //protected Set<NodePortTuple> blockedPorts;
 
     protected Set<Cluster> clusters;  // set of clusters
     protected Map<Long, Cluster> switchClusterMap; // switch to cluster map
 
     // States for routing
-    protected Map<Long, BroadcastTree> destinationRootedTrees;
-    protected Map<Long, Set<NodePortTuple>> clusterBroadcastNodePorts;
-    protected Map<Long, BroadcastTree> clusterBroadcastTrees;
+    protected Map<Long, BroadcastTree> destinationRootedTrees; // DPID -> BroadcastTree
+    protected Map<Long, Set<NodePortTuple>> clusterBroadcastNodePorts; // ClusterID -> BroadcastTree
+    protected Map<Long, BroadcastTree> clusterBroadcastTrees; // ClusterID -> BroadcastTree
     protected LRUHashMap<RouteId, Route> pathcache;
 
     public TopologyInstance() {
diff --git a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java
index 1cfe6a2ef119b9966e9db030061507115a6421fb..0ea778f8d5f3f441d1e55dc4a1828aa316002dfc 100644
--- a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java
+++ b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java
@@ -25,11 +25,13 @@ import net.floodlightcontroller.core.util.SingletonTask;
 import net.floodlightcontroller.linkdiscovery.ILinkDiscoveryListener;
 import net.floodlightcontroller.linkdiscovery.ILinkDiscoveryService;
 import net.floodlightcontroller.packet.Ethernet;
+import net.floodlightcontroller.restserver.IRestApiService;
 import net.floodlightcontroller.routing.BroadcastTree;
 import net.floodlightcontroller.routing.IRoutingService;
 import net.floodlightcontroller.routing.Link;
 import net.floodlightcontroller.routing.Route;
 import net.floodlightcontroller.threadpool.IThreadPoolService;
+import net.floodlightcontroller.topology.web.TopologyWebRoutable;
 
 import org.openflow.protocol.OFMessage;
 import org.openflow.protocol.OFPacketIn;
@@ -72,6 +74,7 @@ public class TopologyManager implements
     protected ILinkDiscoveryService linkDiscovery;
     protected IThreadPoolService threadPool;
     protected IFloodlightProviderService floodlightProvider;
+    protected IRestApiService restApi;
 
     // Modules that listen to our updates
     protected ArrayList<ITopologyListener> topologyAware;
@@ -224,6 +227,18 @@ public class TopologyManager implements
     public boolean inSameIsland(long switch1, long switch2) {
         return currentInstance.inSameIsland(switch1, switch2);
     }
+    
+    @Override
+    public Set<NodePortTuple> getBroadcastDomainLinks() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Set<NodePortTuple> getTunnelLinks() {
+        // TODO Auto-generated method stub
+        return null;
+    }
 
     // ***************
     // IRoutingService
@@ -317,8 +332,8 @@ public class TopologyManager implements
             getServiceImpls() {
         Map<Class<? extends IFloodlightService>,
         IFloodlightService> m = 
-        new HashMap<Class<? extends IFloodlightService>,
-        IFloodlightService>();
+            new HashMap<Class<? extends IFloodlightService>,
+                IFloodlightService>();
         // We are the class that implements the service
         m.put(ITopologyService.class, this);
         m.put(IRoutingService.class, this);
@@ -334,6 +349,7 @@ public class TopologyManager implements
         l.add(ILinkDiscoveryService.class);
         l.add(IThreadPoolService.class);
         l.add(IFloodlightProviderService.class);
+        l.add(IRestApiService.class);
         return l;
     }
 
@@ -344,6 +360,7 @@ public class TopologyManager implements
         threadPool = context.getServiceImpl(IThreadPoolService.class);
         floodlightProvider = 
                 context.getServiceImpl(IFloodlightProviderService.class);
+        restApi = context.getServiceImpl(IRestApiService.class);
         
         switchPorts = new HashMap<Long,Set<Short>>();
         switchPortLinks = new HashMap<NodePortTuple, Set<Link>>();
@@ -358,6 +375,7 @@ public class TopologyManager implements
         ScheduledExecutorService ses = threadPool.getScheduledExecutor();
         newInstanceTask = new SingletonTask(ses, new NewInstanceWorker());
         linkDiscovery.addListener(this);
+        restApi.addRestletRoutable(new TopologyWebRoutable());
         newInstanceTask.reschedule(1, TimeUnit.MILLISECONDS);
         floodlightProvider.addOFMessageListener(OFType.PACKET_IN, this);
     }
@@ -597,13 +615,8 @@ public class TopologyManager implements
         return portBroadcastDomainLinks;
     }
 
-    public Map<NodePortTuple, Set<Link>> getTunnelLinks() {
-        return tunnelLinks;
-    }
-
     public TopologyInstance getCurrentInstance() {
         return currentInstance;
     }
-
 }
 
diff --git a/src/main/java/net/floodlightcontroller/topology/web/BroadcastDomainResource.java b/src/main/java/net/floodlightcontroller/topology/web/BroadcastDomainResource.java
new file mode 100644
index 0000000000000000000000000000000000000000..dc7dd46ebaeeacd88608ad9b93528717ffd6ed77
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/topology/web/BroadcastDomainResource.java
@@ -0,0 +1,20 @@
+package net.floodlightcontroller.topology.web;
+
+import java.util.Set;
+
+import net.floodlightcontroller.topology.ITopologyService;
+import net.floodlightcontroller.topology.NodePortTuple;
+
+import org.restlet.resource.Get;
+import org.restlet.resource.ServerResource;
+
+public class BroadcastDomainResource extends ServerResource {
+    @Get("json")
+    public Set<NodePortTuple> retrieve() {
+        ITopologyService topology = 
+                (ITopologyService)getContext().getAttributes().
+                    get(ITopologyService.class.getCanonicalName());
+        
+        return topology.getBroadcastDomainLinks();
+    }
+}
diff --git a/src/main/java/net/floodlightcontroller/topology/web/TopologyWebRoutable.java b/src/main/java/net/floodlightcontroller/topology/web/TopologyWebRoutable.java
index afe65fc9e5e7279ebbb25de444625567361a3aff..efe180c725dacbfab626c69c380a05be84ae2eae 100644
--- a/src/main/java/net/floodlightcontroller/topology/web/TopologyWebRoutable.java
+++ b/src/main/java/net/floodlightcontroller/topology/web/TopologyWebRoutable.java
@@ -1,7 +1,6 @@
 package net.floodlightcontroller.topology.web;
 
 import org.restlet.Context;
-import org.restlet.Restlet;
 import org.restlet.routing.Router;
 
 import net.floodlightcontroller.linkdiscovery.web.LinksResource;
@@ -12,10 +11,12 @@ public class TopologyWebRoutable implements RestletRoutable {
      * Create the Restlet router and bind to the proper resources.
      */
     @Override
-    public Restlet getRestlet(Context context) {
+    public Router getRestlet(Context context) {
         Router router = new Router(context);
         router.attach("/links/json", LinksResource.class);
+        router.attach("/tunnellinks/json", TunnelLinksResource.class);
         router.attach("/switchclusters/json", SwitchClustersResource.class);
+        router.attach("/broadcastdomainports/json", BroadcastDomainResource.class);
         return router;
     }
 
diff --git a/src/main/java/net/floodlightcontroller/topology/web/TunnelLinksResource.java b/src/main/java/net/floodlightcontroller/topology/web/TunnelLinksResource.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac7c0e367681910573f22f1c350c30bca679b038
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/topology/web/TunnelLinksResource.java
@@ -0,0 +1,20 @@
+package net.floodlightcontroller.topology.web;
+
+import java.util.Set;
+
+import net.floodlightcontroller.topology.ITopologyService;
+import net.floodlightcontroller.topology.NodePortTuple;
+
+import org.restlet.resource.Get;
+import org.restlet.resource.ServerResource;
+
+public class TunnelLinksResource extends ServerResource {
+    @Get("json")
+    public Set<NodePortTuple> retrieve() {
+        ITopologyService topology = 
+                (ITopologyService)getContext().getAttributes().
+                    get(ITopologyService.class.getCanonicalName());
+        
+        return topology.getTunnelLinks();
+    }
+}
diff --git a/src/main/resources/web/css/bootstrap.css b/src/main/resources/web/css/bootstrap.css
index 495188af7faca02cfd553ebb7c809ee469cf1a8b..98f31f3f08260b9a4528278ba6f65b5494f6e50a 100644
--- a/src/main/resources/web/css/bootstrap.css
+++ b/src/main/resources/web/css/bootstrap.css
@@ -135,8 +135,8 @@ body {
   font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
   font-size: 13px;
   line-height: 18px;
-  color: #333333;
-  background-color: #ffffff;
+  color: #0c028; /* #333333 */
+  background-color: white; /*  #ffffff; */
 }
 a {
   color: #0088cc;
@@ -148,6 +148,7 @@ a:hover {
 }
 .row {
   margin-left: -20px;
+  margin-top: 5px;
   *zoom: 1;
 }
 .row:before,
@@ -358,21 +359,21 @@ h6 small {
   color: #999999;
 }
 h1 {
-  font-size: 30px;
-  line-height: 36px;
+  font-size: 23px;
+  line-height: 25px;
 }
 h1 small {
   font-size: 18px;
 }
 h2 {
-  font-size: 24px;
-  line-height: 36px;
+  font-size: 18px;
+  line-height: 22px;
 }
 h2 small {
   font-size: 18px;
 }
 h3 {
-  line-height: 27px;
+  line-height: 18px;
   font-size: 18px;
 }
 h3 small {
@@ -381,7 +382,7 @@ h3 small {
 h4,
 h5,
 h6 {
-  line-height: 18px;
+  line-height: 16px;
 }
 h4 {
   font-size: 14px;
@@ -2489,7 +2490,7 @@ input[type="submit"].btn.btn-mini {
   font-size: 11px;
   font-weight: bold;
   line-height: 18px;
-  color: #999999;
+  color: white;
   text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
   text-transform: uppercase;
 }
@@ -2782,8 +2783,9 @@ input[type="submit"].btn.btn-mini {
 .navbar-inner {
   padding-left: 20px;
   padding-right: 20px;
-  background-color: #2c2c2c;
-  background-image: -moz-linear-gradient(top, #333333, #222222);
+  background-color: white;
+  border-bottom: 2px solid #221e50;
+/*  background-image: -moz-linear-gradient(top, #333333, #222222);
   background-image: -ms-linear-gradient(top, #333333, #222222);
   background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
   background-image: -webkit-linear-gradient(top, #333333, #222222);
@@ -2796,7 +2798,7 @@ input[type="submit"].btn.btn-mini {
   border-radius: 4px;
   -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
   -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);*/
 }
 .navbar .container {
   width: auto;
@@ -2919,7 +2921,7 @@ input[type="submit"].btn.btn-mini {
 .navbar-search {
   position: relative;
   float: left;
-  margin-top: 6px;
+  margin-top: 17px;
   margin-bottom: 0;
 }
 .navbar-search .search-query {
@@ -2989,40 +2991,42 @@ input[type="submit"].btn.btn-mini {
   left: 0;
   display: block;
   float: left;
-  margin: 0 10px 0 0;
+  margin: 0 10px 0px 0;
 }
 .navbar .nav.pull-right {
   float: right;
 }
 .navbar .nav > li {
   display: block;
+  margin-top: 10px;
+  font-size: 130%;
   float: left;
 }
 .navbar .nav > li > a {
   float: none;
   padding: 10px 10px 11px;
-  line-height: 19px;
-  color: #999999;
+  line-height: 25px;
+  color: #221e50;
   text-decoration: none;
   text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
 }
 .navbar .nav > li > a:hover {
   background-color: transparent;
-  color: #ffffff;
-  text-decoration: none;
+  color: #221e50;
+  text-decoration: underline;
 }
 .navbar .nav .active > a,
 .navbar .nav .active > a:hover {
-  color: #ffffff;
-  text-decoration: none;
-  background-color: #222222;
+  color: #221e50;
+  text-decoration: underline;
+  background-color: white;
 }
 .navbar .divider-vertical {
   height: 40px;
   width: 1px;
   margin: 0 9px;
   overflow: hidden;
-  background-color: #222222;
+  background-color: white;
   border-right: 1px solid #333333;
 }
 .navbar .nav.pull-right {
@@ -3988,3 +3992,9 @@ a.thumbnail:hover {
 .invisible {
   visibility: hidden;
 }
+
+td.status-head {
+  font-weight:bold;
+  width:150px;
+  padding:7px;
+}
\ No newline at end of file
diff --git a/src/main/resources/web/img/floodlight.png b/src/main/resources/web/img/floodlight.png
new file mode 100644
index 0000000000000000000000000000000000000000..98d047798ecd496ae12a2dfc8025ebfb3423417a
Binary files /dev/null and b/src/main/resources/web/img/floodlight.png differ
diff --git a/src/main/resources/web/index.html b/src/main/resources/web/index.html
index 78118293f292f0f437c528553db23ba74acf6445..1812037aed3ce286cdcd31ace15edd21f4a16e9c 100644
--- a/src/main/resources/web/index.html
+++ b/src/main/resources/web/index.html
@@ -51,7 +51,11 @@
 <div class="header"></div>
 
 <!-- FIXME closing these alerts returns to the dashboard; why? -->
+
+
 <div class="container">
+
+<!--
 <div class="row">
 <div class="span12">
 <div class="alert alert-info">
@@ -69,6 +73,7 @@ This Web interface is <strong>incomplete and buggy</strong>! Don't be surprised
 </div>
 </div>
 </div>
+-->
 
 <div id="content"></div>
 
diff --git a/src/main/resources/web/js/main.js b/src/main/resources/web/js/main.js
index 00f0b9feb408e3158be2d82187f3a16a5dd431a7..cde561b7f24f525ee74023242b6194a498b92e6f 100644
--- a/src/main/resources/web/js/main.js
+++ b/src/main/resources/web/js/main.js
@@ -99,8 +99,9 @@ tpl.loadTemplates(['home', 'status', 'topology', 'header', 'switch', 'switch-lis
         
         $(document).ready(function () {
             // trigger Backbone routing when clicking on links, thanks to Atinux and pbnv
+	    app.navigate("", true);
 
-        	window.document.addEventListener('click', function(e) {
+                window.document.addEventListener('click', function(e) {
         	    e = e || window.event
         	    var target = e.target || e.srcElement
         	    if ( target.nodeName.toLowerCase() === 'a' ) {
@@ -112,6 +113,7 @@ tpl.loadTemplates(['home', 'status', 'topology', 'header', 'switch', 'switch-lis
         	window.addEventListener('popstate', function(e) {
         	    app.navigate(location.pathname.substr(1), true);
         	});
+	    
         });
     });
 
diff --git a/src/main/resources/web/js/views/topology.js b/src/main/resources/web/js/views/topology.js
index b79694895827d2581620c0985c3d91d72eb4e3c4..a82098e1802d9f57af92524fcea805ac9c0386f4 100644
--- a/src/main/resources/web/js/views/topology.js
+++ b/src/main/resources/web/js/views/topology.js
@@ -25,8 +25,8 @@ window.TopologyView = Backbone.View.extend({
     render:function (eventName) {
         $(this.el).html(this.template());
         // code from D3 force-directed graph example since there's no other docs
-        var width = 940,
-          height = 940; // might as well make it square
+        var width = 900,
+          height = 900; // might as well make it square
         var color = d3.scale.category20();
         var force = d3.layout.force()
             .charge(-120)
diff --git a/src/main/resources/web/tpl/header.html b/src/main/resources/web/tpl/header.html
index ca69b473dfbb1a81328494c4ed46c77638da7937..ae4545bab75917dea2a1783b4f38146140c153a6 100644
--- a/src/main/resources/web/tpl/header.html
+++ b/src/main/resources/web/tpl/header.html
@@ -1,3 +1,4 @@
+
 <div class="navbar navbar-fixed-top">
     <div class="navbar-inner">
         <div class="container">
@@ -7,8 +8,7 @@
                 <span class="icon-bar"></span>
             </a>
             <!-- TODO we could use a better version of the OF logo without the drop shadow -->
-            <img src="img/openflow-logo-40px.png" style="float:left;">
-            <a class="brand" href="/">Floodlight</a>
+	    <img src="img/floodlight.png" style="float:left;">
 
             <div class="nav-collapse">
                 <ul class="nav">
@@ -25,4 +25,4 @@
             <!--/.nav-collapse -->
         </div>
     </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/src/main/resources/web/tpl/status.html b/src/main/resources/web/tpl/status.html
index a5da864c5bf57988c902fafccbfd9ceb91116710..86b77bf396f5a30cfb946bf7a6f13c06bd69395a 100644
--- a/src/main/resources/web/tpl/status.html
+++ b/src/main/resources/web/tpl/status.html
@@ -3,10 +3,11 @@
 <div class="page-header">
 	<h1>Controller Status</h1>
 </div>
-Hostname: <%= host %>:<%= ofport %><br>
-Healthy: <%= healthy %><br>
-Uptime: <%= uptime %><br>
-JVM memory bloat: <%= free %> free out of <%= total %><br>
-Modules loaded: <%= moduleText %>
+<table class="status-table">
+  <tr><td class="status-head">Hostname:<td><%= host %>:<%= ofport %></td></tr>
+  <tr><td class="status-head">Healthy:<td><%= healthy %></td>
+  <tr><td class="status-head">Uptime:<td><%= uptime %><td>
+  <tr><td class="status-head">JVM memory bloat:<td><%= free %> free out of <%= total %></td>
+  <Tr><td class="status-head">Modules loaded:<td><%= moduleText %></td>
 </div>
 </div>
diff --git a/src/main/resources/web/tpl/switch-list-item.html b/src/main/resources/web/tpl/switch-list-item.html
index 92e4d3f0280c11bc7fef005cb480fc247f032216..680d50934507900a90dc3a961bf65658fd1835c6 100644
--- a/src/main/resources/web/tpl/switch-list-item.html
+++ b/src/main/resources/web/tpl/switch-list-item.html
@@ -1 +1 @@
-		<td><a href="/switch/<%= id %>"><%= id %></a></td><td></td><td></td><td><%= packetCount %></td><td><%= byteCount %></td><td><%= flowCount %></td>
+		<td><a href="/switch/<%= id %>"><%= id %></a></td><td><%= packetCount %></td><td><%= byteCount %></td><td><%= flowCount %></td>
diff --git a/src/main/resources/web/tpl/switch-list.html b/src/main/resources/web/tpl/switch-list.html
index 755e738915f1c727f068264b0bd82ecc7df003d8..3a23f7e61776a2a9a9d750ceb28a1d2a66b9af98 100644
--- a/src/main/resources/web/tpl/switch-list.html
+++ b/src/main/resources/web/tpl/switch-list.html
@@ -4,7 +4,7 @@
 	<h1>Switches (<%= nswitches %>)</h1>
 </div>
 <table class="table striped-table switch-table">
-	<thead><tr><th>DPID</th><th>IP Address</th><th>Uptime</th><th>Packets</th><th>Bytes</th><th>Flows</th></tr></thead>
+	<thead><tr><th>DPID</th><th>Packets</th><th>Bytes</th><th>Flows</th></tr></thead>
 	<tbody>
 		<!-- switches will be inserted here by SwitchListView:render -->
 	</tbody>
diff --git a/src/test/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManagerTest.java b/src/test/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManagerTest.java
index fec23ee04999d32d44931fc4694bd2aa8bf2c1a3..d24df1962fcd2b5c1461ea8c9f5b3dd486aec8bd 100644
--- a/src/test/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManagerTest.java
+++ b/src/test/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManagerTest.java
@@ -38,6 +38,8 @@ import net.floodlightcontroller.linkdiscovery.ILinkDiscoveryService;
 import net.floodlightcontroller.linkdiscovery.LinkInfo;
 import net.floodlightcontroller.linkdiscovery.LinkTuple;
 import net.floodlightcontroller.linkdiscovery.internal.LinkDiscoveryManager;
+import net.floodlightcontroller.restserver.IRestApiService;
+import net.floodlightcontroller.restserver.RestApiServer;
 import net.floodlightcontroller.routing.IRoutingService;
 import net.floodlightcontroller.storage.IStorageSourceService;
 import net.floodlightcontroller.storage.memory.MemoryStorageSource;
@@ -87,15 +89,19 @@ public class LinkDiscoveryManagerTest extends FloodlightTestCase {
         TopologyManager routingEngine = new TopologyManager();
         ldm.linkDiscoveryAware = new ArrayList<ILinkDiscoveryListener>();
         MockThreadPoolService tp = new MockThreadPoolService();
+        RestApiServer restApi = new RestApiServer();
+        cntx.addService(IRestApiService.class, restApi);
         cntx.addService(IThreadPoolService.class, tp);
         cntx.addService(IRoutingService.class, routingEngine);
         cntx.addService(ILinkDiscoveryService.class, ldm);
         cntx.addService(ITopologyService.class, ldm);
         cntx.addService(IStorageSourceService.class, new MemoryStorageSource());
         cntx.addService(IFloodlightProviderService.class, getMockFloodlightProvider());
+        restApi.init(cntx);
         tp.init(cntx);
         routingEngine.init(cntx);
         ldm.init(cntx);
+        restApi.startUp(cntx);
         tp.startUp(cntx);
         routingEngine.startUp(cntx);
         ldm.startUp(cntx);