diff --git a/core/api/src/main/java/org/onlab/onos/net/resource/BandwidthResourceRequest.java b/core/api/src/main/java/org/onlab/onos/net/resource/BandwidthResourceRequest.java
index 2ea24b8..c958271 100644
--- a/core/api/src/main/java/org/onlab/onos/net/resource/BandwidthResourceRequest.java
+++ b/core/api/src/main/java/org/onlab/onos/net/resource/BandwidthResourceRequest.java
@@ -3,11 +3,34 @@
 /**
  * Representation of a request for bandwidth resource.
  */
-public interface BandwidthResourceRequest {
+public final class BandwidthResourceRequest implements ResourceRequest {
+    private final Bandwidth bandwidth;
+
+    /**
+     * Creates a new {@link BandwidthResourceRequest} with {@link Bandwidth}
+     * object.
+     *
+     * @param bandwidth {@link Bandwidth} object to be requested
+     */
+    public BandwidthResourceRequest(Bandwidth bandwidth) {
+        this.bandwidth = bandwidth;
+    }
+
+    /**
+     * Creates a new {@link BandwidthResourceRequest} with bandwidth value.
+     *
+     * @param bandwidth bandwidth value to be requested
+     */
+    public BandwidthResourceRequest(double bandwidth) {
+        this.bandwidth = Bandwidth.valueOf(bandwidth);
+    }
+
     /**
      * Returns the bandwidth resource.
      *
      * @return the bandwidth resource
      */
-    Bandwidth bandwidth();
+    Bandwidth bandwidth() {
+        return bandwidth;
+    }
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/resource/LambdaResourceRequest.java b/core/api/src/main/java/org/onlab/onos/net/resource/LambdaResourceRequest.java
index dfb3b81..30caa2d 100644
--- a/core/api/src/main/java/org/onlab/onos/net/resource/LambdaResourceRequest.java
+++ b/core/api/src/main/java/org/onlab/onos/net/resource/LambdaResourceRequest.java
@@ -3,6 +3,6 @@
 /**
  * Representation of a request for lambda resource.
  */
-public interface LambdaResourceRequest {
+public class LambdaResourceRequest implements ResourceRequest {
 
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/resource/LinkResourceRequest.java b/core/api/src/main/java/org/onlab/onos/net/resource/LinkResourceRequest.java
index 3f9bf79..331bf83 100644
--- a/core/api/src/main/java/org/onlab/onos/net/resource/LinkResourceRequest.java
+++ b/core/api/src/main/java/org/onlab/onos/net/resource/LinkResourceRequest.java
@@ -1,34 +1,127 @@
 package org.onlab.onos.net.resource;
 
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Set;
 
 import org.onlab.onos.net.Link;
 import org.onlab.onos.net.intent.IntentId;
 
+import com.google.common.collect.ImmutableSet;
+
 /**
  * Representation of a request for link resource.
  */
-public interface LinkResourceRequest extends ResourceRequest {
+public final class LinkResourceRequest implements ResourceRequest {
+    // TODO: should this class be interface?
+
+    private final IntentId intentId;
+    private final Collection<Link> links;
+    private final Set<ResourceRequest> resources;
+
+    /**
+     * Creates a new link resource request with the given ID, links, and
+     * resource requests.
+     *
+     * @param intentId intent ID related to this request
+     * @param links a set of links for the request
+     * @param resources a set of resources to be requested
+     */
+    private LinkResourceRequest(IntentId intentId,
+            Collection<Link> links,
+            Set<ResourceRequest> resources) {
+        this.intentId = intentId;
+        this.links = ImmutableSet.copyOf(links);
+        this.resources = ImmutableSet.copyOf(resources);
+    }
 
     /**
      * Returns the {@link IntentId} associated with the request.
      *
      * @return the {@link IntentId} associated with the request
      */
-    IntentId intendId();
+    IntentId intendId() {
+        return intentId;
+    }
 
     /**
      * Returns the set of target links.
      *
      * @return the set of target links
      */
-    Collection<Link> links();
+    Collection<Link> links() {
+        return links;
+    }
 
     /**
      * Returns the set of resource requests.
      *
      * @return the set of resource requests
      */
-    Set<ResourceRequest> resources();
+    Set<ResourceRequest> resources() {
+        return resources;
+    }
+
+    /**
+     * Returns builder of link resource request.
+     *
+     * @param intentId intent ID related to this request
+     * @param links a set of links for the request
+     * @return builder of link resource request
+     */
+    public static LinkResourceRequest.Builder builder(
+            IntentId intentId, Collection<Link> links) {
+        return new Builder(intentId, links);
+    }
+
+    /**
+     * Builder of link resource request.
+     */
+    public static final class Builder {
+        private IntentId intentId;
+        private Collection<Link> links;
+        private Set<ResourceRequest> resources;
+
+        /**
+         * Creates a new link resource request.
+         *
+         * @param intentId intent ID related to this request
+         * @param links a set of links for the request
+         */
+        private Builder(IntentId intentId, Collection<Link> links) {
+            this.intentId = intentId;
+            this.links = links;
+            this.resources = new HashSet<>();
+        }
+
+        /**
+         * Adds lambda request.
+         *
+         * @return self
+         */
+        public Builder addLambdaRequest() {
+            resources.add(new LambdaResourceRequest());
+            return this;
+        }
+
+        /**
+         * Adds bandwidth request with bandwidth value.
+         *
+         * @param bandwidth bandwidth value to be requested
+         * @return self
+         */
+        public Builder addBandwidthRequest(double bandwidth) {
+            resources.add(new BandwidthResourceRequest(bandwidth));
+            return this;
+        }
+
+        /**
+         * Returns link resource request.
+         *
+         * @return link resource request
+         */
+        public LinkResourceRequest build() {
+            return new LinkResourceRequest(intentId, links, resources);
+        }
+    }
 }
