doc FEATURE transition manual
diff --git a/doc/transition.dox b/doc/transition.dox
index 82d3681..5069f7c 100644
--- a/doc/transition.dox
+++ b/doc/transition.dox
@@ -1,51 +1,377 @@
 /**
  * @page transition Transition Manual (1.x -> 2.0)
- * 
+ *
  * [TOC]
+ *
+ * Rewriting libyang codebase and creating libyang version 2.0 was motivated mainly by improving long term maintainability.
+ * Especially some of the features and design decisions become killers for further development and maintaining the libyang
+ * codebase. On the other hand, most of the principles introduced in libyang 1.x to handle YANG schemas and manipulate
+ * instantiated data have proved successful. Therefore, we have decided to keep the basic mechanisms from version 1.x and
+ * remove the problematic features and modify the improper design decisions. Despite the vision to keep with the mechanisms
+ * also the API, the new version became a great opportunity to clean up the API and improve its usability mainly by unifying
+ * how the libyang functions are used. So, in the end, this manual is not just a description of the removed features listing
+ * removed, modified or added functions. The API should be even better prepared for adding new features and functions.
+ * Shortly, almost everything has changed at least a little, so you cannot move from version 1.x to 2.0 just by replacing
+ * code snippets. However, we believe that the change is good and libyang 2.0 is simply better.
+ *
+ * In this Manual, we want to introduce the differences between libyang 1.x and 2.0. It is intended for the transition
+ * from 1.x to 2.0, so if you are new to libyang, simply go to the @ref howto section, this Manual is not for you.
+ *
+ * The complete generated list of changes (without any additional notes) can be found in
+ * <a href="../compat_report.html">the compatibility report</a>.
+ *
+ * @section transitionGeneral General Changes
+ *
+ *
+ * @subsection transitionGeneralErros Errors Handling
+ *
+ * The most visible change is probably the changed approach to handling errors. While libyang 1.x was using variable
+ * *ly_errno* to provide error information in case the called function failed, there is no such variable in libyang 2.0.
+ * On the other hand, most API functions now return ::LY_ERR values directly stating the result. In addition, in case
+ * the error is somehow connected with the [context](@ref howtoContext), more detailed error information can be obtained
+ * from the context handler itself. Mainly this change is responsible for the backward incompatibility of almost all
+ * functions between versions 1.x and 2.0.
+ *
+ * Here is the overview of the changed / removed / added functions connected with errors and logging.
+ *
+ * libyang 1.x               | libyang 2.0                          | Notes
+ * :-------------------------|:-------------------------------------|:-------------------------------------------------------
+ * -                         | ::ly_err_last()                      | New API for handling errors.
+ * -                         | ::ly_errcode()                       | ^
+ * ly_verb_dbg()             | ::ly_log_dbg_groups()                | Rename to align with the names of the accepted values.
+ * ly_verb()                 | ::ly_log_level()                     | ^
+ *
+ * More information about error handling in libyang 2.0 can be found at @ref howtoErrors page.
+ *
+ * @subsection transitionGeneralInOut Input / Output Processing
+ *
+ * libyang 2.0 introduces input (::ly_in) and output (::ly_out) handlers covering the specific input sources for parsers and
+ * output targets for printers. They are supposed mainly to simplify parser's and printer's API to avoid the need for
+ * separate functions for each source/target. The handlers can be used repeatedly to split the inputs or join the outputs.
+ *
+ * More information can be found at @ref howtoInput and @ref howtoOutput pages.
+ *
+ *
+ * @subsection transitionGeneralOutputFormatting Output Formatting
+ *
+ * In libyang 1.x, there was an inconsistency in printing schemas and data. While the schemas were always printed formatted,
+ * the data were printed by default without additional indentation. It is clearly visible in the YIN format of the schema,
+ * which is XML, and the XML encoding of the data. While there was a possibility to format data output with the LYP_FORMAT
+ * flag, it wasn't possible to change schema output formatting.
  * 
+ * libyang 2.0 unifies the behavior of all printers. By default, all the output formats are formatted now. Both, the data as
+ * well as the schema printers, accept the option to remove additional formatting (different for the specific format, usually
+ * indentations and blank lines): ::LYD_PRINT_SHRINK for the data printer and ::LYS_PRINT_SHRINK for the schema printer.
+ *
+ *
+ * @subsection transitionGeneralXPath Addressing
+ *
+ * If you compare the @ref howtoXPath page from libyang 1.x and 2.0 documentation, you will be probably confused since they
+ * seem very different. In fact, we have tried to simplify the API by removing the original Schema path format from the
+ * public API. Since this format is used in YANG format, libyang still supports it internally, but it is not possible to use
+ * it anywhere in the API. The new formats XPath and Path, mentioned at the @ref howtoXPath page, are both the Data paths
+ * used in libyang 1.x. The Path format is a subset of XPath format limited to refer to a single node.
+ *
+ * This change was reflected in functions serving to get a node based on the specified path. Unfortunately, when comparing
+ * old and new API, the transition can be confusing since the names are sometimes overloaded (be careful mainly of
+ * ::lys_find_path()). The following table depicts the changes, but probably a better approach is to handle the functions as
+ * a completely new API.
+ *
+ * libyang 1.x               | libyang 2.0                          | Notes
+ * :-------------------------|:-------------------------------------|:-------------------------------------------------------
+ * ly_ctx_find_path()        | -                                    | To simplify the different [types of paths](@ref howtoXPath), the Schema path format is not supported for now. If there will be use cases for it, it can be re-added later, but for now try using ::lys_find_xpath().
+ * %lys_find_path()          | -                                    | To simplify the different [types of paths](@ref howtoXPath), the Schema path format is not supported for now. If there will be use cases for it, it can be re-added later, but for now try using ::lys_find_xpath().
+ * ly_ctx_get_node()         | ::lys_find_path()                    | Renamed to unify API functions, note that there was lys_find_path in libyang 1.x with different functionality in comparison to the function of the same name from libyang 2.0.
+ * -                         | ::lys_find_path_atoms()              | Extension of ::lys_find_path().
+ * -                         | ::lys_find_lypath_atoms()            | ^
+ * -                         | ::lys_find_xpath()                   | New function reflecting updated @ref howtoXPath\.
+ * lys_xpath_atomize()       | ::lys_find_xpath_atoms()             | Rename to unify with the new API, extends ::lys_find_xpath().
+ * -                         | ::lys_find_expr_atoms()              | Extension of ::lys_find_xpath().
+ * lyd_find_path()           | ::lyd_find_xpath()                   | Rename to unify with the new API.
+ * -                         | ::lyxp_get_expr()                    | Added functionality due to the changed representation of XPath expressions.
+ * ly_path_data2schema()     | -                                    | Removed since the schema path is not available in API.
+ * ly_path_xml2json()        | -                                    | Removed since done internally, note that even the generic XML parser is not available now.
+ * lys_node_xpath_atomize()  | -                                    | Removed as useless/redundant, use ::lys_find_xpath_atoms().
+ *
  * @section transitionContext Context
- * 
- * ly_ctx_info() -> ly_ctx_get_yanglib_data()
  *
- * - nedoporucuje se menit context po zacatku prace s daty
- *   - neni ly_ctx_set_module_data_clb() ani souvisejici callback
+ * Context, as a concept of a storage interconnecting YANG modules into a YANG schema and YANG schema with the instantiated
+ * data, was preserved. However, it is now more supposed to be prepared just once before connecting it with any instantiated
+ * data. The possibility of removing YANG modules from the context was completely dropped. Furthermore, we would like to
+ * introduce some kind of context lock to completely abandon any change of the YANG modules after starting work with the
+ * instantiated data.
  *
- * 
- * - ::ly_ctx_find_path() byla odebrana
+ * Other significant changes connected with the context are depicted in the following table.
  *
- * @subsection contextSearchpaths Search Paths
- *
- * Internally, search directories are still handled the same way. However, API to manipulate the search directories chenged.
- * 
- * ### Unchanged functions
- * - ::ly_ctx_get_searchdirs()
- * 
- * ### Changed functions
- * - ::ly_ctx_set_searchdir() - Return value was changed to ::LY_ERR.
- 
- * ### Added functions
- * - ::ly_ctx_unset_searchdir()
- * - ::ly_ctx_unset_searchdir_last()
- * 
- * ### Removed functions
- * - ly_ctx_unset_searchdirs() - Since the index is hard to work with, the function was replaced by ::ly_ctx_unset_searchdir() and
- * ::ly_ctx_unset_searchdir_last().
- * - lyd_leaf_type() - the type is now more clearer from the schema node than in libyang 1.x 
+ * libyang 1.x               | libyang 2.0                          | Notes
+ * :-------------------------|:-------------------------------------|:-------------------------------------------------------
+ * ly_ctx_clean()            | -                                    | Removed functionality of manipulating with the context and the modules already placed in the context.
+ * ly_ctx_remove_module()    | -                                    | ^
+ * ly_ctx_set_module_data_clb() and the associated ly_module_data_clb type. | - | ^
+ * ly_ctx_get_disabled_module() and the associated ly_ctx_get_disabled_module_iter() | - | ^
+ * ly_ctx_info()             | ::ly_ctx_get_yanglib_data()          | Clarification of what to expect as the output of the function.
+ * -                         | ::ly_ctx_get_yanglib_id ()           | Supplement functionality for ::ly_ctx_get_yanglib_data().
+ * ly_ctx_new_ylmem()        | TBD                                  | Not yet implemented feature.
+ * ly_ctx_new_ylpath()       | TBD                                  | ^
+ * -                         | ::ly_ctx_unset_searchdir_last()      | Extend the functionality of the ::ly_ctx_unset_searchdir() to make its use easier.
+ * ly_ctx_get_module_older() | -                                    | Removed functionality.
+ * ly_ctx_get_submodule()    | -                                    | Removed functionality since the submodules are only in the parsed tree.
+ * ly_ctx_get_submodule2()   | -                                    | ^
+ * -                         | ::ly_ctx_get_module_implemented()    | Supplement for ::ly_ctx_get_module()
+ * -                         | ::ly_ctx_get_module_latest()         | ^
+ * -                         | ::ly_ctx_get_module_implemented_ns() | Supplement for ::ly_ctx_get_module_ns()
+ * -                         | ::ly_ctx_get_module_latest_ns()      | ^
+ * ly_ctx_get_module_by_ns() | ::ly_ctx_get_module_ns ()            | Redesign the API - replace some of the parameters with standalone supplement functions.
+ * -                         | ::ly_ctx_reset_latests()             | The new functionality of maintaining the latest module revision flag.
+ * ly_ctx_unset_searchdirs() | ::ly_ctx_unset_searchdir()           | Simplify API and instead of index numbers, work with the values themselves.
+ * ly_ctx_set*()             | ::ly_ctx_set_options()               | API simplification.
+ * ly_ctx_unset*()           | ::ly_ctx_unset_options()             | ^
  *
  *
- * @section transitionSchema Schema 
+ * @section transitionSchemas YANG Modules (Schema)
  *
- * lys_set_private() -> lysc_node_set_private()
- * lys_is_disabled() -> lys_node_is_disabled()
- * X lys_features_list()
- * lys_features_enable -> lys_feature_enable()
- * lys_features_disable -> lys_feature_disable()
- * N lys_feature_*_force()
- * lys_features_state() -> lys_feature_value()
- * N lysc_feature_value()
- * lyd_validate() -> lyd_validate_all(), lyd_validate_op()
- * lyd_wd_default() -> lyd_is_default()
- * X moving data from one context to another
- * X lys_parent(), lys_module(), lys_node_module(), lys_set_enabled(), lys_set_disabled()
- * lys_set_private() -> lysc_node_set_private()
+ * The most significant change between libyang 1.x and 2.0 can be found in schema structures. The schema tree now has two
+ * different forms - parsed and compiled trees. While the parsed tree reflects the source of the YANG module, the compiled
+ * tree represents the final tree used to validate the instantiated data. Both formats can be found inside the covering
+ * ::lys_module structure. More about the new structures can be found at @ref howtoSchema page.
+ *
+ * This is an essential change allowing speed up and simplification of data validation, but requiring carefully determine
+ * which format is more suitable for the specific use case. As mentioned, the compiled trees are better for data validation
+ * and getting information about the intentioned structure of the schema with all the applied groupings, type modifications,
+ * augments and deviations. On the other hand, the parsed trees are useful for the schema format conversions since they
+ * provide the original structure of the modules. There is a number of new functions intended to work only with the
+ * parsed or the compiled tree. These functions are prefixed with `lysp_` and `lysp_` prefixes.
+ *
+ * Schema parser, as well as printer functions, are now extended to accept new
+ * [input / output handlers](@ref transitionGeneralInOut). The previous API working directly with inputs and outputs is
+ * preserved (or slightly changed), but the functions can be limited in the functionality of the new API. More information
+ * can be found at @ref howtoSchemaParsers and @ref howtoSchemaPrinters pages.
+ *
+ * libyang 1.x                  | libyang 2.0                     | Notes
+ * :----------------------------|:--------------------------------|:---------------------------------------------------------
+ * -                            | ::lys_parse()                   | New generic schema parser API using [generic input handler](@ref howtoInput).
+ * -                            | ::lys_print_module()            | New generic schema printer API using [generic output handler](@ref howtoOutput).
+ * -                            | ::lys_print_node()              | ^
+ * -                            | ::lys_print_submodule()         | ^
+ *
+ *
+ * The following table introduces other significant changes in the API functions connected with the schema.
+ *
+ * libyang 1.x                  | libyang 2.0                     | Notes
+ * :----------------------------|:--------------------------------|:---------------------------------------------------------
+ * lys_set_private()            | ::lysc_set_private()            | Moving the private pointer only to the compiled tree.
+ * lys_is_disabled()            | -                               | Make no sense since the nodes disabled by if-feature are not present in the compiled tree.
+ * lys_features_list()          | -                               | Not needed, the list of features is available in the parsed tree of the module and submodule.
+ * lys_features_enable(), lys_features_enable_force() | -         | Removed since the features are applied during the schema compilation and the list of enabled features is provided to the schema parser.
+ * lys_features_disable(), lys_features_disable_force() | -       | ^
+ * lys_features_state()         | -                               | Redesign of the features handling in the schema tree, the feature's status is newly directly visible as ::LYS_FENABLED flag (in parsed feature structure).
+ * -                            | ::lys_feature_value()           | Simplified API to get feature's state only based on a feature name string.
+ * -                            | ::lysp_feature_next()           | After redesigning features handling, this function helps to iterate over all features connected with the module.
+ * lys_iffeature_value()        | ::lysc_iffeature_value()        | Renamed, but note that after features handling redesign, the compiled if-feature structure to evaluate is only in ::lysp_feature.iffeatures_c.
+ * lys_iffeature_value()        | -                               | Not needed since the if-feature statements are directly applied onto the compiled tree.
+ * lys_is_disabled()            | -                               | ^
+ * lys_parent()                 | -                               | The compiled tree is more straightforward without the need to take care of nodes added via augments.
+ * lys_main_module()            | -                               | The compiled tree does not include submodules, so there is always only the main module.
+ * lys_node_module()            | -                               | ^
+ * lys_set_enabled()            | -                               | It is not possible to change context this way (remove or disable modules).
+ * lys_set_disabled()           | -                               | ^
+ * -                            | ::lys_find_child()              | Helpers wrapper around ::lys_getnext().
+ * -                            | ::lys_nodetype2str()            | New functionality.
+ * -                            | ::lys_value_validate()          | Supplement functionality to ::lyd_value_validate().
+ * lys_is_key()                 | ::lysc_is_key()                 | Renamed to connect with the compiled schema tree.
+ * -                            | ::lysc_is_userordered()         | Added functionality to simplify the examination of generic compiled schema nodes.
+ * -                            | ::lysc_node_children()          | ^
+ * -                            | ::lysc_node_children_full()     | ^
+ * -                            | ::lysc_node_actions()           | ^
+ * -                            | ::lysc_node_notifs()            | ^
+ * -                            | ::lysc_node_parent_full()       | ^
+ * -                            | ::lysp_node_children()          | Added functionality to simplify the examination of generic parsed schema nodes.
+ * -                            | ::lysp_node_actions()           | ^
+ * -                            | ::lysp_node_notifs()            | ^
+ * -                            | ::lysp_node_groupings()         | ^
+ * -                            | ::lysp_node_typedefs()          | ^
+ * -                            | ::lysc_tree_dfs_full()          | Alternative DFS passing implementation to ::LYSC_TREE_DFS_BEGIN macro.
+ * -                            | ::lysc_module_dfs_full()        | Supplement functionality to ::lysc_tree_dfs_full().
+ * lys_path(), lys_data_path()  | ::lysc_path()                   | Redesigned functionality.
+ * lys_data_path_pattern()      | -                               | Removed as useless
+ * lys_implemented_module()     | ::ly_ctx_get_module_implemented() | Removed, the same result can be simply achieved using ::ly_ctx_get_module_implemented().
+ *
+ * There is a set of functions available to implement data type plugins for storing and manipulating data values in a more
+ * natural way to the specific data type. For example, IPv4 address type is defined as a string with a pattern, but it is
+ * more effective and usual to store and handle IPv4 as a 32-bit number.
+ *
+ * libyang 1.x                  | libyang 2.0                     | Notes
+ * :----------------------------|:--------------------------------|:---------------------------------------------------------
+ * lys_getnext_union_type()     | -                               | Removed after the type representation redesign.
+ * -                            | ::ly_type_identity_isderived()  | Helper functions for base types.
+ * -                            | ::ly_type_parse_dec64()         | ^
+ * -                            | ::ly_type_parse_int()           | ^
+ * -                            | ::ly_type_parse_uint()          | ^
+ * -                            | ::ly_type_validate_patterns()   | ^
+ * -                            | ::ly_type_validate_range()      | ^
+ * -                            | ::ly_type_print_get_prefix()    | Helper functions for processing prefixes in data values.
+ * -                            | ::ly_type_store_resolve_prefix() | ^
+ * -                            | ::lysc_prefixes_compile()       | ^
+ * -                            | ::lysc_prefixes_dup()           | ^
+ * -                            | ::lysc_prefixes_free()          | ^
+ *
+ *
+ * Extension implementation is not yet finished. The related functions (lys_ext_*()) from libyang 1.x are not currently
+ * available and all the API changes will be described later. The same situation is with plugins handling. The API is not
+ * yet ready. Despite the readiness of the data type plugins, support for loading them from external objects is not yet
+ * supported.
+ *
+ *
+ * libyang 1.x                  | libyang 2.0                     | Notes
+ * :----------------------------|:--------------------------------|:---------------------------------------------------------
+ * lys_ext_complex_get_substmt() | TBD                            | Not yet implemented feature.
+ * lys_ext_instance_presence()  | TBD                             | ^
+ * lys_ext_instance_substmt()   | TBD                             | ^
+ * ly_clean_plugins()           | TBD                             | ^
+ * ly_get_loaded_plugins()      | TBD                             | ^
+ * ly_load_plugins()            | TBD                             | ^
+ * ly_register_exts()           | TBD                             | ^
+ * ly_register_types()          | TBD                             | ^
+ *
+ *
+ * @section transitionData Data Instances
+ *
+ * Conceptually, the data tree did not change as much as the schema tree. There is still a generic ::lyd_node structure that
+ * maps according to the schema node's nodetype to some of the other lyd_node_* structures. All the data nodes were extended
+ * by hashes to improve performance when searching and processing data trees. The hashes are used for example in the
+ * lyd_find_* functions. All the data nodes are also implicitly ordered following the order of the schema nodes. This is the
+ * reason to change the insertion function. Only the user-ordered lists and leaf-lists can be now placed relative to other
+ * instances of the same list/leaf-list. Otherwise, the data instance is always inserted/created at the correct place beside
+ * the right sibling nodes.
+ *
+ * libyang 1.x                  | libyang 2.0                     | Notes
+ * :----------------------------|:--------------------------------|:---------------------------------------------------------
+ * %lyd_insert_after()          | ::lyd_insert_after()            | Changed meaning by limiting applicability only to user-ordered list and leaf-list instances.
+ * %lyd_insert_before()         | ::lyd_insert_before()           | ^
+ * lyd_schema_sort()            | -                               | Not necessary since the nodes are sorted implicitly.
+ *
+ *
+ * Parsing data instances in XML format is newly done directly, without any interstep. Therefore, complete XML API
+ * (lyxml_*() functions) from libyang 1.x was removed.
+ *
+ * Parser's API was simplified to avoid variadic parameters. The functions are newly split to parsed data, notifications,
+ * RPCs and replies to the RPCs. Similarly to the schema parsers, also the new data parser API works with
+ * [input handlers](@ref transitionGeneralInOut). The data printer's API was also extended to use new
+ * [output handlers](@ref transitionGeneralInOut). However, part of the previous API working directly with inputs
+ * and outputs was preserved. More information about the data parser and printer can be found at
+ * @ref howtoDataParsers and @ref howtoDataPrinters pages.
+ *
+ * libyang 1.x                  | libyang 2.0                     | Notes
+ * :----------------------------|:--------------------------------|:---------------------------------------------------------
+ * -                            | ::lyd_parse_data()              | Redesigned data tree parser.
+ * lyd_parse_xml()              | -                               | XML tree format was removed.
+ * lyd_parse_fd()               | ::lyd_parse_data_fd()           | Renamed and limited to data trees only.
+ * lyd_parse_mem()              | ::lyd_parse_data_mem()          | ^
+ * lyd_parse_path()             | ::lyd_parse_data_path()         | ^
+ * -                            | ::lyd_parse_notif()             | Separated function to parse Notifications.
+ * -                            | ::lyd_parse_rpc()               | Separated function to parse RPCs.
+ * -                            | ::lyd_parse_reply()             | Separated function to parse replies to RPCs
+ * -                            | ::lyd_print_all()               | New API accepting ::ly_out.
+ * -                            | ::lyd_print_tree()              | ^
+ *
+ *
+ * Data validation is still done as part of the parser's process. The standalone functionality is available to check the
+ * result of data manipulation with the values of the terminal nodes or with the structure of the data tree. In contrast to
+ * libyang 1.x, adding the default nodes was made available as a standalone function to simplify the data manipulation
+ * process before the final validation.
+ *
+ * libyang 1.x                  | libyang 2.0                     | Notes
+ * :----------------------------|:--------------------------------|:---------------------------------------------------------
+ * lyd_validate()               | ::lyd_validate_all(), ::lyd_validate_op() | Redesigned functionality.
+ * lyd_validate_modules()       | ::lyd_validate_module()         | ^
+ * lyd_validate_value(), lyd_value_type() | ::lyd_value_validate()          | Redesigned functionality.
+ * -                            | ::lyd_new_implicit_all()        | New in API to explicitly add default nodes, previously done only as part of the validation process.
+ * -                            | ::lyd_new_implicit_module()     | Supplement functionality to ::lyd_new_implicit_all().
+ * -                            | ::lyd_new_implicit_tree()       | ^
+ *
+ *
+ * The `diff` functionality was completely redesigned. Instead of the array of operations to transform one tree into another,
+ * the difference between two data trees has newly a form of the annotated data tree describing the differences. A number of
+ * functions to use the diff tree was added into API. To simply compare just nodes, there are the `compare` functions.
+ *
+ * libyang 1.x                  | libyang 2.0                     | Notes
+ * :----------------------------|:--------------------------------|:---------------------------------------------------------
+ * lyd_diff()                   | ::lyd_diff_tree()               | Redesigned functionality.
+ * -                            | ::lyd_diff_siblings()           | Supplement functionality to ::lyd_diff_tree().
+ * -                            | ::lyd_diff_apply_all()          | ^
+ * -                            | ::lyd_diff_apply_module()       | ^
+ * -                            | ::lyd_diff_merge_all()          | ^
+ * -                            | ::lyd_diff_merge_module()       | ^
+ * -                            | ::lyd_diff_merge_tree()         | ^
+ * -                            | ::lyd_diff_reverse_all()        | ^
+ * lyd_free_diff()              | -                               | Removed.
+ * lyd_free_val_diff()          | -                               | Removed.
+ * -                            | ::lyd_compare_single()          | Added functionality.
+ * -                            | ::lyd_compare_meta()            | Supplement functionality to ::lyd_compare_single()
+ * -                            | ::lyd_compare_siblings()        | ^
+ *
+ *
+ * For now, the functionality of moving data between two different contexts is not implemented. If you have a real use case
+ * for this functionality, let us know.
+ *
+ * libyang 1.x                  | libyang 2.0                     | Notes
+ * :----------------------------|:--------------------------------|:---------------------------------------------------------
+ * lyd_dup()                    | ::lyd_dup_single()              | Redesigned functionality.
+ * lyd_dup_withsiblings()       | ::lyd_dup_siblings()            | ^
+ * -                            | ::lyd_dup_meta_single()         | Supplement functionality to ::lyd_dup_single().
+ * lyd_dup_to_ctx()             | -                               | Transferring data from one context to another is not supported.
+ * lyd_merge()                  | ::lyd_merge_tree()              | Renamed.
+ * -                            | ::lyd_merge_siblings()          | Supplement functionality to ::lyd_merge_tree()
+ * lyd_merge_to_ctx()           | -                               | Transferring data from one context to another is not supported.
+ *
+ *
+ * There is a significant change in the value structure in terminal nodes. Thanks to the changes in the schema tree,
+ * it is now much more straightforward to get the type of the value and work with the alternative representation of the value
+ * fitting better to its type. There is also a new API for the type plugins (see @ref howtoPluginsTypes). Even the base YANG
+ * data types are now implemented using this API and can be taken as examples for implementing derived data types.
+ *
+ * libyang 1.x                  | libyang 2.0                     | Notes
+ * :----------------------------|:--------------------------------|:---------------------------------------------------------
+ * lyd_new(), lyd_new_output()  | ::lyd_new_inner(), ::lyd_new_list(), ::lyd_new_list2() | Redesigned functionality to better fit new lyd_node structures, creating RPC's output data is now done via a flag parameter of the functions.
+ * lyd_new_leaf(), lyd_new_output_leaf() | ::lyd_new_term()       | ^
+ * lyd_new_anydata(), lyd_new_output_anydata() | ::lyd_new_any()  | ^
+ * lyd_insert_attr()            | ::lyd_new_attr()                | Unify naming used in other functions with the similar functionality.
+ * -                            | ::lyd_new_meta()                | Added functionality to store the data (temporarily) not connected with schema definitions.
+ * -                            | ::lyd_new_opaq()                | ^
+ * -                            | ::lyd_new_path2()               | Supplement functionality to ::lyd_new_path().
+ * lyd_insert()                 | ::lyd_insert_child()            | Renamed to better distinguish from ::lyd_insert_sibling().
+ * lyd_new_yangdata()           | TBD                             | Not yet implemented feature.
+ * lyd_change_leaf()            | ::lyd_change_term()             | Align naming with changed names of data structures.
+ * -                            | ::lyd_change_meta()             | Transferred functionality of ::lyd_change_term() to metadata.
+ * -                            | ::lyd_any_copy_value()          | Added functionality.
+ * lyd_free()                   | ::lyd_free_tree()               | Renamed.
+ * lyd_free_withsiblings()      | ::lyd_free_all()                | ^
+ * -                            | ::lyd_free_siblings()           | Supplement functionality to ::lyd_free_siblings().
+ * lyd_free_attr()              | ::lyd_free_attr_single()        | Renamed.
+ * -                            | ::lyd_free_attr_siblings()      | Supplement functionality to ::lyd_free_attr_single().
+ * -                            | ::lyd_free_meta_single()        | Added functionality.
+ * -                            | ::lyd_free_meta_siblings()      | ^
+ * lyd_unlink()                 | ::lyd_unlink_tree()             | Renamed.
+ *
+ *
+ * Here is the table of other changes in data API.
+ *
+ * libyang 1.x                  | libyang 2.0                     | Notes
+ * :----------------------------|:--------------------------------|:---------------------------------------------------------
+ * lyd_find_instance()          | -                               | Removed.
+ * lyd_find_sibling()           | -                               | Removed, functionality can be replaced by ::lyd_find_sibling_val().
+ * lyd_find_sibling_set()       | -                               | ^
+ * -                            | ::lyd_find_sibling_first()      | Alternative function to ::lyd_find_sibling_val().
+ * -                            | ::lyd_find_meta()               | New functionality.
+ * lyd_wd_default()             | ::lyd_is_default()              | Renamed to unlink from with-default capability.
+ * -                            | ::lyd_parent()                  | New wrapper to get generic ::lyd_node pointer of the parent.
+ * -                            | ::lyd_child(), ::lyd_child_no_keys() | New wrapper to cover all children possibilities hidden behind a generic ::lyd_node structure.
+ * -                            | ::lyd_owner_module()            | Added functionality.
+ * -                            | ::lyd_value_compare()           | Added Functionality.
+ * -                            | ::lyd_target()                  | Added functionality for the instance-identifier representation.
+ * lyd_node_module()            | -                               | Not necessary since the connection with the compiled modules is much more straightforward.
+ * lyd_leaf_type()              | -                               | Not necessary since the real type information is much more clear from the new ::lyd_value.
+ * lyd_dec64_to_double()        | -                               | Removed as useless.
+ * lyd_node_should_print()      | -                               | ^
+
  */