diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Device.js b/web/gui/src/main/webapp/app/view/topo2/topo2Device.js
index fadcd93..6eb5704 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Device.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Device.js
@@ -81,6 +81,12 @@
                         detailsPanel.updateDetails(id, nodeType);
                         detailsPanel.show();
                     },
+                    displayMastership: function () {
+                        var id = this.mastershipService.mastership(),
+                            suppress = id ? this.get('master') !== id : false;
+
+                        this.set({ mastership: suppress });
+                    },
                     onExit: function () {
                         var node = this.el;
                         node.select('use')
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Force.js b/web/gui/src/main/webapp/app/view/topo2/topo2Force.js
index cfc3b71..b18ff32 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Force.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Force.js
@@ -25,7 +25,7 @@
     // injected refs
     var $log, $loc, wss;
 
-    var t2is, t2rs, t2ls, t2vs, t2bcs, t2ss, t2bgs, t2tbs;
+    var t2is, t2rs, t2ls, t2vs, t2bcs, t2ss, t2bgs, t2tbs, t2mss;
     var svg, forceG, uplink, dim, opts, zoomer;
 
     // D3 Selections
@@ -49,6 +49,7 @@
         t2ss.init(svg, zoomer);
         t2ss.region = t2rs;
         t2rs.layout = t2ls;
+        t2mss.region = t2rs;
         t2tbs.init();
         navToBookmarkedRegion($loc.search().regionId);
     }
@@ -120,25 +121,6 @@
 
     // ========================== Main Service Definition
 
-    function showMastershipFor(id) {
-        suppressLayers(true);
-        node.each(function (n) {
-            if (n.master === id) {
-                n.el.classed('suppressedmax', false);
-            }
-        });
-    }
-
-    function supAmt(less) {
-        return less ? 'suppressed' : 'suppressedmax';
-    }
-
-    function suppressLayers(b, less) {
-        var cls = supAmt(less);
-        node.classed(cls, b);
-        // link.classed(cls, b);
-    }
-
     function newDim(_dim_) {
         dim = _dim_;
         t2vs.newDim(dim);
@@ -189,9 +171,9 @@
         '$log', '$location', 'WebSocketService', 'Topo2InstanceService',
         'Topo2RegionService', 'Topo2LayoutService', 'Topo2ViewService',
         'Topo2BreadcrumbService', 'Topo2ZoomService', 'Topo2SelectService',
-        'Topo2BackgroundService', 'Topo2ToolbarService',
+        'Topo2BackgroundService', 'Topo2ToolbarService', 'Topo2MastershipService',
         function (_$log_, _$loc_, _wss_, _t2is_, _t2rs_, _t2ls_,
-            _t2vs_, _t2bcs_, zoomService, _t2ss_, _t2bgs_, _t2tbs_) {
+            _t2vs_, _t2bcs_, zoomService, _t2ss_, _t2bgs_, _t2tbs_, _t2mss_) {
 
             $log = _$log_;
             $loc = _$loc_;
@@ -204,6 +186,7 @@
             t2ss = _t2ss_;
             t2bgs = _t2bgs_;
             t2tbs = _t2tbs_;
+            t2mss = _t2mss_;
 
             var onZoom = function () {
                 if (!t2rs.isLoadComplete()) {
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Instance.js b/web/gui/src/main/webapp/app/view/topo2/topo2Instance.js
index 8a3cf20..044e3d6 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Instance.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Instance.js
@@ -2,7 +2,7 @@
     'use strict';
 
     // injected refs
-    var $log, ps, sus, gs, flash, ts;
+    var $log, ps, sus, gs, flash, ts, t2mss;
 
     // api from topo
     var api;
@@ -61,15 +61,14 @@
             .classed('affinity', false);
         el.classed('affinity', true);
 
-        // suppress all elements except nodes whose master is this instance
-        api.showMastership(d.id);
+        t2mss.setMastership(d.id);
     }
 
     function cancelAffinity() {
         d3.selectAll('.onosInst')
             .classed('mastership affinity', false);
 
-        api.showMastership(null);
+        t2mss.setMastership(null);
     }
 
     function attachUiBadge(svg) {
@@ -271,15 +270,16 @@
     angular.module('ovTopo2')
         .factory('Topo2InstanceService', [
             '$log', 'PanelService', 'SvgUtilService', 'GlyphService',
-            'FlashService', 'ThemeService',
+            'FlashService', 'ThemeService', 'Topo2MastershipService',
 
-            function (_$log_, _ps_, _sus_, _gs_, _flash_, _ts_) {
+            function (_$log_, _ps_, _sus_, _gs_, _flash_, _ts_, _t2mss_) {
                 $log = _$log_;
                 ps = _ps_;
                 sus = _sus_;
                 gs = _gs_;
                 flash = _flash_;
                 ts = _ts_;
+                t2mss = _t2mss_;
 
                 return {
                     initInst: initInst,
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Link.js b/web/gui/src/main/webapp/app/view/topo2/topo2Link.js
index b4b7d95..f19f2df 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Link.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Link.js
@@ -22,7 +22,7 @@
 (function () {
     'use strict';
 
-    var $log, Collection, Model, ts, sus, t2zs, t2vs, t2lps, fn, ps;
+    var $log, Collection, Model, ts, sus, t2zs, t2vs, t2lps, fn, ps, t2mss;
 
     var linkLabelOffset = '0.35em';
 
@@ -134,7 +134,8 @@
                     this.get('type'),
                     {
                         enhanced: this.get('enhanced'),
-                        selected: this.get('selected')
+                        selected: this.get('selected'),
+                        suppressedmax: this.get('mastership')
                     }
                 );
             },
@@ -346,6 +347,9 @@
                 var visible = ps.getPrefs('topo2_prefs')['hosts'];
                 this.el.style('visibility', visible ? 'visible' : 'hidden');
             },
+            displayMastership: function () {
+                this.set({ mastership: t2mss.mastership() !== null});
+            },
             remove: function () {
 
                 var width = linkScale(widthRatio) / t2zs.scale();
@@ -376,8 +380,9 @@
         '$log', 'Topo2Collection', 'Topo2Model',
         'ThemeService', 'SvgUtilService', 'Topo2ZoomService',
         'Topo2ViewService', 'Topo2LinkPanelService', 'FnService', 'PrefsService',
+        'Topo2MastershipService',
         function (_$log_, _c_, _Model_, _ts_, _sus_,
-            _t2zs_, _t2vs_, _t2lps_, _fn_, _ps_) {
+            _t2zs_, _t2vs_, _t2lps_, _fn_, _ps_, _t2mss_) {
 
             $log = _$log_;
             ts = _ts_;
@@ -389,6 +394,7 @@
             t2lps = _t2lps_;
             fn = _fn_;
             ps = _ps_;
+            t2mss = _t2mss_;
 
             return {
                 createLinkCollection: createLinkCollection
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Mastership.js b/web/gui/src/main/webapp/app/view/topo2/topo2Mastership.js
new file mode 100644
index 0000000..7b1735f
--- /dev/null
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Mastership.js
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ */
+
+/*
+ ONOS GUI -- Topology Mastership controller.
+ Controller that handles the state of the selected mastership
+ */
+
+(function () {
+
+    var instance;
+
+    angular.module('ovTopo2')
+        .factory('Topo2MastershipService', [
+
+            function () {
+
+                var MastershipController = function () {
+                    instance = this;
+                    this.region = null;
+                    this.currentMastership = null;
+                };
+
+                MastershipController.prototype = {
+                    displayMastership: function () {
+                        var nodes = this.region.regionNodes(),
+                            links = this.region.regionLinks();
+
+                        _.each(nodes.concat(links), function (n) {
+                            n.displayMastership(this.currentMastership);
+                        });
+                    },
+                    mastership: function () {
+                        return this.currentMastership;
+                    },
+                    setMastership: function (id) {
+                        this.currentMastership = id;
+                        this.displayMastership();
+                    }
+                }
+
+                return instance || new MastershipController();
+            }
+        ]);
+})();
\ No newline at end of file
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2NodeModel.js b/web/gui/src/main/webapp/app/view/topo2/topo2NodeModel.js
index ccedaff..fb383d2 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2NodeModel.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2NodeModel.js
@@ -54,9 +54,9 @@
         'Topo2Model', 'FnService', 'Topo2PrefsService',
         'SvgUtilService', 'IconService', 'ThemeService',
         'Topo2MapConfigService', 'Topo2ZoomService', 'Topo2NodePositionService',
-        'Topo2SelectService',
+        'Topo2SelectService', 'Topo2MastershipService',
         function (Model, _fn_, _ps_, _sus_, _is_, _ts_,
-            _t2mcs_, zoomService, _t2nps_, t2ss) {
+            _t2mcs_, zoomService, _t2nps_, t2ss, t2mss) {
 
             ts = _ts_;
             fn = _fn_;
@@ -69,6 +69,7 @@
             return Model.extend({
                 initialize: function () {
                     this.node = this.createNode();
+                    this.mastershipService = t2mss;
                     this._events = {
                         'mouseover': 'mouseoverHandler',
                         'mouseout': 'mouseoutHandler'
@@ -202,7 +203,8 @@
                             online: this.get('online'),
                             selected: this.get('selected'),
                             hovered: this.get('hovered'),
-                            fixed: this.get('fixed')
+                            fixed: this.get('fixed'),
+                            suppressedmax: this.get('mastership')
                         }
                     );
                 },
@@ -213,6 +215,9 @@
                 resetPosition: function () {
                     t2nps.setLongLat(this);
                 },
+                displayMastership: function () {
+                    this.set({ mastership: t2mss.mastership() !== null});
+                },
                 update: function () {
                     this.updateLabel();
                 },
diff --git a/web/gui/src/main/webapp/index.html b/web/gui/src/main/webapp/index.html
index 342f25d..06d5a31 100644
--- a/web/gui/src/main/webapp/index.html
+++ b/web/gui/src/main/webapp/index.html
@@ -153,6 +153,7 @@
     <script src="app/view/topo2/topo2MapCountryFilters.js"></script>
     <script src="app/view/topo2/topo2MapConfig.js"></script>
     <script src="app/view/topo2/topo2MapDialog.js"></script>
+    <script src="app/view/topo2/topo2Mastership.js"></script>
     <script src="app/view/topo2/topo2Model.js"></script>
     <script src="app/view/topo2/topo2NodeModel.js"></script>
     <script src="app/view/topo2/topo2NodePosition.js"></script>
