diff --git a/core/api/src/main/java/org/onosproject/net/resource/ResourceAllocation.java b/core/api/src/main/java/org/onosproject/net/resource/ResourceAllocation.java
index 4dd7381..01b69b2 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/ResourceAllocation.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/ResourceAllocation.java
@@ -21,5 +21,11 @@
  * Abstraction of allocated resource.
  */
 @Beta
-public interface ResourceAllocation extends ResourceRequest {
+public interface ResourceAllocation {
+    /**
+     * Returns the resource type.
+     *
+     * @return the resource type
+     */
+    ResourceType type();
 }
diff --git a/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceAllocation.java b/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceAllocation.java
index de2f52f..74f6e10 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceAllocation.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceAllocation.java
@@ -19,31 +19,59 @@
 import org.onosproject.net.resource.ResourceAllocation;
 import org.onosproject.net.resource.ResourceType;
 
+import java.util.Objects;
+
 /**
  * Representation of allocated bandwidth resource.
  */
-public class BandwidthResourceAllocation extends BandwidthResourceRequest
-        implements ResourceAllocation {
+public class BandwidthResourceAllocation implements ResourceAllocation {
+    private final BandwidthResource bandwidth;
+
+    /**
+     * Creates a new {@link BandwidthResourceRequest} with {@link BandwidthResource}
+     * object.
+     *
+     * @param bandwidth {@link BandwidthResource} object to be requested
+     */
+    public BandwidthResourceAllocation(BandwidthResource bandwidth) {
+        this.bandwidth = bandwidth;
+    }
+
+    /**
+     * Returns the bandwidth resource.
+     *
+     * @return the bandwidth resource
+     */
+    public BandwidthResource bandwidth() {
+        return bandwidth;
+    }
 
     @Override
     public ResourceType type() {
         return ResourceType.BANDWIDTH;
     }
 
-    /**
-     * Creates a new {@link BandwidthResourceAllocation} with {@link BandwidthResource}
-     * object.
-     *
-     * @param bandwidth allocated bandwidth
-     */
-    public BandwidthResourceAllocation(BandwidthResource bandwidth) {
-        super(bandwidth);
+    @Override
+    public int hashCode() {
+        return Objects.hash(bandwidth);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null || getClass() != obj.getClass()) {
+            return false;
+        }
+        final BandwidthResourceAllocation other = (BandwidthResourceAllocation) obj;
+        return Objects.equals(this.bandwidth, other.bandwidth());
     }
 
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
-                .add("bandwidth", bandwidth())
+                .add("bandwidth", bandwidth)
                 .toString();
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceAllocations.java b/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceAllocations.java
index 0227d3f..379bf71 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceAllocations.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceAllocations.java
@@ -59,17 +59,14 @@
         this.allocations = builder.build();
     }
 
-    @Override
     public IntentId intentId() {
         return request.intentId();
     }
 
-    @Override
     public Collection<Link> links() {
         return request.links();
     }
 
-    @Override
     public Set<ResourceRequest> resources() {
         return request.resources();
     }
diff --git a/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceAllocation.java b/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceAllocation.java
index 210bba6..545f025 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceAllocation.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceAllocation.java
@@ -24,8 +24,7 @@
 /**
  * Representation of allocated lambda resource.
  */
-public class LambdaResourceAllocation extends LambdaResourceRequest
-        implements ResourceAllocation {
+public class LambdaResourceAllocation implements ResourceAllocation {
     private final LambdaResource lambda;
 
     @Override
diff --git a/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java
index 172e902..7828867 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java
@@ -15,15 +15,40 @@
  */
 package org.onosproject.net.resource.link;
 
+import java.util.Collection;
 import java.util.Set;
 
 import org.onosproject.net.Link;
+import org.onosproject.net.intent.IntentId;
 import org.onosproject.net.resource.ResourceAllocation;
+import org.onosproject.net.resource.ResourceRequest;
 
 /**
  * Representation of allocated link resources.
  */
-public interface LinkResourceAllocations extends LinkResourceRequest {
+public interface LinkResourceAllocations extends ResourceAllocation {
+
+    /**
+     * Returns the {@link IntentId} associated with the request.
+     *
+     * @return the {@link IntentId} associated with the request
+     */
+    IntentId intentId();
+
+    /**
+     * Returns the set of target links.
+     *
+     * @return the set of target links
+     */
+    Collection<Link> links();
+
+    /**
+     * Returns the set of resource requests.
+     *
+     * @return the set of resource requests
+     */
+    Set<ResourceRequest> resources();
+
     /**
      * Returns allocated resource for the given link.
      *
diff --git a/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceAllocation.java b/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceAllocation.java
index 1b3b8fc..1091153 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceAllocation.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceAllocation.java
@@ -25,8 +25,7 @@
 /**
  * Representation of allocated MPLS label resource.
  */
-public class MplsLabelResourceAllocation extends MplsLabelResourceRequest
-        implements ResourceAllocation {
+public class MplsLabelResourceAllocation implements ResourceAllocation {
     private final MplsLabel mplsLabel;
 
     @Override
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
index e47d1aa..6aeeb56 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
@@ -190,17 +190,14 @@
                     new MplsLabelResourceAllocation(MplsLabel.valueOf(10)));
         }
 
-        @Override
         public IntentId intentId() {
             return null;
         }
 
-        @Override
         public Collection<Link> links() {
             return null;
         }
 
-        @Override
         public Set<ResourceRequest> resources() {
             return null;
         }
