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 609b775..bd344db 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
@@ -55,6 +55,8 @@
 import org.onosproject.net.intent.IntentListener;
 import org.onosproject.net.intent.Key;
 import org.onosproject.net.intent.MultiPointToSinglePointIntent;
+import org.onosproject.net.intent.IntentState;
+import org.onosproject.net.intent.IntentService;
 import org.onosproject.net.link.LinkEvent;
 import org.onosproject.net.link.LinkListener;
 import org.onosproject.ui.JsonUtils;
@@ -101,6 +103,7 @@
     private static final String UPDATE_META = "updateMeta";
     private static final String ADD_HOST_INTENT = "addHostIntent";
     private static final String REMOVE_INTENT = "removeIntent";
+    private static final String REMOVE_INTENTS = "removeIntents";
     private static final String RESUBMIT_INTENT = "resubmitIntent";
     private static final String ADD_MULTI_SRC_INTENT = "addMultiSourceIntent";
     private static final String REQ_RELATED_INTENTS = "requestRelatedIntents";
@@ -223,6 +226,7 @@
                 new AddMultiSourceIntent(),
                 new RemoveIntent(),
                 new ResubmitIntent(),
+                new RemoveIntents(),
 
                 new ReqAllFlowTraffic(),
                 new ReqAllPortTraffic(),
@@ -507,6 +511,24 @@
         }
     }
 
+    private final class RemoveIntents extends RequestHandler {
+        private RemoveIntents() {
+            super(REMOVE_INTENTS);
+        }
+
+
+        @Override
+        public void process(ObjectNode payload) {
+            IntentService intentService = get(IntentService.class);
+            for (Intent intent : intentService.getIntents()) {
+                if (intentService.getIntentState(intent.key()) == IntentState.WITHDRAWN) {
+                    intentService.purge(intent);
+                }
+            }
+
+        }
+    }
+
     // ========= -----------------------------------------------------------------
 
     private final class ReqAllFlowTraffic extends RequestHandler {
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 18d8673..9de4c38 100644
--- a/web/gui/src/main/webapp/app/view/intent/intent.html
+++ b/web/gui/src/main/webapp/app/view/intent/intent.html
@@ -47,6 +47,10 @@
                  tooltip tt-msg="purgeTip"
                  ng-click="(!!selId && isIntentWithdrawn()) ? purgeIntent():''"></div>
 
+            <div ng-class="{'active': isHavingWithdrawn()}"
+                 icon icon-id="garbage" icon-size="47"
+                 tooltip tt-msg="purgeAllTip"
+                 ng-click="(isHavingWithdrawn()) ? purgeIntents():''"></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 71c07cf..324f389 100644
--- a/web/gui/src/main/webapp/app/view/intent/intent.js
+++ b/web/gui/src/main/webapp/app/view/intent/intent.js
@@ -74,6 +74,7 @@
             $scope.resubmitTip = 'Resubmit selected intent';
             $scope.deactivateTip = 'Remove selected intent';
             $scope.purgeTip = 'Purge selected intent';
+            $scope.purgeAllTip = 'Purge withdrawn intents';
 
             $scope.showIntent = function () {
                 var d = $scope.intentData;
@@ -88,6 +89,16 @@
                 return $scope.intentState === 'Withdrawn';
             };
 
+            $scope.isHavingWithdrawn = function () {
+                var isWithdrawn = false;
+                $scope.tableData.forEach(function (intent) {
+                    if (intent.state ==='Withdrawn') {
+                        isWithdrawn = true;
+                    }
+                });
+                return isWithdrawn;
+            };
+
             function executeAction(action) {
                 var content = ds.createDiv(),
                     txt,
@@ -119,6 +130,29 @@
                     .addCancel(dCancel)
                     .bindKeys();
             }
+            function executeActions(action) {
+                 var content = ds.createDiv(),
+                     txt='purgeIntents';
+                     content.append('p').
+                     text('Are you sure you want to purge all the withdrawn intents?');
+
+                 function dOk() {
+                     tts.removeIntents();
+                     $scope.fired = true;
+                 }
+
+                 function dCancel() {
+                     ds.closeDialog();
+                     $log.debug('Canceling remove-intents action');
+                 }
+
+                 ds.openDialog(dialogId, dialogOpts)
+                 .setTitle('Confirm Action')
+                 .addContent(content)
+                 .addOk(dOk)
+                 .addCancel(dCancel)
+                 .bindKeys();
+            }
 
             $scope.deactivateIntent = function () {
                 executeAction("withdraw");
@@ -141,6 +175,9 @@
                 $log.debug('OvIntentCtrl has been destroyed');
             });
 
+            $scope.purgeIntents = function () {
+                executeActions("purgeIntents");
+            };
             $log.debug('OvIntentCtrl has been created');
         }]);
 }());
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 5d52ab1..2db9275 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoTraffic.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoTraffic.js
@@ -217,6 +217,14 @@
         flash.flash('Multi-Source flow added');
     }
 
+    function removeIntents () {
+        $log.debug('Entering removeIntents');
+        wss.sendEvent('removeIntents', {});
+        trafficMode = 'intents';
+        hoverMode = null;
+        flash.flash('Intent are purged');
+    }
+
 
     // === -----------------------------------------------------
     // === MODULE DEFINITION ===
@@ -254,7 +262,8 @@
                 addHostIntent: addHostIntent,
                 addMultiSourceIntent: addMultiSourceIntent,
                 removeIntent: removeIntent,
-                resubmitIntent: resubmitIntent
+                resubmitIntent: resubmitIntent,
+                removeIntents: removeIntents
             };
         }]);
 }());
diff --git a/web/gui/src/main/webapp/tests/app/view/topo/topoTraffic-spec.js b/web/gui/src/main/webapp/tests/app/view/topo/topoTraffic-spec.js
index ff9fd72..0a04f34 100644
--- a/web/gui/src/main/webapp/tests/app/view/topo/topoTraffic-spec.js
+++ b/web/gui/src/main/webapp/tests/app/view/topo/topoTraffic-spec.js
@@ -51,6 +51,7 @@
             'addMultiSourceIntent',
             'removeIntent',
             'resubmitIntent',
+            'removeIntents',
         ])).toBeTruthy();
     });
 
