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 a3cc840..7ec9de0 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
@@ -66,6 +66,17 @@
         return new EncodableDiscreteResources(parent, values);
     }
 
+    private static DiscreteResources of(DiscreteResource parent, Map<Class<?>, EncodedDiscreteResources> map) {
+        if (isEmpty(map)) {
+            return DiscreteResources.empty();
+        }
+        return new EncodableDiscreteResources(parent, map);
+    }
+
+    private static boolean isEmpty(Map<Class<?>, EncodedDiscreteResources> map) {
+        return map.values().stream().allMatch(EncodedDiscreteResources::isEmpty);
+    }
+
     EncodableDiscreteResources(DiscreteResource parent, Map<Class<?>, EncodedDiscreteResources> map) {
         this.parent = parent;
         this.map = map;
@@ -73,6 +84,9 @@
 
     @Override
     public Optional<DiscreteResource> lookup(DiscreteResourceId id) {
+        if (!id.parent().filter(parent.id()::equals).isPresent()) {
+            return Optional.empty();
+        }
         DiscreteResource resource = Resources.discrete(id).resource();
         Class<?> cls = getClass(resource);
         return Optional.ofNullable(map.get(cls))
@@ -92,7 +106,7 @@
                                     Map.Entry::getValue,
                                     EncodedDiscreteResources::difference,
                                     LinkedHashMap::new));
-            return new EncodableDiscreteResources(parent, newMap);
+            return of(parent, newMap);
         } else if (other instanceof EmptyDiscreteResources) {
             return this;
         }
@@ -102,8 +116,7 @@
 
     @Override
     public boolean isEmpty() {
-        return map.values().stream()
-                .allMatch(x -> x.isEmpty());
+        return isEmpty(map);
     }
 
     @Override
@@ -125,7 +138,7 @@
                                     EncodedDiscreteResources::add,
                                     LinkedHashMap::new
                             ));
-            return new EncodableDiscreteResources(parent, newMap);
+            return of(parent, newMap);
         } else if (other instanceof EmptyDiscreteResources) {
             return this;
         }
