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 8a6ec8b..6b72e89 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.topo.util.ServicesBundle;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -42,13 +43,25 @@
     // === Outbound event identifiers
     private static final String HIGHLIGHTS = "topo2Highlights";
 
+
+    private static final long TRAFFIC_PERIOD = 5000;
+
 //    private UiTopoSession topoSession;
 //    private Topo2Jsonifier t2json;
 
+    protected ServicesBundle services;
+    private String version;
+
+
+    private Traffic2Monitor traffic;
+
+
     @Override
     public void init(UiConnection connection, ServiceDirectory directory) {
         super.init(connection, directory);
 
+        services = new ServicesBundle(directory);
+
         // get the topo session from the UiWebSocket
 //        topoSession = ((UiWebSocket) connection).topoSession();
 //        t2json = new Topo2Jsonifier(directory, connection.userName());
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
new file mode 100644
index 0000000..7aedc48
--- /dev/null
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Traffic2Monitor.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.onosproject.ui.impl.topo;
+
+import org.onosproject.ui.impl.TrafficMonitorBase;
+import org.onosproject.ui.impl.topo.util.ServicesBundle;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Encapsulates the behavior of monitoring specific traffic patterns in the
+ * Topology-2 view.
+ */
+public class Traffic2Monitor extends TrafficMonitorBase {
+
+    private static final Logger log =
+            LoggerFactory.getLogger(Traffic2Monitor.class);
+
+    /**
+     * Constructs a traffic monitor.
+     *
+     * @param trafficPeriod traffic task period in ms
+     * @param servicesBundle bundle of services
+     */
+    public Traffic2Monitor(long trafficPeriod, ServicesBundle servicesBundle) {
+        super(trafficPeriod, servicesBundle);
+    }
+
+    @Override
+    protected void sendAllFlowTraffic() {
+        // TODO
+    }
+
+    @Override
+    protected void sendAllPortTrafficBits() {
+        // TODO
+    }
+
+    @Override
+    protected void 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() {
+        // TODO
+    }
+
+    @Override
+    protected void clearSelection() {
+        // NOTE: currently this monitor holds no state - nothing to do
+    }
+}
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/ServicesBundle.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/ServicesBundle.java
index 13bf1c2..aa20990 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/ServicesBundle.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/ServicesBundle.java
@@ -16,63 +16,83 @@
 
 package org.onosproject.ui.impl.topo.util;
 
+import org.onlab.osgi.ServiceDirectory;
+import org.onosproject.cluster.ClusterService;
 import org.onosproject.incubator.net.PortStatisticsService;
+import org.onosproject.incubator.net.tunnel.TunnelService;
+import org.onosproject.mastership.MastershipAdminService;
+import org.onosproject.mastership.MastershipService;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.flow.FlowRuleService;
 import org.onosproject.net.host.HostService;
 import org.onosproject.net.intent.IntentService;
 import org.onosproject.net.link.LinkService;
 import org.onosproject.net.statistic.StatisticService;
+import org.onosproject.net.topology.TopologyService;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
- * A bundle of services that the topology view requires to get its job done.
+ * A bundle of services that the topology view(s) require to get the job done.
  */
 public class ServicesBundle {
 
-    private final IntentService intentService;
-    private final DeviceService deviceService;
-    private final HostService hostService;
-    private final LinkService linkService;
-    private final FlowRuleService flowService;
-    private final StatisticService flowStatsService;
-    private final PortStatisticsService portStatsService;
+    private ClusterService clusterService;
+
+    private TopologyService topologyService;
+    private DeviceService deviceService;
+    private HostService hostService;
+    private LinkService linkService;
+    private TunnelService tunnelService;
+
+    private MastershipService mastershipService;
+    private MastershipAdminService mastershipAdminService;
+    private IntentService intentService;
+    private FlowRuleService flowService;
+    private StatisticService flowStatsService;
+    private PortStatisticsService portStatsService;
+
 
     /**
-     * Creates the services bundle.
+     * Creates the services bundle, from the given directly.
      *
-     * @param intentService     intent service reference
-     * @param deviceService     device service reference
-     * @param hostService       host service reference
-     * @param linkService       link service reference
-     * @param flowService       flow service reference
-     * @param flowStatsService  flow statistics service reference
-     * @param portStatsService  port statistics service reference
+     * @param directory service directory
      */
-    public ServicesBundle(IntentService intentService,
-                          DeviceService deviceService,
-                          HostService hostService,
-                          LinkService linkService,
-                          FlowRuleService flowService,
-                          StatisticService flowStatsService,
-                          PortStatisticsService portStatsService) {
-        this.intentService = checkNotNull(intentService);
-        this.deviceService = checkNotNull(deviceService);
-        this.hostService = checkNotNull(hostService);
-        this.linkService = checkNotNull(linkService);
-        this.flowService = checkNotNull(flowService);
-        this.flowStatsService = checkNotNull(flowStatsService);
-        this.portStatsService = checkNotNull(portStatsService);
+    public ServicesBundle(ServiceDirectory directory) {
+        checkNotNull(directory, "Directory cannot be null");
+
+        clusterService = directory.get(ClusterService.class);
+
+        topologyService = directory.get(TopologyService.class);
+        deviceService = directory.get(DeviceService.class);
+        hostService = directory.get(HostService.class);
+        linkService = directory.get(LinkService.class);
+        tunnelService = directory.get(TunnelService.class);
+
+        mastershipService = directory.get(MastershipService.class);
+        mastershipAdminService = directory.get(MastershipAdminService.class);
+        intentService = directory.get(IntentService.class);
+        flowService = directory.get(FlowRuleService.class);
+        flowStatsService = directory.get(StatisticService.class);
+        portStatsService = directory.get(PortStatisticsService.class);
     }
 
     /**
-     * Returns a reference to the intent service.
+     * Returns a reference to the cluster service.
      *
-     * @return intent service reference
+     * @return cluster service reference
      */
-    public IntentService intentService() {
-        return intentService;
+    public ClusterService cluster() {
+        return clusterService;
+    }
+
+    /**
+     * Returns a reference to the topology service.
+     *
+     * @return topology service reference
+     */
+    public TopologyService topology() {
+        return topologyService;
     }
 
     /**
@@ -80,7 +100,7 @@
      *
      * @return device service reference
      */
-    public DeviceService deviceService() {
+    public DeviceService device() {
         return deviceService;
     }
 
@@ -89,7 +109,7 @@
      *
      * @return host service reference
      */
-    public HostService hostService() {
+    public HostService host() {
         return hostService;
     }
 
@@ -98,16 +118,52 @@
      *
      * @return link service reference
      */
-    public LinkService linkService() {
+    public LinkService link() {
         return linkService;
     }
 
     /**
+     * Returns a reference to the tunnel service.
+     *
+     * @return tunnel service reference
+     */
+    public TunnelService tunnel() {
+        return tunnelService;
+    }
+
+    /**
+     * Returns a reference to the mastership service.
+     *
+     * @return mastership service reference
+     */
+    public MastershipService mastership() {
+        return mastershipService;
+    }
+
+    /**
+     * Returns a reference to the mastership admin service.
+     *
+     * @return mastership admin service reference
+     */
+    public MastershipAdminService mastershipAdmin() {
+        return mastershipAdminService;
+    }
+
+    /**
+     * Returns a reference to the intent service.
+     *
+     * @return intent service reference
+     */
+    public IntentService intent() {
+        return intentService;
+    }
+
+    /**
      * Returns a reference to the flow rule service.
      *
      * @return flow service reference
      */
-    public FlowRuleService flowService() {
+    public FlowRuleService flow() {
         return flowService;
     }
 
@@ -116,7 +172,7 @@
      *
      * @return flow statistics service reference
      */
-    public StatisticService flowStatsService() {
+    public StatisticService flowStats() {
         return flowStatsService;
     }
 
@@ -125,7 +181,7 @@
      *
      * @return port statistics service reference
      */
-    public PortStatisticsService portStatsService() {
+    public PortStatisticsService portStats() {
         return portStatsService;
     }
 }
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/TopoIntentFilter.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/TopoIntentFilter.java
index e43fbf2..1dbe8f3 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/TopoIntentFilter.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/TopoIntentFilter.java
@@ -21,9 +21,7 @@
 import org.onosproject.net.Host;
 import org.onosproject.net.HostId;
 import org.onosproject.net.Link;
-import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.host.HostService;
 import org.onosproject.net.intent.FlowObjectiveIntent;
 import org.onosproject.net.intent.FlowRuleIntent;
 import org.onosproject.net.intent.HostToHostIntent;
@@ -52,8 +50,6 @@
 public class TopoIntentFilter {
 
     private final IntentService intentService;
-    private final DeviceService deviceService;
-    private final HostService hostService;
     private final LinkService linkService;
 
     /**
@@ -62,19 +58,17 @@
      * @param services service references bundle
      */
     public TopoIntentFilter(ServicesBundle services) {
-        this.intentService = services.intentService();
-        this.deviceService = services.deviceService();
-        this.hostService = services.hostService();
-        this.linkService = services.linkService();
+        this.intentService = services.intent();
+        this.linkService = services.link();
     }
 
     /**
      * Finds all path (host-to-host or point-to-point) intents that pertain
      * to the given hosts and devices.
      *
-     * @param hosts         set of hosts to query by
-     * @param devices       set of devices to query by
-     * @param links       set of links to query by
+     * @param hosts   set of hosts to query by
+     * @param devices set of devices to query by
+     * @param links   set of links to query by
      * @return set of intents that 'match' all hosts, devices and links given
      */
     public List<Intent> findPathIntents(Set<Host> hosts,
