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 49a56c5..a5f6730 100644
--- a/cli/src/main/java/org/onosproject/cli/net/ResourcesCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/ResourcesCommand.java
@@ -115,7 +115,7 @@
             print("ROOT");
         } else {
             if (resource instanceof ContinuousResource) {
-                String s = ((String) resource.last());
+                String s = resource.simpleTypeName();
                 String simpleName = s.substring(s.lastIndexOf('.') + 1);
                 print("%s%s: %f", Strings.repeat(" ", level),
                                   simpleName,
@@ -126,7 +126,7 @@
                 // Continuous resource is terminal node, stop here
                 return;
             } else {
-                String resourceName = resource.last().getClass().getSimpleName();
+                String resourceName = resource.simpleTypeName();
 
                 String toString = String.valueOf(resource.valueAs(Object.class).orElse(""));
                 if (toString.startsWith(resourceName)) {
@@ -161,7 +161,7 @@
                 nonAggregatable.add(r);
             } else if (Iterables.any(aggregatableTypes, r::isTypeOf)) {
                 // aggregatable & terminal node
-                String className = r.last().getClass().getSimpleName();
+                String className = r.simpleTypeName();
                 aggregatables.put(className, r);
             } else {
                 nonAggregatable.add(r);
@@ -216,8 +216,7 @@
 
         String resourceName;
         if (resource instanceof ContinuousResource) {
-            String s = (String) resource.last();
-            resourceName = s.substring(s.lastIndexOf('.') + 1);
+            resourceName = resource.simpleTypeName();
         } else if (resource instanceof DiscreteResource) {
             // TODO This distributed store access incurs overhead.
             //      This should be merged with the one in printResource()
@@ -225,7 +224,7 @@
                 // resource which has children should be printed
                 return true;
             }
-            resourceName = resource.last().getClass().getSimpleName();
+            resourceName = resource.simpleTypeName();
         } else {
             log.warn("Unexpected resource class: {}", resource.getClass().getSimpleName());
             return false;
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 00221ae..33e25c5 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
@@ -49,6 +49,11 @@
     }
 
     @Override
+    public String simpleTypeName() {
+        return id.simpleTypeName();
+    }
+
+    @Override
     public boolean isTypeOf(Class<?> type) {
         checkNotNull(type);
 
@@ -98,14 +103,6 @@
     }
 
     @Override
-    public Object last() {
-        if (id.components().isEmpty()) {
-            return null;
-        }
-        return id.components().get(id.components().size() - 1);
-    }
-
-    @Override
     public DiscreteResource child(Object child) {
         throw new UnsupportedOperationException();
     }
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResourceId.java b/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResourceId.java
index 4c8f466..8a042c8 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResourceId.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResourceId.java
@@ -47,6 +47,11 @@
         return components;
     }
 
+    @Override
+    String simpleTypeName() {
+        return name;
+    }
+
     /**
      * {@inheritDoc}
      *
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 beb564a..cc3b30a 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
@@ -46,6 +46,11 @@
     }
 
     @Override
+    public String simpleTypeName() {
+        return id.simpleTypeName();
+    }
+
+    @Override
     public boolean isTypeOf(Class<?> type) {
         checkNotNull(type);
 
@@ -80,14 +85,6 @@
         return Optional.of(value);
     }
 
-    @Override
-    public Object last() {
-        if (id.components().isEmpty()) {
-            return null;
-        }
-        return id.components().get(id.components().size() - 1);
-    }
-
     private boolean isRoot() {
         return id.equals(ResourceId.ROOT);
     }
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResourceId.java b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResourceId.java
index 0e38f5e..70e0119 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResourceId.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResourceId.java
@@ -45,6 +45,15 @@
     }
 
     @Override
+    String simpleTypeName() {
+        if (components.isEmpty()) {
+            return "Root";
+        }
+
+        return components.get(components.size() - 1).getClass().getSimpleName();
+    }
+
+    @Override
     public DiscreteResourceId 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 5572592..1548717 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,17 @@
     ResourceId id();
 
     /**
+     * Returns the simple type name of this resource.
+     *
+     * Example:<br>
+     * Resource: DeviceId:1/PortNumber:1/VlanId:200<br>
+     * Simple type name: VlanId<br>
+     *
+     * @return the simple type name of this resource
+     */
+    String simpleTypeName();
+
+    /**
      * Checks if the type of this instance is the specified type.
      *
      * @param type type of resource to be checked
@@ -75,14 +86,6 @@
     <T> Optional<T> valueAs(Class<T> type);
 
     /**
-     * Returns the last component of this instance.
-     *
-     * @return the last component of this instance.
-     * The return value is equal to the last object of {@code components()}.
-     */
-    Object last();
-
-    /**
      * Returns the parent resource of this instance.
      * E.g. if this resource is Link:1/VLAN ID:100, the return value is the resource for Link:1.
      *
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/ResourceId.java b/core/api/src/main/java/org/onosproject/net/newresource/ResourceId.java
index 8fcccb7..002dc87 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/ResourceId.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/ResourceId.java
@@ -29,6 +29,8 @@
 
     abstract ImmutableList<Object> components();
 
+    abstract String simpleTypeName();
+
     /**
      * Returns the parent resource ID of this instance.
      *
diff --git a/core/api/src/test/java/org/onosproject/net/newresource/ContinuousResourceIdTest.java b/core/api/src/test/java/org/onosproject/net/newresource/ContinuousResourceIdTest.java
index cf6e0e8..1e79f81 100644
--- a/core/api/src/test/java/org/onosproject/net/newresource/ContinuousResourceIdTest.java
+++ b/core/api/src/test/java/org/onosproject/net/newresource/ContinuousResourceIdTest.java
@@ -21,6 +21,9 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
 
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
 /**
  * Unit test for ContinuousResourceId.
  */
@@ -42,4 +45,11 @@
         new EqualsTester()
                 .addEqualityGroup(id1, sameAsId1);
     }
+
+    @Test
+    public void testSimpleTypeName() {
+        ContinuousResourceId id1 = Resources.continuous(D1, P1, Bandwidth.class).resource(BW1.bps()).id();
+
+        assertThat(id1.simpleTypeName(), is("Bandwidth"));
+    }
 }
diff --git a/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceIdTest.java b/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceIdTest.java
index 6178150..aeb950d 100644
--- a/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceIdTest.java
+++ b/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceIdTest.java
@@ -21,6 +21,9 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
 
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
 /**
  * Unit test for DiscreteResourceId.
  */
@@ -41,4 +44,15 @@
                 .addEqualityGroup(id1, sameAsId1)
                 .addEqualityGroup(id2);
     }
+
+    @Test
+    public void testSimpleTypeName() {
+        DiscreteResourceId id = Resources.discrete(D1, P1, VLAN1).id();
+        assertThat(id.simpleTypeName(), is("VlanId"));
+    }
+
+    @Test
+    public void testSimpleTypeNameOfRoot() {
+        assertThat(ResourceId.ROOT.simpleTypeName(), is("Root"));
+    }
 }
diff --git a/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceTest.java b/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceTest.java
index 7333ef7..0001c70 100644
--- a/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceTest.java
+++ b/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceTest.java
@@ -91,14 +91,6 @@
     }
 
     @Test
-    public void testBase() {
-        DiscreteResource resource = Resources.discrete(D1).resource();
-
-        DeviceId child = (DeviceId) resource.last();
-        assertThat(child, is(D1));
-    }
-
-    @Test
     public void testValueAs() {
         DiscreteResource resource = Resources.discrete(D1).resource();
 
