diff --git a/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngManager.java b/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngManager.java
index f440c5d..6b2e943 100644
--- a/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngManager.java
+++ b/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngManager.java
@@ -91,7 +91,6 @@
     private HostListener hostListener;
     private IpAddress nextHopIpAddress;
 
-
     @Activate
     public void activate() {
         appId = coreService.registerApplication(APP_NAME);
@@ -133,6 +132,47 @@
         return publicIpAddress;
     }
 
+    @Override
+    public IpAddress deleteVbng(IpAddress privateIpAddress) {
+        // Recycle the public IP address assigned to this private IP address.
+        // Recycling will also delete the mapping entry from the private IP
+        // address to public IP address.
+        IpAddress assignedPublicIpAddress = vbngConfigurationService
+                .recycleAssignedPublicIpAddress(privateIpAddress);
+        if (assignedPublicIpAddress == null) {
+            return null;
+        }
+
+        // Remove the private IP address from privateIpAddressSet
+        privateIpAddressSet.remove(privateIpAddress);
+
+        // Remove intents
+        removeForwardingPaths(privateIpAddress);
+
+        return assignedPublicIpAddress;
+    }
+
+    /**
+     * Removes the forwarding paths in both two directions between host
+     * configured with private IP and next hop.
+     *
+     * @param privateIp the private IP address of a local host
+     */
+    private void removeForwardingPaths(IpAddress privateIp) {
+        PointToPointIntent toNextHopIntent =
+                p2pIntentsFromHost.remove(privateIp);
+        if (toNextHopIntent != null) {
+            intentService.withdraw(toNextHopIntent);
+            //intentService.purge(toNextHopIntent);
+        }
+        PointToPointIntent toLocalHostIntent =
+                p2pIntentsToHost.remove(privateIp);
+        if (toLocalHostIntent != null) {
+            intentService.withdraw(toLocalHostIntent);
+            //intentService.purge(toLocalHostIntent);
+        }
+    }
+
     /**
      * Sets up forwarding paths in both two directions between host configured
      * with private IP and next hop.
@@ -207,7 +247,7 @@
                                               localHost.mac(),
                                               localHostConnectPoint,
                                               nextHopConnectPoint);
-            p2pIntentsToHost.put(nextHopIpAddress, toLocalHostIntent);
+            p2pIntentsToHost.put(privateIp, toLocalHostIntent);
             intentService.submit(toLocalHostIntent);
         }
 
