diff --git a/web/gui/src/main/webapp/app/index.html b/web/gui/src/main/webapp/app/index.html
index 3b05d23..f6e2be7 100644
--- a/web/gui/src/main/webapp/app/index.html
+++ b/web/gui/src/main/webapp/app/index.html
@@ -81,6 +81,7 @@
     <script src="view/sample/sample.js"></script>
     <script src="view/topo/topo.js"></script>
     <script src="view/topo/topoEvent.js"></script>
+    <script src="view/topo/topoFilter.js"></script>
     <script src="view/topo/topoForce.js"></script>
     <script src="view/topo/topoInst.js"></script>
     <script src="view/topo/topoModel.js"></script>
diff --git a/web/gui/src/main/webapp/app/view/topo/topoFilter.js b/web/gui/src/main/webapp/app/view/topo/topoFilter.js
new file mode 100644
index 0000000..eba31ae
--- /dev/null
+++ b/web/gui/src/main/webapp/app/view/topo/topoFilter.js
@@ -0,0 +1,66 @@
+/*
+ * 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 layer filtering Module.
+ Provides functionality to visually differentiate between the packet and
+ optical layers of the topology.
+ */
+
+(function () {
+    'use strict';
+
+    // injected refs
+    var $log, fs, flash, tps, tts;
+
+    // api to topoForce
+    var api;
+    /*
+     node()                         // get ref to D3 selection of nodes
+     */
+
+    // internal state
+
+
+    // === -----------------------------------------------------
+    // === MODULE DEFINITION ===
+
+    angular.module('ovTopo')
+        .factory('TopoFilterService',
+        ['$log', 'FnService',
+            'FlashService',
+            'TopoPanelService',
+            'TopoTrafficService',
+
+            function (_$log_, _fs_, _flash_, _tps_, _tts_) {
+                $log = _$log_;
+                fs = _fs_;
+                flash = _flash_;
+                tps = _tps_;
+                tts = _tts_;
+
+                function initFilter(_api_) {
+                    api = _api_;
+                }
+
+                function destroyFilter() { }
+
+                return {
+                    initFilter: initFilter,
+                    destroyFilter: destroyFilter
+                };
+            }]);
+}());
diff --git a/web/gui/src/main/webapp/tests/app/fw/svg/svgUtil-spec.js b/web/gui/src/main/webapp/tests/app/fw/svg/svgUtil-spec.js
index 6fb1a60..e2b4868 100644
--- a/web/gui/src/main/webapp/tests/app/fw/svg/svgUtil-spec.js
+++ b/web/gui/src/main/webapp/tests/app/fw/svg/svgUtil-spec.js
@@ -40,14 +40,15 @@
 
     it('should define api functions', function () {
         expect(fs.areFunctions(sus, [
-            'createDragBehavior', 'loadGlow', 'cat7', 'translate', 'stripPx',
-            'safeId', 'visible'
+            'createDragBehavior', 'loadGlowDefs', 'cat7',
+            'translate',
+            'stripPx', 'safeId', 'visible'
         ])).toBeTruthy();
     });
 
 
     // TODO: add unit tests for drag behavior
-    // TODO: add unit tests for loadGlow
+    // TODO: add unit tests for loadGlowDefs
 
     // === cat7
 
diff --git a/web/gui/src/main/webapp/tests/app/view/topo/topoFilter-spec.js b/web/gui/src/main/webapp/tests/app/view/topo/topoFilter-spec.js
new file mode 100644
index 0000000..983469c
--- /dev/null
+++ b/web/gui/src/main/webapp/tests/app/view/topo/topoFilter-spec.js
@@ -0,0 +1,42 @@
+/*
+ * 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 -- Topo View -- Topo Filter Service - Unit Tests
+ */
+describe('factory: view/topo/topoFilter.js', function() {
+    var $log, fs, filter;
+
+    beforeEach(module('ovTopo', 'onosUtil', 'onosLayer'));
+
+    beforeEach(inject(function (_$log_, FnService, TopoFilterService) {
+        $log = _$log_;
+        fs = FnService;
+        filter = TopoFilterService;
+    }));
+
+    it('should define TopoFilterService', function () {
+        expect(filter).toBeDefined();
+    });
+
+    it('should define api functions', function () {
+        expect(fs.areFunctions(filter, [
+            'initFilter', 'destroyFilter'
+        ])).toBeTruthy();
+    });
+
+    // TODO: more tests...
+});
diff --git a/web/gui/src/main/webapp/tests/app/view/topo/topoForce-spec.js b/web/gui/src/main/webapp/tests/app/view/topo/topoForce-spec.js
index 546f2f9..17a0d09 100644
--- a/web/gui/src/main/webapp/tests/app/view/topo/topoForce-spec.js
+++ b/web/gui/src/main/webapp/tests/app/view/topo/topoForce-spec.js
@@ -37,7 +37,7 @@
             'initForce', 'newDim', 'destroyForce',
 
             'updateDeviceColors', 'toggleHosts', 'toggleOffline',
-            'cycleDeviceLabels', 'unpin',
+            'cycleDeviceLabels', 'unpin', 'showMastership',
 
             'addDevice', 'updateDevice', 'removeDevice',
             'addHost', 'updateHost', 'removeHost',
diff --git a/web/gui/src/main/webapp/tests/app/view/topo/topoInst-spec.js b/web/gui/src/main/webapp/tests/app/view/topo/topoInst-spec.js
index 8eefc4a..a6a1265 100644
--- a/web/gui/src/main/webapp/tests/app/view/topo/topoInst-spec.js
+++ b/web/gui/src/main/webapp/tests/app/view/topo/topoInst-spec.js
@@ -36,7 +36,8 @@
         expect(fs.areFunctions(tis, [
             'initInst', 'destroyInst',
             'addInstance', 'updateInstance', 'removeInstance',
-            'isVisible', 'show', 'hide', 'toggle'
+            'cancelAffinity',
+            'isVisible', 'show', 'hide', 'toggle', 'showMaster'
         ])).toBeTruthy();
     });
 
