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 d858a88..8761ea3 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
@@ -71,6 +71,7 @@
 
     static final Serializer SERIALIZER = Serializer.using(
             Arrays.asList(KryoNamespaces.API),
+            UnifiedDiscreteResources.class,
             NonEncodableDiscreteResources.class,
             ContinuousResourceAllocation.class);
 
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 8fc0bba..6b7da8e 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
@@ -32,7 +32,17 @@
      * @return a empty set.
      */
     static DiscreteResources empty() {
-        return NonEncodableDiscreteResources.empty();
+        return UnifiedDiscreteResources.empty();
+    }
+
+    /**
+     * Create an instace from the specified resources.
+     *
+     * @param resources resources
+     * @return instance
+     */
+    static DiscreteResources of(List<DiscreteResource> resources) {
+        return UnifiedDiscreteResources.of(resources);
     }
 
     /**
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/NonEncodableDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/NonEncodableDiscreteResources.java
index c285ae5..7b991b4 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/NonEncodableDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/NonEncodableDiscreteResources.java
@@ -34,11 +34,15 @@
         return new NonEncodableDiscreteResources();
     }
 
+    static NonEncodableDiscreteResources of(List<DiscreteResource> resources) {
+        return new NonEncodableDiscreteResources(resources);
+    }
+
     private NonEncodableDiscreteResources() {
         this.values = new LinkedHashSet<>();
     }
 
-    NonEncodableDiscreteResources(List<DiscreteResource> values) {
+    private NonEncodableDiscreteResources(List<DiscreteResource> values) {
         this.values = new LinkedHashSet<>(values);
     }
 
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 2803a3c..d4306a7 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
@@ -59,7 +59,7 @@
             return true;
         }
 
-        DiscreteResources requested = new NonEncodableDiscreteResources(values);
+        DiscreteResources requested = DiscreteResources.of(values);
         DiscreteResources oldValues = childMap.putIfAbsent(key, requested);
         if (oldValues == null) {
             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
new file mode 100644
index 0000000..ec121cd
--- /dev/null
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2016-present 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.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.store.resource.impl;
+
+import org.onosproject.net.resource.DiscreteResource;
+import org.onosproject.net.resource.DiscreteResourceId;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+
+/**
+ * Represents a set of resources containing resources that can be encoded as integer
+ * and those that can't encoded as integer.
+ */
+final class UnifiedDiscreteResources implements DiscreteResources {
+    private final DiscreteResources nonEncodables;
+
+    static DiscreteResources empty() {
+        return new UnifiedDiscreteResources();
+    }
+
+    static DiscreteResources of(List<DiscreteResource> resources) {
+        return new UnifiedDiscreteResources(resources);
+    }
+
+    private UnifiedDiscreteResources() {
+        this.nonEncodables = NonEncodableDiscreteResources.empty();
+    }
+
+    private UnifiedDiscreteResources(List<DiscreteResource> resources) {
+        this.nonEncodables = NonEncodableDiscreteResources.of(resources);
+    }
+
+    @Override
+    public Optional<DiscreteResource> lookup(DiscreteResourceId id) {
+        return nonEncodables.lookup(id);
+    }
+
+    @Override
+    public DiscreteResources difference(DiscreteResources other) {
+        return nonEncodables.difference(other);
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return nonEncodables.isEmpty();
+    }
+
+    @Override
+    public boolean containsAny(List<DiscreteResource> other) {
+        return nonEncodables.containsAny(other);
+    }
+
+    @Override
+    public DiscreteResources add(DiscreteResources other) {
+        return nonEncodables.add(other);
+    }
+
+    @Override
+    public DiscreteResources remove(List<DiscreteResource> removed) {
+        return nonEncodables.remove(removed);
+    }
+
+    @Override
+    public Set<DiscreteResource> values() {
+        return nonEncodables.values();
+    }
+}
