diff --git a/cli/cli/c_actions.py b/cli/cli/c_actions.py
index c953deb..6852f57 100755
--- a/cli/cli/c_actions.py
+++ b/cli/cli/c_actions.py
@@ -151,8 +151,8 @@
     except Exception, e:
         errors = sdnsh.rest_error_to_dict(e)
         print sdnsh.rest_error_dict_to_message(errors)
-    if result != "deleted":
-        print "command failed"
+    if not result.startswith("SUCCESS"):
+        print result
 
 policy_obj_data = {}
 def policy_create(data=None):
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/ISegmentRoutingService.java b/src/main/java/net/onrc/onos/apps/segmentrouting/ISegmentRoutingService.java
index 61ec630..446384e 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/ISegmentRoutingService.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/ISegmentRoutingService.java
@@ -8,6 +8,7 @@
 import net.floodlightcontroller.util.MACAddress;
 import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.PolicyInfo;
 import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelInfo;
+import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.removeTunnelMessages;
 import net.onrc.onos.core.util.IPv4Net;
 
 /**
@@ -33,7 +34,7 @@
      *
      * @return "true/false" depending tunnel deletion status
      */
-    public boolean removeTunnel(String tunnelId);
+    public removeTunnelMessages removeTunnel(String tunnelId);
 
     /**
      * Create a policy for policy based segment routing
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
index fbc9597..dbd3b7e 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -1597,6 +1597,35 @@
         return true;
     }
 
+    public enum removeTunnelMessages{
+        SUCCESS(0, "Tunnel is removed successfully."),
+        ERROR_REFERENCED(1, "Can't remove tunnel as its referenced by other policy(s)"),
+        ERROR_SWITCH(2, "Switch not found in the tunnel route"),
+        ERROR_DRIVER(3, "Can't remove tunnel at driver"),
+        ERROR_TUNNEL(4, "Tunnel not found");
+
+        private final int code;
+        private final String description;
+
+        private removeTunnelMessages(int code, String description) {
+          this.code = code;
+          this.description = description;
+        }
+
+        public String getDescription() {
+           return this.description;
+        }
+
+        public int getCode() {
+           return this.code;
+        }
+
+        @Override
+        public String toString() {
+          return "[" + this.code + ": " + this.description + "]";
+        }
+
+    }
     /**
      * Remove a tunnel
      * It removes all groups for the tunnel if the tunnel is not used for any
@@ -1604,20 +1633,20 @@
      *
      * @param tunnelId tunnel ID to remove
      */
-    public boolean removeTunnel(String tunnelId) {
+    public removeTunnelMessages removeTunnel(String tunnelId) {
 
         // Check if the tunnel is used for any policy
         for (PolicyInfo policyInfo: policyTable.values()) {
             if (policyInfo.tunnelId.equals(tunnelId)) {
                 log.debug("Tunnel {} is still used for the policy {}.",
                         policyInfo.policyId, tunnelId);
-                return false;
+                return removeTunnelMessages.ERROR_REFERENCED;
             }
         }
 
         TunnelInfo tunnelInfo = tunnelTable.get(tunnelId);
         if (tunnelInfo == null)
-            return false;
+            return removeTunnelMessages.ERROR_TUNNEL;
 
         List<TunnelRouteInfo> routes = tunnelInfo.routes;
         for (TunnelRouteInfo route: routes) {
@@ -1625,20 +1654,21 @@
                     getSwId(route.srcSwDpid));
 
             if (sw13 == null) {
-                return false;
+                return removeTunnelMessages.ERROR_SWITCH;
             }
             else {
                 if (!sw13.removeGroup(route.getGroupId())) {
                     log.warn("Faied to remove the tunnel {} at driver",
                             tunnelId);
-                    return false;                }
+                    return removeTunnelMessages.ERROR_DRIVER;
+                    }
             }
         }
 
         tunnelTable.remove(tunnelId);
         log.debug("Tunnel {} was removed successfully.", tunnelId);
 
-        return true;
+        return removeTunnelMessages.SUCCESS;
     }
 
     // ************************************
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
index aa9b62f..7990e48 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
@@ -12,6 +12,7 @@
 import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.PolicyInfo;
 import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelInfo;
 import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelRouteInfo;
+import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.removeTunnelMessages;
 
 import org.codehaus.jackson.map.ObjectMapper;
 import org.restlet.resource.Delete;
@@ -68,9 +69,9 @@
             return "fail";
         }
         log.debug("deleteTunnel with Id {}", createParams.getTunnel_id());
-        boolean result = segmentRoutingService.removeTunnel(
+        removeTunnelMessages result = segmentRoutingService.removeTunnel(
                 createParams.getTunnel_id());
-        return (result == true) ? "deleted" : "fail";
+        return result.name()+" "+result.toString();
     }
 
     @Get("json")
