diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2a55bdf..6d158bb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,7 +15,33 @@
 set(LIBYANG_VERSION ${LIBYANG_MAJOR_VERSION}.${LIBYANG_MINOR_VERSION}.${LIBYANG_MICRO_VERSION})
 set(LIBYANG_SOVERSION ${LIBYANG_MAJOR_VERSION}.${LIBYANG_MINOR_VERSION})
 
-option(ENABLE_CACHE "Enable schema caching (time-efficient at the cost of increased space-complexity)" OFF)
+# set default build type if not specified by user
+if(NOT CMAKE_BUILD_TYPE)
+    set(CMAKE_BUILD_TYPE debug)
+endif()
+
+set(CMAKE_C_FLAGS         "${CMAKE_C_FLAGS} -Wall -Wextra")
+set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG")
+set(CMAKE_C_FLAGS_PACKAGE "-g -O2 -DNDEBUG")
+set(CMAKE_C_FLAGS_DEBUG   "-g -O0")
+
+# options
+if((CMAKE_BUILD_TYPE STREQUAL debug) OR (CMAKE_BUILD_TYPE STREQUAL Package))
+    option(ENABLE_BUILD_TESTS "Build tests" ON)
+    option(ENABLE_VALGRIND_TESTS "Build tests with valgrind" ON)
+else()
+    option(ENABLE_BUILD_TESTS "Build tests" OFF)
+    option(ENABLE_VALGRIND_TESTS "Build tests with valgrind" OFF)
+endif()
+option(ENABLE_LATEST_REVISIONS "Enable reusing of latest revisions of schemas" ON)
+option(ENABLE_CACHE "Enable data caching for schemas (time-efficient at the cost of increased space-complexity)" OFF)
+
+if (ENABLE_LATEST_REVISIONS)
+    set(ENABLE_LATEST_REVISIONS_MACRO "/**\n * @brief Latest revisions of loaded schemas will be reused.\n */\n#define LY_ENABLED_LATEST_REVISIONS")
+else()
+    set(ENABLE_LATEST_REVISIONS_MACRO "/**\n * @brief Latest revisions of loaded schemas will not be reused and always reloaded.\n */")
+endif()
+
 if(ENABLE_CACHE)
     set(ENABLE_CACHE_MACRO "/**\n * @brief Cache of some temporary information will be used.\n */\n#define LY_ENABLED_CACHE")
 else()
@@ -25,9 +51,9 @@
 configure_file(${PROJECT_SOURCE_DIR}/src/libyang.h.in ${PROJECT_SOURCE_DIR}/src/libyang.h @ONLY)
 
 if(PLUGINS_DIR)
-	set(LIBYANG_EXT_PLUGINS_DIR ${PLUGINS_DIR})
+    set(LIBYANG_EXT_PLUGINS_DIR ${PLUGINS_DIR})
 else()
-	set(LIBYANG_EXT_PLUGINS_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libyang)
+    set(LIBYANG_EXT_PLUGINS_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libyang)
 endif()
 configure_file(${PROJECT_SOURCE_DIR}/src/extensions_config.h.in ${PROJECT_SOURCE_DIR}/src/extensions_config.h)
 
@@ -41,52 +67,52 @@
 find_program (SED_TOOL NAMES sed)
 
 if(NOT BISON_FOUND)
-	message(WARNING "Missing Bison.\nYou won't be able to generate source codes from changed flex/bison files.\nCompiling libyang should still works fine.")
+    message(WARNING "Missing Bison.\nYou won't be able to generate source codes from changed flex/bison files.\nCompiling libyang should still works fine.")
 elseif (NOT FLEX_FOUND)
-	message(WARNING "Missing Flex.\nYou won't be able to generate source codes from changed flex/bison files.\nCompiling libyang should still works fine.")
+    message(WARNING "Missing Flex.\nYou won't be able to generate source codes from changed flex/bison files.\nCompiling libyang should still works fine.")
 else()
-	if (BISON_VERSION VERSION_LESS 3)
-		set(EMPTYDIR "")
-	else ()
-		set(EMPTYDIR "%empty")
-	endif()
-	configure_file(${PROJECT_SOURCE_DIR}/src/yang.y.in ${PROJECT_SOURCE_DIR}/src/yang.y)
-	add_custom_target(bison
-		WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src
-		COMMAND bison -l -o parser_yang_bis.c --defines=parser_yang_bis.h yang.y
-		COMMAND flex -8 -L -o parser_yang_lex.c --header-file=parser_yang_lex.h yang.l
-		COMMAND ${SED_TOOL} -i 's/int yychar\;/int yychar\;\\nchar *s = NULL, *tmp_s = NULL, *ext_name = NULL\;\\nstruct lys_module *trg = NULL\;\\nstruct lys_node *tpdf_parent = NULL, *data_node = NULL\;\\nstruct lys_ext_instance_complex *ext_instance = NULL\;\\nint is_ext_instance\;\\nvoid *actual = NULL\;\\nenum yytokentype backup_type, actual_type = MODULE_KEYWORD\;\\nint64_t cnt_val = 0\;\\nint is_value = 0\;\\nvoid *yang_type = NULL\;/' parser_yang_bis.c
-	)
+    if (BISON_VERSION VERSION_LESS 3)
+        set(EMPTYDIR "")
+    else ()
+        set(EMPTYDIR "%empty")
+    endif()
+    configure_file(${PROJECT_SOURCE_DIR}/src/yang.y.in ${PROJECT_SOURCE_DIR}/src/yang.y)
+    add_custom_target(bison
+        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src
+        COMMAND bison -l -o parser_yang_bis.c --defines=parser_yang_bis.h yang.y
+        COMMAND flex -8 -L -o parser_yang_lex.c --header-file=parser_yang_lex.h yang.l
+        COMMAND ${SED_TOOL} -i 's/int yychar\;/int yychar\;\\nchar *s = NULL, *tmp_s = NULL, *ext_name = NULL\;\\nstruct lys_module *trg = NULL\;\\nstruct lys_node *tpdf_parent = NULL, *data_node = NULL\;\\nstruct lys_ext_instance_complex *ext_instance = NULL\;\\nint is_ext_instance\;\\nvoid *actual = NULL\;\\nenum yytokentype backup_type, actual_type = MODULE_KEYWORD\;\\nint64_t cnt_val = 0\;\\nint is_value = 0\;\\nvoid *yang_type = NULL\;/' parser_yang_bis.c
+    )
 endif()
 
 if (NOT DEFINED ENV{TRAVIS_BRANCH})
-	execute_process(COMMAND "git" "rev-parse" "--abbrev-ref" "HEAD"
-	                OUTPUT_VARIABLE GIT_BRANCH
-	                OUTPUT_STRIP_TRAILING_WHITESPACE
-	                ERROR_QUIET
-	               )
-	if (NOT GIT_BRANCH)
-		set(ENV{TRAVIS_BRANCH} "master")
-	else()
-	    if (GIT_BRANCH MATCHES "master|devel")
-	    	set(ENV{TRAVIS_BRANCH} ${GIT_BRANCH})
-	    else()
-	    	set(ENV{TRAVIS_BRANCH} "master")
-	    endif()
-	endif()
-	set(GIT_BRANCH $ENV{TRAVIS_BRANCH})
+    execute_process(COMMAND "git" "rev-parse" "--abbrev-ref" "HEAD"
+                    OUTPUT_VARIABLE GIT_BRANCH
+                    OUTPUT_STRIP_TRAILING_WHITESPACE
+                    ERROR_QUIET
+                )
+    if (NOT GIT_BRANCH)
+        set(ENV{TRAVIS_BRANCH} "master")
+    else()
+        if (GIT_BRANCH MATCHES "master|devel")
+            set(ENV{TRAVIS_BRANCH} ${GIT_BRANCH})
+        else()
+            set(ENV{TRAVIS_BRANCH} "master")
+        endif()
+    endif()
+    set(GIT_BRANCH $ENV{TRAVIS_BRANCH})
 endif()
 
 if ($ENV{TRAVIS_BRANCH} STREQUAL "master")
-	set(PACKAGE_NAME "libyang")
-	set(BRANCH "master")
-	set(BUILD_TYPE "Package")
-	set(CONFLICT_PACKAGE_NAME "libyang-experimental")
+    set(PACKAGE_NAME "libyang")
+    set(BRANCH "master")
+    set(BUILD_TYPE "Package")
+    set(CONFLICT_PACKAGE_NAME "libyang-experimental")
 else ()
-	set(PACKAGE_NAME "libyang-experimental")
-	set(BRANCH "devel")
-	set(BUILD_TYPE "debug")
-	set(CONFLICT_PACKAGE_NAME "libyang")
+    set(PACKAGE_NAME "libyang-experimental")
+    set(BRANCH "devel")
+    set(BUILD_TYPE "debug")
+    set(CONFLICT_PACKAGE_NAME "libyang")
 endif()
 # change version in config files
 configure_file(${PROJECT_SOURCE_DIR}/packages/libyang.spec.in ${PROJECT_BINARY_DIR}/build-packages/libyang.spec)
@@ -95,101 +121,82 @@
 configure_file(${PROJECT_SOURCE_DIR}/packages/debian.rules.in ${PROJECT_BINARY_DIR}/build-packages/debian.rules)
 
 if (NOT DEB_BUILDER)
-	message(WARNING "Missing tools (devscripts, debhelper package) for building deb package.\nYou won't be able to generate deb package from source code.\nCompiling libyang should still works fine.")
+    message(WARNING "Missing tools (devscripts, debhelper package) for building deb package.\nYou won't be able to generate deb package from source code.\nCompiling libyang should still works fine.")
 else ()
-	# target for local build deb package
-	add_custom_target(build-deb
-					  WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
-					  COMMAND build-packages/local-deb.sh
-	)
-	configure_file(${PROJECT_SOURCE_DIR}/packages/local-deb.sh.in ${PROJECT_BINARY_DIR}/build-packages/local-deb.sh @ONLY)
+    # target for local build deb package
+    add_custom_target(build-deb
+                      WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
+                      COMMAND build-packages/local-deb.sh
+    )
+    configure_file(${PROJECT_SOURCE_DIR}/packages/local-deb.sh.in ${PROJECT_BINARY_DIR}/build-packages/local-deb.sh @ONLY)
 endif()
 
 if (NOT RPM_BUILDER)
-	message(WARNING "Missing tools (rpm package) for building rpm package. \nYou won't be able to generate rpm package from source code.\nCompiling libyang should still works fine.")
+    message(WARNING "Missing tools (rpm package) for building rpm package. \nYou won't be able to generate rpm package from source code.\nCompiling libyang should still works fine.")
 else ()
-	# target for local build rpm package
-	string(REPLACE ${PROJECT_SOURCE_DIR} "." EXCLUDE_BUILD_DIR ${PROJECT_BINARY_DIR})
-	add_custom_target(build-rpm
-					  WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
-					  COMMAND build-packages/local-rpm.sh
-	)
-	configure_file(${PROJECT_SOURCE_DIR}/packages/local-rpm.sh.in ${PROJECT_BINARY_DIR}/build-packages/local-rpm.sh @ONLY)
+    # target for local build rpm package
+    string(REPLACE ${PROJECT_SOURCE_DIR} "." EXCLUDE_BUILD_DIR ${PROJECT_BINARY_DIR})
+    add_custom_target(build-rpm
+                      WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
+                      COMMAND build-packages/local-rpm.sh
+    )
+    configure_file(${PROJECT_SOURCE_DIR}/packages/local-rpm.sh.in ${PROJECT_BINARY_DIR}/build-packages/local-rpm.sh @ONLY)
 endif()
 
 # check the supported platform
 if(NOT UNIX)
-	message(FATAL_ERROR "Only *nix like systems are supported.")
-endif()
-
-# set default build type if not specified by user
-if(NOT CMAKE_BUILD_TYPE)
-	set(CMAKE_BUILD_TYPE debug)
-endif()
-
-set(CMAKE_C_FLAGS         "${CMAKE_C_FLAGS} -Wall -Wextra")
-set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG")
-set(CMAKE_C_FLAGS_PACKAGE "-g -O2 -DNDEBUG")
-set(CMAKE_C_FLAGS_DEBUG   "-g -O0")
-
-# options
-if((CMAKE_BUILD_TYPE STREQUAL debug) OR (CMAKE_BUILD_TYPE STREQUAL Package))
-	option(ENABLE_BUILD_TESTS "Build tests" ON)
-	option(ENABLE_VALGRIND_TESTS "Build tests with valgrind" ON)
-else()
-	option(ENABLE_BUILD_TESTS "Build tests" OFF)
-	option(ENABLE_VALGRIND_TESTS "Build tests with valgrind" OFF)
+    message(FATAL_ERROR "Only *nix like systems are supported.")
 endif()
 
 set(libsrc
-	src/common.c
-	src/context.c
-	src/log.c
-	src/dict.c
-	src/resolve.c
-	src/validation.c
-	src/xml.c
-	src/parser.c
-	src/parser_yin.c
-	src/parser_xml.c
-	src/parser_json.c
-	src/parser_yang_bis.c
-	src/parser_yang_lex.c
-	src/parser_yang.c
-	src/tree_schema.c
-	src/tree_data.c
-	src/extensions.c
-	src/printer.c
-	src/xpath.c
-	src/printer_yang.c
-	src/printer_yin.c
-	src/printer_xml.c
-	src/printer_tree.c
-	src/printer_info.c
-	src/printer_json.c
-	src/yang_types.c)
+    src/common.c
+    src/context.c
+    src/log.c
+    src/dict.c
+    src/resolve.c
+    src/validation.c
+    src/xml.c
+    src/parser.c
+    src/parser_yin.c
+    src/parser_xml.c
+    src/parser_json.c
+    src/parser_yang_bis.c
+    src/parser_yang_lex.c
+    src/parser_yang.c
+    src/tree_schema.c
+    src/tree_data.c
+    src/extensions.c
+    src/printer.c
+    src/xpath.c
+    src/printer_yang.c
+    src/printer_yin.c
+    src/printer_xml.c
+    src/printer_tree.c
+    src/printer_info.c
+    src/printer_json.c
+    src/yang_types.c)
 
 set(lintsrc
-	tools/lint/main.c
-	tools/lint/main_ni.c
-	tools/lint/commands.c
-	tools/lint/completion.c
-	tools/lint/configuration.c
-	linenoise/linenoise.c)
+    tools/lint/main.c
+    tools/lint/main_ni.c
+    tools/lint/commands.c
+    tools/lint/completion.c
+    tools/lint/configuration.c
+    linenoise/linenoise.c)
 
 set(resrc
-	tools/re/main.c)
+    tools/re/main.c)
 
 set(yang2yinsrc
-	tools/yang2yin/main.c)
+    tools/yang2yin/main.c)
 
 set(headers
-	src/libyang.h
-	src/tree_schema.h
-	src/tree_data.h
-	src/extensions.h
-	src/xml.h
-	src/dict.h)
+    src/libyang.h
+    src/tree_schema.h
+    src/tree_data.h
+    src/extensions.h
+    src/xml.h
+    src/dict.h)
 
 set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
 add_library(yangobj OBJECT ${libsrc})
@@ -218,36 +225,36 @@
 
 find_package(PkgConfig)
 if(PKG_CONFIG_FOUND)
-	# generate and install pkg-config file
-	configure_file("libyang.pc.in" "libyang.pc" @ONLY)
-	install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libyang.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
-	# check that pkg-config includes the used path
-	execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable pc_path pkg-config RESULT_VARIABLE RETURN OUTPUT_VARIABLE PC_PATH ERROR_QUIET)
-	if(RETURN EQUAL 0)
-		string(REGEX MATCH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig" SUBSTR "${PC_PATH}")
-		string(LENGTH "${SUBSTR}" SUBSTR_LEN)
-		if(SUBSTR_LEN EQUAL 0)
-			message(WARNING "pkg-config will not detect the new package after installation, adjust PKG_CONFIG_PATH using \"export PKG_CONFIG_PATH=\${PKG_CONFIG_PATH}:${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig\".")
-		endif()
-	endif()
+    # generate and install pkg-config file
+    configure_file("libyang.pc.in" "libyang.pc" @ONLY)
+    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libyang.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+    # check that pkg-config includes the used path
+    execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable pc_path pkg-config RESULT_VARIABLE RETURN OUTPUT_VARIABLE PC_PATH ERROR_QUIET)
+    if(RETURN EQUAL 0)
+        string(REGEX MATCH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig" SUBSTR "${PC_PATH}")
+        string(LENGTH "${SUBSTR}" SUBSTR_LEN)
+        if(SUBSTR_LEN EQUAL 0)
+            message(WARNING "pkg-config will not detect the new package after installation, adjust PKG_CONFIG_PATH using \"export PKG_CONFIG_PATH=\${PKG_CONFIG_PATH}:${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig\".")
+        endif()
+    endif()
 endif()
 
 # generate doxygen documentation for libyang API
 find_package(Doxygen)
 if(DOXYGEN_FOUND)
-	set(DOXYGEN_SKIP_DOT TRUE)
-	add_custom_target(doc
-			COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile
-			WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
-	configure_file(Doxyfile.in Doxyfile)
+    set(DOXYGEN_SKIP_DOT TRUE)
+    add_custom_target(doc
+            COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile
+            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+    configure_file(Doxyfile.in Doxyfile)
 endif()
 
 # clean cmake cache
 add_custom_target(cclean
-		COMMAND make clean
-		COMMAND find . -iname '*cmake*' -not -name CMakeLists.txt -not -path './CMakeModules*' -exec rm -rf {} +
-		COMMAND rm -rf Makefile Doxyfile
-		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+        COMMAND make clean
+        COMMAND find . -iname '*cmake*' -not -name CMakeLists.txt -not -path './CMakeModules*' -exec rm -rf {} +
+        COMMAND rm -rf Makefile Doxyfile
+        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
 
 # YANG extensions plugins
 add_subdirectory(src/extensions)
@@ -267,17 +274,17 @@
 add_executable(yang2yin ${yang2yinsrc})
 
 if(ENABLE_VALGRIND_TESTS)
-	set(ENABLE_BUILD_TESTS ON)
+    set(ENABLE_BUILD_TESTS ON)
 endif()
 
 if(ENABLE_BUILD_TESTS)
-	find_package(CMocka 1.0.0)
-	if(CMOCKA_FOUND)
-		enable_testing()
-		add_subdirectory(tests)
-	endif(CMOCKA_FOUND)
+    find_package(CMocka 1.0.0)
+    if(CMOCKA_FOUND)
+        enable_testing()
+        add_subdirectory(tests)
+    endif(CMOCKA_FOUND)
 endif(ENABLE_BUILD_TESTS)
 
 if(JAVASCRIPT_BINDING)
-	include(swig/javascript/CMakeLists.txt)
+    include(swig/javascript/CMakeLists.txt)
 endif()
