diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MplsPathIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MplsPathIntentCompiler.java
index 5fd1c85..449b898 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MplsPathIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MplsPathIntentCompiler.java
@@ -47,6 +47,7 @@
 import org.onosproject.net.intent.IntentExtensionService;
 import org.onosproject.net.intent.MplsPathIntent;
 import org.onosproject.net.link.LinkStore;
+import org.onosproject.net.resource.ResourceRequest;
 import org.onosproject.net.resource.link.DefaultLinkResourceRequest;
 import org.onosproject.net.resource.link.LinkResourceAllocations;
 import org.onosproject.net.resource.link.LinkResourceRequest;
@@ -55,13 +56,18 @@
 import org.onosproject.net.resource.link.MplsLabelResourceAllocation;
 import org.onosproject.net.resource.ResourceAllocation;
 import org.onosproject.net.resource.ResourceType;
+import org.onosproject.net.resource.link.MplsLabelResourceRequest;
 import org.slf4j.Logger;
 
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
+import java.util.stream.StreamSupport;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -117,11 +123,34 @@
             linkRequest.add(linkStore.getLink(link.dst(), link.src()));
         }
 
-        LinkResourceRequest.Builder request = DefaultLinkResourceRequest
-                .builder(intent.id(), linkRequest).addMplsRequest();
-        LinkResourceAllocations reqMpls = resourceService
-                .requestResources(request.build());
-        return reqMpls;
+        Map<Link, MplsLabel> labels = findMplsLabels(linkRequest);
+
+        LinkResourceRequest request = DefaultLinkResourceRequest
+                .builder(intent.id(), linkRequest)
+                .addMplsRequest(labels)
+                .build();
+        return resourceService.requestResources(request);
+    }
+
+    private Map<Link, MplsLabel> findMplsLabels(Set<Link> links) {
+        Map<Link, MplsLabel> labels = new HashMap<>();
+        for (Link link : links) {
+            Optional<MplsLabel> label = findMplsLabel(link);
+            if (label.isPresent()) {
+                labels.put(link, label.get());
+            }
+        }
+
+        return labels;
+    }
+
+    private Optional<MplsLabel> findMplsLabel(Link link) {
+        Iterable<ResourceRequest> freeLabels = resourceService.getAvailableResources(link);
+        return StreamSupport.stream(freeLabels.spliterator(), false)
+                .filter(x -> x instanceof MplsLabelResourceRequest)
+                .map(x -> (MplsLabelResourceRequest) x)
+                .map(MplsLabelResourceRequest::mplsLabel)
+                .findFirst();
     }
 
     private MplsLabel getMplsLabel(LinkResourceAllocations allocations, Link link) {
diff --git a/core/net/src/main/java/org/onosproject/net/resource/impl/LinkResourceManager.java b/core/net/src/main/java/org/onosproject/net/resource/impl/LinkResourceManager.java
index fe05379..7eb189e 100644
--- a/core/net/src/main/java/org/onosproject/net/resource/impl/LinkResourceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/resource/impl/LinkResourceManager.java
@@ -45,7 +45,6 @@
 import org.onosproject.net.resource.link.MplsLabelResourceRequest;
 import org.slf4j.Logger;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -84,28 +83,6 @@
     }
 
 
-    /**
-     * Returns available MPLS label on specified link.
-     *
-     * @param link the link
-     * @return available MPLS labels on specified link
-     */
-    private Iterable<MplsLabel> getAvailableMplsLabels(Link link) {
-        Set<ResourceAllocation> resAllocs = store.getFreeResources(link);
-        if (resAllocs == null) {
-            return Collections.emptySet();
-        }
-        Set<MplsLabel> mplsLabels = new HashSet<>();
-        for (ResourceAllocation res : resAllocs) {
-            if (res.type() == ResourceType.MPLS_LABEL) {
-
-                mplsLabels.add(((MplsLabelResourceAllocation) res).mplsLabel());
-            }
-        }
-
-        return mplsLabels;
-    }
-
     @Override
     public LinkResourceAllocations requestResources(LinkResourceRequest req) {
         checkPermission(LINK_WRITE);
