diff --git a/src/in.c b/src/in.c
index b175994..1dda5d9 100644
--- a/src/in.c
+++ b/src/in.c
@@ -509,7 +509,7 @@
 
 LY_ERR
 lyd_parser_create_meta(struct lyd_ctx *lydctx, struct lyd_node *parent, struct lyd_meta **meta, const struct lys_module *mod,
-        const char *name, size_t name_len, const char *value, size_t value_len, ly_bool *dynamic, LY_VALUE_FORMAT format,
+        const char *name, size_t name_len, const void *value, size_t value_len, ly_bool *dynamic, LY_VALUE_FORMAT format,
         void *prefix_data, uint32_t hints)
 {
     ly_bool incomplete;
diff --git a/src/parser_internal.h b/src/parser_internal.h
index ed37c91..6d47489 100644
--- a/src/parser_internal.h
+++ b/src/parser_internal.h
@@ -228,7 +228,7 @@
  * @return LY_ERR value.
  */
 LY_ERR lyd_parser_create_meta(struct lyd_ctx *lydctx, struct lyd_node *parent, struct lyd_meta **meta,
-        const struct lys_module *mod, const char *name, size_t name_len, const char *value,
+        const struct lys_module *mod, const char *name, size_t name_len, const void *value,
         size_t value_len, ly_bool *dynamic, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints);
 
 #endif /* LY_PARSER_INTERNAL_H_ */
diff --git a/src/parser_lyb.c b/src/parser_lyb.c
index f588bd6..c6a2674 100644
--- a/src/parser_lyb.c
+++ b/src/parser_lyb.c
@@ -456,6 +456,7 @@
         *prefix_data = set;
         break;
     case LY_VALUE_JSON:
+    case LY_VALUE_LYB:
         /* nothing stored */
         break;
     default:
diff --git a/src/path.c b/src/path.c
index 7ca8616..a4db50c 100644
--- a/src/path.c
+++ b/src/path.c
@@ -453,7 +453,8 @@
             break;
         case LY_VALUE_CANON:
         case LY_VALUE_XML:
-            /* not really defined */
+        case LY_VALUE_LYB:
+            /* not really defined or accepted */
             LOGINT_RET(ctx);
         }
     }
diff --git a/src/plugins_types.c b/src/plugins_types.c
index 5493c98..7383373 100644
--- a/src/plugins_types.c
+++ b/src/plugins_types.c
@@ -120,7 +120,7 @@
 }
 
 const struct lys_module *
-ly_resolve_prefix(const struct ly_ctx *ctx, const char *prefix, size_t prefix_len, LY_VALUE_FORMAT format,
+ly_resolve_prefix(const struct ly_ctx *ctx, const void *prefix, size_t prefix_len, LY_VALUE_FORMAT format,
         const void *prefix_data)
 {
     const struct lys_module *mod = NULL;
@@ -139,6 +139,7 @@
         break;
     case LY_VALUE_CANON:
     case LY_VALUE_JSON:
+    case LY_VALUE_LYB:
         mod = ly_json_resolve_prefix(ctx, prefix, prefix_len, prefix_data);
         break;
     }
@@ -160,6 +161,7 @@
             return ctx_node->module;
         case LY_VALUE_CANON:
         case LY_VALUE_JSON:
+        case LY_VALUE_LYB:
             /* use context node module (as specified) */
             return ctx_node->module;
         case LY_VALUE_XML:
@@ -254,6 +256,7 @@
         break;
     case LY_VALUE_CANON:
     case LY_VALUE_JSON:
+    case LY_VALUE_LYB:
         prefix = ly_json_get_prefix(mod, prefix_data);
         break;
     }
@@ -281,7 +284,7 @@
     return LY_ENOT;
 }
 
-API const char *
+API const void *
 lyplg_type_print_simple(const struct ly_ctx *UNUSED(ctx), const struct lyd_value *value, LY_VALUE_FORMAT UNUSED(format),
         void *UNUSED(prefix_data), ly_bool *dynamic, size_t *value_len)
 {
@@ -567,7 +570,7 @@
 }
 
 API LY_ERR
-lyplg_type_prefix_data_new(const struct ly_ctx *ctx, const char *value, size_t value_len, LY_VALUE_FORMAT format,
+lyplg_type_prefix_data_new(const struct ly_ctx *ctx, const void *value, size_t value_len, LY_VALUE_FORMAT format,
         const void *prefix_data, LY_VALUE_FORMAT *format_p, void **prefix_data_p)
 {
     LY_CHECK_ARG_RET(ctx, value, format_p, prefix_data_p, LY_EINVAL);
@@ -700,6 +703,7 @@
     case LY_VALUE_SCHEMA:
     case LY_VALUE_SCHEMA_RESOLVED:
     case LY_VALUE_XML:
+    case LY_VALUE_LYB:
         prefix_opt = LY_PATH_PREFIX_MANDATORY;
         break;
     case LY_VALUE_JSON:
diff --git a/src/plugins_types.h b/src/plugins_types.h
index 9b1ac71..95e089b 100644
--- a/src/plugins_types.h
+++ b/src/plugins_types.h
@@ -268,15 +268,15 @@
  * prefixes are simply added. This way it is possible to store prefix data for several strings together.
  *
  * @param[in] ctx libyang context.
- * @param[in] value Value string to be parsed.
- * @param[in] value_len Length of the @p value string.
+ * @param[in] value Value to be parsed.
+ * @param[in] value_len Length of @p value.
  * @param[in] format Format of the prefixes in the value.
  * @param[in] prefix_data Format-specific data for resolving any prefixes (see ly_resolve_prefix()).
  * @param[in,out] format_p Resulting format of the prefixes.
  * @param[in,out] prefix_data_p Resulting prefix data for the value in format @p format_p.
  * @return LY_ERR value.
  */
-LY_ERR lyplg_type_prefix_data_new(const struct ly_ctx *ctx, const char *value, size_t value_len, LY_VALUE_FORMAT format,
+LY_ERR lyplg_type_prefix_data_new(const struct ly_ctx *ctx, const void *value, size_t value_len, LY_VALUE_FORMAT format,
         const void *prefix_data, LY_VALUE_FORMAT *format_p, void **prefix_data_p);
 /**
  * @brief Duplicate prefix data.
@@ -378,7 +378,7 @@
  * @return LY_EINCOMPLETE in case the ::lyplg_type_validate_clb should be called to finish value validation in data,
  * @return LY_ERR value on error.
  */
-typedef LY_ERR (*lyplg_type_store_clb)(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value,
+typedef LY_ERR (*lyplg_type_store_clb)(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value,
         size_t value_len, uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints,
         const struct lysc_node *ctx_node, struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -435,7 +435,7 @@
  * can be responsible for freeing allocated memory.
  * @return NULL in case of error.
  */
-typedef const char *(*lyplg_type_print_clb)(const struct ly_ctx *ctx, const struct lyd_value *value,
+typedef const void *(*lyplg_type_print_clb)(const struct ly_ctx *ctx, const struct lyd_value *value,
         LY_VALUE_FORMAT format, void *prefix_data, ly_bool *dynamic, size_t *value_len);
 
 /**
@@ -511,7 +511,7 @@
  * @brief Generic simple printer callback of the canonized value.
  * Implementation of the ::lyplg_type_print_clb.
  */
-const char *lyplg_type_print_simple(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format,
+const void *lyplg_type_print_simple(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format,
         void *prefix_data, ly_bool *dynamic, size_t *value_len);
 
 /**
@@ -533,14 +533,14 @@
  * @ingroup pluginsTypes
  * @{
  *
- * Callbacs used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement binary built-in type.
+ * Callbacks used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement binary built-in type.
  */
 
 /**
  * @brief Validate, canonize and store value of the YANG built-in binary type.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_binary(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_binary(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -551,14 +551,14 @@
  * @ingroup pluginsTypes
  * @{
  *
- * Callbacs used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement bits built-in type.
+ * Callbacks used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement bits built-in type.
  */
 
 /**
  * @brief Validate, canonize and store value of the YANG built-in bits type.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_bits(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_bits(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -581,14 +581,14 @@
  * @ingroup pluginsTypes
  * @{
  *
- * Callbacs used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement boolean built-in type.
+ * Callbacks used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement boolean built-in type.
  */
 
 /**
  * @brief Validate and store value of the YANG built-in boolean type.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_boolean(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_boolean(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -599,14 +599,14 @@
  * @ingroup pluginsTypes
  * @{
  *
- * Callbacs used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement decimal64 built-in type.
+ * Callbacks used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement decimal64 built-in type.
  */
 
 /**
  * @brief Validate, canonize and store value of the YANG built-in decimal64 types.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_decimal64(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_decimal64(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -617,14 +617,14 @@
  * @ingroup pluginsTypes
  * @{
  *
- * Callbacs used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement empty built-in type.
+ * Callbacks used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement empty built-in type.
  */
 
 /**
  * @brief Validate and store value of the YANG built-in empty type.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_empty(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_empty(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -641,14 +641,14 @@
  * @ingroup pluginsTypes
  * @{
  *
- * Callbacs used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement enumeration built-in type.
+ * Callbacks used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement enumeration built-in type.
  */
 
 /**
  * @brief Validate, canonize and store value of the YANG built-in enumeration type.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_enum(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_enum(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -659,14 +659,14 @@
  * @ingroup pluginsTypes
  * @{
  *
- * Callbacs used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement identityref built-in type.
+ * Callbacks used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement identityref built-in type.
  */
 
 /**
  * @brief Validate, canonize and store value of the YANG built-in identiytref type.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_identityref(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_identityref(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -680,8 +680,8 @@
  * @brief Printer callback printing identityref value.
  * Implementation of the ::lyplg_type_print_clb.
  */
-const char *lyplg_type_print_identityref(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format, void *prefix_data,
-        ly_bool *dynamic, size_t *value_len);
+const void *lyplg_type_print_identityref(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format,
+        void *prefix_data, ly_bool *dynamic, size_t *value_len);
 
 /** @} pluginsTypesIdentityref */
 
@@ -690,14 +690,14 @@
  * @ingroup pluginsTypes
  * @{
  *
- * Callbacs used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement instance-identifier built-in type.
+ * Callbacks used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement instance-identifier built-in type.
  */
 
 /**
  * @brief Validate and store value of the YANG built-in instance-identifier type.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_instanceid(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_instanceid(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -711,8 +711,8 @@
  * @brief Printer callback printing the instance-identifier value.
  * Implementation of the ::lyplg_type_print_clb.
  */
-const char *lyplg_type_print_instanceid(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format, void *prefix_data,
-        ly_bool *dynamic, size_t *value_len);
+const void *lyplg_type_print_instanceid(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format,
+        void *prefix_data, ly_bool *dynamic, size_t *value_len);
 
 /**
  * @brief Duplication callback of the instance-identifier values.
@@ -740,14 +740,14 @@
  * @ingroup pluginsTypes
  * @{
  *
- * Callbacs used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement integer built-in types.
+ * Callbacks used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement integer built-in types.
  */
 
 /**
  * @brief Validate, canonize and store value of the YANG built-in signed integer types.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_int(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_int(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -755,7 +755,7 @@
  * @brief Validate and canonize value of the YANG built-in unsigned integer types.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_uint(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_uint(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -766,14 +766,14 @@
  * @ingroup pluginsTypes
  * @{
  *
- * Callbacs used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement leafref built-in type.
+ * Callbacks used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement leafref built-in type.
  */
 
 /**
  * @brief Validate, canonize and store value of the YANG built-in leafref type.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_leafref(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_leafref(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -787,8 +787,8 @@
  * @brief Printer callback printing the leafref value.
  * Implementation of the ::lyplg_type_print_clb.
  */
-const char *lyplg_type_print_leafref(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format, void *prefix_data,
-        ly_bool *dynamic, size_t *value_len);
+const void *lyplg_type_print_leafref(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format,
+        void *prefix_data, ly_bool *dynamic, size_t *value_len);
 
 /**
  * @brief Duplication callback of the leafref values.
@@ -816,14 +816,14 @@
  * @ingroup pluginsTypes
  * @{
  *
- * Callbacs used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement string built-in type.
+ * Callbacks used (besides the [simple callbacks](@ref pluginsTypesSimple)) to implement string built-in type.
  */
 
 /**
  * @brief Validate and store value of the YANG built-in string type.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_string(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_string(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -841,7 +841,7 @@
  * @brief Validate, canonize and store value of the YANG built-in union type.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_union(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_union(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -855,8 +855,8 @@
  * @brief Printer callback printing the union value.
  * Implementation of the ::lyplg_type_print_clb.
  */
-const char *lyplg_type_print_union(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format, void *prefix_data,
-        ly_bool *dynamic, size_t *value_len);
+const void *lyplg_type_print_union(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format,
+        void *prefix_data, ly_bool *dynamic, size_t *value_len);
 
 /**
  * @brief Duplication callback of the union values.
@@ -891,7 +891,7 @@
  * @brief Validate, canonize and store value of the ietf-yang-types xpath1.0 type.
  * Implementation of the ::lyplg_type_store_clb.
  */
-LY_ERR lyplg_type_store_xpath10(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+LY_ERR lyplg_type_store_xpath10(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err);
 
@@ -905,7 +905,7 @@
  * @brief Printer callback printing the xpath1.0 value.
  * Implementation of the ::lyplg_type_print_clb.
  */
-const char *lyplg_type_print_xpath10(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format,
+const void *lyplg_type_print_xpath10(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format,
         void *prefix_data, ly_bool *dynamic, size_t *value_len);
 
 /**
diff --git a/src/plugins_types/binary.c b/src/plugins_types/binary.c
index 0a18d83..16833ea 100644
--- a/src/plugins_types/binary.c
+++ b/src/plugins_types/binary.c
@@ -29,13 +29,14 @@
 #include "plugins_internal.h" /* LY_TYPE_*_STR */
 
 API LY_ERR
-lyplg_type_store_binary(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_binary(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT UNUSED(format), void *UNUSED(prefix_data), uint32_t hints,
         const struct lysc_node *UNUSED(ctx_node), struct lyd_value *storage, struct lys_glob_unres *UNUSED(unres),
         struct ly_err_item **err)
 {
     LY_ERR ret = LY_SUCCESS;
     size_t base64_start, base64_end, base64_count, base64_terminated, value_end;
+    const char *value_str = value;
     struct lysc_type_bin *type_bin = (struct lysc_type_bin *)type;
 
     LY_CHECK_ARG_RET(ctx, value, LY_EINVAL);
@@ -49,12 +50,12 @@
     /* validate characters and remember the number of octets for length validation */
     /* silently skip leading whitespaces */
     base64_start = 0;
-    while (base64_start < value_len && isspace(value[base64_start])) {
+    while (base64_start < value_len && isspace(value_str[base64_start])) {
         base64_start++;
     }
     /* silently skip trailing whitespace */
     value_end = value_len;
-    while (base64_start < value_end && isspace(value[value_end - 1])) {
+    while (base64_start < value_end && isspace(value_str[value_end - 1])) {
         value_end--;
     }
 
@@ -63,14 +64,14 @@
     base64_count = 0;
     while ((base64_end < value_len) &&
             /* check correct character in base64 */
-            ((('A' <= value[base64_end]) && (value[base64_end] <= 'Z')) ||
-            (('a' <= value[base64_end]) && (value[base64_end] <= 'z')) ||
-            (('0' <= value[base64_end]) && (value[base64_end] <= '9')) ||
-            ('+' == value[base64_end]) ||
-            ('/' == value[base64_end]) ||
-            ('\n' == value[base64_end]))) {
+            ((('A' <= value_str[base64_end]) && (value_str[base64_end] <= 'Z')) ||
+            (('a' <= value_str[base64_end]) && (value_str[base64_end] <= 'z')) ||
+            (('0' <= value_str[base64_end]) && (value_str[base64_end] <= '9')) ||
+            ('+' == value_str[base64_end]) ||
+            ('/' == value_str[base64_end]) ||
+            ('\n' == value_str[base64_end]))) {
 
-        if ('\n' != value[base64_end]) {
+        if ('\n' != value_str[base64_end]) {
             base64_count++;
         }
         base64_end++;
@@ -80,10 +81,10 @@
     base64_terminated = 0;
     while (((base64_end < value_len) && (base64_terminated < 2)) &&
             /* check padding on end of string */
-            (('=' == value[base64_end]) ||
-            ('\n' == value[base64_end]))) {
+            (('=' == value_str[base64_end]) ||
+            ('\n' == value_str[base64_end]))) {
 
-        if ('\n' != value[base64_end]) {
+        if ('\n' != value_str[base64_end]) {
             base64_terminated++;
         }
         base64_end++;
@@ -91,7 +92,7 @@
 
     /* check if value is valid base64 value */
     if (value_end != base64_end) {
-        ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL, "Invalid Base64 character (%c).", value[base64_end]);
+        ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL, "Invalid Base64 character (%c).", value_str[base64_end]);
         goto cleanup;
     }
 
@@ -101,15 +102,15 @@
         goto cleanup;
     }
 
-    /* check if value meets the type requirments */
+    /* check if value meets the type requirements */
     if (type_bin->length) {
         const uint32_t value_length = ((base64_count + base64_terminated) / 4) * 3 - base64_terminated;
-        ret = lyplg_type_validate_range(LY_TYPE_BINARY, type_bin->length, value_length, value, err);
+        ret = lyplg_type_validate_range(LY_TYPE_BINARY, type_bin->length, value_length, value_str, err);
         LY_CHECK_GOTO(ret != LY_SUCCESS, cleanup);
     }
 
     if (base64_count != 0) {
-        ret = lydict_insert(ctx, &value[base64_start], base64_end - base64_start, &storage->_canonical);
+        ret = lydict_insert(ctx, &value_str[base64_start], base64_end - base64_start, &storage->_canonical);
         LY_CHECK_GOTO(ret != LY_SUCCESS, cleanup);
     } else {
         ret = lydict_insert(ctx, "", 0, &storage->_canonical);
diff --git a/src/plugins_types/bits.c b/src/plugins_types/bits.c
index ca2d3cc..c59de75 100644
--- a/src/plugins_types/bits.c
+++ b/src/plugins_types/bits.c
@@ -30,7 +30,7 @@
 #include "plugins_internal.h" /* LY_TYPE_*_STR */
 
 API LY_ERR
-lyplg_type_store_bits(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_bits(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT UNUSED(format), void *UNUSED(prefix_data), uint32_t hints,
         const struct lysc_node *UNUSED(ctx_node), struct lyd_value *storage, struct lys_glob_unres *UNUSED(unres),
         struct ly_err_item **err)
@@ -39,6 +39,7 @@
     struct lysc_type_bits *type_bits = (struct lysc_type_bits *)type;
     struct lysc_type_bitenum_item **bits_items = NULL;
     struct ly_set *items = NULL;
+    const char *value_str = value;
 
     uint32_t index_start;   /* start index of bit name */
     uint32_t index_end = 0; /* end index of bit name */
@@ -67,18 +68,18 @@
     while (index_end < value_len) {
         /* skip leading spaces */
         index_start = index_end;
-        while ((index_start < value_len) && isspace(value[index_start])) {
+        while ((index_start < value_len) && isspace(value_str[index_start])) {
             index_start++;
         }
 
         index_end = index_start;
         /* find end of word */
-        while ((index_end < value_len) && !isspace(value[index_end])) {
+        while ((index_end < value_len) && !isspace(value_str[index_end])) {
             index_end++;
         }
 
         /* check if name of bit is valid */
-        item = &value[index_start];
+        item = &value_str[index_start];
         item_len = index_end - index_start;
         if (item_len == 0) {
             /* loop read all bits names*/
diff --git a/src/plugins_types/boolean.c b/src/plugins_types/boolean.c
index a212bf8..4a8b20c 100644
--- a/src/plugins_types/boolean.c
+++ b/src/plugins_types/boolean.c
@@ -29,7 +29,7 @@
 #include "plugins_internal.h" /* LY_TYPE_*_STR */
 
 API LY_ERR
-lyplg_type_store_boolean(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_boolean(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT UNUSED(format), void *UNUSED(prefix_data), uint32_t hints,
         const struct lysc_node *UNUSED(ctx_node), struct lyd_value *storage, struct lys_glob_unres *UNUSED(unres),
         struct ly_err_item **err)
@@ -48,7 +48,8 @@
     } else if ((value_len == ly_strlen_const("false")) && !strncmp(value, "false", ly_strlen_const("false"))) {
         i = 0;
     } else {
-        ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL, "Invalid boolean value \"%.*s\".", (int)value_len, value);
+        ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL, "Invalid boolean value \"%.*s\".", (int)value_len,
+                (char *)value);
         goto cleanup;
     }
 
diff --git a/src/plugins_types/date_and_time.c b/src/plugins_types/date_and_time.c
index ab89092..31ec7c7 100644
--- a/src/plugins_types/date_and_time.c
+++ b/src/plugins_types/date_and_time.c
@@ -96,7 +96,7 @@
  * Implementation of the ::lyplg_type_store_clb.
  */
 static LY_ERR
-lyplg_type_store_date_and_time(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_date_and_time(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err)
 {
diff --git a/src/plugins_types/decimal64.c b/src/plugins_types/decimal64.c
index 9ac33c5..ea7d5c4 100644
--- a/src/plugins_types/decimal64.c
+++ b/src/plugins_types/decimal64.c
@@ -30,7 +30,7 @@
 #include "plugins_internal.h" /* LY_TYPE_*_STR */
 
 API LY_ERR
-lyplg_type_store_decimal64(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_decimal64(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT UNUSED(format), void *UNUSED(prefix_data), uint32_t hints,
         const struct lysc_node *UNUSED(ctx_node), struct lyd_value *storage, struct lys_glob_unres *UNUSED(unres),
         struct ly_err_item **err)
@@ -42,7 +42,7 @@
 
     *err = NULL;
 
-    if (!value || !value[0] || !value_len) {
+    if (!value || !((char *)value)[0] || !value_len) {
         ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL,  NULL, "Invalid empty decimal64 value.");
         goto cleanup;
     }
diff --git a/src/plugins_types/empty.c b/src/plugins_types/empty.c
index 27ea094..172c3ad 100644
--- a/src/plugins_types/empty.c
+++ b/src/plugins_types/empty.c
@@ -28,7 +28,7 @@
 #include "plugins_internal.h" /* LY_TYPE_*_STR */
 
 API LY_ERR
-lyplg_type_store_empty(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_empty(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT UNUSED(format), void *UNUSED(prefix_data), uint32_t hints,
         const struct lysc_node *UNUSED(ctx_node), struct lyd_value *storage, struct lys_glob_unres *UNUSED(unres),
         struct ly_err_item **err)
@@ -42,7 +42,8 @@
     LY_CHECK_GOTO(ret != LY_SUCCESS, cleanup);
 
     if (value_len) {
-        ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL, "Invalid empty value \"%.*s\".", (int)value_len, value);
+        ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL, "Invalid empty value \"%.*s\".", (int)value_len,
+                (char *)value);
         goto cleanup;
     }
 
diff --git a/src/plugins_types/enumeration.c b/src/plugins_types/enumeration.c
index bdb3c65..da24316 100644
--- a/src/plugins_types/enumeration.c
+++ b/src/plugins_types/enumeration.c
@@ -28,7 +28,7 @@
 #include "plugins_internal.h" /* LY_TYPE_*_STR */
 
 API LY_ERR
-lyplg_type_store_enum(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_enum(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT UNUSED(format), void *UNUSED(prefix_data), uint32_t hints,
         const struct lysc_node *UNUSED(ctx_node), struct lyd_value *storage, struct lys_glob_unres *UNUSED(unres),
         struct ly_err_item **err)
@@ -51,7 +51,8 @@
         }
     }
     /* enum not found */
-    ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL, "Invalid enumeration value \"%.*s\".", (int)value_len, value);
+    ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL, "Invalid enumeration value \"%.*s\".", (int)value_len,
+            (char *)value);
     goto cleanup;
 
 match:
diff --git a/src/plugins_types/hex_string.c b/src/plugins_types/hex_string.c
index b28b7d3..1a29d3e 100644
--- a/src/plugins_types/hex_string.c
+++ b/src/plugins_types/hex_string.c
@@ -33,7 +33,7 @@
  * Implementation of the ::lyplg_type_store_clb.
  */
 static LY_ERR
-lyplg_type_store_hex_string(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_hex_string(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err)
 {
diff --git a/src/plugins_types/identityref.c b/src/plugins_types/identityref.c
index 849720b..3b40c28 100644
--- a/src/plugins_types/identityref.c
+++ b/src/plugins_types/identityref.c
@@ -43,13 +43,13 @@
 }
 
 API LY_ERR
-lyplg_type_store_identityref(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_identityref(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err)
 {
     LY_ERR ret = LY_SUCCESS;
     struct lysc_type_identityref *type_ident = (struct lysc_type_identityref *)type;
-    const char *id_name, *prefix = value;
+    const char *id_name, *prefix = value, *value_str = value;
     size_t id_len, prefix_len, str_len;
     char *str;
     const struct lys_module *mod = NULL;
@@ -63,13 +63,13 @@
     LY_CHECK_GOTO(ret != LY_SUCCESS, cleanup);
 
     /* locate prefix if any */
-    for (prefix_len = 0; (prefix_len < value_len) && (value[prefix_len] != ':'); ++prefix_len) {}
+    for (prefix_len = 0; (prefix_len < value_len) && (value_str[prefix_len] != ':'); ++prefix_len) {}
     if (prefix_len < value_len) {
-        id_name = &value[prefix_len + 1];
+        id_name = &value_str[prefix_len + 1];
         id_len = value_len - (prefix_len + 1);
     } else {
         prefix_len = 0;
-        id_name = value;
+        id_name = value_str;
         id_len = value_len;
     }
 
@@ -81,7 +81,7 @@
     mod = lyplg_type_identity_module(ctx, ctx_node, prefix, prefix_len, format, prefix_data);
     if (!mod) {
         ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL,
-                "Invalid identityref \"%.*s\" value - unable to map prefix to YANG schema.", (int)value_len, value);
+                "Invalid identityref \"%.*s\" value - unable to map prefix to YANG schema.", (int)value_len, value_str);
         goto cleanup;
     }
 
@@ -97,7 +97,7 @@
         /* no match */
         ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL,
                 "Invalid identityref \"%.*s\" value - identity not found in module \"%s\".",
-                (int)value_len, value, mod->name);
+                (int)value_len, value_str, mod->name);
         goto cleanup;
     } else if (!mod->implemented) {
         /* non-implemented module */
@@ -107,7 +107,7 @@
         } else {
             ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL,
                     "Invalid identityref \"%.*s\" value - identity found in non-implemented module \"%s\".",
-                    (int)value_len, value, mod->name);
+                    (int)value_len, value_str, mod->name);
             goto cleanup;
         }
     }
@@ -133,11 +133,11 @@
         if (u == 1) {
             ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL,
                     "Invalid identityref \"%.*s\" value - identity not derived from the base %s.",
-                    (int)value_len, value, str);
+                    (int)value_len, value_str, str);
         } else {
             ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL,
                     "Invalid identityref \"%.*s\" value - identity not derived from all the bases %s.",
-                    (int)value_len, value, str);
+                    (int)value_len, value_str, str);
         }
         free(str);
         goto cleanup;
@@ -159,7 +159,7 @@
     return ret;
 }
 
-API const char *
+API const void *
 lyplg_type_print_identityref(const struct ly_ctx *UNUSED(ctx), const struct lyd_value *value, LY_VALUE_FORMAT format,
         void *prefix_data, ly_bool *dynamic, size_t *value_len)
 {
diff --git a/src/plugins_types/instanceid.c b/src/plugins_types/instanceid.c
index 8aca701..f9f4707 100644
--- a/src/plugins_types/instanceid.c
+++ b/src/plugins_types/instanceid.c
@@ -31,7 +31,7 @@
 #include "path.h"
 #include "plugins_internal.h" /* LY_TYPE_*_STR */
 
-API const char *
+API const void *
 lyplg_type_print_instanceid(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format,
         void *prefix_data, ly_bool *dynamic, size_t *value_len)
 {
@@ -90,8 +90,9 @@
                 }
             }
         }
+
         *dynamic = 1;
-    } else if ((format == LY_VALUE_CANON) || (format == LY_VALUE_JSON)) {
+    } else if ((format == LY_VALUE_CANON) || (format == LY_VALUE_JSON) || (format == LY_VALUE_LYB)) {
         /* generate canonical, only the first node or the node changing module is prefixed */
         if (!value->_canonical) {
             struct lys_module *mod = NULL;
@@ -164,7 +165,7 @@
 }
 
 API LY_ERR
-lyplg_type_store_instanceid(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_instanceid(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err)
 {
diff --git a/src/plugins_types/integer.c b/src/plugins_types/integer.c
index 2d8d424..d1a5b1f 100644
--- a/src/plugins_types/integer.c
+++ b/src/plugins_types/integer.c
@@ -29,7 +29,7 @@
 #include "plugins_internal.h" /* LY_TYPE_*_STR */
 
 API LY_ERR
-lyplg_type_store_int(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_int(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT UNUSED(format), void *UNUSED(prefix_data), uint32_t hints,
         const struct lysc_node *UNUSED(ctx_node), struct lyd_value *storage, struct lys_glob_unres *UNUSED(unres),
         struct ly_err_item **err)
@@ -103,7 +103,7 @@
 }
 
 API LY_ERR
-lyplg_type_store_uint(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_uint(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT UNUSED(format), void *UNUSED(prefix_data), uint32_t hints,
         const struct lysc_node *UNUSED(ctx_node), struct lyd_value *storage, struct lys_glob_unres *UNUSED(unres),
         struct ly_err_item **err)
diff --git a/src/plugins_types/ip_address.c b/src/plugins_types/ip_address.c
index 7ee0d5d..4f51ed1 100644
--- a/src/plugins_types/ip_address.c
+++ b/src/plugins_types/ip_address.c
@@ -68,7 +68,7 @@
  * Implementation of the ::lyplg_type_store_clb.
  */
 static LY_ERR
-lyplg_type_store_ip_address(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_ip_address(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err)
 {
diff --git a/src/plugins_types/ip_prefix.c b/src/plugins_types/ip_prefix.c
index 124a31d..9eef670 100644
--- a/src/plugins_types/ip_prefix.c
+++ b/src/plugins_types/ip_prefix.c
@@ -193,7 +193,7 @@
  * Implementation of the ::lyplg_type_store_clb.
  */
 static LY_ERR
-lyplg_type_store_ipv4_prefix(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_ipv4_prefix(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err)
 {
@@ -230,7 +230,7 @@
  * Implementation of the ::lyplg_type_store_clb.
  */
 static LY_ERR
-lyplg_type_store_ipv6_prefix(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_ipv6_prefix(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err)
 {
diff --git a/src/plugins_types/leafref.c b/src/plugins_types/leafref.c
index a704687..03190ba 100644
--- a/src/plugins_types/leafref.c
+++ b/src/plugins_types/leafref.c
@@ -31,7 +31,7 @@
 const struct lyplg_type_record plugins_leafref[];
 
 API LY_ERR
-lyplg_type_store_leafref(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_leafref(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err)
 {
@@ -89,7 +89,7 @@
     return val1->realtype->plugin->compare(val1, val2);
 }
 
-API const char *
+API const void *
 lyplg_type_print_leafref(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format,
         void *prefix_data, ly_bool *dynamic, size_t *value_len)
 {
diff --git a/src/plugins_types/string.c b/src/plugins_types/string.c
index be60043..1d67cfa 100644
--- a/src/plugins_types/string.c
+++ b/src/plugins_types/string.c
@@ -28,7 +28,7 @@
 #include "plugins_internal.h" /* LY_TYPE_*_STR */
 
 API LY_ERR
-lyplg_type_store_string(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_string(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT UNUSED(format), void *UNUSED(prefix_data), uint32_t hints,
         const struct lysc_node *UNUSED(ctx_node), struct lyd_value *storage, struct lys_glob_unres *UNUSED(unres),
         struct ly_err_item **err)
diff --git a/src/plugins_types/union.c b/src/plugins_types/union.c
index 118def6..9b11dd8 100644
--- a/src/plugins_types/union.c
+++ b/src/plugins_types/union.c
@@ -81,7 +81,7 @@
 }
 
 API LY_ERR
-lyplg_type_store_union(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_union(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err)
 {
@@ -191,7 +191,7 @@
     return val1->subvalue->value.realtype->plugin->compare(&val1->subvalue->value, &val2->subvalue->value);
 }
 
-API const char *
+API const void *
 lyplg_type_print_union(const struct ly_ctx *ctx, const struct lyd_value *value, LY_VALUE_FORMAT format,
         void *prefix_data, ly_bool *dynamic, size_t *value_len)
 {
diff --git a/src/plugins_types/xpath1.0.c b/src/plugins_types/xpath1.0.c
index b30ac4c..3ebad18 100644
--- a/src/plugins_types/xpath1.0.c
+++ b/src/plugins_types/xpath1.0.c
@@ -198,7 +198,7 @@
 }
 
 API LY_ERR
-lyplg_type_store_xpath10(const struct ly_ctx *ctx, const struct lysc_type *type, const char *value, size_t value_len,
+lyplg_type_store_xpath10(const struct ly_ctx *ctx, const struct lysc_type *type, const void *value, size_t value_len,
         uint32_t options, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints, const struct lysc_node *ctx_node,
         struct lyd_value *storage, struct lys_glob_unres *unres, struct ly_err_item **err)
 {
@@ -243,7 +243,7 @@
     return ret;
 }
 
-API const char *
+API const void *
 lyplg_type_print_xpath10(const struct ly_ctx *UNUSED(ctx), const struct lyd_value *value, LY_VALUE_FORMAT format,
         void *prefix_data, ly_bool *dynamic, size_t *value_len)
 {
@@ -317,7 +317,6 @@
         lyplg_type_prefix_data_free(xp_val->format, xp_val->prefix_data);
 
         free(xp_val);
-        value->ptr = NULL;
     }
 }
 
diff --git a/src/printer_lyb.c b/src/printer_lyb.c
index c1e80df..5592fa0 100644
--- a/src/printer_lyb.c
+++ b/src/printer_lyb.c
@@ -593,6 +593,7 @@
         }
         break;
     case LY_VALUE_JSON:
+    case LY_VALUE_LYB:
         /* nothing to print */
         break;
     default:
diff --git a/src/schema_compile_node.c b/src/schema_compile_node.c
index 1c33c60..32f26fd 100644
--- a/src/schema_compile_node.c
+++ b/src/schema_compile_node.c
@@ -2870,6 +2870,7 @@
                 mod = cur_mod;
                 break;
             case LY_VALUE_JSON:
+            case LY_VALUE_LYB:
                 if (!ctx_node) {
                     LOGINT_RET(ctx->ctx);
                 }
diff --git a/src/tree.h b/src/tree.h
index eb0fd71..135bcad 100644
--- a/src/tree.h
+++ b/src/tree.h
@@ -237,7 +237,8 @@
     LY_VALUE_SCHEMA,          /**< YANG schema value, prefixes map to YANG import prefixes */
     LY_VALUE_SCHEMA_RESOLVED, /**< resolved YANG schema value, prefixes map to module structures directly */
     LY_VALUE_XML,             /**< XML data value, prefixes map to XML namespace prefixes */
-    LY_VALUE_JSON             /**< JSON data value, prefixes map to module names */
+    LY_VALUE_JSON,            /**< JSON data value, prefixes map to module names */
+    LY_VALUE_LYB              /**< LYB data binary value, prefix mapping is type-specific (but usually like JSON) */
 } LY_VALUE_FORMAT;
 
 /** @} trees */
diff --git a/src/tree_data.c b/src/tree_data.c
index 03db1cb..919920f 100644
--- a/src/tree_data.c
+++ b/src/tree_data.c
@@ -55,7 +55,7 @@
         struct lyd_node **match);
 
 LY_ERR
-lyd_value_store(const struct ly_ctx *ctx, struct lyd_value *val, const struct lysc_type *type, const char *value,
+lyd_value_store(const struct ly_ctx *ctx, struct lyd_value *val, const struct lysc_type *type, const void *value,
         size_t value_len, ly_bool *dynamic, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints,
         const struct lysc_node *ctx_node, ly_bool *incomplete)
 {
diff --git a/src/tree_data.h b/src/tree_data.h
index f32343f..4992b02 100644
--- a/src/tree_data.h
+++ b/src/tree_data.h
@@ -79,6 +79,7 @@
  * - @subpage howtoDataWD
  * - @subpage howtoDataManipulation
  * - @subpage howtoDataPrinters
+ * - @subpage howtoDataLYB
  *
  * \note API for this group of functions is described in the [Data Instances module](@ref datatree).
  *
@@ -357,6 +358,16 @@
  */
 
 /**
+ * @page howtoDataLYB LYB Binary Format
+ *
+ * LYB (LibYang Binary) is a proprietary libyang binary data and file format. Its primary purpose is efficient
+ * serialization (printing) and deserialization (parsing). With this goal in mind, every term node value is stored
+ * in its new binary format specification according to its type. Following is the format for all types with explicit
+ * support out-of-the-box (meaning that have a special type plugin). Any derived types inherit the format of its
+ * closest type with explicit support (up to a built-in type).
+ */
+
+/**
  * @ingroup trees
  * @defgroup datatree Data Tree
  * @{
diff --git a/src/tree_data_helpers.c b/src/tree_data_helpers.c
index 1d6c0f0..c317be2 100644
--- a/src/tree_data_helpers.c
+++ b/src/tree_data_helpers.c
@@ -451,6 +451,7 @@
     case LY_VALUE_CANON:
     case LY_VALUE_SCHEMA:
     case LY_VALUE_JSON:
+    case LY_VALUE_LYB:
         break;
     }
 }
@@ -508,6 +509,7 @@
         break;
     case LY_VALUE_CANON:
     case LY_VALUE_JSON:
+    case LY_VALUE_LYB:
         assert(!prefix_data);
         *prefix_data_p = NULL;
         break;
@@ -522,7 +524,7 @@
 }
 
 LY_ERR
-ly_store_prefix_data(const struct ly_ctx *ctx, const char *value, size_t value_len, LY_VALUE_FORMAT format,
+ly_store_prefix_data(const struct ly_ctx *ctx, const void *value, size_t value_len, LY_VALUE_FORMAT format,
         const void *prefix_data, LY_VALUE_FORMAT *format_p, void **prefix_data_p)
 {
     LY_ERR ret = LY_SUCCESS;
@@ -612,6 +614,7 @@
     case LY_VALUE_CANON:
     case LY_VALUE_SCHEMA_RESOLVED:
     case LY_VALUE_JSON:
+    case LY_VALUE_LYB:
         if (!*prefix_data_p) {
             /* new prefix data - simply copy all the prefix data */
             *format_p = format;
@@ -642,6 +645,8 @@
         return "XML prefixes";
     case LY_VALUE_JSON:
         return "JSON module names";
+    case LY_VALUE_LYB:
+        return "LYB prefixes";
     default:
         break;
     }
diff --git a/src/tree_data_internal.h b/src/tree_data_internal.h
index 8e084d5..2c3e89b 100644
--- a/src/tree_data_internal.h
+++ b/src/tree_data_internal.h
@@ -282,7 +282,7 @@
  * @param[in] ctx libyang context.
  * @param[in,out] val Storage for the value.
  * @param[in] type Type of the value.
- * @param[in] value String value to be parsed, must not be NULL.
+ * @param[in] value Value to be parsed, must not be NULL.
  * @param[in] value_len Length of the give @p value, must be set correctly.
  * @param[in,out] dynamic Flag if @p value is dynamically allocated, is adjusted when @p value is consumed.
  * @param[in] format Input format of @p value.
@@ -293,7 +293,7 @@
  * @return LY_SUCCESS on success,
  * @return LY_ERR value on error.
  */
-LY_ERR lyd_value_store(const struct ly_ctx *ctx, struct lyd_value *val, const struct lysc_type *type, const char *value,
+LY_ERR lyd_value_store(const struct ly_ctx *ctx, struct lyd_value *val, const struct lysc_type *type, const void *value,
         size_t value_len, ly_bool *dynamic, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints,
         const struct lysc_node *ctx_node, ly_bool *incomplete);
 
@@ -449,15 +449,15 @@
  * prefixes are simply added. This way it is possible to store prefix data for several strings together.
  *
  * @param[in] ctx libyang context.
- * @param[in] value Value string to be parsed.
- * @param[in] value_len Length of the @p value string.
+ * @param[in] value Value to be parsed.
+ * @param[in] value_len Length of the @p value.
  * @param[in] format Format of the prefixes in the value.
  * @param[in] prefix_data Format-specific data for resolving any prefixes (see ::ly_resolve_prefix).
  * @param[in,out] format_p Resulting format of the prefixes.
  * @param[in,out] prefix_data_p Resulting prefix data for the value in format @p format_p.
  * @return LY_ERR value.
  */
-LY_ERR ly_store_prefix_data(const struct ly_ctx *ctx, const char *value, size_t value_len, LY_VALUE_FORMAT format,
+LY_ERR ly_store_prefix_data(const struct ly_ctx *ctx, const void *value, size_t value_len, LY_VALUE_FORMAT format,
         const void *prefix_data, LY_VALUE_FORMAT *format_p, void **prefix_data_p);
 
 /**
diff --git a/src/tree_schema_internal.h b/src/tree_schema_internal.h
index 0956dc2..9847099 100644
--- a/src/tree_schema_internal.h
+++ b/src/tree_schema_internal.h
@@ -787,6 +787,7 @@
  *      LY_VALUE_SCHEMA_RESOLVED - struct lyd_value_prefix * (sized array of pairs: prefix - module)
  *      LY_VALUE_XML             - struct ly_set * (set of all returned modules as ::struct lys_module)
  *      LY_VALUE_JSON            - NULL
+ *      LY_VALUE_LYB             - NULL
  * @return Module prefix to print.
  * @return NULL on error.
  */
@@ -801,15 +802,17 @@
  * @param[in] prefix Prefix to resolve.
  * @param[in] prefix_len Length of @p prefix.
  * @param[in] format Format of the prefix.
- * @param[in] prefix_data Format-specific data:
- *      LY_PREF_SCHEMA          - const struct lysp_module * (module used for resolving prefixes from imports)
- *      LY_PREF_SCHEMA_RESOLVED - struct lyd_value_prefix * (sized array of pairs: prefix - module)
- *      LY_PREF_XML             - const struct ly_set * (set with defined namespaces stored as ::lyxml_ns)
- *      LY_PREF_JSON            - NULL
+ * @param[in] prefix_data Format-specific data based on @p format:
+ *      LY_VALUE_CANON           - NULL
+ *      LY_VALUE_SCHEMA          - const struct lysp_module * (module used for resolving prefixes from imports)
+ *      LY_VALUE_SCHEMA_RESOLVED - struct lyd_value_prefix * (sized array of pairs: prefix - module)
+ *      LY_VALUE_XML             - const struct ly_set * (set with defined namespaces stored as ::lyxml_ns)
+ *      LY_VALUE_JSON            - NULL
+ *      LY_VALUE_LYB             - NULL
  * @return Resolved prefix module,
  * @return NULL otherwise.
  */
-const struct lys_module *ly_resolve_prefix(const struct ly_ctx *ctx, const char *prefix, size_t prefix_len,
+const struct lys_module *ly_resolve_prefix(const struct ly_ctx *ctx, const void *prefix, size_t prefix_len,
         LY_VALUE_FORMAT format, const void *prefix_data);
 
 #endif /* LY_TREE_SCHEMA_INTERNAL_H_ */
diff --git a/src/xpath.c b/src/xpath.c
index e5bcb25..5b558f1 100644
--- a/src/xpath.c
+++ b/src/xpath.c
@@ -5321,6 +5321,7 @@
             break;
         case LY_VALUE_CANON:
         case LY_VALUE_JSON:
+        case LY_VALUE_LYB:
             /* inherit parent (context node) module */
             if (ctx_scnode) {
                 mod = ctx_scnode->module;
@@ -5390,6 +5391,7 @@
             moveto_mod = set->cur_mod;
             break;
         case LY_VALUE_JSON:
+        case LY_VALUE_LYB:
             /* inherit module of the context node, if any */
             if (ctx_node) {
                 moveto_mod = ctx_node->schema->module;
@@ -5452,6 +5454,7 @@
             moveto_mod = set->cur_mod;
             break;
         case LY_VALUE_JSON:
+        case LY_VALUE_LYB:
             /* inherit module of the context node, if any */
             if (ctx_scnode) {
                 moveto_mod = ctx_scnode->module;
