diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalCircuitIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalCircuitIntentCompiler.java
index ee04aab..2c547ea 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalCircuitIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalCircuitIntentCompiler.java
@@ -313,9 +313,11 @@
             OchPort ochPort = (OchPort) deviceService.getPort(ochCP.deviceId(), ochCP.port());
             Optional<IntentId> intentId =
                     resourceService.getResourceAllocation(ResourcePath.discrete(ochCP.deviceId(), ochCP.port()))
+                            .stream()
                             .map(ResourceAllocation::consumer)
                             .filter(x -> x instanceof IntentId)
-                            .map(x -> (IntentId) x);
+                            .map(x -> (IntentId) x)
+                            .findAny();
 
             if (isAvailable(intentId.orElse(null))) {
                 return ochPort;
@@ -332,9 +334,12 @@
 
             Optional<IntentId> intentId =
                     resourceService.getResourceAllocation(ResourcePath.discrete(oduPort.deviceId(), port.number()))
+                            .stream()
                             .map(ResourceAllocation::consumer)
                             .filter(x -> x instanceof IntentId)
-                            .map(x -> (IntentId) x);
+                            .map(x -> (IntentId) x)
+                            .findAny();
+
             if (isAvailable(intentId.orElse(null))) {
                 return (OchPort) port;
             }
diff --git a/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceManager.java b/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceManager.java
index a5aae0f..eaf4b59 100644
--- a/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceManager.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2015 Open Networking Laboratory
+ * Copyright 2015-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.
@@ -23,6 +23,7 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
+import org.onlab.util.GuavaCollectors;
 import org.onosproject.event.AbstractListenerManager;
 import org.onosproject.net.newresource.ResourceAdminService;
 import org.onosproject.net.newresource.ResourceAllocation;
@@ -34,10 +35,8 @@
 import org.onosproject.net.newresource.ResourceStore;
 import org.onosproject.net.newresource.ResourceStoreDelegate;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -107,11 +106,13 @@
     }
 
     @Override
-    public Optional<ResourceAllocation> getResourceAllocation(ResourcePath resource) {
+    public List<ResourceAllocation> getResourceAllocation(ResourcePath resource) {
         checkNotNull(resource);
 
-        Optional<ResourceConsumer> consumer = store.getConsumer(resource);
-        return consumer.map(x -> new ResourceAllocation(resource, x));
+        List<ResourceConsumer> consumers = store.getConsumers(resource);
+        return consumers.stream()
+                .map(x -> new ResourceAllocation(resource, x))
+                .collect(GuavaCollectors.toImmutableList());
     }
 
     @Override
@@ -119,17 +120,12 @@
         checkNotNull(parent);
         checkNotNull(cls);
 
+        // We access store twice in this method, then the store may be updated by others
         Collection<ResourcePath> resources = store.getAllocatedResources(parent, cls);
-        List<ResourceAllocation> allocations = new ArrayList<>(resources.size());
-        for (ResourcePath resource: resources) {
-            // We access store twice in this method, then the store may be updated by others
-            Optional<ResourceConsumer> consumer = store.getConsumer(resource);
-            if (consumer.isPresent()) {
-                allocations.add(new ResourceAllocation(resource, consumer.get()));
-            }
-        }
-
-        return allocations;
+        return resources.stream()
+                .flatMap(resource -> store.getConsumers(resource).stream()
+                        .map(consumer -> new ResourceAllocation(resource, consumer)))
+                .collect(GuavaCollectors.toImmutableList());
     }
 
     @Override
@@ -149,7 +145,7 @@
         Collection<ResourcePath> children = store.getChildResources(parent);
         return children.stream()
                 // We access store twice in this method, then the store may be updated by others
-                .filter(x -> !store.getConsumer(x).isPresent())
+                .filter(store::isAvailable)
                 .collect(Collectors.toList());
     }
 
@@ -157,8 +153,7 @@
     public boolean isAvailable(ResourcePath resource) {
         checkNotNull(resource);
 
-        Optional<ResourceConsumer> consumer = store.getConsumer(resource);
-        return !consumer.isPresent();
+        return store.isAvailable(resource);
     }
 
     @Override
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MockResourceService.java b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MockResourceService.java
index f5d3d0f..2926346 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MockResourceService.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MockResourceService.java
@@ -66,9 +66,10 @@
     }
 
     @Override
-    public Optional<ResourceAllocation> getResourceAllocation(ResourcePath resource) {
+    public List<ResourceAllocation> getResourceAllocation(ResourcePath resource) {
         return Optional.ofNullable(assignment.get(resource))
-                .map(x -> new ResourceAllocation(resource, x));
+                .map(x -> ImmutableList.of(new ResourceAllocation(resource, x)))
+                .orElse(ImmutableList.of());
     }
 
     @Override
