diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
index 6bab13e..5e36357 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
@@ -56,6 +56,7 @@
 import org.onosproject.ui.UiTopoOverlayFactory;
 import org.onosproject.ui.UiView;
 import org.onosproject.ui.UiViewHidden;
+import org.onosproject.ui.impl.topo.Topo2TrafficMessageHandler;
 import org.onosproject.ui.impl.topo.Topo2ViewMessageHandler;
 import org.onosproject.ui.impl.topo.Traffic2Overlay;
 import org.slf4j.Logger;
@@ -151,6 +152,7 @@
                         new UserPreferencesMessageHandler(),
                         new TopologyViewMessageHandler(),
                         new Topo2ViewMessageHandler(),
+                        new Topo2TrafficMessageHandler(),
                         new MapSelectorMessageHandler(),
                         new DeviceViewMessageHandler(),
                         new LinkViewMessageHandler(),
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
index c302c6b..2179f42 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
@@ -296,6 +296,10 @@
             overlayCache.destroy();
             overlayCache = null;
         }
+        if (overlay2Cache != null) {
+            overlay2Cache.destroy();
+            overlay2Cache = null;
+        }
     }
 
     // Sends initial information (username and cluster member information)
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
new file mode 100644
index 0000000..8a6ec8b
--- /dev/null
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java
@@ -0,0 +1,110 @@
+/*
+ * 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 com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.ImmutableSet;
+import org.onlab.osgi.ServiceDirectory;
+import org.onosproject.ui.RequestHandler;
+import org.onosproject.ui.UiConnection;
+import org.onosproject.ui.UiMessageHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collection;
+
+/**
+ * Server-side component to handle messages pertaining to topo-2 traffic.
+ */
+public class Topo2TrafficMessageHandler extends UiMessageHandler {
+
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    // === Inbound event identifiers
+    private static final String REQUEST_ALL_TRAFFIC = "topo2RequestAllTraffic";
+    private static final String CANCEL_TRAFFIC = "topo2CancelTraffic";
+
+    // === Outbound event identifiers
+    private static final String HIGHLIGHTS = "topo2Highlights";
+
+//    private UiTopoSession topoSession;
+//    private Topo2Jsonifier t2json;
+
+    @Override
+    public void init(UiConnection connection, ServiceDirectory directory) {
+        super.init(connection, directory);
+
+        // get the topo session from the UiWebSocket
+//        topoSession = ((UiWebSocket) connection).topoSession();
+//        t2json = new Topo2Jsonifier(directory, connection.userName());
+
+    }
+
+    @Override
+    protected Collection<RequestHandler> createRequestHandlers() {
+        return ImmutableSet.of(
+                new Topo2AllTraffic(),
+                new Topo2CancelTraffic()
+        );
+    }
+
+    // ==================================================================
+
+    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);
+            switch (mode) {
+                case "flowStatsBytes":
+                    // TODO: invoke traffic monitor for flow stats / bytes
+                    break;
+
+                case "portStatsBitSec":
+                    // TODO: invoke traffic monitor for port stats / bps
+                    break;
+
+                case "portStatsPktSec":
+                    // TODO: invoke traffic monitor for port stats / pps
+                    break;
+
+                default:
+                    log.warn("Unknown traffic monitor type: " + mode);
+                    break;
+            }
+        }
+    }
+
+    private final class Topo2CancelTraffic extends RequestHandler {
+        private Topo2CancelTraffic() {
+            super(CANCEL_TRAFFIC);
+        }
+
+        @Override
+        public void process(ObjectNode payload) {
+            log.debug("CANCEL TRAFFIC");
+            // TODO: tell traffic monitor to quit monitoring traffic
+        }
+    }
+}
+
+
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2.js b/web/gui/src/main/webapp/app/view/topo2/topo2.js
index c798927..cf13d11 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2.js
@@ -101,7 +101,7 @@
         'Topo2BreadcrumbService', 'Topo2KeyCommandService', 'Topo2MapService',
         'Topo2MapConfigService', 'Topo2ZoomService', 'Topo2SpriteLayerService',
         'Topo2SummaryPanelService', 'Topo2DeviceDetailsPanel', 'Topo2ToolbarService',
-        'Topo2NoDevicesConnectedService',
+        'Topo2NoDevicesConnectedService', 'Topo2OverlayService',
 
         function (
             _$scope_, _$log_, _$loc_,
@@ -111,7 +111,7 @@
             _t2es_, _t2fs_, _t2is_,
             _t2bcs_, _t2kcs_, _t2ms_,
             _t2mcs_, _t2zs_, t2sls,
-            summaryPanel, detailsPanel, t2tbs, t2ndcs
+            summaryPanel, detailsPanel, t2tbs, t2ndcs, t2os
         ) {
             var params = _$loc_.search(),
                 dim,
@@ -198,6 +198,9 @@
             // restoreConfigFromPrefs();
             // ttbs.setDefaultOverlay(prefsState.ovid);
 
+            // ++ TEMPORARY HARD-CODE TRAFFIC OVERLAY ++
+            t2os.setOverlay('traffic-2-overlay');
+
             summaryPanel.init(detailsPanel);
             detailsPanel.init(summaryPanel);
 
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2KeyCommands.js b/web/gui/src/main/webapp/app/view/topo2/topo2KeyCommands.js
index a9c9c1c..939b9d2 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2KeyCommands.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2KeyCommands.js
@@ -40,7 +40,7 @@
 
             _keyListener: t2tbs.keyListener.bind(t2tbs)
         }
-    };
+    }
 
     function init(_t2fs_, _t2tbs_) {
         t2fs = _t2fs_;
@@ -48,9 +48,26 @@
         bindCommands();
     }
 
-    function bindCommands() {
+    function bindCommands(additional) {
 
-        ks.keyBindings(actionMap());
+        var am = actionMap(),
+            add = fs.isO(additional);
+
+        if (add) {
+            _.each(add, function (value, key) {
+                // filter out meta properties (e.g. _keyOrder)
+                if (!(key.startsWith('_'))) {
+                    // don't allow re-definition of existing key bindings
+                    if (am[key]) {
+                        $log.warn('keybind: ' + key + ' already exists');
+                    } else {
+                        am[key] = [value.cb, value.tt];
+                    }
+                }
+            });
+        }
+
+        ks.keyBindings(am);
 
         ks.gestureNotes([
             ['click', 'Select the item and show details'],
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Overlay.js b/web/gui/src/main/webapp/app/view/topo2/topo2Overlay.js
index ce662fb..808ee69 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Overlay.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Overlay.js
@@ -22,7 +22,7 @@
     var t2os = 'Topo2OverlayService: ';
 
     // injected refs
-    var $log, $timeout, fs, gs, wss, api;
+    var $log, $timeout, fs, gs, wss, t2kcs, api;
 
     // internal state
     var overlays = {},
@@ -123,6 +123,16 @@
         api = _api_;
     }
 
+    function setOverlay(ovid) {
+        var ov = overlays[ovid];
+        if (!ov) {
+            $log.error('setOverlay: no such overlay ID: ' + ovid);
+        } else {
+            current = ov;
+            t2kcs.bindCommands(current.keyBindings);
+        }
+    }
+
     function showHighlights(data) {
         function doHighlight() {
             _showHighlights(data);
@@ -152,17 +162,20 @@
     angular.module('ovTopo2')
     .factory('Topo2OverlayService', [
         '$log', '$timeout', 'FnService', 'GlyphService', 'WebSocketService',
+        'Topo2KeyCommandService',
 
-        function (_$log_, _$timeout_, _fs_, _gs_, _wss_) {
+        function (_$log_, _$timeout_, _fs_, _gs_, _wss_, _t2kcs_) {
             $log = _$log_;
             $timeout = _$timeout_;
             fs = _fs_;
             gs = _gs_;
             wss = _wss_;
+            t2kcs = _t2kcs_;
 
             return {
                 register: register,
                 setApi: setApi,
+                setOverlay: setOverlay,
 
                 hooks: {
                     escape: escapeHook,
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Toolbar.js b/web/gui/src/main/webapp/app/view/topo2/topo2Toolbar.js
index 620d2c6..1edcdff 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Toolbar.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Toolbar.js
@@ -1,5 +1,22 @@
+/*
+ * 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.
+ *
+ */
+
 (function () {
-    'use-strict';
+    'use strict';
 
     var instance;
 
@@ -109,4 +126,4 @@
                 return instance || new Toolbar();
             }
         ]);
-})();
\ No newline at end of file
+}());
\ No newline at end of file
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Traffic.js b/web/gui/src/main/webapp/app/view/topo2/topo2Traffic.js
index 4515b8a..6ca4d5e 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Traffic.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Traffic.js
@@ -52,7 +52,7 @@
     }
 
     function showAllTraffic() {
-        $log.debug('Topo2Traffic: Show All Traffic');
+        $log.debug('Topo2Traffic: Show All Traffic:', allTrafficTypes[allIndex]);
 
         mode = 'allFlowPort';
         wss.sendEvent('topo2RequestAllTraffic', {
