diff --git a/cli/src/main/java/org/onosproject/cli/net/ResourcesCommand.java b/cli/src/main/java/org/onosproject/cli/net/ResourcesCommand.java
index d6e637f..3b8ca89 100644
--- a/cli/src/main/java/org/onosproject/cli/net/ResourcesCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/ResourcesCommand.java
@@ -24,6 +24,7 @@
 import java.util.Arrays;
 import java.util.Collections;
 
+import com.google.common.collect.Iterables;
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.commands.Option;
@@ -158,7 +159,7 @@
             if (r instanceof ContinuousResource) {
                 // non-aggregatable terminal node
                 nonAggregatable.add(r);
-            } else if (aggregatableTypes.contains(r.last().getClass())) {
+            } else if (Iterables.any(aggregatableTypes, r::isTypeOf)) {
                 // aggregatable & terminal node
                 String className = r.last().getClass().getSimpleName();
                 aggregatables.put(className, r);
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java b/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java
index fcfcdd5..a55124e 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java
@@ -48,6 +48,14 @@
         return id;
     }
 
+    @Override
+    public boolean isTypeOf(Class<?> type) {
+        checkNotNull(type);
+
+        String typeName = (String) id.components().get(id.components().size() - 1);
+        return typeName.equals(type.getCanonicalName());
+    }
+
     /**
      * The user of this methods must receive the return value as Double or double.
      * Otherwise, this methods throws an exception.
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java
index 867cfbf..6ce51d3 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java
@@ -45,6 +45,17 @@
         return id;
     }
 
+    @Override
+    public boolean isTypeOf(Class<?> type) {
+        checkNotNull(type);
+
+        if (isRoot()) {
+            return false;
+        }
+
+        return type.isAssignableFrom(id.components().get(id.components().size() - 1).getClass());
+    }
+
     /**
      * The user of this methods must receive the return value as the correct type.
      * Otherwise, this methods throws an exception.
@@ -78,6 +89,10 @@
         return id.components().get(id.components().size() - 1);
     }
 
+    private boolean isRoot() {
+        return id.equals(ResourceId.ROOT);
+    }
+
     @Override
     public DiscreteResource child(Object child) {
         checkArgument(!(child instanceof Class<?>));
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/Resource.java b/core/api/src/main/java/org/onosproject/net/newresource/Resource.java
index 1e3e61a..f2a0c73 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/Resource.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/Resource.java
@@ -48,6 +48,14 @@
     ResourceId id();
 
     /**
+     * Checks if the type of this instance is the specified type.
+     *
+     * @param type type of resource to be checked
+     * @return true if this resource is the type of the specified type. Otherwise, false.
+     */
+    boolean isTypeOf(Class<?> type);
+
+    /**
      * Checks if the type of this instance is the sub-type of the specified type.
      *
      * @param ancestor type of resource to be checked.
diff --git a/core/api/src/test/java/org/onosproject/net/newresource/ResourceTest.java b/core/api/src/test/java/org/onosproject/net/newresource/ResourceTest.java
index a92bbd6..bc6fd29 100644
--- a/core/api/src/test/java/org/onosproject/net/newresource/ResourceTest.java
+++ b/core/api/src/test/java/org/onosproject/net/newresource/ResourceTest.java
@@ -90,6 +90,19 @@
     }
 
     @Test
+    public void testTypeOf() {
+        DiscreteResource discrete = Resources.discrete(D1, P1, VLAN1).resource();
+        assertThat(discrete.isTypeOf(DeviceId.class), is(false));
+        assertThat(discrete.isTypeOf(PortNumber.class), is(false));
+        assertThat(discrete.isTypeOf(VlanId.class), is(true));
+
+        ContinuousResource continuous = Resources.continuous(D1, P1, Bandwidth.class).resource(BW1.bps());
+        assertThat(continuous.isTypeOf(DeviceId.class), is(false));
+        assertThat(continuous.isTypeOf(PortNumber.class), is(false));
+        assertThat(continuous.isTypeOf(Bandwidth.class), is(true));
+    }
+
+    @Test
     public void testSubTypeOf() {
         DiscreteResource discrete = Resources.discrete(D1, P1, VLAN1).resource();
         assertThat(discrete.isSubTypeOf(DeviceId.class), is(true));
diff --git a/core/store/dist/src/main/java/org/onosproject/store/newresource/impl/ConsistentResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/newresource/impl/ConsistentResourceStore.java
index a8ddf9a..16bbad3 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/newresource/impl/ConsistentResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/newresource/impl/ConsistentResourceStore.java
@@ -429,7 +429,7 @@
         }
 
         Stream<DiscreteResource> discrete = children.value().stream()
-                .filter(x -> x.last().getClass().equals(cls))
+                .filter(x -> x.isTypeOf(cls))
                 .filter(x -> x instanceof DiscreteResource)
                 .map(x -> ((DiscreteResource) x))
                 .filter(x -> discreteConsumers.containsKey(x.id()));
