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 f4279e5..c15b8c4 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
@@ -92,7 +92,7 @@
 
     @Override
     public Optional<DiscreteResource> parent() {
-        return Optional.ofNullable(id.parent()).map(DiscreteResource::new);
+        return id.parent().map(DiscreteResource::new);
     }
 
     @Override
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 19a9162..03b634b 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
@@ -19,6 +19,7 @@
 import com.google.common.collect.ImmutableList;
 
 import java.util.Objects;
+import java.util.Optional;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -72,14 +73,14 @@
     }
 
     @Override
-    DiscreteResourceId parent() {
+    public Optional<DiscreteResourceId> parent() {
         if (components.size() == 0) {
-            return null;
+            return Optional.empty();
         }
         if (components.size() == 1) {
-            return ROOT;
+            return Optional.of(ROOT);
         } else {
-            return new DiscreteResourceId(components.subList(0, components.size() - 1));
+            return Optional.of(new DiscreteResourceId(components.subList(0, components.size() - 1)));
         }
     }
 
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 e88a2a3..c8839a6 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
@@ -90,7 +90,7 @@
 
     @Override
     public Optional<DiscreteResource> parent() {
-        return Optional.ofNullable(id.parent()).map(DiscreteResource::new);
+        return id.parent().map(DiscreteResource::new);
     }
 
     @Override
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 92a98b8..80c8f59 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
@@ -19,6 +19,7 @@
 import com.google.common.collect.ImmutableList;
 
 import java.util.Objects;
+import java.util.Optional;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -63,14 +64,14 @@
     }
 
     @Override
-    DiscreteResourceId parent() {
+    public Optional<DiscreteResourceId> parent() {
         if (components.size() == 0) {
-            return null;
+            return Optional.empty();
         }
         if (components.size() == 1) {
-            return ROOT;
+            return Optional.of(ROOT);
         } else {
-            return new DiscreteResourceId(components.subList(0, components.size() - 1));
+            return Optional.of(new DiscreteResourceId(components.subList(0, components.size() - 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 7638f64..6f785df 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
@@ -21,6 +21,7 @@
 import org.onosproject.net.PortNumber;
 
 import java.util.Arrays;
+import java.util.Optional;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
@@ -66,7 +67,13 @@
                 .add(Arrays.copyOfRange(components, 0, components.length - 1)), (Class<?>) last);
     }
 
-    abstract DiscreteResourceId parent();
+    /**
+     * Returns the parent resource ID of this instance.
+     *
+     * @return the parent resource path of this instance.
+     * If there is no parent, empty instance will be returned.
+     */
+    public abstract Optional<DiscreteResourceId> parent();
 
     /**
      * Returns a resource ID of a child of this resource based on the specified object.
