diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5ffc262ce646ca150eb98ea534f188a0ba1471ce..fd7799af086ffd518448571625253f3ad07e11f2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -77,7 +77,7 @@ FIND_PACKAGE(wolfimu REQUIRED)
 FIND_PACKAGE(Eigen3 3.3 REQUIRED CONFIG)
 
 # ============ CONFIG.H ============ 
-set(_WOLF_ROOT_DIR ${CMAKE_SOURCE_DIR})
+set(_WOLF_CODE_DIR ${CMAKE_SOURCE_DIR})
 # variable used to compile the config.h.in file
 string(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
 
@@ -110,6 +110,9 @@ 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
+  )
 SET(HDRS_FACTOR
 include/${PROJECT_NAME}/factor/factor_force_torque.h
 include/${PROJECT_NAME}/factor/factor_force_torque_preint.h
diff --git a/demos/solo_imu_kine.cpp b/demos/solo_imu_kine.cpp
index d1fa022124106514cabc74431b54f27a77fa9096..944c9e4a13d399f41655ed8e468a30b483d98a28 100644
--- a/demos/solo_imu_kine.cpp
+++ b/demos/solo_imu_kine.cpp
@@ -271,7 +271,7 @@ int main (int argc, char **argv) {
     /////////////////////////
     // WOLF enters the scene
     // SETUP PROBLEM/SENSORS/PROCESSORS
-    std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_ROOT_DIR;
+    std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_CODE_DIR;
 
     ProblemPtr problem = Problem::create("POV", 3);
 
diff --git a/demos/solo_imu_kine_mocap.cpp b/demos/solo_imu_kine_mocap.cpp
index 5322aaf6ed8f6aa7a105971d2cfce43e96e69ecf..0470b439effa21897190c1b3aa003bb186bc0530 100644
--- a/demos/solo_imu_kine_mocap.cpp
+++ b/demos/solo_imu_kine_mocap.cpp
@@ -247,7 +247,7 @@ int main (int argc, char **argv) {
     /////////////////////////
     // WOLF enters the scene
     // SETUP PROBLEM/SENSORS/PROCESSORS
-    std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_ROOT_DIR;
+    std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_CODE_DIR;
 
     ProblemPtr problem = Problem::create("POV", 3);
 
diff --git a/demos/solo_imu_mocap.cpp b/demos/solo_imu_mocap.cpp
index 1f89d69b72784d2a088fedb11d5f13189386612b..5de5db9ab69b344026c9ac6042a661ac72248906 100644
--- a/demos/solo_imu_mocap.cpp
+++ b/demos/solo_imu_mocap.cpp
@@ -215,7 +215,7 @@ int main (int argc, char **argv) {
     /////////////////////////
     // WOLF enters the scene
     // SETUP PROBLEM/SENSORS/PROCESSORS
-    std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_ROOT_DIR;
+    std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_CODE_DIR;
 
     ProblemPtr problem = Problem::create("POV", 3);
 
diff --git a/demos/solo_kine_mocap.cpp b/demos/solo_kine_mocap.cpp
index 2454cacfba27a050afee977e59b6a89c8c4c83c4..612cf127c5841873a0e9b5e5bcbcf86a7e4ca4de 100644
--- a/demos/solo_kine_mocap.cpp
+++ b/demos/solo_kine_mocap.cpp
@@ -217,7 +217,7 @@ int main (int argc, char **argv) {
     /////////////////////////
     // WOLF enters the scene
     // SETUP PROBLEM/SENSORS/PROCESSORS
-    std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_ROOT_DIR;
+    std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_CODE_DIR;
 
     ProblemPtr problem = Problem::create("PO", 3);
     // ProblemPtr problem = Problem::create("POV", 3);
diff --git a/demos/solo_real_povcdl_estimation.cpp b/demos/solo_real_povcdl_estimation.cpp
index 902e9957cd50bc85d7ad68bc21dea95bb769220b..5243ee6baf874c786dcf675ac081079b73127e40 100644
--- a/demos/solo_real_povcdl_estimation.cpp
+++ b/demos/solo_real_povcdl_estimation.cpp
@@ -214,7 +214,7 @@ int main (int argc, char **argv) {
     /////////////////////////
     // WOLF enters the scene
     // SETUP PROBLEM/SENSORS/PROCESSORS
-    std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_ROOT_DIR;
+    std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_CODE_DIR;
 
     ProblemPtr problem = Problem::create("POVCDL", 3);
 
diff --git a/include/bodydynamics/common/bodydynamics.h b/include/bodydynamics/common/bodydynamics.h
new file mode 100644
index 0000000000000000000000000000000000000000..e0722b928c4bd4229ad5da8f1e65e065726602b8
--- /dev/null
+++ b/include/bodydynamics/common/bodydynamics.h
@@ -0,0 +1,34 @@
+//--------LICENSE_START--------
+//
+// Copyright (C) 2020,2021,2022,2023 Institut de Robòtica i Informàtica Industrial, CSIC-UPC.
+// Authors: Joan Solà Ortega (jsola@iri.upc.edu)
+// All rights reserved.
+//
+// This file is part of WOLF
+// WOLF is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//
+//--------LICENSE_END--------
+#pragma once
+
+// Enable project-specific definitions and macros
+#include "bodydynamics/internal/config.h"
+#include <core/common/wolf.h>
+
+namespace wolf
+{
+
+// Folder schema Registry
+WOLF_REGISTER_FOLDER(_WOLF_BODYDYNAMICS_SCHEMA_DIR);
+
+}
diff --git a/internal/config.h.in b/internal/config.h.in
index 35f3468331656ba09a63ad7f26e5c0fb78c8d5bc..727b1bc74fa04ab302137551cab9eab93a51fa8d 100644
--- a/internal/config.h.in
+++ b/internal/config.h.in
@@ -24,13 +24,12 @@
 //            which will be added to the include path for compilation,
 //            and installed with the public wolf headers.
 
-#ifndef WOLF_INTERNAL_${PROJECT_NAME_UPPER}_CONFIG_H_
-#define WOLF_INTERNAL_${PROJECT_NAME_UPPER}_CONFIG_H_
+#pragma once
 
 #cmakedefine _WOLF_DEBUG
 
 #cmakedefine _WOLF_TRACE
 
-#define _WOLF_${PROJECT_NAME_UPPER}_ROOT_DIR "${_WOLF_ROOT_DIR}"
+#define _WOLF_${PROJECT_NAME_UPPER}_CODE_DIR "${_WOLF_CODE_DIR}"
 
-#endif /* WOLF_INTERNAL_CONFIG_H_ */
+#define _WOLF_${PROJECT_NAME_UPPER}_SCHEMA_DIR "${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/schema"
\ No newline at end of file
diff --git a/test/gtest_factor_force_torque.cpp b/test/gtest_factor_force_torque.cpp
index d45996349ccde5851600d63b30418ea3e2824998..43a82e1b1c05a5adeffc8acc5574db3e87def9ae 100644
--- a/test/gtest_factor_force_torque.cpp
+++ b/test/gtest_factor_force_torque.cpp
@@ -208,7 +208,7 @@ class FactorInertialKinematics_2KF : public testing::Test
     void SetUp() override
     {
 
-        std::string bodydynamics_root = _WOLF_BODYDYNAMICS_ROOT_DIR;
+        std::string bodydynamics_root = _WOLF_BODYDYNAMICS_CODE_DIR;
 
         mass_ = 10.0; // Small 10 kg robot
         //===================================================== SETTING PROBLEM
diff --git a/test/gtest_factor_inertial_kinematics.cpp b/test/gtest_factor_inertial_kinematics.cpp
index 7d4ad65404c39f7ade37a1b0c267d5dc525b0a81..98fbd3c3a4c17be1499f1109d21eb63bf2c367bc 100644
--- a/test/gtest_factor_inertial_kinematics.cpp
+++ b/test/gtest_factor_inertial_kinematics.cpp
@@ -288,7 +288,7 @@ class FactorInertialKinematics_1KF_1v_bfix : public FactorInertialKinematics_1KF
 //        // using make_shared;
 //        // using static_pointer_cast;
 //
-//        std::string bodydynamics_root = _WOLF_BODYDYNAMICS_ROOT_DIR;
+//        std::string bodydynamics_root = _WOLF_BODYDYNAMICS_CODE_DIR;
 //
 //        //===================================================== SETTING PROBLEM
 //        // WOLF PROBLEM
diff --git a/test/gtest_processor_force_torque_preint.cpp b/test/gtest_processor_force_torque_preint.cpp
index 98ff7330864af2025bae6f5e9b6aa72c9bfeaf3c..7b4dfea5224b1530846a545bf63b0ac45c6a02c6 100644
--- a/test/gtest_processor_force_torque_preint.cpp
+++ b/test/gtest_processor_force_torque_preint.cpp
@@ -97,7 +97,7 @@ public:
 
     void SetUp() override
     {
-        std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_ROOT_DIR;
+        std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_CODE_DIR;
 
         problem_ = Problem::create("POVCDL", 3);
 
diff --git a/test/gtest_processor_inertial_kinematics.cpp b/test/gtest_processor_inertial_kinematics.cpp
index 3e044b78e0152ff16dcee2c6ccd8553d272de953..1e3d31fb3c34fa73062e48954a3c4ddecd2f9864 100644
--- a/test/gtest_processor_inertial_kinematics.cpp
+++ b/test/gtest_processor_inertial_kinematics.cpp
@@ -79,7 +79,7 @@ class FactorInertialKinematics_2KF : public testing::Test
 
     void SetUp() override
     {
-        std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_ROOT_DIR;
+        std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_CODE_DIR;
 
         problem_ = Problem::create("POVCDL", 3);
 
diff --git a/test/gtest_processor_point_feet_nomove.cpp b/test/gtest_processor_point_feet_nomove.cpp
index 2e36fe34edf4e4e6a0b02ff7872b7ed7519a699f..2a9c36f2b0138cc16523eedccb8a748f8de1fd31 100644
--- a/test/gtest_processor_point_feet_nomove.cpp
+++ b/test/gtest_processor_point_feet_nomove.cpp
@@ -80,7 +80,7 @@ class PointFeetCaptures : public testing::Test
 
     void SetUp() override
     {
-        std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_ROOT_DIR;
+        std::string bodydynamics_root_dir = _WOLF_BODYDYNAMICS_CODE_DIR;
 
         problem_ = Problem::create("PO", 3);