diff --git a/api/src/main/java/org/opencord/dhcpl2relay/DhcpL2RelayService.java b/api/src/main/java/org/opencord/dhcpl2relay/DhcpL2RelayService.java
index 6d3d16a..b8c18aa 100644
--- a/api/src/main/java/org/opencord/dhcpl2relay/DhcpL2RelayService.java
+++ b/api/src/main/java/org/opencord/dhcpl2relay/DhcpL2RelayService.java
@@ -17,6 +17,7 @@
 package org.opencord.dhcpl2relay;
 
 import org.onosproject.event.ListenerService;
+import org.onosproject.net.ConnectPoint;
 
 import java.util.Map;
 
@@ -32,4 +33,16 @@
      * @return map of subscriber ID to DHCP allocation information
      */
     Map<String, DhcpAllocationInfo> getAllocationInfo();
+
+    /**
+     * Remove all the DHCP leases that have been allocated from the local state.
+     */
+    void clearAllocations();
+
+    /**
+     * Remove a single DHCP lease from the local state.
+     * @param cp the ConnectPoint associated with this lease
+     * @return boolean
+     */
+    boolean removeAllocationByConnectPoint(ConnectPoint cp);
 }
diff --git a/app/src/main/java/org/opencord/dhcpl2relay/cli/DhcpL2RelayClearAllocationsCommand.java b/app/src/main/java/org/opencord/dhcpl2relay/cli/DhcpL2RelayClearAllocationsCommand.java
new file mode 100644
index 0000000..a9f1664
--- /dev/null
+++ b/app/src/main/java/org/opencord/dhcpl2relay/cli/DhcpL2RelayClearAllocationsCommand.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2016-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.opencord.dhcpl2relay.cli;
+
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.onosproject.cli.AbstractShellCommand;
+import org.opencord.dhcpl2relay.DhcpL2RelayService;
+
+/**
+ *  Remove all the DHCP allocations relayed by the dhcpl2relay.
+ */
+@Service
+@Command(scope = "onos", name = "dhcpl2relay-clear-allocations",
+        description = "Remove all the DHCP allocations relayed by the dhcpl2relay")
+public class DhcpL2RelayClearAllocationsCommand extends AbstractShellCommand {
+    @Override
+    protected void doExecute() {
+        DhcpL2RelayService service = get(DhcpL2RelayService.class);
+        service.clearAllocations();
+    }
+}
diff --git a/app/src/main/java/org/opencord/dhcpl2relay/cli/DhcpL2RelayRemoveAllocationsCommand.java b/app/src/main/java/org/opencord/dhcpl2relay/cli/DhcpL2RelayRemoveAllocationsCommand.java
new file mode 100644
index 0000000..7120923
--- /dev/null
+++ b/app/src/main/java/org/opencord/dhcpl2relay/cli/DhcpL2RelayRemoveAllocationsCommand.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2016-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.opencord.dhcpl2relay.cli;
+
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.cli.net.DeviceIdCompleter;
+import org.onosproject.cli.net.PortNumberCompleter;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+import org.opencord.dhcpl2relay.DhcpL2RelayService;
+
+/**
+ * Remove all the DHCP allocations relayed by the dhcpl2relay.
+ */
+@Service
+@Command(scope = "onos", name = "dhcpl2relay-remove-allocation",
+        description = "Remove the DHCP allocation relayed by the dhcpl2relay")
+public class DhcpL2RelayRemoveAllocationsCommand extends AbstractShellCommand {
+
+    @Argument(index = 0, name = "deviceId", description = "Device ID",
+            required = true, multiValued = false)
+    @Completion(DeviceIdCompleter.class)
+    private String strDeviceId = null;
+
+    @Argument(index = 1, name = "port", description = "Port number",
+            required = true, multiValued = false)
+    @Completion(PortNumberCompleter.class)
+    private String strPort = null;
+
+    @Override
+    protected void doExecute() {
+        DhcpL2RelayService service = get(DhcpL2RelayService.class);
+
+        DeviceId deviceId = DeviceId.deviceId(strDeviceId);
+        PortNumber port = PortNumber.portNumber(strPort);
+        ConnectPoint cp = new ConnectPoint(deviceId, port);
+
+        Boolean success = service.removeAllocationByConnectPoint(cp);
+
+        if (success) {
+            print("DHCP Allocation removed for port %s on device %s", strPort, strDeviceId);
+        } else {
+            print("DHCP Allocation not found for port %s on device %s", strPort, strDeviceId);
+        }
+
+    }
+}
diff --git a/app/src/main/java/org/opencord/dhcpl2relay/impl/DhcpL2Relay.java b/app/src/main/java/org/opencord/dhcpl2relay/impl/DhcpL2Relay.java
index 05774ab..1bb5113 100755
--- a/app/src/main/java/org/opencord/dhcpl2relay/impl/DhcpL2Relay.java
+++ b/app/src/main/java/org/opencord/dhcpl2relay/impl/DhcpL2Relay.java
@@ -1058,6 +1058,22 @@
                 .forEach(allocations::remove);
     }
 
+    public void clearAllocations() {
+        allocations.clear();
+    }
+
+
+    public boolean removeAllocationByConnectPoint(ConnectPoint cp) {
+        for (String key : allocations.keySet()) {
+            DhcpAllocationInfo entry = allocations.asJavaMap().get(key);
+            if (entry.location().equals(cp)) {
+                allocations.remove(key);
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * Handles Device status change for the devices which connect
      * to the DHCP server.
