diff --git a/web/gui/src/main/webapp/app/fw/svg/glyph.js b/web/gui/src/main/webapp/app/fw/svg/glyph.js
index c28edb0..726e808 100644
--- a/web/gui/src/main/webapp/app/fw/svg/glyph.js
+++ b/web/gui/src/main/webapp/app/fw/svg/glyph.js
@@ -477,7 +477,6 @@
     }
 
     function init() {
-        clear();
         registerGlyphs(birdData);
         registerGlyphSet(glyphDataSet);
         registerGlyphSet(badgeDataSet);
@@ -595,6 +594,10 @@
                 addGlyph: addGlyph
             };
         }]
-    );
+    )
+    .run(['$log', function ($log) {
+        $log.debug('Clearing glyph cache');
+        clear();
+    }]);
 
 }());
diff --git a/web/gui/src/main/webapp/app/view/topo/topo.js b/web/gui/src/main/webapp/app/view/topo/topo.js
index 5727a78..cac8f4c 100644
--- a/web/gui/src/main/webapp/app/view/topo/topo.js
+++ b/web/gui/src/main/webapp/app/view/topo/topo.js
@@ -30,7 +30,7 @@
 
     // references to injected services etc.
     var $scope, $log, $cookies, fs, ks, zs, gs, ms, sus, flash, wss, ps,
-        tes, tfs, tps, tis, tss, tls, tts, tos, fltr, ttbs, ttip;
+        tes, tfs, tps, tis, tss, tls, tts, tos, fltr, ttbs, ttip, tov;
 
     // DOM elements
     var ovtopo, svg, defs, zoomLayer, mapG, spriteG, forceG, noDevsLayer;
@@ -396,11 +396,12 @@
             'TopoInstService', 'TopoSelectService', 'TopoLinkService',
             'TopoTrafficService', 'TopoObliqueService', 'TopoFilterService',
             'TopoToolbarService', 'TopoSpriteService', 'TooltipService',
+            'TopoOverlayService',
 
         function (_$scope_, _$log_, $loc, $timeout, _$cookies_, _fs_, mast, _ks_,
                   _zs_, _gs_, _ms_, _sus_, _flash_, _wss_, _ps_, _tes_, _tfs_,
                   _tps_, _tis_, _tss_, _tls_, _tts_, _tos_, _fltr_, _ttbs_, tspr,
-                  _ttip_) {
+                  _ttip_, _tov_) {
             var projection,
                 dim,
                 uplink = {
@@ -438,6 +439,7 @@
             fltr = _fltr_;
             ttbs = _ttbs_;
             ttip = _ttip_;
+            tov = _tov_;
 
             $scope.notifyResize = function () {
                 svgResized(fs.windowSize(mast.mastHeight()));
@@ -496,6 +498,8 @@
             // temporary solution for persisting user settings
             restoreConfigFromPrefs();
 
+            $log.debug('registered overlays...', tov.list());
+
             $log.log('OvTopoCtrl has been created');
         }]);
 }());
diff --git a/web/gui/src/main/webapp/app/view/topo/topoOverlay.js b/web/gui/src/main/webapp/app/view/topo/topoOverlay.js
new file mode 100644
index 0000000..e1efe47
--- /dev/null
+++ b/web/gui/src/main/webapp/app/view/topo/topoOverlay.js
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2015 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.
+ *
+ */
+
+/*
+ ONOS GUI -- Topology Overlay Module.
+
+ Provides overlay capabilities, allowing ONOS apps to provide additional
+ custom data/behavior for the topology view.
+
+ */
+
+(function () {
+    'use strict';
+
+    // constants
+    var tos = 'TopoOverlayService: ';
+
+    // injected refs
+    var $log, fs, gs;
+
+    // internal state
+    var overlays = {};
+
+    function error(fn, msg) {
+        $log.error(tos + fn + '(): ' + msg);
+    }
+
+    function warn(fn, msg) {
+        $log.warn(tos + fn + '(): ' + msg);
+    }
+
+    function handleGlyph(o) {
+        var gdata = fs.isO(o.glyph),
+            oid,
+            data = {};
+
+        if (!gdata) {
+            o._glyphId = 'unknown';
+        } else {
+            if (gdata.id) {
+                o._glyphId = gdata.id;
+            } else if (gdata.vb && gdata.d) {
+                oid = o.overlayId;
+                data['_' + oid] = gdata.vb;
+                data[oid] = gdata.d;
+                gs.registerGlyphs(data);
+                o._glyphId = oid;
+                $log.debug('registered overlay glyph:', oid);
+            } else {
+                warn('registerGlyph', 'problem with glyph data');
+            }
+        }
+    }
+
+    function register(overlay) {
+        var r = 'register',
+            over = fs.isO(overlay),
+            id = over ? over.overlayId : '';
+
+        if (!id) {
+            return error(r, 'not a recognized overlay');
+        }
+        if (overlays[id]) {
+            return warn(r, 'already registered: "' + id + '"');
+        }
+        overlays[id] = overlay;
+        handleGlyph(overlay);
+        $log.debug(tos + 'registered overlay: ' + id, overlay);
+    }
+
+    // NOTE: unregister needs to be called if an app is ever
+    //       deactivated/uninstalled via the applications view
+    function unregister(overlay) {
+        var u = 'unregister',
+            over = fs.isO(overlay),
+            id = over ? over.overlayId : '';
+
+        if (!id) {
+            return error(u, 'not a recognized overlay');
+        }
+        if (!overlays[id]) {
+            return warn(u, 'not registered: "' + id + "'")
+        }
+        delete overlays[id];
+        $log.debug(tos + 'unregistered overlay: ' + id);
+        // TODO: rebuild the toolbar overlay radio button set
+    }
+
+    function list() {
+        return d3.map(overlays).keys();
+    }
+
+    function overlay(id) {
+        return overlays[id];
+    }
+
+    angular.module('ovTopo')
+    .factory('TopoOverlayService',
+        ['$log', 'FnService', 'GlyphService',
+
+        function (_$log_, _fs_, _gs_) {
+            $log = _$log_;
+            fs = _fs_;
+            gs = _gs_;
+
+            return {
+                register: register,
+                unregister: unregister,
+                list: list,
+                overlay: overlay
+            }
+        }]);
+
+}());
\ No newline at end of file
diff --git a/web/gui/src/main/webapp/app/view/topo/topoToolbar.js b/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
index 8fec8cb..342e108 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
@@ -23,7 +23,7 @@
     'use strict';
 
     // injected references
-    var $log, fs, tbs, ps, api;
+    var $log, fs, tbs, ps, tov, api;
 
     // internal state
     var toolbar, keyData, cachedState;
@@ -142,13 +142,50 @@
         addToggle('B');
         addToggle('S', true);
     }
+
     function addSecondRow() {
         //addToggle('X');
         addToggle('Z');
         addButton('N');
         addButton('L');
         addButton('R');
+        toolbar.addSeparator();
+        addButton('E');
     }
+
+    function setOverlay(overlayId) {
+        if (!overlayId) {
+            $log.debug('CLEAR overlay');
+        } else {
+            $log.debug('SET overlay', overlayId);
+        }
+    }
+
+    function addOverlays() {
+        toolbar.addSeparator();
+
+        // generate radio button set for overlays; start with 'none'
+        var rset = [{
+                gid: 'unknown',
+                tooltip: 'No Overlay',
+                cb: function () { setOverlay(); }
+            }];
+
+        tov.list().forEach(function (key) {
+            var ov = tov.overlay(key);
+            rset.push({
+                gid: ov._glyphId,
+                tooltip: (ov.tooltip || '(no tooltip)'),
+                cb: function () {
+                    setOverlay(ov.overlayId);
+                }
+            });
+        });
+
+        toolbar.addRadioSet('topo-overlays', rset);
+    }
+
+    // TODO: 3rd row needs to be swapped in/out based on selected overlay
     function addThirdRow() {
         addButton('V');
         addButton('leftArrow');
@@ -156,8 +193,6 @@
         addButton('W');
         addButton('A');
         addButton('F');
-        toolbar.addSeparator();
-        addButton('E');
     }
 
     function createToolbar() {
@@ -166,8 +201,10 @@
         addFirstRow();
         toolbar.addRow();
         addSecondRow();
+        addOverlays();
         toolbar.addRow();
         addThirdRow();
+
         if (cachedState.toolbar) {
             toolbar.show();
         } else {
@@ -199,12 +236,14 @@
     angular.module('ovTopo')
         .factory('TopoToolbarService',
         ['$log', 'FnService', 'ToolbarService', 'PrefsService',
+            'TopoOverlayService',
 
-        function (_$log_, _fs_, _tbs_, _ps_) {
+        function (_$log_, _fs_, _tbs_, _ps_, _tov_) {
             $log = _$log_;
             fs = _fs_;
             tbs = _tbs_;
             ps = _ps_;
+            tov = _tov_;
 
             return {
                 init: init,
diff --git a/web/gui/src/main/webapp/app/view/topo/topoTrafficNew.js b/web/gui/src/main/webapp/app/view/topo/topoTrafficNew.js
new file mode 100644
index 0000000..1da60c1
--- /dev/null
+++ b/web/gui/src/main/webapp/app/view/topo/topoTrafficNew.js
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2015 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.
+ *
+ */
+
+/*
+ ONOS GUI -- Topology Traffic Module.
+ Defines behavior for viewing different traffic modes.
+ Installed as a Topology Overlay.
+ */
+(function () {
+    'use strict';
+
+    // injected refs
+    var $log;
+
+    // traffic overlay definition
+    var overlay = {
+        overlayId: 'traffic',
+        glyph: { id: 'allTraffic' },
+        tooltip: 'Traffic Overlay',
+
+        activate: activateTraffic,
+        deactivate: deactivateTraffic
+    };
+
+    // === implementation of overlay API (essentially callbacks)
+    function activateTraffic() {
+        $log.debug("Topology traffic overlay ACTIVATED");
+    }
+
+    function deactivateTraffic() {
+        $log.debug("Topology traffic overlay DEACTIVATED");
+    }
+
+
+    // invoke code to register with the overlay service
+    angular.module('ovTopo')
+        .run(['$log', 'TopoOverlayService',
+
+        function (_$log_, tov) {
+            $log = _$log_;
+            tov.register(overlay);
+        }]);
+
+}());
