diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ContinuousResourceAllocation.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ContinuousResourceAllocation.java
index f5dafc9..16488f1 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ContinuousResourceAllocation.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ContinuousResourceAllocation.java
@@ -16,8 +16,14 @@
 package org.onosproject.store.resource.impl;
 
 import com.google.common.collect.ImmutableList;
+import org.onlab.util.GuavaCollectors;
 import org.onosproject.net.resource.ContinuousResource;
 import org.onosproject.net.resource.ResourceAllocation;
+import org.onosproject.net.resource.ResourceConsumerId;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 // internal use only
 final class ContinuousResourceAllocation {
@@ -37,4 +43,24 @@
     ImmutableList<ResourceAllocation> allocations() {
         return allocations;
     }
+
+    ContinuousResourceAllocation release(ContinuousResource resource, ResourceConsumerId consumerId) {
+        List<ResourceAllocation> nonMatched = allocations.stream()
+                .filter(x -> !(x.consumerId().equals(consumerId) &&
+                        ((ContinuousResource) x.resource()).value() == resource.value()))
+                .collect(Collectors.toList());
+
+        List<ResourceAllocation> matched = allocations.stream()
+                .filter(x -> (x.consumerId().equals(consumerId) &&
+                        ((ContinuousResource) x.resource()).value() == resource.value()))
+                .collect(Collectors.toList());
+
+        if (matched.size() > 1) {
+            matched.remove(0);
+        }
+
+        return new ContinuousResourceAllocation(original,
+                Stream.concat(nonMatched.stream(), matched.stream())
+                        .collect(GuavaCollectors.toImmutableList()));
+    }
 }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceStore.java
index f926369..c8b6c20 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceStore.java
@@ -17,7 +17,6 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Sets;
-import org.onlab.util.GuavaCollectors;
 import org.onosproject.net.resource.ContinuousResource;
 import org.onosproject.net.resource.ContinuousResourceId;
 import org.onosproject.net.resource.DiscreteResourceId;
@@ -33,7 +32,6 @@
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static org.onosproject.store.resource.impl.ConsistentResourceStore.SERIALIZER;
@@ -168,25 +166,8 @@
 
     boolean release(ContinuousResource resource, ResourceConsumerId consumerId) {
         ContinuousResourceAllocation oldAllocation = consumers.get(resource.id());
+        ContinuousResourceAllocation newAllocation = oldAllocation.release(resource, consumerId);
 
-        List<ResourceAllocation> nonMatched = oldAllocation.allocations().stream()
-                .filter(x -> !(x.consumerId().equals(consumerId) &&
-                        ((ContinuousResource) x.resource()).value() == resource.value()))
-                .collect(Collectors.toList());
-
-        List<ResourceAllocation> matched = oldAllocation.allocations().stream()
-                .filter(x -> (x.consumerId().equals(consumerId) &&
-                        ((ContinuousResource) x.resource()).value() == resource.value()))
-                .collect(Collectors.toList());
-
-        if (matched.size() > 1) {
-            matched.remove(0);
-        }
-
-        ImmutableList<ResourceAllocation> finalAllocations = Stream.concat(nonMatched.stream(),
-                matched.stream()).collect(GuavaCollectors.toImmutableList());
-
-        return consumers.replace(resource.id(), oldAllocation,
-                new ContinuousResourceAllocation(oldAllocation.original(), finalAllocations));
+        return consumers.replace(resource.id(), oldAllocation, newAllocation);
     }
 }
