diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmEntityId.java b/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmEntityId.java
index 5bf8674..7b594c2 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmEntityId.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmEntityId.java
@@ -15,29 +15,29 @@
  */
 package org.onosproject.incubator.net.faultmanagement.alarm;
 
-import static com.google.common.base.Preconditions.checkArgument;
 import com.google.common.collect.ImmutableSet;
+import org.onlab.util.Identifier;
+
 import java.net.URI;
-import java.util.Objects;
 import java.util.Set;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 /**
  * Immutable representation of a alarm source. It is meaningful within the
  * context of a device.
  */
-public final class AlarmEntityId {
+public final class AlarmEntityId extends Identifier<URI> {
 
     public static final AlarmEntityId NONE = new AlarmEntityId(URI.create("none:none"));
     public static final Set<String> SCHEMES = ImmutableSet.of("none", "port", "och", "other");
 
-    private final URI uri;
-
     private AlarmEntityId(final URI uri) {
-        this.uri = uri;
+        super(uri);
     }
 
     protected AlarmEntityId() {
-        uri = NONE.uri;
+        super(NONE.identifier);
     }
 
     public static AlarmEntityId alarmEntityId(final String string) {
@@ -48,28 +48,4 @@
         checkArgument(SCHEMES.contains(uri.getScheme()), "Unexpected scheme");
         return new AlarmEntityId(uri);
     }
-
-    @Override
-    public String toString() {
-        return uri.toString();
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(uri);
-
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj instanceof AlarmEntityId) {
-            final AlarmEntityId other = (AlarmEntityId) obj;
-            return Objects.equals(this.uri, other.uri);
-        }
-        return false;
-    }
-
 }
