diff --git a/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/AreaId.java b/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/AreaId.java
index f3c3b5d..2039e75 100644
--- a/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/AreaId.java
+++ b/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/AreaId.java
@@ -15,23 +15,19 @@
  */
 package org.onosproject.iptopology.api;
 
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-import java.util.Objects;
+import org.onlab.util.Identifier;
 
 /**
  * Area identifier class (32 Bit Area-ID).
  */
-public class AreaId {
-    private final int areaId;
-
+public class AreaId extends Identifier<Integer> {
     /**
      * Constructor to set area identifier.
      *
      * @param areaId area id
      */
     public AreaId(int areaId) {
-        this.areaId = areaId;
+        super(areaId);
     }
 
     /**
@@ -40,31 +36,6 @@
      * @return area identifier
      */
     public int areaId() {
-        return areaId;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(areaId);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-
-        if (obj instanceof AreaId) {
-            AreaId other = (AreaId) obj;
-            return Objects.equals(areaId, other.areaId);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return toStringHelper(this)
-                .add("areaId", areaId)
-                .toString();
+        return identifier;
     }
 }
\ No newline at end of file
diff --git a/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/DomainId.java b/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/DomainId.java
index 6d94bc2..adb16ca 100644
--- a/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/DomainId.java
+++ b/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/DomainId.java
@@ -16,23 +16,19 @@
 
 package org.onosproject.iptopology.api;
 
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-import java.util.Objects;
+import org.onlab.util.Identifier;
 
 /**
  * Domain Identifier(32 Bit).
  */
-public class DomainId {
-    private final int domainIdentifier;
-
+public class DomainId extends Identifier<Integer> {
     /**
      * Constructor to initialize domain identifier.
      *
      * @param domainIdentifier domain identifier
      */
     public DomainId(int domainIdentifier) {
-        this.domainIdentifier = domainIdentifier;
+        super(domainIdentifier);
     }
 
     /**
@@ -41,31 +37,6 @@
      * @return domain identifier
      */
     public int domainIdentifier() {
-        return domainIdentifier;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(domainIdentifier);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-
-        if (obj instanceof DomainId) {
-            DomainId other = (DomainId) obj;
-            return Objects.equals(domainIdentifier, other.domainIdentifier);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return toStringHelper(this)
-                .add("domainIdentifier", domainIdentifier)
-                .toString();
+        return identifier;
     }
 }
\ No newline at end of file
diff --git a/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/TopologyId.java b/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/TopologyId.java
index 9d414e3..f082158 100644
--- a/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/TopologyId.java
+++ b/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/TopologyId.java
@@ -15,23 +15,19 @@
  */
 package org.onosproject.iptopology.api;
 
-import java.util.Objects;
-
-import com.google.common.base.MoreObjects;
+import org.onlab.util.Identifier;
 
 /**
  * Represents Multi-Topology IDs for a network link, node or prefix.
  */
-public class TopologyId {
-    private final short topologyId;
-
+public class TopologyId extends Identifier<Short> {
     /**
      * Constructor to initialize its parameter.
      *
      * @param topologyId topology id for node/link/prefix
      */
     public TopologyId(short topologyId) {
-        this.topologyId = topologyId;
+        super(topologyId);
     }
 
     /**
@@ -40,31 +36,6 @@
      * @return  topology ID
      */
     public short topologyId() {
-        return topologyId;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(topologyId);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-
-        if (obj instanceof TopologyId) {
-            TopologyId other = (TopologyId) obj;
-            return Objects.equals(topologyId, other.topologyId);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("topologyId", topologyId)
-                .toString();
+        return identifier;
     }
 }
\ No newline at end of file
