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 71c017d..d48a089 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
@@ -88,6 +88,7 @@
 import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
 import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED;
 import static org.onosproject.ui.JsonUtils.envelope;
+import static org.onosproject.ui.JsonUtils.string;
 import static org.onosproject.ui.topo.TopoJson.highlightsMessage;
 import static org.onosproject.ui.topo.TopoJson.json;
 
@@ -100,6 +101,7 @@
     private static final String REQ_DETAILS = "requestDetails";
     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 ADD_MULTI_SRC_INTENT = "addMultiSourceIntent";
     private static final String REQ_RELATED_INTENTS = "requestRelatedIntents";
     private static final String REQ_NEXT_INTENT = "requestNextRelatedIntent";
@@ -220,6 +222,7 @@
                 // TODO: migrate traffic related to separate app
                 new AddHostIntent(),
                 new AddMultiSourceIntent(),
+                new RemoveIntent(),
 
                 new ReqAllFlowTraffic(),
                 new ReqAllPortTraffic(),
@@ -426,6 +429,37 @@
         }
     }
 
+    private Intent findIntentByPayload(ObjectNode payload) {
+        int appId = Integer.parseInt(string(payload, APP_ID));
+        String appName = string(payload, APP_NAME);
+        ApplicationId applicId = new DefaultApplicationId(appId, appName);
+        long intentKey = Long.decode(string(payload, KEY));
+
+        Key key = Key.of(intentKey, applicId);
+        log.debug("Attempting to select intent by key={}", key);
+
+        Intent intent = intentService.getIntent(key);
+
+        return intent;
+    }
+
+    private final class RemoveIntent extends RequestHandler {
+        private RemoveIntent() {
+            super(REMOVE_INTENT);
+        }
+
+        @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);
+            }
+        }
+    }
+
     private final class AddMultiSourceIntent extends RequestHandler {
         private AddMultiSourceIntent() {
             super(ADD_MULTI_SRC_INTENT);
@@ -551,19 +585,11 @@
 
         @Override
         public void process(long sid, ObjectNode payload) {
-            int appId = Integer.parseInt(string(payload, APP_ID));
-            String appName = string(payload, APP_NAME);
-            ApplicationId applicId = new DefaultApplicationId(appId, appName);
-            long intentKey = Long.decode(string(payload, KEY));
-
-            Key key = Key.of(intentKey, applicId);
-            log.debug("Attempting to select intent key={}", key);
-
-            Intent intent = intentService.getIntent(key);
+            Intent intent = findIntentByPayload(payload);
             if (intent == null) {
-                log.debug("no such intent found!");
+                log.warn("Unable to find intent from payload {}", payload);
             } else {
-                log.debug("starting to monitor intent {}", key);
+                log.debug("starting to monitor intent {}", intent.key());
                 traffic.monitor(intent);
             }
         }
