diff --git a/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java b/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
index d9edbd7..653b0f9 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
@@ -28,6 +28,7 @@
 public final class TopoJson {
     // package-private for unit test access
     static final String SHOW_HIGHLIGHTS = "showHighlights";
+    static final String TOPO2_HIGHLIGHTS = "topo2Highlights";
 
     static final String DEVICES = "devices";
     static final String HOSTS = "hosts";
@@ -76,6 +77,17 @@
     }
 
     /**
+     * Returns a formatted message ready to send to the topology-2 view
+     * to render highlights.
+     *
+     * @param highlights highlights model to transform
+     * @return fully formatted "show highlights" message
+     */
+    public static ObjectNode topo2HighlightsMessage(Highlights highlights) {
+        return envelope(TOPO2_HIGHLIGHTS, json(highlights));
+    }
+
+    /**
      * Transforms the given highlights model into a JSON message payload.
      *
      * @param highlights the model to transform
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 182fbfb..ce7175b 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
@@ -25,11 +25,14 @@
 import org.onosproject.ui.UiMessageHandler;
 import org.onosproject.ui.impl.TrafficMonitorBase.Mode;
 import org.onosproject.ui.impl.topo.util.ServicesBundle;
+import org.onosproject.ui.topo.Highlights;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.Collection;
 
+import static org.onosproject.ui.topo.TopoJson.topo2HighlightsMessage;
+
 /**
  * Server-side component to handle messages pertaining to topo-2 traffic.
  */
@@ -92,6 +95,15 @@
         traffic.stopMonitoring();
     }
 
+    /**
+     * Sends a highlights message back to the client.
+     *
+     * @param highlights the highlights for transmission
+     */
+    void sendHighlights(Highlights highlights) {
+        sendMessage(topo2HighlightsMessage(highlights));
+    }
+
     // ==================================================================
 
     private final class Topo2AllTraffic extends RequestHandler {
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 0653832..8f056fa 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
@@ -54,33 +54,25 @@
     @Override
     protected void sendAllFlowTraffic() {
         log.debug("TOPO-2-TRAFFIC: sendAllFlowTraffic");
-        Highlights h = trafficSummary(TrafficLink.StatsType.FLOW_STATS);
-
-        // TODO
+        msgHandler.sendHighlights(trafficSummary(TrafficLink.StatsType.FLOW_STATS));
     }
 
     @Override
     protected void sendAllPortTrafficBits() {
         log.debug("TOPO-2-TRAFFIC: sendAllPortTrafficBits");
-        Highlights h = trafficSummary(TrafficLink.StatsType.PORT_STATS);
-
-        // TODO
+        msgHandler.sendHighlights(trafficSummary(TrafficLink.StatsType.PORT_STATS));
     }
 
     @Override
     protected void sendAllPortTrafficPackets() {
         log.debug("TOPO-2-TRAFFIC: sendAllPortTrafficPackets");
-        Highlights h = trafficSummary(TrafficLink.StatsType.PORT_PACKET_STATS);
-
-        // TODO
+        msgHandler.sendHighlights(trafficSummary(TrafficLink.StatsType.PORT_PACKET_STATS));
     }
 
     @Override
     protected void sendClearHighlights() {
         log.debug("TOPO-2-TRAFFIC: sendClearHighlights");
-        Highlights h = new Highlights();
-
-        // TODO
+        msgHandler.sendHighlights(new Highlights());
     }
 
 
