diff --git a/src/context.c b/src/context.c
index 5f91f38..9457436 100644
--- a/src/context.c
+++ b/src/context.c
@@ -250,7 +250,7 @@
     LY_CHECK_GOTO(rc, error);
 
     /* load internal modules */
-    for (i = 0; i < ((options & LY_CTX_NOYANGLIBRARY) ? (LY_INTERNAL_MODS_COUNT - 2) : LY_INTERNAL_MODS_COUNT); i++) {
+    for (i = 0; i < ((options & LY_CTX_NO_YANGLIBRARY) ? (LY_INTERNAL_MODS_COUNT - 2) : LY_INTERNAL_MODS_COUNT); i++) {
         ly_in_memory(in, internal_modules[i].data);
         LY_CHECK_GOTO(rc = lys_create_module(ctx, in, internal_modules[i].format, internal_modules[i].implemented,
                 NULL, NULL, &module), error);
@@ -277,7 +277,7 @@
 ly_ctx_set_options(struct ly_ctx *ctx, uint16_t option)
 {
     LY_CHECK_ARG_RET(ctx, ctx, LY_EINVAL);
-    LY_CHECK_ERR_RET(option & LY_CTX_NOYANGLIBRARY, LOGARG(ctx, option), LY_EINVAL);
+    LY_CHECK_ERR_RET(option & LY_CTX_NO_YANGLIBRARY, LOGARG(ctx, option), LY_EINVAL);
 
     /* set the option(s) */
     ctx->flags |= option;
@@ -289,7 +289,7 @@
 ly_ctx_unset_options(struct ly_ctx *ctx, uint16_t option)
 {
     LY_CHECK_ARG_RET(ctx, ctx, LY_EINVAL);
-    LY_CHECK_ERR_RET(option & LY_CTX_NOYANGLIBRARY, LOGARG(ctx, option), LY_EINVAL);
+    LY_CHECK_ERR_RET(option & LY_CTX_NO_YANGLIBRARY, LOGARG(ctx, option), LY_EINVAL);
 
     /* unset the option(s) */
     ctx->flags &= ~option;
@@ -604,7 +604,7 @@
         return 0;
     }
 
-    if (ctx->flags & LY_CTX_NOYANGLIBRARY) {
+    if (ctx->flags & LY_CTX_NO_YANGLIBRARY) {
         return LY_INTERNAL_MODS_COUNT - 2;
     } else {
         return LY_INTERNAL_MODS_COUNT;
diff --git a/src/context.h b/src/context.h
index 6249f05..758b419 100644
--- a/src/context.h
+++ b/src/context.h
@@ -3,7 +3,7 @@
  * @author Radek Krejci <rkrejci@cesnet.cz>
  * @brief internal context structures and functions
  *
- * Copyright (c) 2015 - 2017 CESNET, z.s.p.o.
+ * Copyright (c) 2015 - 2020 CESNET, z.s.p.o.
  *
  * This source code is licensed under BSD 3-Clause License (the "License").
  * You may not use this file except in compliance with the License.
@@ -61,9 +61,10 @@
  * handled as implemented - libyang is able to instantiate data representing such a module. The modules loaded implicitly, are
  * not implemented and serve only as a source of grouping or typedef definitions. Context can hold multiple revisions of the same
  * YANG module, but only one of them can be implemented. Details about the difference between implemented and imported modules
- * can be found on @ref howtoSchema page. This behavior can be changed with the context's ::LY_CTX_ALLIMPLEMENTED option, which
- * causes that all the parsed modules, despite they were loaded explicitly or implicitly, are set to be implemented. Note, that as
- * a consequence of this option, only a single revision of any module can be present in the context in this case.
+ * can be found on @ref howtoSchema page. This behavior can be changed with the context's ::LY_CTX_ALL_IMPLEMENTED option, which
+ * causes that all the parsed modules, whether loaded explicitly or implicitly, are set to be implemented. Note, that as
+ * a consequence of this option, only a single revision of any module can be present in the context in this case. Also, a less
+ * crude option ::LY_CTX_REF_IMPLEMENTED can be used to implement only referenced modules that should also be implemented.
  *
  * When loading/importing a module without revision, the latest revision of the required module is supposed to load.
  * For a context, the first time the latest revision of a module is requested, it is properly searched for and loaded.
@@ -162,11 +163,14 @@
  * @{
  */
 
-#define LY_CTX_ALLIMPLEMENTED 0x01 /**< All the imports of the schema being parsed are treated implemented. */
-#define LY_CTX_TRUSTED        0x02 /**< Handle the schema being parsed as trusted and skip its validation
-                                        tests. Note that while this option improves performance, it can
-                                        lead to an undefined behavior if the schema is not correct. */
-#define LY_CTX_NOYANGLIBRARY  0x04 /**< Do not internally implement ietf-yang-library module. The option
+#define LY_CTX_ALL_IMPLEMENTED 0x01 /**< All the imported modules of the schema being parsed are implemented. */
+#define LY_CTX_REF_IMPLEMENTED 0x02 /**< Implement all imported modules "referenced" from an implemented module.
+                                        Normally, leafrefs, augment and deviation targets are implemented as
+                                        specified by YANG 1.1. In addition to this, implement any modules of
+                                        nodes referenced by when and must conditions and by any default values.
+                                        Generally, only if all these modules are implemented, the explicitly
+                                        implemented modules can be properly used and instantiated in data. */
+#define LY_CTX_NO_YANGLIBRARY  0x04 /**< Do not internally implement ietf-yang-library module. The option
                                         causes that function ::ly_ctx_get_yanglib_data() does not work (returns ::LY_EINVAL) until
                                         the ietf-yang-library module is loaded manually. While any revision
                                         of this schema can be loaded with this option, note that the only
diff --git a/src/plugins_types.c b/src/plugins_types.c
index 166f736..9927a22 100644
--- a/src/plugins_types.c
+++ b/src/plugins_types.c
@@ -27,6 +27,7 @@
 #include "compat.h"
 #include "dict.h"
 #include "path.h"
+#include "schema_compile.h"
 #include "set.h"
 #include "tree.h"
 #include "tree_schema.h"
@@ -750,7 +751,7 @@
     storage->int64 = num;
     storage->realtype = type;
 
-    if (options & LY_TYPE_OPTS_DYNAMIC) {
+    if (options & LY_TYPE_STORE_DYNAMIC) {
         free((char *)value);
     }
     return LY_SUCCESS;
@@ -804,7 +805,7 @@
     storage->int64 = num;
     storage->realtype = type;
 
-    if (options & LY_TYPE_OPTS_DYNAMIC) {
+    if (options & LY_TYPE_STORE_DYNAMIC) {
         free((char *)value);
     }
     return LY_SUCCESS;
@@ -869,7 +870,7 @@
     storage->dec64 = d;
     storage->realtype = type;
 
-    if (options & LY_TYPE_OPTS_DYNAMIC) {
+    if (options & LY_TYPE_STORE_DYNAMIC) {
         free((char *)value);
     }
     return LY_SUCCESS;
@@ -961,7 +962,7 @@
     storage->ptr = NULL;
     storage->realtype = type;
 
-    if (options & LY_TYPE_OPTS_DYNAMIC) {
+    if (options & LY_TYPE_STORE_DYNAMIC) {
         free((char *)value);
     }
     return LY_SUCCESS;
@@ -1005,7 +1006,7 @@
     /* pattern restrictions */
     LY_CHECK_RET(ly_type_validate_patterns(type_str->patterns, value, value_len, err));
 
-    if (options & LY_TYPE_OPTS_DYNAMIC) {
+    if (options & LY_TYPE_STORE_DYNAMIC) {
         LY_CHECK_RET(lydict_insert_zc(ctx, (char *)value, &storage->canonical));
     } else {
         LY_CHECK_RET(lydict_insert(ctx, value_len ? value : "", value_len, &storage->canonical));
@@ -1103,11 +1104,11 @@
         items_ordered = items;
         items = NULL;
 
-        if (!ws_count && !lws_count && (options & LY_TYPE_OPTS_DYNAMIC)) {
+        if (!ws_count && !lws_count && (options & LY_TYPE_STORE_DYNAMIC)) {
             ret = lydict_insert_zc(ctx, (char *)value, &can);
             LY_CHECK_GOTO(ret, cleanup);
             value = NULL;
-            options &= ~LY_TYPE_OPTS_DYNAMIC;
+            options &= ~LY_TYPE_STORE_DYNAMIC;
         } else {
             ret = lydict_insert(ctx, value_len ? &value[lws_count] : "", value_len - ws_count - lws_count, &can);
             LY_CHECK_GOTO(ret, cleanup);
@@ -1150,7 +1151,7 @@
     }
     storage->realtype = type;
 
-    if (options & LY_TYPE_OPTS_DYNAMIC) {
+    if (options & LY_TYPE_STORE_DYNAMIC) {
         free((char *)value);
     }
 
@@ -1245,7 +1246,7 @@
 match:
     /* validation done */
 
-    if (options & LY_TYPE_OPTS_DYNAMIC) {
+    if (options & LY_TYPE_STORE_DYNAMIC) {
         LY_CHECK_RET(lydict_insert_zc(ctx, (char *)value, &storage->canonical));
     } else {
         LY_CHECK_RET(lydict_insert(ctx, value_len ? value : "", value_len, &storage->canonical));
@@ -1295,7 +1296,7 @@
         }
     }
 
-    if (options & LY_TYPE_OPTS_DYNAMIC) {
+    if (options & LY_TYPE_STORE_DYNAMIC) {
         LY_CHECK_RET(lydict_insert_zc(ctx, (char *)value, &storage->canonical));
     } else {
         LY_CHECK_RET(lydict_insert(ctx, value, value_len, &storage->canonical));
@@ -1446,9 +1447,13 @@
         goto error;
     } else if (!mod->implemented) {
         /* non-implemented module */
-        rc = asprintf(&errmsg, "Invalid identityref \"%.*s\" value - identity found in non-implemented module \"%s\".",
-                (int)value_len, value, mod->name);
-        goto error;
+        if (options & LY_TYPE_STORE_IMPLEMENT) {
+            LY_CHECK_RET(lys_set_implemented((struct lys_module *)mod));
+        } else {
+            rc = asprintf(&errmsg, "Invalid identityref \"%.*s\" value - identity found in non-implemented module \"%s\".",
+                    (int)value_len, value, mod->name);
+            goto error;
+        }
     }
 
     /* check that the identity matches some of the type's base identities */
@@ -1473,7 +1478,7 @@
     LY_CHECK_RET(lydict_insert_zc(ctx, str, &storage->canonical));
     storage->realtype = type;
 
-    if (options & LY_TYPE_OPTS_DYNAMIC) {
+    if (options & LY_TYPE_STORE_DYNAMIC) {
         free((char *)value);
     }
     return LY_SUCCESS;
@@ -1567,6 +1572,11 @@
         goto error;
     }
 
+    if (options & LY_TYPE_STORE_IMPLEMENT) {
+        /* implement all prefixes */
+        LY_CHECK_GOTO(ret = lys_compile_expr_implement(ctx, exp, format, prefix_data, 1, NULL), error);
+    }
+
     /* resolve it on schema tree */
     ret = ly_path_compile(ctx, NULL, ctx_node, exp, LY_PATH_LREF_FALSE, lysc_is_output(ctx_node) ?
             LY_PATH_OPER_OUTPUT : LY_PATH_OPER_INPUT, LY_PATH_TARGET_SINGLE, format, prefix_data, &path);
@@ -1590,7 +1600,7 @@
     lyxp_expr_free(ctx, exp);
     ly_path_free(ctx, path);
 
-    if (options & LY_TYPE_OPTS_DYNAMIC) {
+    if (options & LY_TYPE_STORE_DYNAMIC) {
         free((char *)value);
     }
 
@@ -2319,11 +2329,11 @@
     }
 
     /* remember the original value */
-    if (options & LY_TYPE_OPTS_DYNAMIC) {
+    if (options & LY_TYPE_STORE_DYNAMIC) {
         ret = lydict_insert_zc(ctx, (char *)value, &subvalue->original);
         LY_CHECK_GOTO(ret, cleanup);
 
-        options &= ~LY_TYPE_OPTS_DYNAMIC;
+        options &= ~LY_TYPE_STORE_DYNAMIC;
     } else {
         ret = lydict_insert(ctx, value_len ? value : "", value_len, &subvalue->original);
         LY_CHECK_GOTO(ret, cleanup);
diff --git a/src/plugins_types.h b/src/plugins_types.h
index ffde8dc..1900d05 100644
--- a/src/plugins_types.h
+++ b/src/plugins_types.h
@@ -156,18 +156,19 @@
 void lysc_prefixes_free(struct lysc_prefix *prefixes);
 
 /**
- * @defgroup plugintypeopts Type store callback options.
+ * @defgroup plugintypestoreopts Type store callback options.
  *
  * Options applicable to ::ly_type_store_clb().
  *
  * @{
  */
-#define LY_TYPE_OPTS_DYNAMIC      0x01 /**< Flag for the dynamically allocated string value, in this case the value
-                                            is supposed to be freed or directly inserted into the context's dictionary
-                                            (e.g. in case of canonization).
-                                            In any case, the caller of the callback does not free the provided string value after calling
-                                            the type's callbacks with this option */
-/** @} plugintypeopts */
+#define LY_TYPE_STORE_DYNAMIC   0x01 /**< String value was dynamically allocated and is supposed to be freed or
+                                          directly inserted into the context's dictionary (e.g. in case of canonization).
+                                          In any case, the caller of the callback does not free the provided string
+                                          value after calling the type's store callback with this option */
+#define LY_TYPE_STORE_IMPLEMENT 0x02 /**< If a foreign module is needed to be implemented to successfully instantiate
+                                          the value, make the module implemented. */
+/** @} plugintypestoreopts */
 
 /**
  * @brief Callback to store and canonize the given @p value according to the given @p type.
@@ -182,7 +183,7 @@
  * @param[in] value Lexical representation of the value to be stored.
  *            It is never NULL, empty string is represented as "" with zero @p value_len.
  * @param[in] value_len Length (number of bytes) of the given \p value.
- * @param[in] options [Type plugin options](@ref plugintypeopts).
+ * @param[in] options [Type plugin store options](@ref plugintypestoreopts).
  * @param[in] format Input format of the value.
  * @param[in] prefix_data Format-specific data for resolving any prefixes (see ::ly_type_store_resolve_prefix).
  * @param[in] hints Bitmap of [value hints](@ref lydvalhints) of all the allowed value types.
diff --git a/src/schema_compile.c b/src/schema_compile.c
index f6c2552..6156baa 100644
--- a/src/schema_compile.c
+++ b/src/schema_compile.c
@@ -1372,24 +1372,16 @@
     return LY_SUCCESS;
 }
 
-/**
- * @brief Check parsed expression for any prefixes of unimplemented modules.
- *
- * @param[in] ctx libyang context.
- * @param[in] expr Parsed expression.
- * @param[in] format Prefix format.
- * @param[in] prefix_data Format-specific data (see ::ly_resolve_prefix()).
- * @param[out] mod_p Optional module that is not implemented.
- * @return Whether all the found modules are implemented or at least one is not.
- */
-static ly_bool
-lys_compile_expr_target_is_implemented(const struct ly_ctx *ctx, const struct lyxp_expr *expr, LY_PREFIX_FORMAT format,
-        void *prefix_data, const struct lys_module **mod_p)
+LY_ERR
+lys_compile_expr_implement(const struct ly_ctx *ctx, const struct lyxp_expr *expr, LY_PREFIX_FORMAT format,
+        void *prefix_data, ly_bool implement, const struct lys_module **mod_p)
 {
     uint32_t i;
     const char *ptr, *start;
     const struct lys_module *mod;
 
+    assert(implement || mod_p);
+
     for (i = 0; i < expr->used; ++i) {
         if ((expr->tokens[i] != LYXP_TOKEN_NAMETEST) && (expr->tokens[i] != LYXP_TOKEN_LITERAL)) {
             /* token cannot have a prefix */
@@ -1409,14 +1401,16 @@
 
         if (!mod->implemented) {
             /* unimplemented module found */
-            if (mod_p) {
+            if (implement) {
+                LY_CHECK_RET(lys_set_implemented((struct lys_module *)mod));
+            } else {
                 *mod_p = mod;
+                break;
             }
-            return 0;
         }
     }
 
-    return 1;
+    return LY_SUCCESS;
 }
 
 /**
@@ -1494,8 +1488,12 @@
 
     LY_ARRAY_FOR(when, u) {
         /* first check whether all the referenced modules are implemented */
-        if (!lys_compile_expr_target_is_implemented(ctx->ctx, when[u]->cond, LY_PREF_SCHEMA_RESOLVED,
-                when[u]->prefixes, &mod)) {
+        mod = NULL;
+        ret = lys_compile_expr_implement(ctx->ctx, when[u]->cond, LY_PREF_SCHEMA_RESOLVED, when[u]->prefixes,
+                ctx->ctx->flags & LY_CTX_REF_IMPLEMENTED, &mod);
+        if (ret) {
+            goto cleanup;
+        } else if (mod) {
             LOGWRN(ctx->ctx, "When condition \"%s\" check skipped because referenced module \"%s\" is not implemented.",
                     when[u]->cond->expr, mod->name);
             continue;
@@ -1504,7 +1502,7 @@
         /* check "when" */
         ret = lyxp_atomize(when[u]->cond, node->module, LY_PREF_SCHEMA_RESOLVED, when[u]->prefixes, when[u]->context,
                 &tmp_set, opts);
-        if (ret != LY_SUCCESS) {
+        if (ret) {
             LOGVAL(ctx->ctx, LY_VLOG_LYSC, node, LYVE_SEMANTICS, "Invalid when condition \"%s\".", when[u]->cond->expr);
             goto cleanup;
         }
@@ -1540,8 +1538,12 @@
 check_musts:
     LY_ARRAY_FOR(musts, u) {
         /* first check whether all the referenced modules are implemented */
-        if (!lys_compile_expr_target_is_implemented(ctx->ctx, musts[u].cond, LY_PREF_SCHEMA_RESOLVED,
-                musts[u].prefixes, &mod)) {
+        mod = NULL;
+        ret = lys_compile_expr_implement(ctx->ctx, musts[u].cond, LY_PREF_SCHEMA_RESOLVED, musts[u].prefixes,
+                ctx->ctx->flags & LY_CTX_REF_IMPLEMENTED, &mod);
+        if (ret) {
+            goto cleanup;
+        } else if (mod) {
             LOGWRN(ctx->ctx, "Must condition \"%s\" check skipped because referenced module \"%s\" is not implemented.",
                     musts[u].cond->expr, mod->name);
             continue;
@@ -1549,7 +1551,7 @@
 
         /* check "must" */
         ret = lyxp_atomize(musts[u].cond, node->module, LY_PREF_SCHEMA_RESOLVED, musts[u].prefixes, node, &tmp_set, opts);
-        if (ret != LY_SUCCESS) {
+        if (ret) {
             LOGVAL(ctx->ctx, LY_VLOG_LYSC, node, LYVE_SEMANTICS, "Invalid must restriction \"%s\".", musts[u].cond->expr);
             goto cleanup;
         }
@@ -1711,9 +1713,11 @@
         const struct lysp_module *dflt_pmod, struct lyd_value *storage)
 {
     LY_ERR ret;
+    uint32_t options;
     struct ly_err_item *err = NULL;
 
-    ret = type->plugin->store(ctx->ctx, type, dflt, strlen(dflt), 0, LY_PREF_SCHEMA, (void *)dflt_pmod,
+    options = (ctx->ctx->flags & LY_CTX_REF_IMPLEMENTED) ? LY_TYPE_STORE_IMPLEMENT : 0;
+    ret = type->plugin->store(ctx->ctx, type, dflt, strlen(dflt), options, LY_PREF_SCHEMA, (void *)dflt_pmod,
             LYD_HINT_SCHEMA, node, storage, &err);
     if (ret == LY_EINCOMPLETE) {
         /* we have no data so we will not be resolving it */
@@ -1728,8 +1732,7 @@
                     "Invalid default - value does not fit the type (%s).", err->msg);
             ly_err_free(err);
         } else {
-            LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SEMANTICS,
-                    "Invalid default - value does not fit the type.");
+            LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SEMANTICS, "Invalid default - value does not fit the type.");
         }
         return ret;
     }
diff --git a/src/schema_compile.h b/src/schema_compile.h
index db4fa09..5266ffb 100644
--- a/src/schema_compile.h
+++ b/src/schema_compile.h
@@ -241,6 +241,22 @@
         void *mod2, const char *name2);
 
 /**
+ * @brief Check parsed expression for any prefixes of unimplemented modules.
+ *
+ * @param[in] ctx libyang context.
+ * @param[in] expr Parsed expression.
+ * @param[in] format Prefix format.
+ * @param[in] prefix_data Format-specific data (see ::ly_resolve_prefix()).
+ * @param[in] implement Whether all the non-implemented modules should are implemented or the first
+ * non-implemented module, if any, returned in @p mod_p.
+ * @param[out] mod_p Module that is not implemented.
+ * @return LY_SUCCESS on success.
+ * @return LY_ERR on error.
+ */
+LY_ERR lys_compile_expr_implement(const struct ly_ctx *ctx, const struct lyxp_expr *expr, LY_PREFIX_FORMAT format,
+        void *prefix_data, ly_bool implement, const struct lys_module **mod_p);
+
+/**
  * @brief Compile printable schema into a validated schema linking all the references.
  *
  * @param[in] mod Pointer to the schema structure holding pointers to both schema structure types. The ::lys_module#parsed
diff --git a/src/tree_data.c b/src/tree_data.c
index 9a40133..8e5fed4 100644
--- a/src/tree_data.c
+++ b/src/tree_data.c
@@ -61,7 +61,7 @@
 {
     LY_ERR ret;
     struct ly_err_item *err = NULL;
-    uint32_t options = (dynamic && *dynamic ? LY_TYPE_OPTS_DYNAMIC : 0);
+    uint32_t options = (dynamic && *dynamic ? LY_TYPE_STORE_DYNAMIC : 0);
 
     if (incomplete) {
         *incomplete = 0;
diff --git a/src/tree_schema_helpers.c b/src/tree_schema_helpers.c
index ea8643d..a5f6ef5 100644
--- a/src/tree_schema_helpers.c
+++ b/src/tree_schema_helpers.c
@@ -671,7 +671,7 @@
 
     assert(mod);
 
-    if (ctx->flags & LY_CTX_ALLIMPLEMENTED) {
+    if (ctx->flags & LY_CTX_ALL_IMPLEMENTED) {
         implement = 1;
     }
 
diff --git a/src/xpath.c b/src/xpath.c
index c1dd71f..4d3c5fc 100644
--- a/src/xpath.c
+++ b/src/xpath.c
@@ -1550,7 +1550,7 @@
     }
 
     /* ignore errors, the value may not satisfy schema constraints */
-    rc = type->plugin->store(src->ctx, type, str, strlen(str), LY_TYPE_OPTS_DYNAMIC, LY_PREF_JSON, NULL, LYD_HINT_DATA,
+    rc = type->plugin->store(src->ctx, type, str, strlen(str), LY_TYPE_STORE_DYNAMIC, LY_PREF_JSON, NULL, LYD_HINT_DATA,
             xp_node->node->schema, &val, &err);
     ly_err_free(err);
     if (rc) {
diff --git a/tests/utests/test_context.c b/tests/utests/test_context.c
index bb2bb9f..35c9664 100644
--- a/tests/utests/test_context.c
+++ b/tests/utests/test_context.c
@@ -196,17 +196,22 @@
     logbuf_assert("Invalid argument ctx (ly_ctx_unset_options()).");
 
     /* option not allowed to be changed */
-    assert_int_equal(LY_EINVAL, ly_ctx_set_options(ctx, LY_CTX_NOYANGLIBRARY));
+    assert_int_equal(LY_EINVAL, ly_ctx_set_options(ctx, LY_CTX_NO_YANGLIBRARY));
     logbuf_assert("Invalid argument option (ly_ctx_set_options()).");
-    assert_int_equal(LY_EINVAL, ly_ctx_set_options(ctx, LY_CTX_NOYANGLIBRARY));
+    assert_int_equal(LY_EINVAL, ly_ctx_set_options(ctx, LY_CTX_NO_YANGLIBRARY));
     logbuf_assert("Invalid argument option (ly_ctx_set_options()).");
 
 
     /* unset */
-    /* LY_CTX_ALLIMPLEMENTED */
-    assert_int_not_equal(0, ctx->flags & LY_CTX_ALLIMPLEMENTED);
-    assert_int_equal(LY_SUCCESS, ly_ctx_unset_options(ctx, LY_CTX_ALLIMPLEMENTED));
-    assert_int_equal(0, ctx->flags & LY_CTX_ALLIMPLEMENTED);
+    /* LY_CTX_ALL_IMPLEMENTED */
+    assert_int_not_equal(0, ctx->flags & LY_CTX_ALL_IMPLEMENTED);
+    assert_int_equal(LY_SUCCESS, ly_ctx_unset_options(ctx, LY_CTX_ALL_IMPLEMENTED));
+    assert_int_equal(0, ctx->flags & LY_CTX_ALL_IMPLEMENTED);
+
+    /* LY_CTX_REF_IMPLEMENTED */
+    assert_int_not_equal(0, ctx->flags & LY_CTX_REF_IMPLEMENTED);
+    assert_int_equal(LY_SUCCESS, ly_ctx_unset_options(ctx, LY_CTX_REF_IMPLEMENTED));
+    assert_int_equal(0, ctx->flags & LY_CTX_REF_IMPLEMENTED);
 
     /* LY_CTX_DISABLE_SEARCHDIRS */
     assert_int_not_equal(0, ctx->flags & LY_CTX_DISABLE_SEARCHDIRS);
@@ -223,17 +228,16 @@
     assert_int_equal(LY_SUCCESS, ly_ctx_unset_options(ctx, LY_CTX_PREFER_SEARCHDIRS));
     assert_int_equal(0, ctx->flags & LY_CTX_PREFER_SEARCHDIRS);
 
-    /* LY_CTX_TRUSTED */
-    assert_int_not_equal(0, ctx->flags & LY_CTX_TRUSTED);
-    assert_int_equal(LY_SUCCESS, ly_ctx_unset_options(ctx, LY_CTX_TRUSTED));
-    assert_int_equal(0, ctx->flags & LY_CTX_TRUSTED);
-
     assert_int_equal(ctx->flags, ly_ctx_get_options(ctx));
 
     /* set back */
-    /* LY_CTX_ALLIMPLEMENTED */
-    assert_int_equal(LY_SUCCESS, ly_ctx_set_options(ctx, LY_CTX_ALLIMPLEMENTED));
-    assert_int_not_equal(0, ctx->flags & LY_CTX_ALLIMPLEMENTED);
+    /* LY_CTX_ALL_IMPLEMENTED */
+    assert_int_equal(LY_SUCCESS, ly_ctx_set_options(ctx, LY_CTX_ALL_IMPLEMENTED));
+    assert_int_not_equal(0, ctx->flags & LY_CTX_ALL_IMPLEMENTED);
+
+    /* LY_CTX_REF_IMPLEMENTED */
+    assert_int_equal(LY_SUCCESS, ly_ctx_set_options(ctx, LY_CTX_REF_IMPLEMENTED));
+    assert_int_not_equal(0, ctx->flags & LY_CTX_REF_IMPLEMENTED);
 
     /* LY_CTX_DISABLE_SEARCHDIRS */
     assert_int_equal(LY_SUCCESS, ly_ctx_set_options(ctx, LY_CTX_DISABLE_SEARCHDIRS));
@@ -247,10 +251,6 @@
     assert_int_equal(LY_SUCCESS, ly_ctx_set_options(ctx, LY_CTX_PREFER_SEARCHDIRS));
     assert_int_not_equal(0, ctx->flags & LY_CTX_PREFER_SEARCHDIRS);
 
-    /* LY_CTX_TRUSTED */
-    assert_int_equal(LY_SUCCESS, ly_ctx_set_options(ctx, LY_CTX_TRUSTED));
-    assert_int_not_equal(0, ctx->flags & LY_CTX_TRUSTED);
-
     assert_int_equal(ctx->flags, ly_ctx_get_options(ctx));
 
     /* cleanup */
diff --git a/tools/lint/commands.c b/tools/lint/commands.c
index e4ac307..20217fb 100644
--- a/tools/lint/commands.c
+++ b/tools/lint/commands.c
@@ -200,7 +200,7 @@
 
     for (s = strstr(arg_ptr, "-i"); s ; s = strstr(s + 2, "-i")) {
         if (s[2] == '\0' || s[2] == ' ') {
-            ly_ctx_set_options(ctx, LY_CTX_ALLIMPLEMENTED);
+            ly_ctx_set_options(ctx, LY_CTX_ALL_IMPLEMENTED);
             s[0] = s[1] = ' ';
         }
     }
@@ -266,7 +266,7 @@
 
 cleanup:
     free(s);
-    ly_ctx_unset_options(ctx, LY_CTX_ALLIMPLEMENTED);
+    ly_ctx_unset_options(ctx, LY_CTX_ALL_IMPLEMENTED);
 
     return ret;
 }
@@ -287,7 +287,7 @@
 
     for (s = strstr(arg_ptr, "-i"); s ; s = strstr(s + 2, "-i")) {
         if (s[2] == '\0' || s[2] == ' ') {
-            ly_ctx_set_options(ctx, LY_CTX_ALLIMPLEMENTED);
+            ly_ctx_set_options(ctx, LY_CTX_ALL_IMPLEMENTED);
             s[0] = s[1] = ' ';
         }
     }
@@ -332,7 +332,7 @@
 
 cleanup:
     free(s);
-    ly_ctx_unset_options(ctx, LY_CTX_ALLIMPLEMENTED);
+    ly_ctx_unset_options(ctx, LY_CTX_ALL_IMPLEMENTED);
 
     return ret;
 }
diff --git a/tools/lint/main_ni.c b/tools/lint/main_ni.c
index 96fab46..3d30a47 100644
--- a/tools/lint/main_ni.c
+++ b/tools/lint/main_ni.c
@@ -317,7 +317,7 @@
     char **feat = NULL, *ptr, *featlist, *dir;
     struct stat st;
     uint32_t u;
-    int options_ctx = LY_CTX_NOYANGLIBRARY, list = 0, outoptions_s = 0, outline_length_s = 0;
+    int options_ctx = LY_CTX_NO_YANGLIBRARY, list = 0, outoptions_s = 0, outline_length_s = 0;
     int autodetection = 0, options_parser = 0, merge = 0;
     const char *oper_file = NULL;
     int options_dflt = 0;
@@ -450,7 +450,7 @@
             goto cleanup;
 #endif
         case 'i':
-            options_ctx |= LY_CTX_ALLIMPLEMENTED;
+            options_ctx |= LY_CTX_ALL_IMPLEMENTED;
             break;
         case 'D':
             if (options_ctx & LY_CTX_DISABLE_SEARCHDIRS) {
