diff --git a/core/api/src/main/java/org/onosproject/net/resource/ResourceConsumerId.java b/core/api/src/main/java/org/onosproject/net/resource/ResourceConsumerId.java
new file mode 100644
index 0000000..630c845
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/resource/ResourceConsumerId.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * 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.onosproject.net.resource;
+
+import com.google.common.base.Objects;
+import org.onlab.util.Identifier;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Representation of global unique ID for ResourceConsumer object.
+ */
+public class ResourceConsumerId {
+    private final String className;
+    private final long value;
+
+    // Constructor for serializer.
+    protected ResourceConsumerId() {
+        this.className = null;
+        this.value = 0L;
+    }
+
+    /**
+     * Constructor with specifying every fields.
+     *
+     * @param value ID value unique within the given class
+     * @param cls class of ResourceConsumer implementation
+     */
+    ResourceConsumerId(long value, Class<?> cls) {
+        this.className = checkNotNull(cls.getName());
+        this.value = value;
+    }
+
+    /**
+     * Checks if the consumer is an instance of given class.
+     *
+     * @param cls class object
+     * @return result of check
+     */
+    public boolean isClassOf(Class<?> cls) {
+        return checkNotNull(cls).getName().equals(className);
+    }
+
+    /**
+     * Returns class name of the consumer.
+     *
+     * @return class name of the consumer in String
+     */
+    public String consumerClass() {
+        return className;
+    }
+
+    /**
+     * Returns ID value.
+     *
+     * @return ID value
+     */
+    public long value() {
+        return value;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        ResourceConsumerId that = (ResourceConsumerId) o;
+        return Objects.equal(className, that.className) &&
+                Objects.equal(value, that.value);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(className, value);
+    }
+
+    /**
+     * Creates ResourceConsumerId from given value and class.
+     *
+     * @param value ID value unique within the given class
+     * @param cls class of ResourceConsumer implementation
+     * @return created ResourceConsumerId object
+     */
+    public static <T extends ResourceConsumer> ResourceConsumerId of(long value, Class<T> cls) {
+        return new ResourceConsumerId(value, cls);
+    }
+
+    /**
+     * Creates ResourceConsumerId instance from Identifier object.
+     *
+     * @param id identifier object backed by Long value
+     * @return created ResourceConsumerId object
+     */
+    public static <T extends Identifier<Long> & ResourceConsumer> ResourceConsumerId of(T id) {
+        return new ResourceConsumerId(id.id(), id.getClass());
+    }
+}
