diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sIpam.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sIpam.java
index cb488b3..605cdea 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sIpam.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sIpam.java
@@ -24,16 +24,23 @@
  */
 public final class DefaultK8sIpam implements K8sIpam {
 
+    private final String ipamId;
     private final IpAddress ipAddress;
     private final String networkId;
 
     // private constructor not intended for external invocation
-    public DefaultK8sIpam(IpAddress ipAddress, String networkId) {
+    public DefaultK8sIpam(String ipamId, IpAddress ipAddress, String networkId) {
+        this.ipamId = ipamId;
         this.ipAddress = ipAddress;
         this.networkId = networkId;
     }
 
     @Override
+    public String ipamId() {
+        return ipamId;
+    }
+
+    @Override
     public IpAddress ipAddress() {
         return ipAddress;
     }
@@ -52,18 +59,20 @@
             return false;
         }
         DefaultK8sIpam that = (DefaultK8sIpam) o;
-        return Objects.equal(ipAddress, that.ipAddress) &&
+        return Objects.equal(ipamId, that.ipamId) &&
+                Objects.equal(ipAddress, that.ipAddress) &&
                 Objects.equal(networkId, that.networkId);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hashCode(ipAddress, networkId);
+        return Objects.hashCode(ipamId, ipAddress, networkId);
     }
 
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
+                .add("ipamId", ipamId)
                 .add("ipAddress", ipAddress)
                 .add("networkId", networkId)
                 .toString();
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpam.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpam.java
index 9969f30..cc57058 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpam.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpam.java
@@ -23,6 +23,13 @@
 public interface K8sIpam {
 
     /**
+     * Returns the IPAM identifier.
+     *
+     * @return IPAM identifier
+     */
+    String ipamId();
+
+    /**
      * Returns the IP address.
      *
      * @return IP address
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamAdminService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamAdminService.java
index f34421a..d8752f8 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamAdminService.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamAdminService.java
@@ -17,6 +17,8 @@
 
 import org.onlab.packet.IpAddress;
 
+import java.util.Set;
+
 /**
  * IP Address Management admin service for kubernetes network.
  */
@@ -31,10 +33,26 @@
     IpAddress allocateIp(String networkId);
 
     /**
-     * Leases the IP address from the given network.
+     * Releases the IP address from the given network.
      *
      * @param networkId network identifier
-     * @return leased IP address
+     * @param ipAddress IP address
+     * @return true if the given IP was successfully released, false otherwise
      */
-    IpAddress leaseIp(String networkId);
+    boolean releaseIp(String networkId, IpAddress ipAddress);
+
+    /**
+     * Initializes IP address pool.
+     *
+     * @param networkId network identifier
+     * @param ipAddresses a set of IP addresses contained in this IP pool
+     */
+    void initializeIpPool(String networkId, Set<IpAddress> ipAddresses);
+
+    /**
+     * Purges the existing IP address pool of the given network identifier.
+     *
+     * @param networkId network identifier
+     */
+    void purgeIpPool(String networkId);
 }
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamStore.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamStore.java
index bcd1d1f..5a88756 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamStore.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sIpamStore.java
@@ -15,7 +15,6 @@
  */
 package org.onosproject.k8snetworking.api;
 
-import org.onlab.packet.IpAddress;
 import org.onosproject.store.Store;
 
 import java.util.Set;
@@ -26,48 +25,88 @@
 public interface K8sIpamStore extends Store<K8sIpamEvent, K8sIpamStoreDelegate> {
 
     /**
-     * Allocates a new IP address.
+     * Creates a new allocated IP address.
      *
-     * @param networkId network identifier
-     * @return newly allocated IP address
+     * @param ipam IPAM instance
      */
-    IpAddress allocateIp(String networkId);
+    void createAllocatedIp(K8sIpam ipam);
 
     /**
-     * Leases the existing IP address.
+     * Updates the existing allocated IP address.
      *
-     * @param networkId network identifier
-     * @return leased IP address
+     * @param ipam IPAM instance
      */
-    IpAddress leaseIp(String networkId);
+    void updateAllocatedIp(K8sIpam ipam);
 
     /**
-     * Initializes a new IP pool with the given network.
+     * Removes the existing allocated IP address.
      *
-     * @param networkId network identifier
+     * @param ipamId IPAM identifier
+     * @return removed IPAM instance; null if failed
      */
-    void initializeIpPool(String networkId);
+    K8sIpam removeAllocatedIp(String ipamId);
 
     /**
-     * Purges an existing IP pool associated with the given network.
+     * Returns the IPAM with the given IPAM identifier.
      *
-     * @param networkId network identifier
+     * @param ipamId IPAM identifier
+     * @return IPAM; null it not found
      */
-    void purgeIpPool(String networkId);
+    K8sIpam allocatedIp(String ipamId);
 
     /**
-     * Returns the already allocated IP addresses.
+     * Returns all allocated IPAM instances.
      *
-     * @param networkId network identifier
-     * @return allocated IP addresses
+     * @return set of IPAM instances
      */
-    Set<IpAddress> allocatedIps(String networkId);
+    Set<K8sIpam> allocatedIps();
 
     /**
-     * Returns the available IP addresses.
+     * Creates a new available IP address.
+     *
+     * @param ipam IPAM instance
+     */
+    void createAvailableIp(K8sIpam ipam);
+
+    /**
+     * Updates the existing available IP address.
+     *
+     * @param ipam IPAM instance
+     */
+    void updateAvailableIp(K8sIpam ipam);
+
+    /**
+     * Removes the existing available IP address.
+     *
+     * @param ipamId IPAM identifier
+     * @return remved IPAM instance; null if failed
+     */
+    K8sIpam removeAvailableIp(String ipamId);
+
+    /**
+     * Returns the IPAM with the given IPAM identifier.
+     *
+     * @param ipamId IPAM identifier
+     * @return IPAM; null it not found
+     */
+    K8sIpam availableIp(String ipamId);
+
+    /**
+     * Returns all available IPAM instances.
+     *
+     * @return set of IPAM instances
+     */
+    Set<K8sIpam> availableIps();
+
+    /**
+     * Clears all allocated and available IP addresses.
+     */
+    void clear();
+
+    /**
+     * Clears allocated and available IP addresses associated with the given network.
      *
      * @param networkId network identifier
-     * @return available IP addresses
      */
-    Set<IpAddress> availableIps(String networkId);
+    void clear(String networkId);
 }
