diff --git a/web/gui/src/main/webapp/app/view/topo/topoForce.js b/web/gui/src/main/webapp/app/view/topo/topoForce.js
index 948939b..03d8477 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoForce.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoForce.js
@@ -24,7 +24,7 @@
 
     // injected refs
     var $log, $timeout, fs, sus, ts, flash, wss, tov,
-        tis, tms, td3, tss, tts, tos, fltr, tls, uplink, svg;
+        tis, tms, td3, tss, tts, tos, fltr, tls, uplink, svg, tpis;
 
     // configuration
     var linkConfig = {
@@ -1052,9 +1052,10 @@
             'TopoOverlayService', 'TopoInstService', 'TopoModelService',
             'TopoD3Service', 'TopoSelectService', 'TopoTrafficService',
             'TopoObliqueService', 'TopoFilterService', 'TopoLinkService',
+            'TopoProtectedIntentsService',
 
         function (_$log_, _$timeout_, _fs_, _sus_, _ts_, _flash_, _wss_, _tov_,
-                  _tis_, _tms_, _td3_, _tss_, _tts_, _tos_, _fltr_, _tls_) {
+                  _tis_, _tms_, _td3_, _tss_, _tts_, _tos_, _fltr_, _tls_, _tpis_) {
             $log = _$log_;
             $timeout = _$timeout_;
             fs = _fs_;
@@ -1071,6 +1072,7 @@
             tos = _tos_;
             fltr = _fltr_;
             tls = _tls_;
+            tpis = _tpis_;
 
             ts.addListener(updateLinksAndNodes);
 
@@ -1093,6 +1095,7 @@
                 td3.initD3(mkD3Api());
                 tss.initSelect(mkSelectApi());
                 tts.initTraffic(mkTrafficApi());
+                tpis.initProtectedIntents(mkTrafficApi());
                 tos.initOblique(mkObliqueApi(uplink, fltr));
                 fltr.initFilter(mkFilterApi());
                 tls.initLink(mkLinkApi(svg, uplink), td3);
@@ -1136,6 +1139,7 @@
                 tls.destroyLink();
                 tos.destroyOblique();
                 tts.destroyTraffic();
+                tpis.destroyProtectedIntents();
                 tss.destroySelect();
                 td3.destroyD3();
                 tms.destroyModel();
diff --git a/web/gui/src/main/webapp/app/view/topo/topoProtectedIntent.js b/web/gui/src/main/webapp/app/view/topo/topoProtectedIntent.js
new file mode 100644
index 0000000..20193dd
--- /dev/null
+++ b/web/gui/src/main/webapp/app/view/topo/topoProtectedIntent.js
@@ -0,0 +1,74 @@
+/*
+ * 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 Protected Intents Module.
+ Defines behavior for viewing protected intents .
+ */
+
+(function () {
+    'use strict';
+
+    // injected refs
+    var $log, fs, flash, wss, api;
+
+    // internal state
+    var showingProtectedIntent = null;
+
+    // === -------------------------------------------------------------
+    //  protected intent requests invoked from keystrokes or toolbar buttons...
+
+    function cancelHighlights() {
+        if (!showingProtectedIntent) {
+            return false;
+        }
+
+        showingProtectedIntent = false;
+        wss.sendEvent('cancelProtectedIntentHighlight');
+        flash.flash('Monitoring canceled');
+        return true;
+    }
+
+    // force the system to create a single intent selection
+    function showProtectedIntent(data) {
+        wss.sendEvent('selectProtectedIntent', data);
+        flash.flash('Selecting Intent ' + data.key);
+        showingProtectedIntent = true;
+    }
+
+    // === -----------------------------------------------------
+    // === MODULE DEFINITION ===
+
+    angular.module('ovTopo')
+    .factory('TopoProtectedIntentsService',
+        ['$log', 'FnService', 'FlashService', 'WebSocketService',
+
+        function (_$log_, _fs_, _flash_, _wss_) {
+            $log = _$log_;
+            fs = _fs_;
+            flash = _flash_;
+            wss = _wss_;
+
+            return {
+                initProtectedIntents: function (_api_) { api = _api_; },
+                destroyProtectedIntents: function () { },
+
+                // invoked from toolbar overlay buttons or keystrokes
+                cancelHighlights: cancelHighlights,
+                showProtectedIntent: showProtectedIntent
+            };
+        }]);
+}());
diff --git a/web/gui/src/main/webapp/app/view/topo/topoProtectedIntentOverlay.js b/web/gui/src/main/webapp/app/view/topo/topoProtectedIntentOverlay.js
new file mode 100644
index 0000000..ab9114f
--- /dev/null
+++ b/web/gui/src/main/webapp/app/view/topo/topoProtectedIntentOverlay.js
@@ -0,0 +1,78 @@
+/*
+ * 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 Protected Intents Overlay Module.
+ Defines behavior for viewing different multiple Protected Intents.
+ Installed as a Topology Overlay.
+ */
+(function () {
+    'use strict';
+
+    // injected refs
+    var $log, tov, tpis;
+
+    // NOTE: no internal state here -- see topoProtectedIntents for that
+
+    // NOTE: providing button disabling requires too big a refactoring of
+    //       the button factory etc. Will have to be done another time.
+
+
+    // traffic overlay definition
+    var overlay = {
+        overlayId: 'protectedIntent',
+        glyphId: 'm_ips',
+        tooltip: 'Protected Intents Overlay',
+
+        activate: function () {
+            $log.debug("Protected Intent overlay ACTIVATED");
+        },
+
+        deactivate: function () {
+            tpis.cancelHighlights();
+            $log.debug("Protected Intent DEACTIVATED");
+        },
+
+        hooks: {
+            // hook for handling escape key
+            escape: function () {
+                // Must return true to consume ESC, false otherwise.
+                return tpis.cancelHighlights();
+            },
+            // intent visualization hook
+            acceptIntent: function (type) {
+                // accept only intents with type "Protected"
+                return (type.startsWith('Protected'));
+            },
+            showIntent: function (info) {
+                $log.debug('^^ topoProtectedIntentsOverlay.showintent() ^^', info);
+                tpis.showProtectedIntent(info);
+            }
+        }
+    };
+
+    // invoke code to register with the overlay service
+    angular.module('ovTopo')
+        .run(['$log', 'TopoOverlayService', 'TopoProtectedIntentsService',
+
+        function (_$log_, _tov_, _tpis_) {
+            $log = _$log_;
+            tov = _tov_;
+            tpis = _tpis_;
+            tov.register(overlay);
+        }]);
+
+}());
diff --git a/web/gui/src/main/webapp/app/view/topo/topoSelect.js b/web/gui/src/main/webapp/app/view/topo/topoSelect.js
index cfd2fb3..724b43c 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoSelect.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoSelect.js
@@ -23,7 +23,7 @@
     'use strict';
 
     // injected refs
-    var $log, fs, wss, tov, tps, tts, ns, sus;
+    var $log, fs, wss, tov, tps, tts, ns, sus, tpis;
 
     // api to topoForce
     var api;
@@ -306,9 +306,9 @@
     .factory('TopoSelectService',
         ['$log', 'FnService', 'WebSocketService', 'TopoOverlayService',
             'TopoPanelService', 'TopoTrafficService', 'NavService',
-            'SvgUtilService',
+            'SvgUtilService', 'TopoProtectedIntentsService',
 
-        function (_$log_, _fs_, _wss_, _tov_, _tps_, _tts_, _ns_, _sus_) {
+        function (_$log_, _fs_, _wss_, _tov_, _tps_, _tts_, _ns_, _sus_, _tpis_) {
             $log = _$log_;
             fs = _fs_;
             wss = _wss_;
@@ -317,6 +317,7 @@
             tts = _tts_;
             ns = _ns_;
             sus = _sus_;
+            tpis= _tpis_;
 
             function initSelect(_api_) {
                 api = _api_;
