diff --git a/src/parser_xml.c b/src/parser_xml.c
index da7ba5d..b23b5bf 100644
--- a/src/parser_xml.c
+++ b/src/parser_xml.c
@@ -133,7 +133,7 @@
 }
 
 static LY_ERR
-lydxml_attributes(struct lyd_xml_ctx *ctx, struct ly_set *attrs_data, struct lyd_attr **attr)
+lydxml_attributes(struct lyd_xml_ctx *ctx, struct ly_set *attrs_data, const struct lysc_node *sparent, struct lyd_attr **attr)
 {
     LY_ERR ret = LY_EVALID, rc;
     const struct lyxml_ns *ns;
@@ -177,7 +177,7 @@
         }
 
         rc = lyd_create_attr(NULL, attr, mod, attr_data->name, attr_data->name_len, attr_data->value,
-                             attr_data->value_len, &attr_data->dynamic, lydxml_resolve_prefix, ctx, LYD_XML);
+                             attr_data->value_len, &attr_data->dynamic, lydxml_resolve_prefix, ctx, LYD_XML, sparent);
         if (rc == LY_EINCOMPLETE) {
             ly_set_add(&ctx->incomplete_type_validation_attrs, attr, LY_SET_OPT_USEASLIST);
         } else if (rc) {
@@ -216,7 +216,7 @@
     size_t prefix_len, name_len;
     struct ly_set attrs_data = {0};
     const struct lyxml_ns *ns;
-    struct lyd_attr *attr;
+    struct lyd_attr *attr = NULL, *attr2;
     const struct lysc_node *snode;
     struct lys_module *mod;
     unsigned int parents_count = ctx->elements.count;
@@ -238,16 +238,12 @@
             }
         }
 
-        attr = NULL;
         if (ctx->status == LYXML_ATTRIBUTE) {
             /* first parse all attributes so we have all the namespaces available */
             if (lydxml_attributes_parse(ctx, data, &attrs_data) != LY_SUCCESS) {
                 ret = LY_EVALID;
                 goto cleanup;
             }
-
-            /* create actual attributes so that prefixes are available in the context */
-            LY_CHECK_GOTO(ret = lydxml_attributes(ctx, &attrs_data, &attr), cleanup);
         }
 
         ns = lyxml_ns_get((struct lyxml_context *)ctx, prefix, prefix_len);
@@ -270,6 +266,11 @@
             goto cleanup;
         }
 
+        /* create actual attributes so that prefixes are available in the context */
+        if (attrs_data.count) {
+            LY_CHECK_GOTO(ret = lydxml_attributes(ctx, &attrs_data, snode, &attr), cleanup);
+        }
+
         if (snode->nodetype & (LYS_ACTION | LYS_NOTIF)) {
             LOGVAL(ctx->ctx, LY_VLOG_LINE, &ctx->line, LYVE_DATA, "Unexpected %s element \"%.*s\".",
                    snode->nodetype == LYS_ACTION ? "RPC/action" : "notification", name_len, name);
@@ -402,11 +403,6 @@
             }
         }
 
-        /* add attributes */
-        assert(!cur->attr);
-        cur->attr = attr;
-        attr = NULL;
-
         /* correct flags */
         if (!(snode->nodetype & (LYS_ACTION | LYS_NOTIF)) && snode->when) {
             if (ctx->options & LYD_OPT_TRUSTED) {
@@ -421,6 +417,18 @@
             /* node is valid */
             cur->flags &= ~LYD_NEW;
         }
+        LY_LIST_FOR(attr, attr2) {
+            if (!strcmp(attr2->name, "default") && !strcmp(attr2->annotation->module->name, "ietf-netconf-with-defaults")
+                    && attr2->value.boolean) {
+                /* node is default according to the metadata */
+                cur->flags |= LYD_DEFAULT;
+            }
+        }
+
+        /* add attributes */
+        assert(!cur->attr);
+        cur->attr = attr;
+        attr = NULL;
 
         /* insert */
         lyd_insert_node((struct lyd_node *)parent, node, cur);
