diff --git a/src/libyang.h b/src/libyang.h
index b352984..5bcecd3 100644
--- a/src/libyang.h
+++ b/src/libyang.h
@@ -1,7 +1,7 @@
 /**
- * @file common.h
+ * @file libyang.h
  * @author Radek Krejci <rkrejci@cesnet.cz>
- * @brief common definitions for libyang
+ * @brief The main libyang public header.
  *
  * Copyright (c) 2015 CESNET, z.s.p.o.
  *
@@ -24,11 +24,18 @@
 
 #include <stdio.h>
 
-#include "parser.h"
+#include "tree.h"
 
 int ly_model_print(FILE *f, struct ly_module *module, LY_MFORMAT format);
 
 /**
+ * @defgroup libyang libyang
+ * @{
+ *
+ * General libyang functions and structures.
+ */
+
+/**
  * @brief libyang context handler.
  */
 struct ly_ctx;
@@ -46,25 +53,11 @@
  * or included modules and submodules. If no such directory is available, NULL
  * is accepted.
  *
- * @retrurn Pointer to the created libyang context, NULL in case of error.
+ * @return Pointer to the created libyang context, NULL in case of error.
  */
 struct ly_ctx *ly_ctx_new(const char *search_dir);
 
 /**
- * @brief Free all internal structures of the specified context.
- *
- * The function should be used before terminating the application to destroy
- * and free all structures internally used by libyang. If the caller uses
- * multiple contexts, the function should be called for each used context.
- *
- * All instance data are supposed to be freed before destroying the context.
- * Data models are destroyed automatically as part of ly_ctx_destroy() call.
- *
- * @param[in] ctx libyang context to destroy
- */
-void ly_ctx_destroy(struct ly_ctx *ctx);
-
-/**
  * @brief Get pointer to the data model structure of the specified name.
  *
  * If the module is not yet loaded in the context, libyang tries to find it in
@@ -79,9 +72,18 @@
                                     const char *revision);
 
 /**
- * @defgroup libyang libyang
- * @{
+ * @brief Free all internal structures of the specified context.
+ *
+ * The function should be used before terminating the application to destroy
+ * and free all structures internally used by libyang. If the caller uses
+ * multiple contexts, the function should be called for each used context.
+ *
+ * All instance data are supposed to be freed before destroying the context.
+ * Data models are destroyed automatically as part of ly_ctx_destroy() call.
+ *
+ * @param[in] ctx libyang context to destroy
  */
+void ly_ctx_destroy(struct ly_ctx *ctx);
 
 /**
  * @brief Load a data model into the specified context.
@@ -109,7 +111,7 @@
  */
 void ly_module_free(struct ly_module *module);
 
-/**@}*/
+/**@} libyang */
 
 /**
  * @page howto How To ...
@@ -118,32 +120,59 @@
  */
 
 /**
- * @defgroup logger libyang logger
  *
  * @page howtologger Logger
  *
- * There are 4 verbosity levels defined as ::LY_VERB_LEVEL. The level can be
- * changed by the ly_verbosity() function. By default, the verbosity level is
- * set to #LY_VERB_ERR value;
+ * There are 4 verbosity levels defined as ::LY_LOG_LEVEL. The level can be
+ * changed by the ly_verb() function. By default, the verbosity level is
+ * set to #LY_LLERR value.
  *
+ * In case the logger has an error message (LY_LLERR) to print, also an error
+ * code is recorded in extern ly_errno variable. Possible values are of type
+ * ::LY_ERR.
  */
 
 /**
- * @typedef LY_VERB_LEVEL
- * @brief Verbosity levels.
+ * @defgroup logger Logger
+ * @{
+ *
+ * Publicly visible functions and values of the libyang logger. For more
+ * information, see \ref howtologger.
+ */
+
+/**
+ * @typedef LY_LOG_LEVEL
+ * @brief Verbosity levels of the libyang logger.
+ */
+typedef enum {
+	LY_LLERR,  /**< Print only error messages. */
+	LY_LLWRN,  /**< Print error and warning messages. */
+	LY_LLVRB,  /**< Besides errors and warnings, print some other verbose messages. */
+	LY_LLDBG   /**< Print all messages including some development debug messages. */
+} LY_LOG_LEVEL;
+
+/**
+ * @brief Set logger verbosity level.
+ * @param[in] level Verbosity level.
+ */
+void ly_verb(LY_LOG_LEVEL level);
+
+/**
+ * @typedef LY_ERR
+ * @brief libyang's error codes available via ly_errno extern variable
  * @ingroup logger
  */
 typedef enum {
-	LY_VERB_ERR,  /**< Print only error messages. */
-	LY_VERB_WRN,  /**< Print error and warning messages. */
-	LY_VERB_VRB,  /**< Besides errors and warnings, print some other verbose messages. */
-	LY_VERB_DBG   /**< Print all messages including some development debug messages. */
-} LY_VERB_LEVEL;
+	LY_EMEM,
+	LY_EFATAL,
+	LY_ESYS,
+	LY_EINVAL,
+	LY_EEOF,
+	LY_EWELLFORM,
+	LY_EVALID
+} LY_ERR;
+extern LY_ERR ly_errno;
 
-/**
- *
- */
-void ly_verbosity(LY_VERB_LEVEL level);
-
+/**@} logger */
 
 #endif /* LY_LIBYANG_H_ */
