diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 52793ea1631bfcd7810ab6f27a99b2425d510ced..73b0cf358dfa0f478b1b30aa23305c50b83badde 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -116,7 +116,7 @@ build_and_test:bionic:
       - ci_deps/wolf/
     - key: yamlschemacpp-bionic
       paths:
-      - ci_deps/yaml_schema_cpp/
+      - ci_deps/yaml-schema-cpp/
     - key: imu-bionic
       paths:
       - ci_deps/imu/
@@ -141,7 +141,7 @@ build_and_test:focal:
       - ci_deps/wolf/
     - key: yamlschemacpp-focal
       paths:
-      - ci_deps/yaml_schema_cpp/
+      - ci_deps/yaml-schema-cpp/
     - key: imu-focal
       paths:
       - ci_deps/imu/
@@ -166,7 +166,7 @@ build_and_test:jammy:
       - ci_deps/wolf/
     - key: yamlschemacpp-jammy
       paths:
-      - ci_deps/yaml_schema_cpp/
+      - ci_deps/yaml-schema-cpp/
     - key: imu-jammy
       paths:
       - ci_deps/imu/
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 305d3210e8f1130896930df5173d34a4b52cc970..22f79752cb61df76fa737a4a9e58fd10032e2d69 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
 # Pre-requisites about cmake itself
-CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
+CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
 
 # MAC OSX RPATH
 SET(CMAKE_MACOSX_RPATH 1)
@@ -7,14 +7,16 @@ SET(CMAKE_MACOSX_RPATH 1)
 # The project name
 PROJECT(bodydynamics)
 set(PLUGIN_NAME wolf${PROJECT_NAME})
-
 MESSAGE("Starting ${PROJECT_NAME} CMakeLists ...")
 
+# Paths
+SET(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY FALSE)
 SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin)
 SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib)
 set(INCLUDE_INSTALL_DIR include/wolf)
 set(LIB_INSTALL_DIR lib/)
 
+# Build type
 IF (NOT CMAKE_BUILD_TYPE)
   SET(CMAKE_BUILD_TYPE "DEBUG")
 ENDIF (NOT CMAKE_BUILD_TYPE)
@@ -55,7 +57,6 @@ ENDIF(NOT BUILD_DOC)
 #############
 ## Testing ##
 #############
-#
 if(BUILD_TESTS)
     # Enables testing for this directory and below.
     # Note that ctest expects to find a test file in the build directory root.
@@ -74,10 +75,11 @@ option(_WOLF_TRACE "Enable wolf tracing macro" ON)
 # ============ DEPENDENCIES  ============
 FIND_PACKAGE(wolfcore REQUIRED CONFIG)
 FIND_PACKAGE(wolfimu REQUIRED)
-FIND_PACKAGE(Eigen3 3.3 REQUIRED CONFIG)
 
 # ============ CONFIG.H ============ 
 set(_WOLF_CODE_DIR ${CMAKE_SOURCE_DIR})
+set(_WOLF_LIB_DIR ${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR})
+
 # variable used to compile the config.h.in file
 string(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
 
@@ -93,76 +95,73 @@ IF(EXISTS "${WOLF_CONFIG_DIR}" AND NOT IS_DIRECTORY "${WOLF_CONFIG_DIR}")
   message(FATAL_ERROR "Bug: Specified CONFIG_DIR: "
     "${WOLF_CONFIG_DIR} exists, but is not a directory.")
 ENDIF()
+
 # Configure config.h
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/internal/config.h.in "${WOLF_CONFIG_DIR}/config.h")
-include_directories("${PROJECT_BINARY_DIR}/conf")
-
-# ============ INCLUDES ============ 
-INCLUDE_DIRECTORIES(BEFORE "include")
 
 # ============ HEADERS ============ 
 SET(HDRS_MATH
-include/${PROJECT_NAME}/math/force_torque_delta_tools.h
+  include/${PROJECT_NAME}/math/force_torque_delta_tools.h
   )
 SET(HDRS_CAPTURE
-include/${PROJECT_NAME}/capture/capture_force_torque_preint.h
-include/${PROJECT_NAME}/capture/capture_inertial_kinematics.h
-include/${PROJECT_NAME}/capture/capture_leg_odom.h
-include/${PROJECT_NAME}/capture/capture_point_feet_nomove.h
+  include/${PROJECT_NAME}/capture/capture_force_torque_preint.h
+  include/${PROJECT_NAME}/capture/capture_inertial_kinematics.h
+  include/${PROJECT_NAME}/capture/capture_leg_odom.h
+  include/${PROJECT_NAME}/capture/capture_point_feet_nomove.h
   )
 SET(HDRS_COMMON
-include/${PROJECT_NAME}/common/bodydynamics.h
+  include/${PROJECT_NAME}/common/bodydynamics.h
   )
 SET(HDRS_FACTOR
-include/${PROJECT_NAME}/factor/factor_force_torque.h
-include/${PROJECT_NAME}/factor/factor_force_torque_preint.h
-include/${PROJECT_NAME}/factor/factor_inertial_kinematics.h
-include/${PROJECT_NAME}/factor/factor_point_feet_nomove.h
-include/${PROJECT_NAME}/factor/factor_point_feet_altitude.h
+  include/${PROJECT_NAME}/factor/factor_force_torque.h
+  include/${PROJECT_NAME}/factor/factor_force_torque_preint.h
+  include/${PROJECT_NAME}/factor/factor_inertial_kinematics.h
+  include/${PROJECT_NAME}/factor/factor_point_feet_nomove.h
+  include/${PROJECT_NAME}/factor/factor_point_feet_altitude.h
   )
 SET(HDRS_FEATURE
-include/${PROJECT_NAME}/feature/feature_force_torque.h
-include/${PROJECT_NAME}/feature/feature_force_torque_preint.h
-include/${PROJECT_NAME}/feature/feature_inertial_kinematics.h
+  include/${PROJECT_NAME}/feature/feature_force_torque.h
+  include/${PROJECT_NAME}/feature/feature_force_torque_preint.h
+  include/${PROJECT_NAME}/feature/feature_inertial_kinematics.h
   )
 SET(HDRS_PROCESSOR
-include/${PROJECT_NAME}/processor/processor_force_torque_preint.h
-include/${PROJECT_NAME}/processor/processor_inertial_kinematics.h
-include/${PROJECT_NAME}/processor/processor_point_feet_nomove.h
+  include/${PROJECT_NAME}/processor/processor_force_torque_preint.h
+  include/${PROJECT_NAME}/processor/processor_inertial_kinematics.h
+  include/${PROJECT_NAME}/processor/processor_point_feet_nomove.h
   )
 SET(HDRS_SENSOR
-include/${PROJECT_NAME}/sensor/sensor_force_torque.h
-include/${PROJECT_NAME}/sensor/sensor_inertial_kinematics.h
-include/${PROJECT_NAME}/sensor/sensor_point_feet_nomove.h
+  include/${PROJECT_NAME}/sensor/sensor_force_torque.h
+  include/${PROJECT_NAME}/sensor/sensor_inertial_kinematics.h
+  include/${PROJECT_NAME}/sensor/sensor_point_feet_nomove.h
   )
 SET(HDRS_UTILS
-include/${PROJECT_NAME}/utils/load_bodydynamics.h
+  include/${PROJECT_NAME}/utils/load_bodydynamics.h
   )
 
 # ============ SOURCES ============ 
 SET(SRCS_CAPTURE
-src/capture/capture_force_torque_preint.cpp
-src/capture/capture_inertial_kinematics.cpp
-src/capture/capture_leg_odom.cpp
-src/capture/capture_point_feet_nomove.cpp
+  src/capture/capture_force_torque_preint.cpp
+  src/capture/capture_inertial_kinematics.cpp
+  src/capture/capture_leg_odom.cpp
+  src/capture/capture_point_feet_nomove.cpp
 )
 SET(SRCS_FEATURE
-src/feature/feature_force_torque.cpp
-src/feature/feature_force_torque_preint.cpp
-src/feature/feature_inertial_kinematics.cpp
+  src/feature/feature_force_torque.cpp
+  src/feature/feature_force_torque_preint.cpp
+  src/feature/feature_inertial_kinematics.cpp
   )
 SET(SRCS_PROCESSOR
-src/processor/processor_force_torque_preint.cpp
-src/processor/processor_inertial_kinematics.cpp
-src/processor/processor_point_feet_nomove.cpp
+  src/processor/processor_force_torque_preint.cpp
+  src/processor/processor_inertial_kinematics.cpp
+  src/processor/processor_point_feet_nomove.cpp
 )
 SET(SRCS_SENSOR
-src/sensor/sensor_force_torque.cpp
-src/sensor/sensor_inertial_kinematics.cpp
-src/sensor/sensor_point_feet_nomove.cpp
+  src/sensor/sensor_force_torque.cpp
+  src/sensor/sensor_inertial_kinematics.cpp
+  src/sensor/sensor_point_feet_nomove.cpp
   )
 SET(SRCS_UTILS
-src/utils/load_bodydynamics.cpp
+  src/utils/load_bodydynamics.cpp
   )
 
 # create the shared library
@@ -188,24 +187,23 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
 endif()
 
 #Link the created libraries
-#===============EXAMPLE=========================
 TARGET_LINK_LIBRARIES(${PLUGIN_NAME} PUBLIC wolfcore)
 TARGET_LINK_LIBRARIES(${PLUGIN_NAME} PUBLIC wolfimu)
-TARGET_LINK_LIBRARIES(${PLUGIN_NAME} PUBLIC Eigen3::Eigen)
 
 # Build demos
+#========================================
 IF(BUILD_DEMOS)
   MESSAGE("Building demos.")
   ADD_SUBDIRECTORY(demos)
 ENDIF(BUILD_DEMOS)
 
 #Build tests
+#========================================
 IF(BUILD_TESTS)
   MESSAGE("Building tests.")
   add_subdirectory(test)
 ENDIF(BUILD_TESTS)
 
-
 #install library
 #=============================================================
 INSTALL(TARGETS ${PLUGIN_NAME} EXPORT ${PLUGIN_NAME}Targets
@@ -231,9 +229,9 @@ install(
   ${LIB_INSTALL_DIR}/${PLUGIN_NAME}/cmake
 )
 
-# Specifies include directories to use when compiling the plugin target
-# This way, include_directories does not need to be called in plugins depending on this one
-target_include_directories(${PLUGIN_NAME} INTERFACE
+target_include_directories(${PLUGIN_NAME} PUBLIC
+  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+  $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/conf>
   $<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
 )
 
@@ -253,9 +251,14 @@ INSTALL(FILES ${HDRS_SENSOR}
 INSTALL(FILES ${HDRS_UTILS}
   DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/utils)
 
-INSTALL(FILES "${WOLF_CONFIG_DIR}/config.h"
+#install config.h
+INSTALL(FILES ${WOLF_CONFIG_DIR}/config.h
 DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/internal)
 
+#install schemas
+INSTALL(DIRECTORY schema 
+  DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/schema)
+
 export(PACKAGE ${PLUGIN_NAME})
 
 FIND_PACKAGE(Doxygen MODULE)