diff --git a/src/plugins_exts.h b/src/plugins_exts.h
index 6355da0..f005391 100644
--- a/src/plugins_exts.h
+++ b/src/plugins_exts.h
@@ -60,12 +60,12 @@
  * The plugin's functionality is provided to libyang via a set of callbacks specified as an array of ::lyplg_ext_record
  * structures using the ::LYPLG_EXTENSIONS macro.
  *
- * The most important ::lyplg_ext.compile callback is responsible for processing the parsed extension instance. In this
- * phase, the callback must validate all the substatements, their values or placement of the extension instance itself.
- * If needed, the processed data can be stored in some form into the compiled schema representation of the extension
- * instance. To make the compilation process as easy as possible, libyang provides several
- * [helper functions](@ref pluginsExtensionsCompile) to handle the schema compilation context and to compile standard YANG
- * statements in the same way the libyang does it internally.
+ * The most important callbacks are ::lyplg_ext.parse and ::lyplg_ext.compile. They are responsible for parsing and
+ * compiling extension instance. This should include validating all the substatements, their values, or placement of
+ * the extension instance itself. If needed, the processed data can be stored in some form into the compiled schema
+ * representation of the extension instance. To make this task as easy as possible, libyang provides several
+ * [parsing](@ref pluginsExtensionsParse) and [compilation](@ref pluginsExtensionsCompile) helper functions to process
+ * known YANG statements exactly as if they were standard YANG statements.
  *
  * The data validation callback ::lyplg_ext.validate is used for additional validation of a data nodes that contains the
  * connected extension instance directly (as a substatement) or indirectly in case of terminal nodes via their type (no
@@ -74,25 +74,25 @@
  *
  * The ::lyplg_ext.printer_info callback implement printing the compiled extension instance data when the schema (module) is
  * being printed in the ::LYS_OUT_YANG_COMPILED (info) format. As for compile callback, there are also
- * [helper functions](@ref pluginsExtensionsPrint) to access printer's context and to print standard YANG statements
+ * [helper functions](@ref pluginsExtensionsSprinterInfo) to access printer's context and to print standard YANG statements
  * placed in the extension instance by libyang itself.
  *
  * The ::lyplg_ext.printer_ctree and ::lyplg_ext.printer_ptree callbacks implement printing of YANG tree diagrams
  * (RFC 8340) for extension instance data. These callbacks are called for extension instances that have
- * parents of type LY_STMT_MODULE, LY_STMT_SUBMODULE. Or these callbacks are called if the printer_tree finds
+ * parents of type ::LY_STMT_MODULE, ::LY_STMT_SUBMODULE. Or these callbacks are called if the printer_tree finds
  * a compiled/parsed data-node containing an extension instance. The callbacks should then decide which nodes
  * should be printed within the extension instance. In addition, it is possible to register additional callbacks
  * to the printer_tree context to override the form of the each node in the extension instance.
  *
- * The last callback, ::lyplg_ext.free, is supposed to free all the data allocated by the ::lyplg_ext.compile callback.
- * To free the data created by helper function ::lys_compile_extension_instance(), the plugin can used
- * ::lyplg_ext_instance_substatements_free().
+ * The last callback, ::lyplg_ext.cfree, is supposed to free all the data allocated by the ::lyplg_ext.compile callback.
+ * To free the data created by helper function ::lyplg_ext_compile_extension_instance(), the plugin can used
+ * ::lyplg_ext_cfree_instance_substatements().
  *
  * The plugin information contains also the plugin identifier (::lyplg_type.id). This string can serve to identify the
  * specific plugin responsible to storing data value. In case the user can recognize the id string, it can access the
  * plugin specific data with the appropriate knowledge of its structure.
  *
- * Logging information from an extension plugin is possible via ::lyplg_extp_log() and ::yplg_extc_log() functions.
+ * Logging information from an extension plugin is possible via ::lyplg_ext_parse_log() and ::lyplg_ext_compile_log() functions.
  */
 
 /**
@@ -460,14 +460,19 @@
     uint32_t plugins_extensions_apiver__ = LYPLG_EXT_API_VERSION; \
     const struct lyplg_ext_record plugins_extensions__[]
 
-/*
- * parse
+/**
+ * @defgroup pluginsExtensionsParse Plugins: Extensions parsing support
+ * @ingroup pluginsExtensions
+ *
+ * Implementing extension plugin parse callback.
+ *
+ * @{
  */
 
 /**
  * @brief Callback for parsing extension instance substatements.
  *
- * All known YANG substatements can easily be parsed using ::lys_parse_extension_instance.
+ * All known YANG substatements can easily be parsed using ::lyplg_ext_parse_extension_instance.
  *
  * @param[in] pctx Parse context.
  * @param[in,out] ext Parsed extension instance data.
@@ -512,8 +517,15 @@
  */
 LIBYANG_API_DECL LY_ERR lyplg_ext_parse_extension_instance(struct lysp_ctx *pctx, struct lysp_ext_instance *ext);
 
-/*
- * compile
+/** @} pluginsExtensionsParse */
+
+/**
+ * @defgroup pluginsExtensionsCompile Plugins: Extensions compilation support
+ * @ingroup pluginsExtensions
+ *
+ * Implementing extension plugin compile callback.
+ *
+ * @{
  */
 
 /**
@@ -543,7 +555,7 @@
  * @brief Callback to compile extension from the lysp_ext_instance to the lysc_ext_instance. The later structure is generally prepared
  * and only the extension specific data are supposed to be added (if any).
  *
- * The parsed generic statements can be processed by the callback on its own or the ::lys_compile_extension_instance
+ * The parsed generic statements can be processed by the callback on its own or the ::lyplg_ext_compile_extension_instance()
  * function can be used to let the compilation to libyang following the standard rules for processing the YANG statements.
  *
  * @param[in] cctx Current compile context.
@@ -631,8 +643,15 @@
 LIBYANG_API_DECL LY_ERR lyplg_ext_compile_extension_instance(struct lysc_ctx *ctx, const struct lysp_ext_instance *extp,
         struct lysc_ext_instance *ext);
 
-/*
- * sprinter info
+/** @} pluginsExtensionsCompile */
+
+/**
+ * @defgroup pluginsExtensionsSprinterInfo Plugins: Extensions schema info printer support
+ * @ingroup pluginsExtensions
+ *
+ * Implementing extension plugin schema info printer callback.
+ *
+ * @{
  */
 
 /**
@@ -684,8 +703,15 @@
 LIBYANG_API_DECL void lyplg_ext_print_info_extension_instance(struct lyspr_ctx *ctx, const struct lysc_ext_instance *ext,
         ly_bool *flag);
 
-/*
- * sprinter tree
+/** @} pluginsExtensionsSprinterInfo */
+
+/**
+ * @defgroup pluginsExtensionsSprinterTree Plugins: Extensions schema parsed and compiled tree printer support
+ * @ingroup pluginsExtensions
+ *
+ * Implementing extension plugin schema parsed and compiled tree printer callback.
+ *
+ * @{
  */
 
 /**
@@ -780,6 +806,8 @@
 LIBYANG_API_DECL LY_ERR lyplg_ext_sprinter_ptree_add_nodes(const struct lyspr_tree_ctx *ctx, struct lysp_node *nodes,
         lyplg_ext_sprinter_ptree_override_clb clb);
 
+/** @} pluginsExtensionsSprinterTree */
+
 /*
  * data node
  */
@@ -859,7 +887,7 @@
 typedef void (*lyplg_ext_parse_free_clb)(const struct ly_ctx *ctx, struct lysp_ext_instance *ext);
 
 /**
- * @brief Free the extension instance's data parsed with ::lys_parse_extension_instance().
+ * @brief Free the extension instance's data parsed with ::lyplg_ext_parse_extension_instance().
  *
  * @param[in] ctx libyang context
  * @param[in] substmts Extension instance substatements to free.
@@ -879,7 +907,7 @@
 typedef void (*lyplg_ext_compile_free_clb)(const struct ly_ctx *ctx, struct lysc_ext_instance *ext);
 
 /**
- * @brief Free the extension instance's data compiled with ::lys_compile_extension_instance().
+ * @brief Free the extension instance's data compiled with ::lyplg_ext_compile_extension_instance().
  *
  * @param[in] ctx libyang context
  * @param[in] substmts Extension instance substatements to free.
