diff --git a/src/parser_yin.c b/src/parser_yin.c
index 59fa8d9..08b63e7 100644
--- a/src/parser_yin.c
+++ b/src/parser_yin.c
@@ -197,7 +197,7 @@
  * @brief Parse yin argument.
  *
  * @param[in,out] ctx Yin parser context for logging and to store current state.
- * @param[in] attrs Array of attributes.
+ * @param[in] attrs ([Sized array](@ref sizedarrays)) of attributes.
  * @param[in,out] data Data to read from.
  * @param[in] arg_type Type of argument that is expected in parsed element (use YIN_ARG_NONE for elements without special argument).
  * @param[out] arg_val Where value of argument should be stored. Can be NULL if arg_type is specified as YIN_ARG_NONE.
@@ -283,7 +283,17 @@
     return NULL;
 }
 
-LY_ERR
+/**
+ * @brief Helper function to check mandatory constraint of subelement.
+ *
+ * @param[in,out] ctx Yin parser context for logging and to store current state.
+ * @param[in] subelem_info Array of information about subelements.
+ * @param[in] subelem_info_size Size of subelem_info array.
+ * @param[in] current_element Identification of element that is currently being parsed, used for logging.
+ *
+ * @return LY_ERR values.
+ */
+static LY_ERR
 yin_check_subelem_mandatory_constraint(struct yin_parser_ctx *ctx, struct yin_subelement *subelem_info,
                                        signed char subelem_info_size, enum yang_keyword current_element)
 {
@@ -299,7 +309,18 @@
     return LY_SUCCESS;
 }
 
-LY_ERR
+/**
+ * @brief Helper function to check "first" constraint of subelement.
+ *
+ * @param[in,out] ctx Yin parser context for logging and to store current state.
+ * @param[in] subelem_info Array of information about subelements.
+ * @param[in] subelem_info_size Size of subelem_info array.
+ * @param[in] current_element Identification of element that is currently being parsed, used for logging.
+ * @param[in] exp_first Record in subelem_info array that is expected to be defined as first subelement.
+ *
+ * @return LY_ERR values.
+ */
+static LY_ERR
 yin_check_subelem_first_constraint(struct yin_parser_ctx *ctx, struct yin_subelement *subelem_info,
                                    signed char subelem_info_size, enum yang_keyword current_element, struct yin_subelement *exp_first)
 {
@@ -315,7 +336,15 @@
 }
 
 /* TODO add something like ifdef NDEBUG around this function, this is supposed to be checked only in debug mode */
-bool
+/**
+ * @brief Helper function to check if array of information about subelements is in ascending order.
+ *
+ * @param[in] subelem_info Array of information about subelements.
+ * @param[in] subelem_info_size Size of subelem_info array.
+ *
+ * @return True iff subelem_info array is in ascending order, False otherwise.
+ */
+static bool
 is_ordered(struct yin_subelement *subelem_info, signed char subelem_info_size)
 {
     enum yang_keyword current = YANG_NONE; /* 0 (minimal value) */
@@ -335,7 +364,7 @@
  * for example prefix or namespace element.
  *
  * @param[in,out] ctx Yin parser context for logging and to store current state.
- * @param[in] attrs Attributes of current element.
+ * @param[in] attrs [Sized array](@ref sizedarrays) of attributes of current element.
  * @param[in,out] data Data to read from, always moved to currently handled character.
  * @param[in] kw Type of current element.
  * @param[out] value Where value of attribute should be stored.
@@ -360,7 +389,7 @@
  * more instances, such as base or if-feature.
  *
  * @param[in,out] ctx YIN parser context for logging and to store current state.
- * @param[in] attrs Attributes of current element.
+ * @param[in] attrs [Sized array](@ref sizedarrays) of attributes of current element.
  * @param[in,out] data Data to read from, always moved to currently handled character.
  * @param[in] kw Type of current element.
  * @param[out] values Parsed values to add to.
@@ -388,9 +417,10 @@
  * text element as child
  *
  * @param[in,out] ctx Yin parser context for logging and to store current state.
- * @param[in] args Sized array of arguments of current element.
  * @param[in,out] data Data to read from.
+ * @param[in] Type of element can be se to YANG_ORGANIZATION or YANG_CONTACT or YANG_DESCRIPTION or YANG_REFERENCE.
  * @param[out] value Where the content of meta element should be stored.
+ * @param[in,out] exts Extension instance to add to.
  *
  * @return LY_ERR values.
  */
@@ -491,7 +521,7 @@
  * @brief Parse belongs-to element.
  *
  * @param[in] ctx Yin parser context for logging and to store current state.
- * @param[in] attrs Array of attributes of belongs-to element.
+ * @param[in] attrs [Sized array](@ref sizedarrays) of attributes of current element.
  * @param[in,out] data Data to read from, always moved to currently handled character.
  * @param[out] submod Structure of submodule that is being parsed.
  * @param[in,out] exts Extension instances to add to.
diff --git a/src/parser_yin.h b/src/parser_yin.h
index 32060a5..82c4e9b 100644
--- a/src/parser_yin.h
+++ b/src/parser_yin.h
@@ -58,7 +58,7 @@
 
 struct yin_parser_ctx {
     struct lyxml_context xml_ctx;  /**< context for xml parser */
-    uint8_t mod_version;            /**< module's version */
+    uint8_t mod_version;           /**< module's version */
 };
 
 /* flags to encode cardinality of subelement */
@@ -120,7 +120,7 @@
  * @brief Parse yang-version element.
  *
  * @param[in,out] ctx Yin parser context for logging and to store current state.
- * @param[in] attrs Attributes of when element.
+ * @param[in] attrs [Sized array](@ref sizedarrays) of attributes of yang-version element.
  * @param[in] data Data to read from, always moved to currently handled character.
  * @param[out] version Storage for the parsed information.
  * @param[in,out] exts Extension instance to add to.
@@ -134,7 +134,7 @@
  * @brief Parse import element.
  *
  * @param[in,out] ctx Yin parser context for logging and to store current state.
- * @param[in] attrs Sized array of attributes of import element.
+ * @param[in] attrs [Sized array](@ref sizedarrays) of attributes of import element.
  * @param[in,out] data Data to read from, always moved to currently handled character.
  * @param[in,out] mod Structure of module that is being parsed.
  *
@@ -161,7 +161,7 @@
  * @brief Parse status element.
  *
  * @param[in,out] ctx Yin parser context for logging and to store current state.
- * @param[in] attrs Atributes of status element.
+ * @param[in] attrs [Sized array](@ref sizedarrays) of attributes of status element.
  * @param[in,out] data Data to read from, always moved to currently handled character.
  * @param[in,out] flags Flags to add to.
  * @param[in,out] exts Extension instances to add to.
@@ -175,17 +175,18 @@
  * @brief Parse when element.
  *
  * @param[in,out] ctx Yin parser context for logging and to store current state.
- * @param[in] attrs Attributes of when element.
+ * @param[in] attrs [Sized array](@ref sizedarrays) of attributes of when element.
  * @param[in,out] data Data to read from, always moved to currently handled character.
  * @param[out] when_p When pointer to parse to.
  */
-LY_ERR yin_parse_when(struct yin_parser_ctx *ctx, struct yin_arg_record *attrs, const char **data, struct lysp_when **when_p);
+LY_ERR yin_parse_when(struct yin_parser_ctx *ctx, struct yin_arg_record *attrs, const char **data,
+                      struct lysp_when **when_p);
 
 /**
  * @brief Parse revision date element.
  *
  * @param[in,out] ctx Yin parser context for logging and to store current state.
- * @param[in] attrs Sized array of attributes of revision-date element.
+ * @param[in] attrs [Sized array](@ref sizedarrays) of attributes of revision-date element.
  * @param[in,out] data Data to read from, always moved to currently handled character.
  * @param[in,out] rev Array to store the parsed value in.
  * @param[in,out] exts Extension instances to add to.
@@ -196,11 +197,11 @@
                                char *rev, struct lysp_ext_instance **exts);
 
 /**
- * @brief Load all attributes from current element. Caller is supposed to free attrs array.
+ * @brief load all attributes of element into ([sized array](@ref sizedarrays)). Caller is suposed to free the array.
  *
  * @param[in,out] ctx Yin parser context for logging and to store current state.
  * @param[in,out] data Data to read from, always moved to currently handled character.
- * @param[out] attrs Sized array of attributes.
+ * @param[out] attrs ([Sized array](@ref sizedarrays)) of attributes.
  *
  * @return LY_ERR values.
  */
@@ -210,7 +211,7 @@
  * @brief Parse yin-elemenet element.
  *
  * @param[in,out] ctx Yin parser context for logging and to store current state.
- * @param[in] attrs Sized array of element attributes.
+ * @param[in] attrs [Sized array](@ref sizedarrays) of attributes of yin-element element.
  * @param[in,out] data Data to read from, always moved to currently handled position.
  * @param[in,out] flags Flags to add to.
  * @prama[in,out] exts Extension instance to add to.
@@ -224,7 +225,7 @@
  * @brief Parse argument element.
  *
  * @param[in,out] xml_ctx Xml context.
- * @param[in] attrs Attributes of this element.
+ * @param[in] attrs [Sized array](@ref sizedarrays) of attributes of argument element.
  * @param[in,out] data Data to read from, always moved to currently handled character.
  * @param[in,out] arg_meta Meta information about destionation af prased data.
  * @param[in,out] exts Extension instance to add to.
@@ -238,7 +239,7 @@
  * @brief Parse the extension statement.
  *
  * @param[in,out] ctx Yin parser context for logging and to store current state.
- * @param[in] attrs Attributes of extension element.
+ * @param[in] attrs [Sized array](@ref sizedarrays) of attributes of extension element.
  * @param[in,out] data Data to read from.
  * @param[in,out] extensions Extensions to add to.
  *
@@ -251,7 +252,7 @@
  * @brief Parse instance of extension.
  *
  * @param[in,out] ctx Yin parser context for logging and to store current state.
- * @param[in] attrs Sized array of attributes.
+ * @param[in] attrs [Sized array](@ref sizedarrays) of attributes of extension instance.
  * @param[in,out] data Data to read from, always moved to currently handled character.
  * @param[in] ext_name Name of the extension element.
  * @param[in] ext_name_len Length of extension name.
