diff --git a/apps/onlp-demo/src/main/resources/app/view/odTopov/odTopovOverlay.js b/apps/onlp-demo/src/main/resources/app/view/odTopov/odTopovOverlay.js
index 682ea17..a8da7af 100644
--- a/apps/onlp-demo/src/main/resources/app/view/odTopov/odTopovOverlay.js
+++ b/apps/onlp-demo/src/main/resources/app/view/odTopov/odTopovOverlay.js
@@ -7,7 +7,12 @@
     'use strict';
 
     // injected refs
-    var $log, tov, ns, lts, sel;
+    var $log, tov, ns, tts, lts, sel;
+
+    // function to be replaced by the localization bundle function
+    var topoLion = function (x) {
+        return '#ttrafov#' + x + '#';
+    };
 
     // our overlay definition
     var overlay = {
@@ -32,27 +37,90 @@
                     $log.debug('ONLP action invoked on selection:', sel);
                     ns.navTo('onlp', { devId: sel.id });
                 }
-            }
+            },
+            showDeviceFlows: {
+                gid: 'm_flows',
+                tt: function () { return topoLion('tr_btn_show_device_flows'); },
+                cb: function (data) { tts.showDeviceLinkFlows(); },
+            },
+        },
+
+        // key bindings for traffic overlay toolbar buttons
+        // NOTE: fully qual. button ID is derived from overlay-id and key-name
+        keyBindings: {
+            0: {
+                cb: function () { tts.cancelTraffic(true); },
+                tt: function () { return topoLion('tr_btn_cancel_monitoring'); },
+                gid: 'm_xMark',
+            },
+
+            A: {
+                cb: function () { tts.showAllTraffic(); },
+                tt: function () { return topoLion('tr_btn_monitor_all'); },
+                gid: 'm_allTraffic',
+            },
+            F: {
+                cb: function () { tts.showDeviceLinkFlows(); },
+                tt: function () { return topoLion('tr_btn_show_dev_link_flows'); },
+                gid: 'm_flows',
+            },
+
+            _keyOrder: [
+                '0', 'A', 'F',
+            ],
         },
 
         hooks: {
+            // hook for handling escape key
+            escape: function () {
+                // Must return true to consume ESC, false otherwise.
+                return tts.cancelTraffic(true);
+            },
+
+            // hooks for when the selection changes...
+            empty: function () {
+                tts.cancelTraffic();
+            },
             // hooks for when the selection changes...
             single: function (data) {
                 $log.debug('selection data:', data);
                 sel = data;
                 tov.addDetailButton('showOnlpView');
-            }
-        }
+                tov.addDetailButton('showDeviceFlows');
+                tts.requestTrafficForMode();
+            },
+            multi: function (selectOrder) {
+                tts.requestTrafficForMode();
+                tov.addDetailButton('showRelatedTraffic');
+            },
+
+            // mouse hooks
+            mouseover: function (m) {
+                // m has id, class, and type properties
+                tts.requestTrafficForMode(true);
+            },
+            mouseout: function () {
+                tts.requestTrafficForMode(true);
+            },
+
+            // localization bundle injection hook
+            injectLion: function (bundle) {
+                topoLion = bundle;
+                tts.setLionBundle(bundle);
+            },
+        },
     };
 
     // invoke code to register with the overlay service
     angular.module('ovOdTopov')
-        .run(['$log', 'TopoOverlayService', 'NavService', 'OnlpDemoTopovService',
+        .run(['$log', 'TopoOverlayService', 'NavService', 'TopoTrafficService',
+              'OnlpDemoTopovService',
 
-            function (_$log_, _tov_, _ns_, _lts_) {
+            function (_$log_, _tov_, _ns_, _tts_, _lts_) {
                 $log = _$log_;
                 tov = _tov_;
                 ns = _ns_;
+                tts = _tts_;
                 lts = _lts_;
                 tov.register(overlay);
             }]);
