diff --git a/CMakeLists.txt b/CMakeLists.txt
index cfe411c374e3d794ce3c1ee9cea162aed86e7cc0..b4e8d93cc2a179152174defe5db1445560019751 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,9 +1,11 @@
 cmake_minimum_required(VERSION 3.16)
 project(vkcv)
 
+# settings c++ standard for the framework
 set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
+# checking build type and setting up a variable
 if (CMAKE_BUILD_TYPE)
 	string(TOLOWER "${CMAKE_BUILD_TYPE}" _vkcv_build_type)
 	set(vkcv_build_${_vkcv_build_type} 1)
@@ -11,15 +13,19 @@ endif()
 
 message("-- Language: [ C++ " ${CMAKE_CXX_STANDARD} " ]")
 
+# setting up different paths
 set(vkcv_config ${PROJECT_SOURCE_DIR}/config)
 set(vkcv_config_ext ${vkcv_config}/ext)
 
 set(vkcv_lib lib)
 
 set(vkcv_source ${PROJECT_SOURCE_DIR}/src)
+set(vkcv_include ${PROJECT_SOURCE_DIR}/include)
 
+# initializes compiler flags with defaults
 set(vkcv_flags ${CMAKE_CXX_FLAGS})
 
+# enabling warnings in the debug build
 if (vkcv_build_debug)
 	if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
 		set(vkcv_flags ${vkcv_flags} " -Weverything")
@@ -30,19 +36,21 @@ if (vkcv_build_debug)
 	endif()
 endif()
 
+# add source files for compilation
 include(${vkcv_config}/Sources.cmake)
+
+# configure everything to use the required dependencies
 include(${vkcv_config}/Libraries.cmake)
 
+# set the compiler flags for the framework
 set(CMAKE_CXX_FLAGS ${vkcv_flags})
 
 message("-- Flags: [ ${CMAKE_CXX_FLAGS} ]")
 
+# set the compile definitions aka preprocessor variables
 add_compile_definitions(${vkcv_definitions})
 
-if (vkcv_directories)
-	include_directories(${vkcv_directories})
-endif()
-
+# create VkCV framework as static library using all source files
 add_library(vkcv STATIC ${vkcv_sources})
 
 if(MSVC)
@@ -53,9 +61,17 @@ if(MSVC)
   source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${vkcv_sources})
 endif()
 
+# add include directories from dependencies as system includes
 target_include_directories(vkcv SYSTEM BEFORE PRIVATE ${vkcv_includes})
+
+# add the own include directory for public headers
+target_include_directories(vkcv AFTER PUBLIC ${vkcv_include})
+
+# link the framework using all required libraries
 target_link_libraries(vkcv ${vkcv_libraries})
 
+# add sub-projects/examples as targets
 add_subdirectory(projects)
 
+# add doxygen as target if installed
 include(${vkcv_config}/ext/Doxygen.cmake)
diff --git a/config/Libraries.cmake b/config/Libraries.cmake
index 3b4c75ead3998641e3868ade305f281b3ce1bd93..ef199df6ed4d59acb87d6b0d6b4d2261081c82d4 100644
--- a/config/Libraries.cmake
+++ b/config/Libraries.cmake
@@ -1,5 +1,5 @@
-set(vkcv_config_lib ${vkcv_config}/lib)
 
+set(vkcv_config_lib ${vkcv_config}/lib)
 set(vkcv_lib_path ${PROJECT_SOURCE_DIR}/${vkcv_lib})
 
 if(NOT WIN32)
@@ -10,21 +10,27 @@ if(NOT WIN32)
 	list(APPEND vkcv_flags -fopenmp)
 endif()
 
+# some formatted printing
 set(vkcv_config_msg " - Library: ")
 
+# load dependencies via separate cmake file
 include(${vkcv_config_lib}/GLFW.cmake)    # glfw-x11 / glfw-wayland					# libglfw3-dev
 include(${vkcv_config_lib}/Vulkan.cmake)  # vulkan-intel / vulkan-radeon / nvidia	# libvulkan-dev
 
+# cleanup of compiler flags
 if (vkcv_flags)
     list(REMOVE_DUPLICATES vkcv_flags)
 endif()
 
+# cleanup of include directories from dependencies
 if (vkcv_includes)
     list(REMOVE_DUPLICATES vkcv_includes)
 endif ()
 
+# fix dependencies for different Linux distros (looking at you Ubuntu)
 include(${vkcv_config_ext}/CheckLibraries.cmake)
 
+# cleanup of compiler definitions aka preprocessor variables
 if (vkcv_definitions)
     list(REMOVE_DUPLICATES vkcv_definitions)
 endif ()
diff --git a/config/Sources.cmake b/config/Sources.cmake
index 9a9f55747194ab9972254d5bf57ac11735607b06..7c1f5990789951163eccb96a7ab32eacc6e05ca8 100644
--- a/config/Sources.cmake
+++ b/config/Sources.cmake
@@ -1,8 +1,9 @@
 
+# adding all source files and header files of the framework:
 set(vkcv_sources
-		${vkcv_source}/vkcv/Context.hpp
+		${vkcv_include}/vkcv/Context.hpp
 		${vkcv_source}/vkcv/Context.cpp
-		${vkcv_source}/vkcv/Window.hpp
+		${vkcv_include}/vkcv/Window.hpp
 		${vkcv_source}/vkcv/Window.cpp
 		${vkcv_source}/vkcv/CoreManager.hpp
 		${vkcv_source}/vkcv/CoreManager.cpp
diff --git a/config/ext/CheckLibraries.cmake b/config/ext/CheckLibraries.cmake
index 97950d1123f126cc555f376b86c90ed1acb2628e..3da1c06ebb529895bef1d8198c1a063173982394 100644
--- a/config/ext/CheckLibraries.cmake
+++ b/config/ext/CheckLibraries.cmake
@@ -1,6 +1,8 @@
 
+# cleanup of dependency libraries
 list(REMOVE_DUPLICATES vkcv_libraries)
 
+# fixing paths of libraries to work on most Linux distros
 foreach (a_lib IN LISTS vkcv_libraries)
     if (NOT EXISTS "${a_lib}")
         string(REGEX MATCH ^/usr/lib/x86_64-linux-gnu/.*$ vkcv_usr_lib_u_match ${a_lib})
diff --git a/src/vkcv/Context.hpp b/include/vkcv/Context.hpp
similarity index 100%
rename from src/vkcv/Context.hpp
rename to include/vkcv/Context.hpp
diff --git a/src/vkcv/Window.hpp b/include/vkcv/Window.hpp
similarity index 100%
rename from src/vkcv/Window.hpp
rename to include/vkcv/Window.hpp
diff --git a/projects/CMakeLists.txt b/projects/CMakeLists.txt
index 27305956cac6670331096364a6658a90efcc831b..f7687bca4ba7cb05835c8afda1396ad319a035c7 100644
--- a/projects/CMakeLists.txt
+++ b/projects/CMakeLists.txt
@@ -1,2 +1,3 @@
 
+# Add new projects/examples here:
 add_subdirectory(first_triangle)
diff --git a/projects/first_triangle/CMakeLists.txt b/projects/first_triangle/CMakeLists.txt
index c5a9046881dbab737b357b8a3cd875a9c6b284ae..40e016a71cd3e20690f3ace9ec0260aa37449a0c 100644
--- a/projects/first_triangle/CMakeLists.txt
+++ b/projects/first_triangle/CMakeLists.txt
@@ -1,10 +1,15 @@
 cmake_minimum_required(VERSION 3.16)
 project(first_triangle)
 
+# setting c++ standard for the project
 set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
+# adding source files to the project
 add_executable(first_triangle src/main.cpp)
 
-target_include_directories(first_triangle SYSTEM BEFORE PRIVATE ${vkcv_source} ${vkcv_includes})
+# including headers of dependencies and the VkCV framework
+target_include_directories(first_triangle SYSTEM BEFORE PRIVATE ${vkcv_include} ${vkcv_includes})
+
+# linking with libraries from all dependencies and the VkCV framework
 target_link_libraries(first_triangle vkcv ${vkcv_libraries})
diff --git a/src/vkcv/Context.cpp b/src/vkcv/Context.cpp
index 3d5dfca627a064a49a57a015b23c4c7d919a2f07..4500a135fc5c9d247e58a323b8d6f26972a0480e 100644
--- a/src/vkcv/Context.cpp
+++ b/src/vkcv/Context.cpp
@@ -4,7 +4,7 @@
  * @brief Context class to handle instance, physical-device and device
  */
 
-#include "Context.hpp"
+#include "vkcv/Context.hpp"
 #include "CoreManager.hpp"
 
 namespace vkcv {
diff --git a/src/vkcv/Window.cpp b/src/vkcv/Window.cpp
index 7d8b86e08f25fe7741db1cfa777f00054aa8cee0..e0e0fb16ec78d65dbd58b1a362c6bf72f1cca1e4 100644
--- a/src/vkcv/Window.cpp
+++ b/src/vkcv/Window.cpp
@@ -4,7 +4,7 @@
  * @brief Window class to handle a basic rendering surface and input
  */
 
-#include "Window.hpp"
+#include "vkcv/Window.hpp"
 #include "CoreManager.hpp"
 
 namespace vkcv {