diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
index d48a089..fdfdd1b 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
@@ -150,6 +150,7 @@
     private static final String NAMES = "names";
     private static final String ACTIVATE = "activate";
     private static final String DEACTIVATE = "deactivate";
+    private static final String PURGE = "purge";
 
 
     private static final String MY_APP_ID = "org.onosproject.gui";
@@ -438,9 +439,7 @@
         Key key = Key.of(intentKey, applicId);
         log.debug("Attempting to select intent by key={}", key);
 
-        Intent intent = intentService.getIntent(key);
-
-        return intent;
+        return intentService.getIntent(key);
     }
 
     private final class RemoveIntent extends RequestHandler {
@@ -448,14 +447,22 @@
             super(REMOVE_INTENT);
         }
 
+        private boolean isIntentToBePurged(ObjectNode payload) {
+            return bool(payload, PURGE);
+        }
+
         @Override
         public void process(long sid, ObjectNode payload) {
             Intent intent = findIntentByPayload(payload);
             if (intent == null) {
                 log.warn("Unable to find intent from payload {}", payload);
             } else {
-                log.debug("Removing intent {}", intent.key());
-                intentService.withdraw(intent);
+                log.debug("Withdrawing / Purging intent {}", intent.key());
+                if (isIntentToBePurged(payload)) {
+                    intentService.purge(intent);
+                } else {
+                    intentService.withdraw(intent);
+                }
             }
         }
     }
diff --git a/web/gui/src/main/webapp/app/view/intent/intent.html b/web/gui/src/main/webapp/app/view/intent/intent.html
index 9c025f6..3fa441a 100644
--- a/web/gui/src/main/webapp/app/view/intent/intent.html
+++ b/web/gui/src/main/webapp/app/view/intent/intent.html
@@ -37,6 +37,11 @@
                  tooltip tt-msg="deactivateTip"
                  ng-click="(!!selId && isIntentInstalled()) ? deactivateIntent():''"></div>
 
+            <div ng-class="{'active': !!selId && isIntentWithdrawn()}"
+                 icon icon-id="garbage" icon-size="42"
+                 tooltip tt-msg="purgeTip"
+                 ng-click="(!!selId && isIntentWithdrawn()) ? purgeIntent():''"></div>
+
 
         </div>
     </div>
diff --git a/web/gui/src/main/webapp/app/view/intent/intent.js b/web/gui/src/main/webapp/app/view/intent/intent.js
index f241c83..1b49a98 100644
--- a/web/gui/src/main/webapp/app/view/intent/intent.js
+++ b/web/gui/src/main/webapp/app/view/intent/intent.js
@@ -72,6 +72,7 @@
 
             $scope.topoTip = 'Show selected intent on topology view';
             $scope.deactivateTip = 'Remove selected intent';
+            $scope.purgeTip = 'Purge selected intent';
 
             $scope.showIntent = function () {
                 var d = $scope.intentData;
@@ -82,14 +83,23 @@
                 return $scope.intentState === 'Installed';
             };
 
-            $scope.deactivateIntent = function () {
-                var content = ds.createDiv();
+            $scope.isIntentWithdrawn = function () {
+                return $scope.intentState === 'Withdrawn';
+            };
 
-                content.append('p')
-                    .text('Are you sure you want to remove the selected intent?');
+            function executeAction(bPurge) {
+                var content = ds.createDiv(),
+                    txt = bPurge ? 'purge' : 'withdraw' ;
+
+                $scope.intentData.intentPurge = bPurge;
+
+                content.append('p').
+                        text('Are you sure you want to '+ txt +
+                        ' the selected intent?');
 
                 function dOk() {
                     var d = $scope.intentData;
+                    $log.debug(d);
                     d && tts.removeIntent(d);
                     $scope.fired = true;
                 }
@@ -105,6 +115,14 @@
                     .addOk(dOk)
                     .addCancel(dCancel)
                     .bindKeys();
+            }
+
+            $scope.deactivateIntent = function () {
+                executeAction(false);
+            };
+
+            $scope.purgeIntent = function () {
+                executeAction(true);
             };
 
             $scope.briefToggle = function () {
diff --git a/web/gui/src/main/webapp/app/view/topo/topoTraffic.js b/web/gui/src/main/webapp/app/view/topo/topoTraffic.js
index 8b6085c..1836e1e 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoTraffic.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoTraffic.js
@@ -181,11 +181,13 @@
         wss.sendEvent('removeIntent', {
             appId: d.appId,
             appName: d.appName,
-            key: d.key
+            key: d.key,
+            purge: d.intentPurge
         });
         trafficMode = 'intents';
         hoverMode = null;
-        flash.flash('Intent removed');
+        var txt = d.intentPurge ? 'purged' : 'withdrawn';
+        flash.flash('Intent ' + txt);
     }
 
     function addMultiSourceIntent () {
