diff --git a/core/api/src/main/java/org/onosproject/store/service/DocumentPath.java b/core/api/src/main/java/org/onosproject/store/service/DocumentPath.java
index 8c969aa..25caabe 100644
--- a/core/api/src/main/java/org/onosproject/store/service/DocumentPath.java
+++ b/core/api/src/main/java/org/onosproject/store/service/DocumentPath.java
@@ -125,9 +125,38 @@
      * @return {@code DocumentPath} instance
      */
     public static DocumentPath from(List<String> elements, String child) {
-        elements = new ArrayList<>(elements);
-        elements.add(child);
-        return from(elements);
+        List<String> concat = new ArrayList<>(elements.size() + 1);
+        concat.addAll(elements);
+        concat.add(child);
+        return from(concat);
+    }
+
+    /**
+     * Creates a new {@code DocumentPath} from a list of path elements.
+     *
+     * @param elements path elements
+     * @param childElms child element
+     * @return {@code DocumentPath} instance
+     */
+    public static DocumentPath from(List<String> elements, String... childElms) {
+        List<String> concat = new ArrayList<>(elements.size() + childElms.length);
+        concat.addAll(elements);
+        concat.addAll(Arrays.asList(childElms));
+        return from(concat);
+    }
+
+    /**
+     * Creates a new DocumentPath element appending {@code childElm} to
+     * this path.
+     *
+     * @param childElms to append
+     * @return this + childElm
+     */
+    public DocumentPath append(List<String> childElms) {
+        List<String> concat = new ArrayList<>(pathElements.size() + childElms.size());
+        concat.addAll(pathElements);
+        concat.addAll(childElms);
+        return from(concat);
     }
 
     /**
