diff --git a/core/api/src/main/java/org/onosproject/net/resource/DefaultLinkResourceAllocations.java b/core/api/src/main/java/org/onosproject/net/resource/DefaultLinkResourceAllocations.java
index b2c8fa1..3a2f66d 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/DefaultLinkResourceAllocations.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/DefaultLinkResourceAllocations.java
@@ -27,6 +27,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Map.Entry;
 import java.util.Set;
 
@@ -56,8 +57,8 @@
     }
 
     @Override
-    public IntentId intendId() {
-        return request.intendId();
+    public IntentId intentId() {
+        return request.intentId();
     }
 
     @Override
@@ -85,6 +86,24 @@
     }
 
     @Override
+    public int hashCode() {
+        return Objects.hash(request, allocations);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null || getClass() != obj.getClass()) {
+            return false;
+        }
+        final DefaultLinkResourceAllocations other = (DefaultLinkResourceAllocations) obj;
+        return Objects.equals(this.request, other.request)
+                && Objects.equals(this.allocations, other.allocations);
+    }
+
+    @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
                 .add("allocations", allocations)
