diff --git a/doc/transition.dox b/doc/transition.dox
index 26acd46..bf15c8c 100644
--- a/doc/transition.dox
+++ b/doc/transition.dox
@@ -87,6 +87,7 @@
  * -                         | ::lys_find_xpath()                   | New function reflecting updated @ref howtoXPath\.
  * lys_xpath_atomize()       | ::lys_find_xpath_atoms()             | Rename to unify with the new API, extends ::lys_find_xpath().
  * -                         | ::lys_find_expr_atoms()              | Extension of ::lys_find_xpath().
+ * %lyd_path()               | ::lyd_path()                         | Same purpose, just extended functionality.
  * lyd_find_path()           | ::lyd_find_xpath()                   | Rename to unify with the new API.
  * -                         | ::lyxp_get_expr()                    | Added functionality due to the changed representation of XPath expressions.
  * ly_path_data2schema()     | -                                    | Removed since the schema path is not available in API.
diff --git a/src/log.c b/src/log.c
index 5208c94..8dde303 100644
--- a/src/log.c
+++ b/src/log.c
@@ -429,7 +429,7 @@
         LY_CHECK_ERR_RET(!(*path), LOGMEM(ctx), LY_EMEM);
         break;
     case LY_VLOG_LYD:
-        *path = lyd_path(elem, LYD_PATH_LOG, NULL, 0);
+        *path = lyd_path(elem, LYD_PATH_STD, NULL, 0);
         LY_CHECK_ERR_RET(!(*path), LOGMEM(ctx), LY_EMEM);
         break;
     default:
diff --git a/src/tree_data.c b/src/tree_data.c
index e50849b..e466505 100644
--- a/src/tree_data.c
+++ b/src/tree_data.c
@@ -3134,8 +3134,8 @@
     }
 
     switch (pathtype) {
-    case LYD_PATH_LOG:
-    case LYD_PATH_LOG_NO_LAST_PRED:
+    case LYD_PATH_STD:
+    case LYD_PATH_STD_NO_LAST_PRED:
         depth = 1;
         for (iter = node; iter->parent; iter = (const struct lyd_node *)iter->parent) {
             ++depth;
@@ -3165,7 +3165,7 @@
                     iter->schema ? iter->schema->name : ((struct lyd_node_opaq *)iter)->name.name);
 
             /* do not always print the last (first) predicate */
-            if (iter->schema && ((depth > 1) || (pathtype == LYD_PATH_LOG))) {
+            if (iter->schema && ((depth > 1) || (pathtype == LYD_PATH_STD))) {
                 switch (iter->schema->nodetype) {
                 case LYS_LIST:
                     if (iter->schema->flags & LYS_KEYLESS) {
diff --git a/src/tree_data.h b/src/tree_data.h
index 92b449d..ce2fe7b 100644
--- a/src/tree_data.h
+++ b/src/tree_data.h
@@ -1589,14 +1589,16 @@
  * @brief Types of the different data paths.
  */
 typedef enum {
-    LYD_PATH_LOG, /**< Descriptive path format used in log messages */
-    LYD_PATH_LOG_NO_LAST_PRED  /**< Similar to ::LYD_PATH_LOG except there is never a predicate on the last node */
+    LYD_PATH_STD, /**< Generic data path used for logging, node searching (::lyd_find_xpath(), ::lys_find_path()) as well as
+                       creating new nodes (::lyd_new_path(), ::lyd_new_path2()). */
+    LYD_PATH_STD_NO_LAST_PRED  /**< Similar to ::LYD_PATH_STD except there is never a predicate on the last node. While it
+                                    can be used to search for nodes, do not use it to create new data nodes (lists). */
 } LYD_PATH_TYPE;
 
 /**
  * @brief Generate path of the given node in the requested format.
  *
- * @param[in] node Schema path of this node will be generated.
+ * @param[in] node Data path of this node will be generated.
  * @param[in] pathtype Format of the path to generate.
  * @param[in,out] buffer Prepared buffer of the @p buflen length to store the generated path.
  *                If NULL, memory for the complete path is allocated.
diff --git a/src/validation.c b/src/validation.c
index d823ee1..0bc5ac4 100644
--- a/src/validation.c
+++ b/src/validation.c
@@ -854,8 +854,8 @@
         }
         if (v && (v == LY_ARRAY_COUNT(slist->uniques[u]))) {
             /* all unique leafs are the same in this set, create this nice error */
-            path1 = lyd_path(first, LYD_PATH_LOG, NULL, 0);
-            path2 = lyd_path(second, LYD_PATH_LOG, NULL, 0);
+            path1 = lyd_path(first, LYD_PATH_STD, NULL, 0);
+            path2 = lyd_path(second, LYD_PATH_STD, NULL, 0);
 
             /* use buffer to rebuild the unique string */
 #define UNIQ_BUF_SIZE 1024
diff --git a/src/xpath.c b/src/xpath.c
index bd80770..fdba8cd 100644
--- a/src/xpath.c
+++ b/src/xpath.c
@@ -4599,7 +4599,7 @@
 
     LY_ARRAY_NEW_RET(set->ctx, patterns, pattern, LY_EMEM);
     *pattern = malloc(sizeof **pattern);
-    path = lyd_path(set->cur_node, LYD_PATH_LOG, NULL, 0);
+    path = lyd_path(set->cur_node, LYD_PATH_STD, NULL, 0);
     rc = lys_compile_type_pattern_check(set->ctx, path, args[1]->val.str, &(*pattern)->code);
     free(path);
     if (rc != LY_SUCCESS) {
