diff --git a/web/gui/src/main/java/org/onlab/onos/gui/GuiWebSocketServlet.java b/web/gui/src/main/java/org/onlab/onos/gui/GuiWebSocketServlet.java
index aa00a863..37120d9 100644
--- a/web/gui/src/main/java/org/onlab/onos/gui/GuiWebSocketServlet.java
+++ b/web/gui/src/main/java/org/onlab/onos/gui/GuiWebSocketServlet.java
@@ -37,7 +37,7 @@
 
     private ServiceDirectory directory = new DefaultServiceDirectory();
 
-    private final Set<TopologyWebSocket> sockets = new HashSet<>();
+    private final Set<TopologyViewWebSocket> sockets = new HashSet<>();
     private final Timer timer = new Timer();
     private final TimerTask pruner = new Pruner();
 
@@ -49,7 +49,7 @@
 
     @Override
     public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
-        TopologyWebSocket socket = new TopologyWebSocket(directory);
+        TopologyViewWebSocket socket = new TopologyViewWebSocket(directory);
         synchronized (sockets) {
             sockets.add(socket);
         }
@@ -61,9 +61,9 @@
         @Override
         public void run() {
             synchronized (sockets) {
-                Iterator<TopologyWebSocket> it = sockets.iterator();
+                Iterator<TopologyViewWebSocket> it = sockets.iterator();
                 while (it.hasNext()) {
-                    TopologyWebSocket socket = it.next();
+                    TopologyViewWebSocket socket = it.next();
                     if (socket.isIdle()) {
                         it.remove();
                         socket.close();
diff --git a/web/gui/src/main/java/org/onlab/onos/gui/TopologyMessages.java b/web/gui/src/main/java/org/onlab/onos/gui/TopologyViewMessages.java
similarity index 96%
rename from web/gui/src/main/java/org/onlab/onos/gui/TopologyMessages.java
rename to web/gui/src/main/java/org/onlab/onos/gui/TopologyViewMessages.java
index cad7228..dcc2355 100644
--- a/web/gui/src/main/java/org/onlab/onos/gui/TopologyMessages.java
+++ b/web/gui/src/main/java/org/onlab/onos/gui/TopologyViewMessages.java
@@ -49,6 +49,8 @@
 import org.onlab.onos.net.link.LinkEvent;
 import org.onlab.onos.net.link.LinkService;
 import org.onlab.onos.net.provider.ProviderId;
+import org.onlab.onos.net.statistic.Load;
+import org.onlab.onos.net.statistic.StatisticService;
 import org.onlab.osgi.ServiceDirectory;
 import org.onlab.packet.IpAddress;
 import org.slf4j.Logger;
@@ -75,9 +77,9 @@
 /**
  * Facility for creating messages bound for the topology viewer.
  */
-public abstract class TopologyMessages {
+public abstract class TopologyViewMessages {
 
-    protected static final Logger log = LoggerFactory.getLogger(TopologyMessages.class);
+    protected static final Logger log = LoggerFactory.getLogger(TopologyViewMessages.class);
 
     private static final ProviderId PID = new ProviderId("core", "org.onlab.onos.core", true);
     private static final String COMPACT = "%s/%s-%s/%s";
@@ -89,7 +91,7 @@
     protected final HostService hostService;
     protected final MastershipService mastershipService;
     protected final IntentService intentService;
-//    protected final StatisticService statService;
+    protected final StatisticService statService;
 
     protected final ObjectMapper mapper = new ObjectMapper();
 
@@ -101,7 +103,7 @@
      *
      * @param directory service directory
      */
-    protected TopologyMessages(ServiceDirectory directory) {
+    protected TopologyViewMessages(ServiceDirectory directory) {
         this.directory = checkNotNull(directory, "Directory cannot be null");
         clusterService = directory.get(ClusterService.class);
         deviceService = directory.get(DeviceService.class);
@@ -109,7 +111,7 @@
         hostService = directory.get(HostService.class);
         mastershipService = directory.get(MastershipService.class);
         intentService = directory.get(IntentService.class);
-//        statService = directory.get(StatisticService.class);
+        statService = directory.get(StatisticService.class);
     }
 
     // Retrieves the payload from the specified event.
@@ -408,14 +410,15 @@
 
         if (links != null) {
             ArrayNode labels = mapper.createArrayNode();
-            boolean hasTraffic = true; // FIXME
+            boolean hasTraffic = false;
             for (Link link : links) {
                 linksNode.add(compactLinkString(link));
-//                Load load = statService.load(link);
+                Load load = statService.load(link);
                 String label = "";
-//                if (load.rate() > 0) {
-//                    label = load.toString();
-//                }
+                if (load.rate() > 0) {
+                    hasTraffic = true;
+                    label = load.toString();
+                }
                 labels.add(label);
             }
             pathNode.put("class", hasTraffic ? type + " animated" : type);
diff --git a/web/gui/src/main/java/org/onlab/onos/gui/TopologyWebSocket.java b/web/gui/src/main/java/org/onlab/onos/gui/TopologyViewWebSocket.java
similarity index 98%
rename from web/gui/src/main/java/org/onlab/onos/gui/TopologyWebSocket.java
rename to web/gui/src/main/java/org/onlab/onos/gui/TopologyViewWebSocket.java
index af28086..cc5756c 100644
--- a/web/gui/src/main/java/org/onlab/onos/gui/TopologyWebSocket.java
+++ b/web/gui/src/main/java/org/onlab/onos/gui/TopologyViewWebSocket.java
@@ -66,8 +66,8 @@
 /**
  * Web socket capable of interacting with the GUI topology view.
  */
-public class TopologyWebSocket
-        extends TopologyMessages
+public class TopologyViewWebSocket
+        extends TopologyViewMessages
         implements WebSocket.OnTextMessage, WebSocket.OnControl {
 
     private static final long MAX_AGE_MS = 15000;
@@ -78,7 +78,7 @@
 
     private static final String APP_ID = "org.onlab.onos.gui";
 
-    private static final long TRAFFIC_FREQUENCY_SEC = 5000;
+    private static final long TRAFFIC_FREQUENCY_SEC = 1000;
 
     private final ApplicationId appId;
 
@@ -104,7 +104,7 @@
      *
      * @param directory service directory
      */
-    public TopologyWebSocket(ServiceDirectory directory) {
+    public TopologyViewWebSocket(ServiceDirectory directory) {
         super(directory);
         appId = directory.get(CoreService.class).registerApplication(APP_ID);
     }
