diff --git a/web/gui/logger.sh b/web/gui/logger.sh
new file mode 100755
index 0000000..13c5883
--- /dev/null
+++ b/web/gui/logger.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+host=${1:-localhost}
+
+### Set up debug log messages for classes we care about
+onos ${host} <<-EOF
+
+log:set DEBUG org.onosproject.ui.impl.topo.Topo2ViewMessageHandler
+log:set DEBUG org.onosproject.ui.impl.topo.Topo2Jsonifier
+log:set DEBUG org.onosproject.ui.impl.topo.Topo2TrafficMessageHandler
+log:set DEBUG org.onosproject.ui.impl.topo.Traffic2Monitor
+
+#log:set DEBUG org.onosproject.ui.impl.UiWebSocket
+#log:set DEBUG org.onosproject.ui.impl.UiTopoSession
+
+log:list
+
+EOF
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java
index 6b72e89..2fa3701 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java
@@ -23,6 +23,7 @@
 import org.onosproject.ui.RequestHandler;
 import org.onosproject.ui.UiConnection;
 import org.onosproject.ui.UiMessageHandler;
+import org.onosproject.ui.impl.TrafficMonitorBase.Mode;
 import org.onosproject.ui.impl.topo.util.ServicesBundle;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -43,7 +44,13 @@
     // === Outbound event identifiers
     private static final String HIGHLIGHTS = "topo2Highlights";
 
+    // field values
+    private static final String TRAFFIC_TYPE = "trafficType";
+    private static final String FLOW_STATS_BYTES = "flowStatsBytes";
+    private static final String PORT_STATS_BIT_SEC = "portStatsBitSec";
+    private static final String PORT_STATS_PKT_SEC = "portStatsPktSec";
 
+    // configuration parameters
     private static final long TRAFFIC_PERIOD = 5000;
 
 //    private UiTopoSession topoSession;
@@ -62,6 +69,8 @@
 
         services = new ServicesBundle(directory);
 
+        traffic = new Traffic2Monitor(TRAFFIC_PERIOD, services, this);
+
         // get the topo session from the UiWebSocket
 //        topoSession = ((UiWebSocket) connection).topoSession();
 //        t2json = new Topo2Jsonifier(directory, connection.userName());
@@ -79,25 +88,27 @@
     // ==================================================================
 
     private final class Topo2AllTraffic extends RequestHandler {
+
         private Topo2AllTraffic() {
             super(REQUEST_ALL_TRAFFIC);
         }
 
         @Override
         public void process(ObjectNode payload) {
-            String mode = string(payload, "trafficType");
-            log.debug("SHOW TRAFFIC: " + mode);
+            String mode = string(payload, TRAFFIC_TYPE);
+            log.debug("SHOW TRAFFIC: {}", mode);
+
             switch (mode) {
-                case "flowStatsBytes":
-                    // TODO: invoke traffic monitor for flow stats / bytes
+                case FLOW_STATS_BYTES:
+                    traffic.monitor(Mode.ALL_FLOW_TRAFFIC_BYTES);
                     break;
 
-                case "portStatsBitSec":
-                    // TODO: invoke traffic monitor for port stats / bps
+                case PORT_STATS_BIT_SEC:
+                    traffic.monitor(Mode.ALL_PORT_TRAFFIC_BIT_PS);
                     break;
 
-                case "portStatsPktSec":
-                    // TODO: invoke traffic monitor for port stats / pps
+                case PORT_STATS_PKT_SEC:
+                    traffic.monitor(Mode.ALL_PORT_TRAFFIC_PKT_PS);
                     break;
 
                 default:
@@ -115,7 +126,7 @@
         @Override
         public void process(ObjectNode payload) {
             log.debug("CANCEL TRAFFIC");
-            // TODO: tell traffic monitor to quit monitoring traffic
+            traffic.stopMonitoring();
         }
     }
 }
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Traffic2Monitor.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Traffic2Monitor.java
index 7aedc48..cb91e0d 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Traffic2Monitor.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Traffic2Monitor.java
@@ -31,48 +31,56 @@
     private static final Logger log =
             LoggerFactory.getLogger(Traffic2Monitor.class);
 
+    private final Topo2TrafficMessageHandler msgHandler;
+
     /**
      * Constructs a traffic monitor.
      *
-     * @param trafficPeriod traffic task period in ms
+     * @param trafficPeriod  traffic task period in ms
      * @param servicesBundle bundle of services
+     * @param msgHandler     our message handler
      */
-    public Traffic2Monitor(long trafficPeriod, ServicesBundle servicesBundle) {
+    public Traffic2Monitor(long trafficPeriod, ServicesBundle servicesBundle,
+                           Topo2TrafficMessageHandler msgHandler) {
         super(trafficPeriod, servicesBundle);
+        this.msgHandler = msgHandler;
     }
 
     @Override
     protected void sendAllFlowTraffic() {
+        log.debug("TOPO-2-TRAFFIC: sendAllFlowTraffic");
         // TODO
     }
 
     @Override
     protected void sendAllPortTrafficBits() {
+        log.debug("TOPO-2-TRAFFIC: sendAllPortTrafficBits");
         // TODO
     }
 
     @Override
     protected void sendAllPortTrafficPackets() {
+        log.debug("TOPO-2-TRAFFIC: sendAllPortTrafficPackets");
         // TODO
     }
 
     @Override
-    protected void sendDeviceLinkFlows() {
-        // NOTE: currently this monitor holds no state - nothing to do
-    }
-
-    @Override
-    protected void sendSelectedIntentTraffic() {
-        // NOTE: currently this monitor holds no state - nothing to do
-    }
-
-    @Override
     protected void sendClearHighlights() {
+        log.debug("TOPO-2-TRAFFIC: sendClearHighlights");
         // TODO
     }
 
+
+    // NOTE: currently this monitor holds no state - nothing to do for these...
+    @Override
+    protected void sendDeviceLinkFlows() {
+    }
+
+    @Override
+    protected void sendSelectedIntentTraffic() {
+    }
+
     @Override
     protected void clearSelection() {
-        // NOTE: currently this monitor holds no state - nothing to do
     }
 }
