diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
index 3b8273f..69645b1 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
@@ -48,6 +48,7 @@
 
 import java.util.Collection;
 import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -333,14 +334,14 @@
         // it's assumed that the passed "values" is non-empty
 
         // This is 2-pass scan. Nicer to have 1-pass scan
-        List<DiscreteResource> discreteValues = values.stream()
+        Set<DiscreteResource> discreteValues = values.stream()
                 .filter(x -> x instanceof DiscreteResource)
                 .map(x -> (DiscreteResource) x)
-                .collect(Collectors.toList());
-        List<ContinuousResource> continuousValues = values.stream()
+                .collect(Collectors.toCollection(LinkedHashSet::new));
+        Set<ContinuousResource> continuousValues = values.stream()
                 .filter(x -> x instanceof ContinuousResource)
                 .map(x -> (ContinuousResource) x)
-                .collect(Collectors.toList());
+                .collect(Collectors.toCollection(LinkedHashSet::new));
 
         return discreteTxStore.register(key, discreteValues)
                 && continuousTxStore.register(key, continuousValues);
@@ -362,14 +363,14 @@
         // it's assumed that the passed "values" is non-empty
 
         // This is 2-pass scan. Nicer to have 1-pass scan
-        List<DiscreteResource> discreteValues = values.stream()
+        Set<DiscreteResource> discreteValues = values.stream()
                 .filter(x -> x instanceof DiscreteResource)
                 .map(x -> (DiscreteResource) x)
-                .collect(Collectors.toList());
-        List<ContinuousResource> continuousValues = values.stream()
+                .collect(Collectors.toCollection(LinkedHashSet::new));
+        Set<ContinuousResource> continuousValues = values.stream()
                 .filter(x -> x instanceof ContinuousResource)
                 .map(x -> (ContinuousResource) x)
-                .collect(Collectors.toList());
+                .collect(Collectors.toCollection(LinkedHashSet::new));
 
         return discreteTxStore.unregister(key, discreteValues)
                 && continuousTxStore.unregister(key, continuousValues);
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/DiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/DiscreteResources.java
index 3b39120..6c65122 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/DiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/DiscreteResources.java
@@ -18,7 +18,6 @@
 import org.onosproject.net.resource.DiscreteResource;
 import org.onosproject.net.resource.DiscreteResourceId;
 
-import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 
@@ -75,7 +74,7 @@
      * @return true this instance contains a resource included in the given resources,
      * otherwise false.
      */
-    boolean containsAny(List<DiscreteResource> other);
+    boolean containsAny(Set<DiscreteResource> other);
 
     /**
      * Returns a union set of this instance and the given instance.
@@ -93,7 +92,7 @@
      * @param removed resources
      * @return a new DiscreteResources instance representing a difference set
      */
-    DiscreteResources remove(List<DiscreteResource> removed);
+    DiscreteResources remove(Set<DiscreteResource> removed);
 
     /**
      * Returns all of resources this instance holds.
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EmptyDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EmptyDiscreteResources.java
index 6699787..87da883 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EmptyDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EmptyDiscreteResources.java
@@ -19,7 +19,6 @@
 import org.onosproject.net.resource.DiscreteResource;
 import org.onosproject.net.resource.DiscreteResourceId;
 
-import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 
@@ -48,7 +47,7 @@
     }
 
     @Override
-    public boolean containsAny(List<DiscreteResource> other) {
+    public boolean containsAny(Set<DiscreteResource> other) {
         return false;
     }
 
@@ -58,7 +57,7 @@
     }
 
     @Override
-    public DiscreteResources remove(List<DiscreteResource> removed) {
+    public DiscreteResources remove(Set<DiscreteResource> removed) {
         return this;
     }
 
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
index 7d0ad68..0f3b43c 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
@@ -23,7 +23,6 @@
 
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
@@ -97,7 +96,7 @@
     }
 
     @Override
-    public boolean containsAny(List<DiscreteResource> other) {
+    public boolean containsAny(Set<DiscreteResource> other) {
         return other.stream()
                 .anyMatch(x -> values().contains(x));
     }
@@ -110,8 +109,8 @@
     }
 
     @Override
-    public DiscreteResources remove(List<DiscreteResource> removed) {
-        return of(parent, Sets.difference(values(), new LinkedHashSet<>(removed)));
+    public DiscreteResources remove(Set<DiscreteResource> removed) {
+        return of(parent, Sets.difference(values(), removed));
     }
 
     @Override
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java
index 161f1ff..94e3c62 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java
@@ -22,7 +22,6 @@
 import org.onosproject.net.resource.Resources;
 
 import java.util.LinkedHashSet;
-import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
@@ -68,7 +67,7 @@
     }
 
     @Override
-    public boolean containsAny(List<DiscreteResource> other) {
+    public boolean containsAny(Set<DiscreteResource> other) {
         return other.stream().anyMatch(values::contains);
     }
 
@@ -82,10 +81,8 @@
 
     // returns a new instance, not mutate the current instance
     @Override
-    public DiscreteResources remove(List<DiscreteResource> removed) {
-        Set<DiscreteResource> newValues = new LinkedHashSet<>(this.values);
-        newValues.removeAll(removed);
-        return new GenericDiscreteResources(newValues);
+    public DiscreteResources remove(Set<DiscreteResource> removed) {
+        return of(Sets.difference(this.values, removed));
     }
 
     @Override
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceSubStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceSubStore.java
index 108d858..3569b90 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceSubStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceSubStore.java
@@ -28,7 +28,6 @@
 import org.slf4j.LoggerFactory;
 
 import java.util.LinkedHashSet;
-import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -61,13 +60,12 @@
                 .findFirst();
     }
 
-    boolean register(DiscreteResourceId key, List<ContinuousResource> values) {
+    boolean register(DiscreteResourceId key, Set<ContinuousResource> requested) {
         // short-circuit: receiving empty resource is regarded as success
-        if (values.isEmpty()) {
+        if (requested.isEmpty()) {
             return true;
         }
 
-        Set<ContinuousResource> requested = new LinkedHashSet<>(values);
         Set<ContinuousResource> oldValues = childMap.putIfAbsent(key, requested);
         if (oldValues == null) {
             return true;
@@ -94,7 +92,7 @@
         return childMap.replace(key, oldValues, newValues);
     }
 
-    boolean unregister(DiscreteResourceId key, List<ContinuousResource> values) {
+    boolean unregister(DiscreteResourceId key, Set<ContinuousResource> values) {
         // short-circuit: receiving empty resource is regarded as success
         if (values.isEmpty()) {
             return true;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceSubStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceSubStore.java
index e98cb20..d2cecb0 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceSubStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceSubStore.java
@@ -24,9 +24,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.LinkedHashSet;
-import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 
 import static org.onosproject.store.resource.impl.ConsistentResourceStore.SERIALIZER;
 
@@ -54,13 +53,13 @@
         return values.lookup(id);
     }
 
-    boolean register(DiscreteResourceId key, List<DiscreteResource> values) {
+    boolean register(DiscreteResourceId key, Set<DiscreteResource> values) {
         // short-circuit: receiving empty resource is regarded as success
         if (values.isEmpty()) {
             return true;
         }
 
-        DiscreteResources requested = DiscreteResources.of(new LinkedHashSet<>(values));
+        DiscreteResources requested = DiscreteResources.of(values);
         DiscreteResources oldValues = childMap.putIfAbsent(key, requested);
         if (oldValues == null) {
             return true;
@@ -77,7 +76,7 @@
         return childMap.replace(key, oldValues, newValues);
     }
 
-    boolean unregister(DiscreteResourceId key, List<DiscreteResource> values) {
+    boolean unregister(DiscreteResourceId key, Set<DiscreteResource> values) {
         // short-circuit: receiving empty resource is regarded as success
         if (values.isEmpty()) {
             return true;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java
index 7b15a0a..ceb115d 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java
@@ -21,7 +21,6 @@
 import org.onosproject.net.resource.Resources;
 
 import java.util.LinkedHashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
@@ -75,9 +74,9 @@
     }
 
     @Override
-    public boolean containsAny(List<DiscreteResource> other) {
-        Map<Boolean, List<DiscreteResource>> partitioned = other.stream()
-                .collect(Collectors.partitioningBy(CODECS::isEncodable));
+    public boolean containsAny(Set<DiscreteResource> other) {
+        Map<Boolean, Set<DiscreteResource>> partitioned = other.stream()
+                .collect(Collectors.partitioningBy(CODECS::isEncodable, Collectors.toCollection(LinkedHashSet::new)));
         return generics.containsAny(partitioned.get(false)) || encodables.containsAny(partitioned.get(true));
     }
 
@@ -87,8 +86,8 @@
     }
 
     @Override
-    public DiscreteResources remove(List<DiscreteResource> removed) {
-        return of(Sets.difference(values(), new LinkedHashSet<>(removed)));
+    public DiscreteResources remove(Set<DiscreteResource> removed) {
+        return of(Sets.difference(values(), removed));
     }
 
     @Override
