diff --git a/src/tree_schema_helpers.c b/src/tree_schema_helpers.c
index 46d7801..1cc11c2 100644
--- a/src/tree_schema_helpers.c
+++ b/src/tree_schema_helpers.c
@@ -1410,7 +1410,7 @@
     return NULL;
 }
 
-enum yang_keyword
+enum ly_stmt
 lysp_match_kw(struct lys_parser_ctx *ctx, const char **data)
 {
 /**
@@ -1424,183 +1424,183 @@
 #define IF_KW_PREFIX(STR, LEN) if (!strncmp(*(data), STR, LEN)) {MOVE_IN(ctx, data, LEN);
 #define IF_KW_PREFIX_END }
 
-    enum yang_keyword result = YANG_NONE;
-    enum yang_keyword *kw = &result;
+    enum ly_stmt result = LY_STMT_NONE;
+    enum ly_stmt *kw = &result;
     /* read the keyword itself */
     switch (**data) {
     case 'a':
         MOVE_IN(ctx, data, 1);
-        IF_KW("rgument", 7, YANG_ARGUMENT)
-        else IF_KW("ugment", 6, YANG_AUGMENT)
-        else IF_KW("ction", 5, YANG_ACTION)
+        IF_KW("rgument", 7, LY_STMT_ARGUMENT)
+        else IF_KW("ugment", 6, LY_STMT_AUGMENT)
+        else IF_KW("ction", 5, LY_STMT_ACTION)
         else IF_KW_PREFIX("ny", 2)
-            IF_KW("data", 4, YANG_ANYDATA)
-            else IF_KW("xml", 3, YANG_ANYXML)
+            IF_KW("data", 4, LY_STMT_ANYDATA)
+            else IF_KW("xml", 3, LY_STMT_ANYXML)
         IF_KW_PREFIX_END
         break;
     case 'b':
         MOVE_IN(ctx, data, 1);
-        IF_KW("ase", 3, YANG_BASE)
-        else IF_KW("elongs-to", 9, YANG_BELONGS_TO)
-        else IF_KW("it", 2, YANG_BIT)
+        IF_KW("ase", 3, LY_STMT_BASE)
+        else IF_KW("elongs-to", 9, LY_STMT_BELONGS_TO)
+        else IF_KW("it", 2, LY_STMT_BIT)
         break;
     case 'c':
         MOVE_IN(ctx, data, 1);
-        IF_KW("ase", 3, YANG_CASE)
-        else IF_KW("hoice", 5, YANG_CHOICE)
+        IF_KW("ase", 3, LY_STMT_CASE)
+        else IF_KW("hoice", 5, LY_STMT_CHOICE)
         else IF_KW_PREFIX("on", 2)
-            IF_KW("fig", 3, YANG_CONFIG)
+            IF_KW("fig", 3, LY_STMT_CONFIG)
             else IF_KW_PREFIX("ta", 2)
-                IF_KW("ct", 2, YANG_CONTACT)
-                else IF_KW("iner", 4, YANG_CONTAINER)
+                IF_KW("ct", 2, LY_STMT_CONTACT)
+                else IF_KW("iner", 4, LY_STMT_CONTAINER)
             IF_KW_PREFIX_END
         IF_KW_PREFIX_END
         break;
     case 'd':
         MOVE_IN(ctx, data, 1);
         IF_KW_PREFIX("e", 1)
-            IF_KW("fault", 5, YANG_DEFAULT)
-            else IF_KW("scription", 9, YANG_DESCRIPTION)
+            IF_KW("fault", 5, LY_STMT_DEFAULT)
+            else IF_KW("scription", 9, LY_STMT_DESCRIPTION)
             else IF_KW_PREFIX("viat", 4)
-                IF_KW("e", 1, YANG_DEVIATE)
-                else IF_KW("ion", 3, YANG_DEVIATION)
+                IF_KW("e", 1, LY_STMT_DEVIATE)
+                else IF_KW("ion", 3, LY_STMT_DEVIATION)
             IF_KW_PREFIX_END
         IF_KW_PREFIX_END
         break;
     case 'e':
         MOVE_IN(ctx, data, 1);
-        IF_KW("num", 3, YANG_ENUM)
+        IF_KW("num", 3, LY_STMT_ENUM)
         else IF_KW_PREFIX("rror-", 5)
-            IF_KW("app-tag", 7, YANG_ERROR_APP_TAG)
-            else IF_KW("message", 7, YANG_ERROR_MESSAGE)
+            IF_KW("app-tag", 7, LY_STMT_ERROR_APP_TAG)
+            else IF_KW("message", 7, LY_STMT_ERROR_MESSAGE)
         IF_KW_PREFIX_END
-        else IF_KW("xtension", 8, YANG_EXTENSION)
+        else IF_KW("xtension", 8, LY_STMT_EXTENSION)
         break;
     case 'f':
         MOVE_IN(ctx, data, 1);
-        IF_KW("eature", 6, YANG_FEATURE)
-        else IF_KW("raction-digits", 14, YANG_FRACTION_DIGITS)
+        IF_KW("eature", 6, LY_STMT_FEATURE)
+        else IF_KW("raction-digits", 14, LY_STMT_FRACTION_DIGITS)
         break;
     case 'g':
         MOVE_IN(ctx, data, 1);
-        IF_KW("rouping", 7, YANG_GROUPING)
+        IF_KW("rouping", 7, LY_STMT_GROUPING)
         break;
     case 'i':
         MOVE_IN(ctx, data, 1);
-        IF_KW("dentity", 7, YANG_IDENTITY)
-        else IF_KW("f-feature", 9, YANG_IF_FEATURE)
-        else IF_KW("mport", 5, YANG_IMPORT)
+        IF_KW("dentity", 7, LY_STMT_IDENTITY)
+        else IF_KW("f-feature", 9, LY_STMT_IF_FEATURE)
+        else IF_KW("mport", 5, LY_STMT_IMPORT)
         else IF_KW_PREFIX("n", 1)
-            IF_KW("clude", 5, YANG_INCLUDE)
-            else IF_KW("put", 3, YANG_INPUT)
+            IF_KW("clude", 5, LY_STMT_INCLUDE)
+            else IF_KW("put", 3, LY_STMT_INPUT)
         IF_KW_PREFIX_END
         break;
     case 'k':
         MOVE_IN(ctx, data, 1);
-        IF_KW("ey", 2, YANG_KEY)
+        IF_KW("ey", 2, LY_STMT_KEY)
         break;
     case 'l':
         MOVE_IN(ctx, data, 1);
         IF_KW_PREFIX("e", 1)
-            IF_KW("af-list", 7, YANG_LEAF_LIST)
-            else IF_KW("af", 2, YANG_LEAF)
-            else IF_KW("ngth", 4, YANG_LENGTH)
+            IF_KW("af-list", 7, LY_STMT_LEAF_LIST)
+            else IF_KW("af", 2, LY_STMT_LEAF)
+            else IF_KW("ngth", 4, LY_STMT_LENGTH)
         IF_KW_PREFIX_END
-        else IF_KW("ist", 3, YANG_LIST)
+        else IF_KW("ist", 3, LY_STMT_LIST)
         break;
     case 'm':
         MOVE_IN(ctx, data, 1);
         IF_KW_PREFIX("a", 1)
-            IF_KW("ndatory", 7, YANG_MANDATORY)
-            else IF_KW("x-elements", 10, YANG_MAX_ELEMENTS)
+            IF_KW("ndatory", 7, LY_STMT_MANDATORY)
+            else IF_KW("x-elements", 10, LY_STMT_MAX_ELEMENTS)
         IF_KW_PREFIX_END
-        else IF_KW("in-elements", 11, YANG_MIN_ELEMENTS)
-        else IF_KW("ust", 3, YANG_MUST)
+        else IF_KW("in-elements", 11, LY_STMT_MIN_ELEMENTS)
+        else IF_KW("ust", 3, LY_STMT_MUST)
         else IF_KW_PREFIX("od", 2)
-            IF_KW("ule", 3, YANG_MODULE)
-            else IF_KW("ifier", 5, YANG_MODIFIER)
+            IF_KW("ule", 3, LY_STMT_MODULE)
+            else IF_KW("ifier", 5, LY_STMT_MODIFIER)
         IF_KW_PREFIX_END
         break;
     case 'n':
         MOVE_IN(ctx, data, 1);
-        IF_KW("amespace", 8, YANG_NAMESPACE)
-        else IF_KW("otification", 11, YANG_NOTIFICATION)
+        IF_KW("amespace", 8, LY_STMT_NAMESPACE)
+        else IF_KW("otification", 11, LY_STMT_NOTIFICATION)
         break;
     case 'o':
         MOVE_IN(ctx, data, 1);
         IF_KW_PREFIX("r", 1)
-            IF_KW("dered-by", 8, YANG_ORDERED_BY)
-            else IF_KW("ganization", 10, YANG_ORGANIZATION)
+            IF_KW("dered-by", 8, LY_STMT_ORDERED_BY)
+            else IF_KW("ganization", 10, LY_STMT_ORGANIZATION)
         IF_KW_PREFIX_END
-        else IF_KW("utput", 5, YANG_OUTPUT)
+        else IF_KW("utput", 5, LY_STMT_OUTPUT)
         break;
     case 'p':
         MOVE_IN(ctx, data, 1);
-        IF_KW("ath", 3, YANG_PATH)
-        else IF_KW("attern", 6, YANG_PATTERN)
-        else IF_KW("osition", 7, YANG_POSITION)
+        IF_KW("ath", 3, LY_STMT_PATH)
+        else IF_KW("attern", 6, LY_STMT_PATTERN)
+        else IF_KW("osition", 7, LY_STMT_POSITION)
         else IF_KW_PREFIX("re", 2)
-            IF_KW("fix", 3, YANG_PREFIX)
-            else IF_KW("sence", 5, YANG_PRESENCE)
+            IF_KW("fix", 3, LY_STMT_PREFIX)
+            else IF_KW("sence", 5, LY_STMT_PRESENCE)
         IF_KW_PREFIX_END
         break;
     case 'r':
         MOVE_IN(ctx, data, 1);
-        IF_KW("ange", 4, YANG_RANGE)
+        IF_KW("ange", 4, LY_STMT_RANGE)
         else IF_KW_PREFIX("e", 1)
             IF_KW_PREFIX("f", 1)
-                IF_KW("erence", 6, YANG_REFERENCE)
-                else IF_KW("ine", 3, YANG_REFINE)
+                IF_KW("erence", 6, LY_STMT_REFERENCE)
+                else IF_KW("ine", 3, LY_STMT_REFINE)
             IF_KW_PREFIX_END
-            else IF_KW("quire-instance", 14, YANG_REQUIRE_INSTANCE)
-            else IF_KW("vision-date", 11, YANG_REVISION_DATE)
-            else IF_KW("vision", 6, YANG_REVISION)
+            else IF_KW("quire-instance", 14, LY_STMT_REQUIRE_INSTANCE)
+            else IF_KW("vision-date", 11, LY_STMT_REVISION_DATE)
+            else IF_KW("vision", 6, LY_STMT_REVISION)
         IF_KW_PREFIX_END
-        else IF_KW("pc", 2, YANG_RPC)
+        else IF_KW("pc", 2, LY_STMT_RPC)
         break;
     case 's':
         MOVE_IN(ctx, data, 1);
-        IF_KW("tatus", 5, YANG_STATUS)
-        else IF_KW("ubmodule", 8, YANG_SUBMODULE)
+        IF_KW("tatus", 5, LY_STMT_STATUS)
+        else IF_KW("ubmodule", 8, LY_STMT_SUBMODULE)
         break;
     case 't':
         MOVE_IN(ctx, data, 1);
-        IF_KW("ypedef", 6, YANG_TYPEDEF)
-        else IF_KW("ype", 3, YANG_TYPE)
+        IF_KW("ypedef", 6, LY_STMT_TYPEDEF)
+        else IF_KW("ype", 3, LY_STMT_TYPE)
         break;
     case 'u':
         MOVE_IN(ctx, data, 1);
         IF_KW_PREFIX("ni", 2)
-            IF_KW("que", 3, YANG_UNIQUE)
-            else IF_KW("ts", 2, YANG_UNITS)
+            IF_KW("que", 3, LY_STMT_UNIQUE)
+            else IF_KW("ts", 2, LY_STMT_UNITS)
         IF_KW_PREFIX_END
-        else IF_KW("ses", 3, YANG_USES)
+        else IF_KW("ses", 3, LY_STMT_USES)
         break;
     case 'v':
         MOVE_IN(ctx, data, 1);
-        IF_KW("alue", 4, YANG_VALUE)
+        IF_KW("alue", 4, LY_STMT_VALUE)
         break;
     case 'w':
         MOVE_IN(ctx, data, 1);
-        IF_KW("hen", 3, YANG_WHEN)
+        IF_KW("hen", 3, LY_STMT_WHEN)
         break;
     case 'y':
         MOVE_IN(ctx, data, 1);
-        IF_KW("ang-version", 11, YANG_YANG_VERSION)
-        else IF_KW("in-element", 10, YANG_YIN_ELEMENT)
+        IF_KW("ang-version", 11, LY_STMT_YANG_VERSION)
+        else IF_KW("in-element", 10, LY_STMT_YIN_ELEMENT)
         break;
     default:
         /* if context is not NULL we are matching keyword from YANG data*/
         if (ctx) {
             if (**data == ';') {
                 MOVE_IN(ctx, data, 1);
-                *kw = YANG_SEMICOLON;
+                *kw = LY_STMT_SYNTAX_SEMICOLON;
             } else if (**data == '{') {
                 MOVE_IN(ctx, data, 1);
-                *kw = YANG_LEFT_BRACE;
+                *kw = LY_STMT_SYNTAX_LEFT_BRACE;
             } else if (**data == '}') {
                 MOVE_IN(ctx, data, 1);
-                *kw = YANG_RIGHT_BRACE;
+                *kw = LY_STMT_SYNTAX_RIGHT_BRACE;
             }
         }
         break;
