diff --git a/src/tree_schema_compile.c b/src/tree_schema_compile.c
index 06054a6..6f2a367 100644
--- a/src/tree_schema_compile.c
+++ b/src/tree_schema_compile.c
@@ -4072,6 +4072,9 @@
  * @param[in] mandatory_flag Node's mandatory flag to be applied to the @p node.
  * @param[in] nodeid Schema nodeid used to identify target of refine/deviation (for logging).
  * @param[in] refine_flag Flag to distinguish if the change is caused by refine (flag set) or deviation (for logging).
+ * @param[in] It is also used as a flag for testing for compatibility with default statement. In case of deviations,
+ * there can be some other deviations of the default properties that we are testing here. To avoid false positive failure,
+ * the tests are skipped here, but they are supposed to be performed after all the deviations are applied.
  * @return LY_ERR value.
  */
 static LY_ERR
@@ -4088,25 +4091,26 @@
         /* check if node has default value */
         if (node->nodetype & LYS_LEAF) {
             if (node->flags & LYS_SET_DFLT) {
-                LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SEMANTICS,
-                       "Invalid %s of mandatory in \"%s\" - leaf already has \"default\" statement.",
-                       refine_flag ? "refine" : "deviation", nodeid);
-                return LY_EVALID;
+                if (refine_flag) {
+                    LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SEMANTICS,
+                           "Invalid refine of mandatory in \"%s\" - leaf already has \"default\" statement.", nodeid);
+                    return LY_EVALID;
+                }
             } else {
                 /* remove the default value taken from the leaf's type */
                 FREE_STRING(ctx->ctx, ((struct lysc_node_leaf*)node)->dflt);
                 ((struct lysc_node_leaf*)node)->dflt = NULL;
             }
         } else if ((node->nodetype & LYS_CHOICE) && ((struct lysc_node_choice*)node)->dflt) {
-            LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SEMANTICS,
-                   "Invalid %s of mandatory in \"%s\" - choice already has \"default\" statement.",
-                   refine_flag ? "refine" : "deviation", nodeid);
-            return LY_EVALID;
+            if (refine_flag) {
+                LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SEMANTICS,
+                       "Invalid refine of mandatory in \"%s\" - choice already has \"default\" statement.", nodeid);
+                return LY_EVALID;
+            }
         }
-        if (node->parent && (node->parent->flags & LYS_SET_DFLT)) {
+        if (refine_flag && node->parent && (node->parent->flags & LYS_SET_DFLT)) {
             LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SEMANTICS,
-                   "Invalid %s of mandatory in \"%s\" under the default case.",
-                   refine_flag ? "refine" : "deviation", nodeid);
+                   "Invalid refine of mandatory in \"%s\" under the default case.", nodeid);
             return LY_EVALID;
         }
 
@@ -4775,6 +4779,7 @@
     size_t prefix_len, name_len;
     const char *prefix, *name, *nodeid;
     struct lys_module *mod;
+    uint32_t min, max;
 
     /* get all deviations from the module and all its submodules ... */
     LY_ARRAY_FOR(mod_p->deviations, u) {
@@ -4838,12 +4843,28 @@
         goto cleanup; \
     }
 
+#define DEV_CHECK_NONPRESENCE_UINT(TYPE, COND, MEMBER, PROPERTY) \
+    if (((TYPE)devs[u]->target)->MEMBER COND) { \
+        LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_REFERENCE, \
+               "Invalid deviation (%s) adding \"%s\" property which already exists (with value \"%u\").", \
+               devs[u]->nodeid, PROPERTY, ((TYPE)devs[u]->target)->MEMBER); \
+        goto cleanup; \
+    }
+
 #define DEV_CHECK_PRESENCE(TYPE, COND, MEMBER, DEVTYPE, PROPERTY, VALUE) \
     if (!((TYPE)devs[u]->target)->MEMBER || COND) { \
         LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LY_VCODE_DEV_NOT_PRESENT, devs[u]->nodeid, DEVTYPE, PROPERTY, VALUE); \
         goto cleanup; \
     }
 
+#define DEV_CHECK_PRESENCE_UINT(TYPE, COND, MEMBER, PROPERTY) \
+    if (!(((TYPE)devs[u]->target)->MEMBER COND)) { \
+        LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_REFERENCE, \
+               "Invalid deviation (%s) replacing with \"%s\" property \"%u\" which is not present.", \
+               devs[u]->nodeid, PROPERTY, d_rpl->MEMBER); \
+        goto cleanup; \
+    }
+
 #define DEV_DEL_MEMBER(TYPE, MEMBER_TRG, MEMBER_DEV, DELFUNC, PROPERTY) \
     DEV_CHECK_PRESENCE(TYPE, 0, MEMBER_TRG, "deleting", PROPERTY, d_del->MEMBER_DEV); \
     if (strcmp(((TYPE)devs[u]->target)->MEMBER_TRG, d_del->MEMBER_DEV)) { \
@@ -4941,11 +4962,6 @@
 
                 /* *default-stmt */
                 if (d_add->dflts) {
-                    if (devs[u]->target->flags & LYS_MAND_TRUE) {
-                        LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SEMANTICS,
-                               "Invalid deviation (%s) adding \"default\" property \"%s\" into a mandatory node.", devs[u]->nodeid, d_add->dflts[0]);
-                        goto cleanup;
-                    }
                     switch (devs[u]->target->nodetype) {
                     case LYS_LEAF:
                         DEV_CHECK_CARDINALITY(d_add->dflts, 1, "default");
@@ -4956,6 +4972,8 @@
                             ((struct lysc_node_leaf*)devs[u]->target)->dflt = NULL;
                         }
                         DUP_STRING(ctx->ctx, d_add->dflts[0], ((struct lysc_node_leaf*)devs[u]->target)->dflt);
+                        /* mark the new default values as leaf's own */
+                        devs[u]->target->flags |= LYS_SET_DFLT;
                         break;
                     case LYS_LEAFLIST:
                         if (((struct lysc_node_leaflist*)devs[u]->target)->dflts && !(devs[u]->target->flags & LYS_SET_DFLT)) {
@@ -4974,7 +4992,7 @@
                             DUP_STRING(ctx->ctx, d_add->dflts[x - y], ((struct lysc_node_leaflist*)devs[u]->target)->dflts[x]);
                             LY_ARRAY_INCREMENT(((struct lysc_node_leaflist*)devs[u]->target)->dflts);
                         }
-                        /* mark the new default values as leafref's own */
+                        /* mark the new default values as leaf-list's own */
                         devs[u]->target->flags |= LYS_SET_DFLT;
                         break;
                     case LYS_CHOICE:
@@ -5022,8 +5040,41 @@
                 }
 
                 /* [min-elements-stmt] */
+                if (d_add->flags & LYS_SET_MIN) {
+                    if (devs[u]->target->nodetype == LYS_LEAFLIST) {
+                        DEV_CHECK_NONPRESENCE_UINT(struct lysc_node_leaflist*, > 0, min, "min-elements");
+                        /* change value */
+                        ((struct lysc_node_leaflist*)devs[u]->target)->min = d_add->min;
+                    } else if (devs[u]->target->nodetype == LYS_LIST) {
+                        DEV_CHECK_NONPRESENCE_UINT(struct lysc_node_list*, > 0, min, "min-elements");
+                        /* change value */
+                        ((struct lysc_node_list*)devs[u]->target)->min = d_add->min;
+                    } else {
+                        LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LY_VCODE_DEV_NODETYPE, devs[u]->nodeid,
+                               lys_nodetype2str(devs[u]->target->nodetype), "add", "min-elements");
+                        goto cleanup;
+                    }
+                    if (d_add->min) {
+                        devs[u]->target->flags |= LYS_MAND_TRUE;
+                    }
+                }
 
                 /* [max-elements-stmt] */
+                if (d_add->flags & LYS_SET_MAX) {
+                    if (devs[u]->target->nodetype == LYS_LEAFLIST) {
+                        DEV_CHECK_NONPRESENCE_UINT(struct lysc_node_leaflist*, < (uint32_t)-1, max, "max-elements");
+                        /* change value */
+                        ((struct lysc_node_leaflist*)devs[u]->target)->max = d_add->max ? d_add->max : (uint32_t)-1;
+                    } else if (devs[u]->target->nodetype == LYS_LIST) {
+                        DEV_CHECK_NONPRESENCE_UINT(struct lysc_node_list*, < (uint32_t)-1, max, "max-elements");
+                        /* change value */
+                        ((struct lysc_node_list*)devs[u]->target)->max = d_add->max ? d_add->max : (uint32_t)-1;
+                    } else {
+                        LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LY_VCODE_DEV_NODETYPE, devs[u]->nodeid,
+                               lys_nodetype2str(devs[u]->target->nodetype), "add", "max-elements");
+                        goto cleanup;
+                    }
+                }
 
                 break;
             case LYS_DEV_DELETE:
@@ -5110,9 +5161,13 @@
                                            dflt, "deleting", "default", d_del->dflts[0]);
 
                         DEV_DEL_MEMBER(struct lysc_node_leaf*, dflt, dflts[0], lydict_remove, "default");
+                        devs[u]->target->flags &= ~LYS_SET_DFLT;
                         break;
                     case LYS_LEAFLIST:
                         DEV_DEL_ARRAY(struct lysc_node_leaflist*, dflts, , , , lydict_remove, "default");
+                        if (!((struct lysc_node_leaflist*)devs[u]->target)->dflts) {
+                            devs[u]->target->flags &= ~LYS_SET_DFLT;
+                        }
                         break;
                     case LYS_CHOICE:
                         DEV_CHECK_CARDINALITY(d_del->dflts, 1, "default");
@@ -5222,8 +5277,41 @@
                 }
 
                 /* [min-elements-stmt] */
+                if (d_rpl->flags & LYS_SET_MIN) {
+                    if (devs[u]->target->nodetype == LYS_LEAFLIST) {
+                        DEV_CHECK_PRESENCE_UINT(struct lysc_node_leaflist*, > 0, min, "min-elements");
+                        /* change value */
+                        ((struct lysc_node_leaflist*)devs[u]->target)->min = d_rpl->min;
+                    } else if (devs[u]->target->nodetype == LYS_LIST) {
+                        DEV_CHECK_PRESENCE_UINT(struct lysc_node_list*, > 0, min, "min-elements");
+                        /* change value */
+                        ((struct lysc_node_list*)devs[u]->target)->min = d_rpl->min;
+                    } else {
+                        LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LY_VCODE_DEV_NODETYPE, devs[u]->nodeid,
+                               lys_nodetype2str(devs[u]->target->nodetype), "replace", "min-elements");
+                        goto cleanup;
+                    }
+                    if (d_rpl->min) {
+                        devs[u]->target->flags |= LYS_MAND_TRUE;
+                    }
+                }
 
                 /* [max-elements-stmt] */
+                if (d_rpl->flags & LYS_SET_MAX) {
+                    if (devs[u]->target->nodetype == LYS_LEAFLIST) {
+                        DEV_CHECK_PRESENCE_UINT(struct lysc_node_leaflist*, < (uint32_t)-1, max, "max-elements");
+                        /* change value */
+                        ((struct lysc_node_leaflist*)devs[u]->target)->max = d_rpl->max ? d_rpl->max : (uint32_t)-1;
+                    } else if (devs[u]->target->nodetype == LYS_LIST) {
+                        DEV_CHECK_PRESENCE_UINT(struct lysc_node_list*, < (uint32_t)-1, max, "max-elements");
+                        /* change value */
+                        ((struct lysc_node_list*)devs[u]->target)->max = d_rpl->max ? d_rpl->max : (uint32_t)-1;
+                    } else {
+                        LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LY_VCODE_DEV_NODETYPE, devs[u]->nodeid,
+                               lys_nodetype2str(devs[u]->target->nodetype), "replace", "max-elements");
+                        goto cleanup;
+                    }
+                }
 
                 break;
             default:
@@ -5231,6 +5319,46 @@
                 goto cleanup;
             }
         }
+
+        /* check min-max compatibility */
+        if (devs[u]->target->nodetype == LYS_LEAFLIST) {
+            min = ((struct lysc_node_leaflist*)devs[u]->target)->min;
+            max = ((struct lysc_node_leaflist*)devs[u]->target)->max;
+        } else if (devs[u]->target->nodetype == LYS_LIST) {
+            min = ((struct lysc_node_list*)devs[u]->target)->min;
+            max = ((struct lysc_node_list*)devs[u]->target)->max;
+        } else {
+            min = max = 0;
+        }
+        if (min > max) {
+            LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SEMANTICS, "Invalid combination of min-elements and max-elements "
+                   "after deviation (%s): min value %u is bigger than max value %u.",
+                   devs[u]->nodeid, min, max);
+            goto cleanup;
+        }
+
+        /* check mandatory - default compatibility */
+        if ((devs[u]->target->nodetype & (LYS_LEAF | LYS_LEAFLIST))
+                && (devs[u]->target->flags & LYS_SET_DFLT)
+                && (devs[u]->target->flags & LYS_MAND_TRUE)) {
+            LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SEMANTICS,
+                   "Invalid deviation (%s) combining default value and mandatory %s.",
+                   devs[u]->nodeid, lys_nodetype2str(devs[u]->target->nodetype));
+            goto cleanup;
+        } else if ((devs[u]->target->nodetype & LYS_CHOICE)
+                && ((struct lysc_node_choice*)devs[u]->target)->dflt
+                && (devs[u]->target->flags & LYS_MAND_TRUE)) {
+            LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SEMANTICS,
+                   "Invalid deviation (%s) combining default case and mandatory choice.", devs[u]->nodeid);
+            goto cleanup;
+        }
+        if (devs[u]->target->parent && (devs[u]->target->parent->flags & LYS_SET_DFLT) && (devs[u]->target->flags & LYS_MAND_TRUE)) {
+            /* mandatory node under a default case */
+            LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SEMANTICS,
+                   "Invalid deviation (%s) combining mandatory %s \"%s\" in a default choice's case \"%s\".",
+                   devs[u]->nodeid, lys_nodetype2str(devs[u]->target->nodetype), devs[u]->target->name, devs[u]->target->parent->name);
+            goto cleanup;
+        }
     }
 
     ret = LY_SUCCESS;
diff --git a/tests/src/test_tree_schema_compile.c b/tests/src/test_tree_schema_compile.c
index 4355725..eddda4c 100644
--- a/tests/src/test_tree_schema_compile.c
+++ b/tests/src/test_tree_schema_compile.c
@@ -2698,6 +2698,46 @@
     assert_false(node->flags & LYS_MAND_MASK); /* just unset on container */
     assert_true((lysc_node_children(node)->flags & LYS_MAND_MASK) == LYS_MAND_FALSE);
 
+    assert_non_null(mod = lys_parse_mem(ctx, "module n {yang-version 1.1; namespace urn:n;prefix n;"
+                                        "leaf a {default test; type string;}"
+                                        "leaf b {mandatory true; type string;}"
+                                        "deviation /a {deviate add {mandatory true;} deviate delete {default test;}}"
+                                        "deviation /b {deviate add {default test;} deviate replace {mandatory false;}}}", LYS_IN_YANG));
+    assert_non_null(node = mod->compiled->data);
+    assert_string_equal("a", node->name);
+    assert_null(((struct lysc_node_leaf*)node)->dflt);
+    assert_true((node->flags & LYS_MAND_MASK) == LYS_MAND_TRUE);
+    assert_non_null(node = node->next);
+    assert_string_equal("b", node->name);
+    assert_non_null(((struct lysc_node_leaf*)node)->dflt);
+    assert_true((node->flags & LYS_MAND_MASK) == LYS_MAND_FALSE);
+
+    assert_non_null(mod = lys_parse_mem(ctx, "module o {namespace urn:o;prefix o;"
+                                        "leaf-list a {type string;}"
+                                        "list b {config false;}"
+                                        "leaf-list c {min-elements 1; max-elements 10; type string;}"
+                                        "list d {min-elements 10; max-elements 100; config false;}"
+                                        "deviation /a {deviate add {min-elements 1; max-elements 10;}}"
+                                        "deviation /b {deviate add {min-elements 10; max-elements 100;}}"
+                                        "deviation /c {deviate replace {min-elements 10; max-elements 100;}}"
+                                        "deviation /d {deviate replace {min-elements 1; max-elements 10;}}}", LYS_IN_YANG));
+    assert_non_null(node = mod->compiled->data);
+    assert_string_equal("a", node->name);
+    assert_int_equal(1, ((struct lysc_node_leaflist*)node)->min);
+    assert_int_equal(10, ((struct lysc_node_leaflist*)node)->max);
+    assert_non_null(node = node->next);
+    assert_string_equal("b", node->name);
+    assert_int_equal(10, ((struct lysc_node_list*)node)->min);
+    assert_int_equal(100, ((struct lysc_node_list*)node)->max);
+    assert_non_null(node = node->next);
+    assert_string_equal("c", node->name);
+    assert_int_equal(10, ((struct lysc_node_leaflist*)node)->min);
+    assert_int_equal(100, ((struct lysc_node_leaflist*)node)->max);
+    assert_non_null(node = node->next);
+    assert_string_equal("d", node->name);
+    assert_int_equal(1, ((struct lysc_node_list*)node)->min);
+    assert_int_equal(10, ((struct lysc_node_list*)node)->max);
+
     assert_null(lys_parse_mem(ctx, "module aa1 {namespace urn:aa1;prefix aa1;import a {prefix a;}"
                               "deviation /a:top/a:z {deviate not-supported;}}", LYS_IN_YANG));
     logbuf_assert("Invalid absolute-schema-nodeid value \"/a:top/a:z\" - target node not found.");
@@ -2771,7 +2811,7 @@
     logbuf_assert("Invalid deviation (/e:a) adding \"default\" property \"e:c\" of choice - mandatory node \"c\" under the default case.");
     assert_null(lys_parse_mem(ctx, "module gg5 {namespace urn:gg5;prefix gg5; leaf x {type string; mandatory true;}"
                               "deviation /x {deviate add {default error;}}}", LYS_IN_YANG));
-    logbuf_assert("Invalid deviation (/x) adding \"default\" property \"error\" into a mandatory node.");
+    logbuf_assert("Invalid deviation (/x) combining default value and mandatory leaf.");
 
     assert_null(lys_parse_mem(ctx, "module hh1 {yang-version 1.1; namespace urn:hh1;prefix hh1; import e {prefix e;}"
                               "deviation /e:d {deviate replace {default hi;}}}", LYS_IN_YANG));
@@ -2822,6 +2862,53 @@
                               "deviation /x {deviate add {mandatory false;}}}", LYS_IN_YANG));
     logbuf_assert("Invalid deviation (/x) adding \"mandatory\" property which already exists (with value \"mandatory true\").");
 
+    assert_null(lys_parse_mem(ctx, "module ll1 {namespace urn:ll1;prefix ll1; leaf x {default test; type string;}"
+                              "deviation /x {deviate add {mandatory true;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid deviation (/x) combining default value and mandatory leaf.");
+    assert_null(lys_parse_mem(ctx, "module ll2 {yang-version 1.1; namespace urn:ll2;prefix ll2; leaf-list x {default test; type string;}"
+                              "deviation /x {deviate add {min-elements 1;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid deviation (/x) combining default value and mandatory leaf-list.");
+    assert_null(lys_parse_mem(ctx, "module ll2 {namespace urn:ll2;prefix ll2; choice ch {default a; leaf a {type string;} leaf b {type string;}}"
+                              "deviation /ch {deviate add {mandatory true;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid deviation (/ch) combining default case and mandatory choice.");
+
+    assert_null(lys_parse_mem(ctx, "module mm1 {namespace urn:mm1;prefix mm1; leaf-list x {min-elements 10; type string;}"
+                              "deviation /x {deviate add {max-elements 5;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid combination of min-elements and max-elements after deviation (/x): min value 10 is bigger than max value 5.");
+    assert_null(lys_parse_mem(ctx, "module mm2 {namespace urn:mm2;prefix mm2; leaf-list x {max-elements 10; type string;}"
+                              "deviation /x {deviate add {min-elements 20;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid combination of min-elements and max-elements after deviation (/x): min value 20 is bigger than max value 10.");
+    assert_null(lys_parse_mem(ctx, "module mm3 {namespace urn:mm3;prefix mm3; list x {min-elements 5; max-elements 10; config false;}"
+                              "deviation /x {deviate replace {max-elements 1;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid combination of min-elements and max-elements after deviation (/x): min value 5 is bigger than max value 1.");
+    assert_null(lys_parse_mem(ctx, "module mm4 {namespace urn:mm4;prefix mm4; list x {min-elements 5; max-elements 10; config false;}"
+                              "deviation /x {deviate replace {min-elements 20;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid combination of min-elements and max-elements after deviation (/x): min value 20 is bigger than max value 10.");
+    assert_null(lys_parse_mem(ctx, "module mm5 {namespace urn:mm5;prefix mm5; leaf-list x {type string; min-elements 5;}"
+                              "deviation /x {deviate add {min-elements 1;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid deviation (/x) adding \"min-elements\" property which already exists (with value \"5\").");
+    assert_null(lys_parse_mem(ctx, "module mm6 {namespace urn:mm6;prefix mm6; list x {config false; min-elements 5;}"
+                              "deviation /x {deviate add {min-elements 1;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid deviation (/x) adding \"min-elements\" property which already exists (with value \"5\").");
+    assert_null(lys_parse_mem(ctx, "module mm7 {namespace urn:mm7;prefix mm7; leaf-list x {type string; max-elements 5;}"
+                              "deviation /x {deviate add {max-elements 1;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid deviation (/x) adding \"max-elements\" property which already exists (with value \"5\").");
+    assert_null(lys_parse_mem(ctx, "module mm8 {namespace urn:mm8;prefix mm8; list x {config false; max-elements 5;}"
+                              "deviation /x {deviate add {max-elements 1;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid deviation (/x) adding \"max-elements\" property which already exists (with value \"5\").");
+    assert_null(lys_parse_mem(ctx, "module mm9 {namespace urn:mm9;prefix mm9; leaf-list x {type string;}"
+                              "deviation /x {deviate replace {min-elements 1;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid deviation (/x) replacing with \"min-elements\" property \"1\" which is not present.");
+    assert_null(lys_parse_mem(ctx, "module mm10 {namespace urn:mm10;prefix mm10; list x {config false;}"
+                              "deviation /x {deviate replace {min-elements 1;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid deviation (/x) replacing with \"min-elements\" property \"1\" which is not present.");
+    assert_null(lys_parse_mem(ctx, "module mm11 {namespace urn:mm11;prefix mm11; leaf-list x {type string;}"
+                              "deviation /x {deviate replace {max-elements 1;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid deviation (/x) replacing with \"max-elements\" property \"1\" which is not present.");
+    assert_null(lys_parse_mem(ctx, "module mm12 {namespace urn:mm12;prefix mm12; list x {config false; }"
+                              "deviation /x {deviate replace {max-elements 1;}}}", LYS_IN_YANG));
+    logbuf_assert("Invalid deviation (/x) replacing with \"max-elements\" property \"1\" which is not present.");
+
     *state = NULL;
     ly_ctx_destroy(ctx, NULL);
 }
