diff --git a/CMakeLists.txt b/CMakeLists.txt
index d7de1cdfc1c79a7f853c38f0fb77dbe9afe1b35b..df643606ede38ae1bc66b832a40e37499c35ffe5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -84,6 +84,7 @@ FIND_PACKAGE(spdlog REQUIRED CONFIG)
 if(${EIGEN3_VERSION_STRING} VERSION_LESS 3.3)
   message(FATAL_ERROR "Wolf requires Eigen >= 3.3. Found Eigen ${EIGEN3_VERSION_STRING}")
 endif()
+FIND_PACKAGE(yaml-cpp REQUIRED CONFIG)
 FIND_PACKAGE(yaml-schema-cpp REQUIRED CONFIG)
 
 # ============ config.h ============ 
@@ -231,7 +232,7 @@ SET(HDRS_UTILS
   include/${PROJECT_NAME}/utils/graph_search.h
   include/${PROJECT_NAME}/utils/loader.h
   include/${PROJECT_NAME}/utils/logging.h
-  include/${PROJECT_NAME}/utils/params_server.h
+  # include/${PROJECT_NAME}/utils/params_server.h
   include/${PROJECT_NAME}/utils/singleton.h
   include/${PROJECT_NAME}/utils/utils_gtest.h
   include/${PROJECT_NAME}/utils/converter_utils.h
@@ -328,7 +329,7 @@ SET(SRCS_UTILS
   src/utils/converter_utils.cpp
   src/utils/graph_search.cpp
   src/utils/loader.cpp
-  src/utils/params_server.cpp
+  # src/utils/params_server.cpp
   )
 SET(SRCS_YAML
   src/yaml/parser_yaml.cpp
@@ -395,6 +396,7 @@ endif()
 #Link the created libraries
 #=============================================================
 TARGET_LINK_LIBRARIES(${PLUGIN_NAME} PUBLIC ${CMAKE_THREAD_LIBS_INIT} dl)
+TARGET_LINK_LIBRARIES(${PLUGIN_NAME} PUBLIC yaml-cpp)
 TARGET_LINK_LIBRARIES(${PLUGIN_NAME} PUBLIC yaml-schema-cpp)
 TARGET_LINK_LIBRARIES(${PLUGIN_NAME} PUBLIC Eigen3::Eigen)
 TARGET_LINK_LIBRARIES(${PLUGIN_NAME} PUBLIC spdlog::spdlog)
diff --git a/demos/hello_wolf/processor_range_bearing.h b/demos/hello_wolf/processor_range_bearing.h
index 516876ce75f0b6c8f0229b87c4b71619d3a2c2c1..452bbd653063980d216bcc38e58c06c8c3599511 100644
--- a/demos/hello_wolf/processor_range_bearing.h
+++ b/demos/hello_wolf/processor_range_bearing.h
@@ -39,8 +39,8 @@ struct ParamsProcessorRangeBearing : public ParamsProcessorBase
         {
             //DEFINED FOR COMPATIBILITY PURPOSES. TO BE REMOVED IN THE FUTURE.
         }
-        ParamsProcessorRangeBearing(std::string _unique_name, const ParamsServer& _server) :
-                ParamsProcessorBase(_unique_name, _server)
+        ParamsProcessorRangeBearing(const YAML::Node& _n) :
+                ParamsProcessorBase(_n)
         {
             //
         }
diff --git a/demos/hello_wolf/sensor_range_bearing.cpp b/demos/hello_wolf/sensor_range_bearing.cpp
index 9b680a9777a4c8c1cfd603001c64c9f68f40350a..07dc0c31e2238542af54c6507984263dbec6c3db 100644
--- a/demos/hello_wolf/sensor_range_bearing.cpp
+++ b/demos/hello_wolf/sensor_range_bearing.cpp
@@ -19,33 +19,16 @@
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 //
 //--------LICENSE_END--------
-/*
- * SensorRangeBearing.cpp
- *
- *  Created on: Nov 30, 2017
- *      Author: jsola
- */
 #include "sensor_range_bearing.h"
 
 namespace wolf{
 
 WOLF_PTR_TYPEDEFS(SensorRangeBearing);
 
-SensorRangeBearing::SensorRangeBearing(const std::string& _unique_name,
-                                       const SizeEigen& _dim,
+SensorRangeBearing::SensorRangeBearing(const SizeEigen& _dim,
                                        ParamsSensorRangeBearingPtr _params,
                                        const Priors& _priors) :
-        SensorBase("SensorRangeBearing",_unique_name, _dim, _params, _priors),
-        params_rb_(_params)
-{
-    assert(_dim == 2 && "SensorRangeBearing only for 2D");
-}
-
-SensorRangeBearing::SensorRangeBearing(const std::string& _unique_name,
-                                       const SizeEigen& _dim,
-                                       ParamsSensorRangeBearingPtr _params,
-                                       const ParamsServer& _server) :
-        SensorBase("SensorRangeBearing",_unique_name, _dim, _params, _server),
+        SensorBase("SensorRangeBearing", _dim, _params, _priors),
         params_rb_(_params)
 {
     assert(_dim == 2 && "SensorRangeBearing only for 2D");
diff --git a/demos/hello_wolf/sensor_range_bearing.h b/demos/hello_wolf/sensor_range_bearing.h
index 263b5813a76781d59ccd881b3d389e1abbe1bea7..f111fff790358225eedd080fd032d8e8f2fab287 100644
--- a/demos/hello_wolf/sensor_range_bearing.h
+++ b/demos/hello_wolf/sensor_range_bearing.h
@@ -22,7 +22,7 @@
 #pragma once
 
 #include "core/sensor/sensor_base.h"
-#include "core/utils/params_server.h"
+#include "yaml-cpp/yaml.h"
 
 namespace wolf
 {
@@ -34,11 +34,11 @@ struct ParamsSensorRangeBearing : public ParamsSensorBase
     double noise_bearing_degrees_std    = 0.5;
 
     ParamsSensorRangeBearing() = default;
-    ParamsSensorRangeBearing(std::string _unique_name, const ParamsServer& _server):
-        ParamsSensorBase(_unique_name, _server)
+    ParamsSensorRangeBearing(const YAML::Node& _n):
+        ParamsSensorBase(_n)
     {
-        noise_range_metres_std      = _server.getParam<double>(prefix + _unique_name + "/noise_range_metres_std");
-        noise_bearing_degrees_std   = _server.getParam<double>(prefix + _unique_name + "/noise_bearing_degrees_std");
+        noise_range_metres_std      = _n["noise_range_metres_std"].as<double>();
+        noise_bearing_degrees_std   = _n["noise_bearing_degrees_std"].as<double>();
     }
     std::string print() const
     {
@@ -56,14 +56,9 @@ class SensorRangeBearing : public SensorBase
         ParamsSensorRangeBearingPtr params_rb_;
 
     public:
-        SensorRangeBearing(const std::string& _unique_name,
-                           const SizeEigen& _dim,
+        SensorRangeBearing(const SizeEigen& _dim,
                            ParamsSensorRangeBearingPtr _params,
                            const Priors& _priors);
-        SensorRangeBearing(const std::string& _unique_name,
-                           const SizeEigen& _dim,
-                           ParamsSensorRangeBearingPtr _params,
-                           const ParamsServer& _server);
         WOLF_SENSOR_CREATE(SensorRangeBearing, ParamsSensorRangeBearing);
         
         ~SensorRangeBearing() override;
diff --git a/include/core/ceres_wrapper/solver_ceres.h b/include/core/ceres_wrapper/solver_ceres.h
index ed7269333147655487ae83e2e0e4b24485028165..af87fd75c35d4da3892aed21476375dfe0b04783 100644
--- a/include/core/ceres_wrapper/solver_ceres.h
+++ b/include/core/ceres_wrapper/solver_ceres.h
@@ -28,7 +28,7 @@
 
 //wolf includes
 #include "core/solver/solver_manager.h"
-#include "core/utils/params_server.h"
+#include "yaml-cpp/yaml.h"
 
 namespace ceres {
 typedef std::shared_ptr<CostFunction>  CostFunctionPtr;
diff --git a/include/core/map/factory_map.h b/include/core/map/factory_map.h
index b5203917e48731bc4fc80ed63e967615e348b518..43ba8ad739df48abc5feb531823414f19ab57eb3 100644
--- a/include/core/map/factory_map.h
+++ b/include/core/map/factory_map.h
@@ -28,7 +28,6 @@ class MapBase;
 
 // wolf
 #include "core/common/factory.h"
-#include "core/utils/params_server.h"
 
 // Yaml
 #include "yaml-cpp/yaml.h"
diff --git a/include/core/problem/problem.h b/include/core/problem/problem.h
index 8fdfc1ffe4c0e16a0808d03756845620622d9629..2a779c07e150cbb295cb7140767ad485128d141d 100644
--- a/include/core/problem/problem.h
+++ b/include/core/problem/problem.h
@@ -37,7 +37,6 @@ class Loader;
 
 //wolf includes
 #include "core/common/wolf.h"
-#include "core/utils/params_server.h"
 #include "core/frame/frame_base.h"
 #include "core/state_block/prior.h"
 #include "core/state_block/state_block.h"
diff --git a/include/core/sensor/sensor_odom.h b/include/core/sensor/sensor_odom.h
index e8957d561a3cd3fd3a9ffced54169d745dd20d44..94dea3c13079eeeef8c407bc24b867fcf9ddfe3d 100644
--- a/include/core/sensor/sensor_odom.h
+++ b/include/core/sensor/sensor_odom.h
@@ -23,7 +23,7 @@
 
 //wolf includes
 #include "core/sensor/sensor_base.h"
-#include "core/utils/params_server.h"
+#include "yaml-cpp/yaml.h"
 
 namespace wolf {
 
diff --git a/include/core/sensor/sensor_pose.h b/include/core/sensor/sensor_pose.h
index 86f8386d81e48c59a76c893a2d1b260c370d23f3..c5ecbc516c730ad0ff79b9c7d9fbfd613993544f 100644
--- a/include/core/sensor/sensor_pose.h
+++ b/include/core/sensor/sensor_pose.h
@@ -23,7 +23,7 @@
 
 //wolf includes
 #include "core/sensor/sensor_base.h"
-#include "core/utils/params_server.h"
+#include "yaml-cpp/yaml.h"
 
 namespace wolf {
 
diff --git a/src/state_block/prior.cpp b/src/state_block/prior.cpp
index dbe10672f8552159b714f5f32737e51e8fb9104a..098855b99b94d515612a39a46c40dfa5932e875e 100644
--- a/src/state_block/prior.cpp
+++ b/src/state_block/prior.cpp
@@ -39,6 +39,7 @@ Prior::Prior(const std::string&     _type,
 
 Prior::Prior(const YAML::Node& prior_node)
 {
+    type_  = prior_node["type"].as<std::string>();
     state_ = prior_node["state"].as<Eigen::VectorXd>();
     mode_  = prior_node["mode"].as<std::string>();
 
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index df10a34dc114442afe99e803faa5ce8021513d7c..82337923b4397fb4e35a6e0c11231b69917e21f7 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -44,7 +44,7 @@ wolf_add_gtest(gtest_converter gtest_converter.cpp)
 wolf_add_gtest(gtest_factor_base gtest_factor_base.cpp)
 
 # FactorAutodiff class test
-wolf_add_gtest(gtest_factor_autodiff gtest_factor_autodiff.cpp)
+# wolf_add_gtest(gtest_factor_autodiff gtest_factor_autodiff.cpp)
 
 # Factory test
 wolf_add_gtest(gtest_factory gtest_factory.cpp)
@@ -55,8 +55,8 @@ wolf_add_gtest(gtest_factory_state_block gtest_factory_state_block.cpp)
 target_link_libraries(gtest_factory_state_block PUBLIC dummy)
 
 # Node Emplace test
-wolf_add_gtest(gtest_emplace gtest_emplace.cpp)
-target_link_libraries(gtest_emplace PUBLIC dummy)
+# wolf_add_gtest(gtest_emplace gtest_emplace.cpp)
+# target_link_libraries(gtest_emplace PUBLIC dummy)
 
 # FeatureBase classes test
 wolf_add_gtest(gtest_feature_base gtest_feature_base.cpp)
@@ -71,7 +71,7 @@ wolf_add_gtest(gtest_graph_search gtest_graph_search.cpp)
 wolf_add_gtest(gtest_has_state_blocks gtest_has_state_blocks.cpp)
 
 # IsMotion classes test
-wolf_add_gtest(gtest_motion_provider gtest_motion_provider.cpp)
+# wolf_add_gtest(gtest_motion_provider gtest_motion_provider.cpp)
 
 # LocalParametrizationXxx classes test
 wolf_add_gtest(gtest_local_param gtest_local_param.cpp)
@@ -83,17 +83,17 @@ wolf_add_gtest(gtest_logging gtest_logging.cpp)
 wolf_add_gtest(gtest_motion_buffer gtest_motion_buffer.cpp)
 
 # Parameters server
-wolf_add_gtest(gtest_param_server gtest_param_server.cpp)
+# wolf_add_gtest(gtest_param_server gtest_param_server.cpp)
 
 # Parameters server
 wolf_add_gtest(gtest_prior gtest_prior.cpp)
 
 # YAML parser
-wolf_add_gtest(gtest_parser_yaml gtest_parser_yaml.cpp)
+# wolf_add_gtest(gtest_parser_yaml gtest_parser_yaml.cpp)
 
 # Problem class test
-wolf_add_gtest(gtest_problem gtest_problem.cpp)
-target_link_libraries(gtest_problem PUBLIC dummy)
+# wolf_add_gtest(gtest_problem gtest_problem.cpp)
+# target_link_libraries(gtest_problem PUBLIC dummy)
 
 # ProcessorBase class test
 wolf_add_gtest(gtest_processor_base gtest_processor_base.cpp)
@@ -112,7 +112,7 @@ wolf_add_gtest(gtest_SE3 gtest_SE3.cpp)
 wolf_add_gtest(gtest_SE2 gtest_SE2.cpp)
 
 # SensorBase test
-wolf_add_gtest(gtest_sensor_base gtest_sensor_base.cpp)
+# wolf_add_gtest(gtest_sensor_base gtest_sensor_base.cpp)
 
 # shared_from_this test
 wolf_add_gtest(gtest_shared_from_this gtest_shared_from_this.cpp)
@@ -143,99 +143,99 @@ wolf_add_gtest(gtest_tree_manager gtest_tree_manager.cpp)
 
 # ------- Now Derived classes ----------
 
-# FactorAbs(P/O/V) classes test
-wolf_add_gtest(gtest_factor_absolute gtest_factor_absolute.cpp)
+# # FactorAbs(P/O/V) classes test
+# wolf_add_gtest(gtest_factor_absolute gtest_factor_absolute.cpp)
 
-# FactorAutodiffDistance3d test
-wolf_add_gtest(gtest_factor_autodiff_distance_3d gtest_factor_autodiff_distance_3d.cpp)
+# # FactorAutodiffDistance3d test
+# wolf_add_gtest(gtest_factor_autodiff_distance_3d gtest_factor_autodiff_distance_3d.cpp)
 
-# FactorBlockDifference class test
-wolf_add_gtest(gtest_factor_block_difference gtest_factor_block_difference.cpp)
+# # FactorBlockDifference class test
+# wolf_add_gtest(gtest_factor_block_difference gtest_factor_block_difference.cpp)
 
-# FactorDiffDrive class test
-wolf_add_gtest(gtest_factor_diff_drive gtest_factor_diff_drive.cpp)
+# # FactorDiffDrive class test
+# wolf_add_gtest(gtest_factor_diff_drive gtest_factor_diff_drive.cpp)
 
-# FactorOdom2dAutodiff class test
-wolf_add_gtest(gtest_factor_odom_2d_autodiff gtest_factor_odom_2d_autodiff.cpp)
+# # FactorOdom2dAutodiff class test
+# wolf_add_gtest(gtest_factor_odom_2d_autodiff gtest_factor_odom_2d_autodiff.cpp)
 
-# FactorPose2d class test
-wolf_add_gtest(gtest_factor_pose_2d gtest_factor_pose_2d.cpp)
+# # FactorPose2d class test
+# wolf_add_gtest(gtest_factor_pose_2d gtest_factor_pose_2d.cpp)
 
-# FactorPose3d class test
-wolf_add_gtest(gtest_factor_pose_3d gtest_factor_pose_3d.cpp)
+# # FactorPose3d class test
+# wolf_add_gtest(gtest_factor_pose_3d gtest_factor_pose_3d.cpp)
 
-# FactorRelativePose2d class test
-wolf_add_gtest(gtest_factor_relative_pose_2d gtest_factor_relative_pose_2d.cpp)
+# # FactorRelativePose2d class test
+# wolf_add_gtest(gtest_factor_relative_pose_2d gtest_factor_relative_pose_2d.cpp)
 
-# FactorRelativePose2dWithExtrinsics class test
-wolf_add_gtest(gtest_factor_relative_pose_2d_with_extrinsics gtest_factor_relative_pose_2d_with_extrinsics.cpp)
+# # FactorRelativePose2dWithExtrinsics class test
+# wolf_add_gtest(gtest_factor_relative_pose_2d_with_extrinsics gtest_factor_relative_pose_2d_with_extrinsics.cpp)
 
-# FactorRelativePose3d class test
-wolf_add_gtest(gtest_factor_relative_pose_3d gtest_factor_relative_pose_3d.cpp)
+# # FactorRelativePose3d class test
+# wolf_add_gtest(gtest_factor_relative_pose_3d gtest_factor_relative_pose_3d.cpp)
 
-# FactorRelativePose3dWithExtrinsics class test
-wolf_add_gtest(gtest_factor_relative_pose_3d_with_extrinsics gtest_factor_relative_pose_3d_with_extrinsics.cpp)
+# # FactorRelativePose3dWithExtrinsics class test
+# wolf_add_gtest(gtest_factor_relative_pose_3d_with_extrinsics gtest_factor_relative_pose_3d_with_extrinsics.cpp)
 
-# FactorVelocityLocalDirection3d class test
-wolf_add_gtest(gtest_factor_velocity_local_direction_3d gtest_factor_velocity_local_direction_3d.cpp)
+# # FactorVelocityLocalDirection3d class test
+# wolf_add_gtest(gtest_factor_velocity_local_direction_3d gtest_factor_velocity_local_direction_3d.cpp)
 
-# MakePosDef function test
-wolf_add_gtest(gtest_make_posdef gtest_make_posdef.cpp)
+# # MakePosDef function test
+# wolf_add_gtest(gtest_make_posdef gtest_make_posdef.cpp)
 
-# Map yaml save/load test
-wolf_add_gtest(gtest_map_yaml gtest_map_yaml.cpp)
+# # Map yaml save/load test
+# wolf_add_gtest(gtest_map_yaml gtest_map_yaml.cpp)
 
-# Parameter prior test
-wolf_add_gtest(gtest_param_prior gtest_param_prior.cpp)
+# # Parameter prior test
+# wolf_add_gtest(gtest_param_prior gtest_param_prior.cpp)
 
-# ProcessorFixedWingModel class test
-wolf_add_gtest(gtest_processor_fixed_wing_model gtest_processor_fixed_wing_model.cpp)
+# # ProcessorFixedWingModel class test
+# wolf_add_gtest(gtest_processor_fixed_wing_model gtest_processor_fixed_wing_model.cpp)
 
-# ProcessorDiffDrive class test
-wolf_add_gtest(gtest_processor_diff_drive gtest_processor_diff_drive.cpp)
+# # ProcessorDiffDrive class test
+# wolf_add_gtest(gtest_processor_diff_drive gtest_processor_diff_drive.cpp)
 
-# ProcessorLoopClosure class test
-wolf_add_gtest(gtest_processor_loop_closure gtest_processor_loop_closure.cpp)
+# # ProcessorLoopClosure class test
+# wolf_add_gtest(gtest_processor_loop_closure gtest_processor_loop_closure.cpp)
 
-# ProcessorMotion in 2d
-wolf_add_gtest(gtest_odom_2d gtest_odom_2d.cpp)
+# # ProcessorMotion in 2d
+# wolf_add_gtest(gtest_odom_2d gtest_odom_2d.cpp)
 
-# ProcessorOdom3d class test
-wolf_add_gtest(gtest_processor_odom_3d gtest_processor_odom_3d.cpp)
+# # ProcessorOdom3d class test
+# wolf_add_gtest(gtest_processor_odom_3d gtest_processor_odom_3d.cpp)
 
-# FactorPose3dWithExtrinsics class test
-wolf_add_gtest(gtest_processor_and_factor_pose_3d_with_extrinsics gtest_processor_and_factor_pose_3d_with_extrinsics.cpp)
+# # FactorPose3dWithExtrinsics class test
+# wolf_add_gtest(gtest_processor_and_factor_pose_3d_with_extrinsics gtest_processor_and_factor_pose_3d_with_extrinsics.cpp)
 
-# ProcessorTrackerFeatureDummy class test
-wolf_add_gtest(gtest_processor_tracker_feature_dummy gtest_processor_tracker_feature_dummy.cpp)
-target_link_libraries(gtest_processor_tracker_feature_dummy PUBLIC dummy)
+# # ProcessorTrackerFeatureDummy class test
+# wolf_add_gtest(gtest_processor_tracker_feature_dummy gtest_processor_tracker_feature_dummy.cpp)
+# target_link_libraries(gtest_processor_tracker_feature_dummy PUBLIC dummy)
 
-# ProcessorTrackerLandmarkDummy class test
-wolf_add_gtest(gtest_processor_tracker_landmark_dummy gtest_processor_tracker_landmark_dummy.cpp)
-target_link_libraries(gtest_processor_tracker_landmark_dummy PUBLIC dummy)
+# # ProcessorTrackerLandmarkDummy class test
+# wolf_add_gtest(gtest_processor_tracker_landmark_dummy gtest_processor_tracker_landmark_dummy.cpp)
+# target_link_libraries(gtest_processor_tracker_landmark_dummy PUBLIC dummy)
 
-# SensorDiffDriveSelfcalib class test
-wolf_add_gtest(gtest_sensor_diff_drive gtest_sensor_diff_drive.cpp)
+# # SensorDiffDriveSelfcalib class test
+# wolf_add_gtest(gtest_sensor_diff_drive gtest_sensor_diff_drive.cpp)
 
-# SensorOdom class test
-wolf_add_gtest(gtest_sensor_odom gtest_sensor_odom.cpp)
+# # SensorOdom class test
+# wolf_add_gtest(gtest_sensor_odom gtest_sensor_odom.cpp)
 
-# SensorPose class test
-wolf_add_gtest(gtest_sensor_pose gtest_sensor_pose.cpp)
+# # SensorPose class test
+# wolf_add_gtest(gtest_sensor_pose gtest_sensor_pose.cpp)
 
-IF (Ceres_FOUND)
-	# SolverCeres test
-	wolf_add_gtest(gtest_solver_ceres gtest_solver_ceres.cpp)
+# IF (Ceres_FOUND)
+# 	# SolverCeres test
+# 	wolf_add_gtest(gtest_solver_ceres gtest_solver_ceres.cpp)
 	
-	# SolverCeresMultithread test
-	wolf_add_gtest(gtest_solver_ceres_multithread gtest_solver_ceres_multithread.cpp)
-ENDIF(Ceres_FOUND)
+# 	# SolverCeresMultithread test
+# 	wolf_add_gtest(gtest_solver_ceres_multithread gtest_solver_ceres_multithread.cpp)
+# ENDIF(Ceres_FOUND)
 
-# TreeManagerSlidingWindow class test
-wolf_add_gtest(gtest_tree_manager_sliding_window gtest_tree_manager_sliding_window.cpp)
+# # TreeManagerSlidingWindow class test
+# wolf_add_gtest(gtest_tree_manager_sliding_window gtest_tree_manager_sliding_window.cpp)
 
-# TreeManagerSlidingWindowDualRate class test
-wolf_add_gtest(gtest_tree_manager_sliding_window_dual_rate gtest_tree_manager_sliding_window_dual_rate.cpp)
+# # TreeManagerSlidingWindowDualRate class test
+# wolf_add_gtest(gtest_tree_manager_sliding_window_dual_rate gtest_tree_manager_sliding_window_dual_rate.cpp)
 
-# yaml conversions
-wolf_add_gtest(gtest_yaml_conversions gtest_yaml_conversions.cpp)
+# # yaml conversions
+# wolf_add_gtest(gtest_yaml_conversions gtest_yaml_conversions.cpp)
diff --git a/test/dummy/dummy_object.h b/test/dummy/dummy_object.h
index c1000ee41128bcb00c0aa257014e32f1e2b72dd5..d79e6f6831126935da4f836f1077db5072ecd381 100644
--- a/test/dummy/dummy_object.h
+++ b/test/dummy/dummy_object.h
@@ -25,7 +25,6 @@
  *      WOLF includes     *
  **************************/
 #include "core/common/wolf.h"
-#include <core/utils/params_server.h>
 #include "factory_dummy_object.h"
 
 namespace wolf {
@@ -43,13 +42,12 @@ WOLF_PTR_TYPEDEFS(DummyObject);
  *   DummyObjectClass(const std::string& _unique_name,
  *                   const ParamsServer& _server);
  */
-#define WOLF_DUMMY_OBJECT_CREATE(DummyObjectClass)                                                 \
-static DummyObjectPtr create(const std::string& _unique_name,                                    \
-                            const ParamsServer& _server)                                               \
-{                                                                                               \
-    DummyObjectPtr sub = std::make_shared<DummyObjectClass>(_unique_name, _server);  \
-    return sub;                                                                                 \
-}                                                                                               \
+#define WOLF_DUMMY_OBJECT_CREATE(DummyObjectClass)                          \
+static DummyObjectPtr create(const std::string& _unique_name)               \
+{                                                                           \
+    DummyObjectPtr sub = std::make_shared<DummyObjectClass>(_unique_name);  \
+    return sub;                                                             \
+}                                                                           \
 
 class DummyObject
 {
@@ -60,8 +58,7 @@ class DummyObject
         std::string topic_;
 
     public:
-        DummyObject(const std::string& _unique_name,
-                    const ParamsServer& _server) :
+        DummyObject(const std::string& _unique_name) :
             prefix_("ROS DummyObject/" + _unique_name),
             name_(_unique_name)
         {
@@ -75,20 +72,8 @@ class DummyObject
         std::string getName() const;
 
         virtual void print() const = 0;
-
-    protected:
-
-        template<typename T>
-        T getParamWithDefault(const ParamsServer &_server,
-                              const std::string &_param_name,
-                              const T _default_value) const;
 };
 
-// inline std::string DummyObject::getTopic() const
-// {
-//     return topic_;
-// }
-
 inline std::string DummyObject::getName() const
 {
     return name_;
diff --git a/test/dummy/dummy_object_derived.cpp b/test/dummy/dummy_object_derived.cpp
index 4bd2b708743baaa712987e0c2eb32ebc238c604d..8a07fa98bb5877d6b3edfd4a1b82266048b8c953 100644
--- a/test/dummy/dummy_object_derived.cpp
+++ b/test/dummy/dummy_object_derived.cpp
@@ -24,9 +24,8 @@
 namespace wolf
 {
 
-DummyObjectDerived::DummyObjectDerived(const std::string& _unique_name,
-                                       const ParamsServer& _server) ://,
-    DummyObject(_unique_name, _server)
+DummyObjectDerived::DummyObjectDerived(const std::string& _unique_name) ://,
+    DummyObject(_unique_name)
 {
 }
 
diff --git a/test/dummy/dummy_object_derived.h b/test/dummy/dummy_object_derived.h
index b611dab32e79f877043d14aa9145a284868e627d..bd2b38e3027afaef728fa9b297d740356a22aca7 100644
--- a/test/dummy/dummy_object_derived.h
+++ b/test/dummy/dummy_object_derived.h
@@ -33,8 +33,7 @@ namespace wolf {
 class DummyObjectDerived : public DummyObject
 {
     public:
-        DummyObjectDerived(const std::string& _unique_name,
-                           const ParamsServer& _server);
+        DummyObjectDerived(const std::string& _unique_name);
         WOLF_DUMMY_OBJECT_CREATE(DummyObjectDerived);
         
         void print() const override;
diff --git a/test/dummy/factory_dummy_object.h b/test/dummy/factory_dummy_object.h
index 88e15e0b3641a23ab358101dbed5511a2cf6f167..145ced54972a3b16cc042f519995a284df1d5e42 100644
--- a/test/dummy/factory_dummy_object.h
+++ b/test/dummy/factory_dummy_object.h
@@ -23,15 +23,13 @@
 
 // wolf
 #include <core/common/factory.h>
-#include <core/utils/params_server.h>
 
 namespace wolf
 {
 
 class DummyObject;
 typedef Factory<DummyObject,
-                const std::string&,
-                const ParamsServer&> FactoryDummyObject;
+                const std::string&> FactoryDummyObject;
 template<>
 inline std::string FactoryDummyObject::getClass() const
 {
diff --git a/test/gtest_capture_base.cpp b/test/gtest_capture_base.cpp
index 893236d5a42e0f45f53f390bbfd79577eabe3ee9..e8ba8dcd0b4cf39c5730c81cdb4f13182486b784 100644
--- a/test/gtest_capture_base.cpp
+++ b/test/gtest_capture_base.cpp
@@ -19,12 +19,6 @@
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 //
 //--------LICENSE_END--------
-/*
- * gtest_capture_base.cpp
- *
- *  Created on: Apr 11, 2017
- *      Author: jsola
- */
 
 #include "core/utils/utils_gtest.h"
 
@@ -49,7 +43,7 @@ TEST(CaptureBase, ConstructorNoSensor)
 
 TEST(CaptureBase, ConstructorWithSensor)
 {
-    SensorBasePtr S = FactorySensorYaml::create("SensorOdom", "sensor_1", 2, wolf_root + "/test/yaml/sensor_odom_2d.yaml");
+    SensorBasePtr S = FactorySensorYaml::create("SensorOdom", 2, wolf_root + "/test/yaml/sensor_odom_2d.yaml", {wolf_root});
     CaptureBasePtr C(std::make_shared<CaptureBase>("DUMMY", 1.5, S)); // timestamp = 1.5
     ASSERT_EQ(C->getTimeStamp(), 1.5);
     ASSERT_FALSE(C->getFrame());
@@ -59,7 +53,7 @@ TEST(CaptureBase, ConstructorWithSensor)
 
 TEST(CaptureBase, Static_sensor_params)
 {
-    SensorBasePtr S = FactorySensorYaml::create("SensorOdom", "sensor_1", 2, wolf_root + "/test/yaml/sensor_odom_2d.yaml");
+    SensorBasePtr S = FactorySensorYaml::create("SensorOdom", 2, wolf_root + "/test/yaml/sensor_odom_2d.yaml", {wolf_root});
     CaptureBasePtr C(std::make_shared<CaptureBase>("DUMMY", 1.5, S)); // timestamp = 1.5
 
     // query capture blocks
@@ -70,7 +64,7 @@ TEST(CaptureBase, Static_sensor_params)
 
 TEST(CaptureBase, Dynamic_sensor_params)
 {
-    SensorBasePtr S = FactorySensorYaml::create("SensorDiffDrive", "sensor_1", 2, wolf_root + "/test/yaml/sensor_diff_drive_dynamic.yaml");
+    SensorBasePtr S = FactorySensorYaml::create("SensorDiffDrive", 2, wolf_root + "/test/yaml/sensor_diff_drive_dynamic.yaml", {wolf_root});
     StateBlockPtr p(std::make_shared<StateBlock>(2));
     StateBlockPtr o(std::make_shared<StateAngle>() );
     StateBlockPtr i(std::make_shared<StateBlock>(3));
@@ -102,7 +96,7 @@ TEST(CaptureBase, print)
 
 TEST(CaptureBase, process)
 {
-    SensorBasePtr S = FactorySensorYaml::create("SensorOdom", "sensor_1", 2, wolf_root + "/test/yaml/sensor_odom_2d.yaml");
+    SensorBasePtr S = FactorySensorYaml::create("SensorOdom", 2, wolf_root + "/test/yaml/sensor_odom_2d.yaml", {wolf_root});
     CaptureBasePtr C(std::make_shared<CaptureBase>("DUMMY", 1.5, nullptr));
     ASSERT_DEATH({C->process();},""); // No sensor in the capture should fail
     C->setSensor(S);
diff --git a/test/gtest_factory.cpp b/test/gtest_factory.cpp
index 9e891659916011d79b4b719de92f6a57b3075850..dfc52dc279a0bd89a0c906e227ca6470c10a74fa 100644
--- a/test/gtest_factory.cpp
+++ b/test/gtest_factory.cpp
@@ -23,8 +23,7 @@
 #include "dummy/factory_dummy_object.h"
 #include "dummy/dummy_object.h"
 #include "dummy/dummy_object_derived.h"
-#include "core/yaml/parser_yaml.h"
-#include "core/utils/params_server.h"
+#include "yaml-cpp/yaml.h"
 
 using namespace wolf;
 
@@ -32,29 +31,23 @@ std::string wolf_root = _WOLF_ROOT_DIR;
 
 TEST(TestFactory, DummyObjectFactory)
 {
-  ParserYaml parser   = ParserYaml(wolf_root + "/test/yaml/params_basic.yaml");
-  ParamsServer server = ParamsServer(parser.getParams());
-
-  auto object = FactoryDummyObject::create("DummyObjectDerived","ACoolDummyObject", server);
+  auto object = FactoryDummyObject::create("DummyObjectDerived","ACoolDummyObject");
 
   object->getName();
   object->print();
 
   // FORCE LOADING
-  DummyObjectDerived obj_derived = DummyObjectDerived("AnotherCoolDummyObject", server);
+  DummyObjectDerived obj_derived = DummyObjectDerived("AnotherCoolDummyObject");
 }
 
 TEST(TestFactory, isCreatorRegistered)
 {
-    ParserYaml   parser = ParserYaml("test/yaml/params_basic.yaml", wolf_root);
-    ParamsServer server = ParamsServer(parser.getParams());
-
     bool object_creator_registered = FactoryDummyObject::isCreatorRegistered("DummyObjectDerived");
 
     ASSERT_TRUE(object_creator_registered);
 
     // FORCE LOADING
-    DummyObjectDerived obj_derived = DummyObjectDerived("AnotherCoolDummyObject", server);
+    DummyObjectDerived obj_derived = DummyObjectDerived("AnotherCoolDummyObject");
 }
 
 int main(int argc, char **argv)
diff --git a/test/gtest_frame_base.cpp b/test/gtest_frame_base.cpp
index 7d82e020710bae62b9f7bb6950b338cfa1fa39f2..111c8e5f60e9b7258054325981423d9503505a21 100644
--- a/test/gtest_frame_base.cpp
+++ b/test/gtest_frame_base.cpp
@@ -19,12 +19,6 @@
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 //
 //--------LICENSE_END--------
-/*
- * gtest_frame_base.cpp
- *
- *  Created on: Nov 15, 2016
- *      Author: jsola
- */
 
 #include "core/utils/utils_gtest.h"
 
@@ -72,7 +66,7 @@ TEST(FrameBase, LinksBasic)
 
     ASSERT_FALSE(F->getTrajectory());
     ASSERT_FALSE(F->getProblem());
-    auto S = FactorySensorYaml::create("SensorOdom", "odometer", 2, wolf_root + "/test/yaml/sensor_odom_2d.yaml");
+    auto S = FactorySensorYaml::create("SensorOdom", 2, wolf_root + "/test/yaml/sensor_odom_2d.yaml", {wolf_root});
     ASSERT_FALSE(F->getCaptureOf(S));
     ASSERT_TRUE(F->getCaptureList().empty());
     ASSERT_TRUE(F->getConstrainedByList().empty());
@@ -84,7 +78,7 @@ TEST(FrameBase, LinksToTree)
     // Problem with 2 frames and one motion factor between them
     ProblemPtr P = Problem::create("PO", 2);
     TrajectoryBasePtr T = P->getTrajectory();
-    auto S = P->installSensor("SensorOdom", "odometer", wolf_root + "/test/yaml/sensor_odom_2d.yaml");
+    auto S = P->installSensor("SensorOdom", wolf_root + "/test/yaml/sensor_odom_2d.yaml", {wolf_root});
     auto F1 = FrameBase::emplace<FrameBase>(T, 1, make_shared<StateBlock>(2), make_shared<StateBlock>(1));
     auto F2 = FrameBase::emplace<FrameBase>(T, 2, make_shared<StateBlock>(2), make_shared<StateBlock>(1));
     auto C = CaptureBase::emplace<CaptureMotion>(F1, "CaptureMotion", 1, S, Vector3d::Zero(), nullptr);
@@ -135,7 +129,7 @@ TEST(FrameBase, Frames)
     // Problem with 10 frames
     ProblemPtr P = Problem::create("PO", 2);
     TrajectoryBasePtr T = P->getTrajectory();
-    auto S = P->installSensor("SensorOdom", "odometer", wolf_root + "/test/yaml/sensor_odom_2d.yaml");
+    auto S = P->installSensor("SensorOdom", wolf_root + "/test/yaml/sensor_odom_2d.yaml", {wolf_root});
     auto F0 = FrameBase::emplace<FrameBase>(T, 0, make_shared<StateBlock>(2), make_shared<StateBlock>(1));
     auto F1 = FrameBase::emplace<FrameBase>(T, 1, make_shared<StateBlock>(2), make_shared<StateBlock>(1));
     auto F2 = FrameBase::emplace<FrameBase>(T, 2, make_shared<StateBlock>(2), make_shared<StateBlock>(1));
diff --git a/test/gtest_prior.cpp b/test/gtest_prior.cpp
index fc2ed8b46598f96cfc396a9ebf81e4ef1efa6e9e..bcccda4a4f446732a8cfd3c33dcb944985559c61 100644
--- a/test/gtest_prior.cpp
+++ b/test/gtest_prior.cpp
@@ -23,8 +23,7 @@
 #include "core/utils/utils_gtest.h"
 #include "core/common/wolf.h"
 #include "core/state_block/prior.h"
-#include "core/yaml/parser_yaml.h"
-#include "core/utils/params_server.h"
+#include "core/common/params_base.h" // toString
 
 using namespace wolf;
 using namespace Eigen;
@@ -336,10 +335,9 @@ TEST(Prior, StateQuaternion)
   testPriors(setups_death, false);
 }
 
-TEST(Prior, ParamsServer)
+TEST(Prior, YamlNode)
 {
-  ParserYaml parser   = ParserYaml(wolf_root + "/test/yaml/params_prior.yaml", true);
-  ParamsServer server = ParamsServer(parser.getParams());
+  YAML::Node input_node = YAML::LoadFile(wolf_root + "/test/yaml/params_prior.yaml");
 
   std::vector<std::string> keys({"P","O"});
   std::vector<int> dims({2,3});
@@ -366,7 +364,7 @@ TEST(Prior, ParamsServer)
             std::string prefix = key + "_" + toString(dim) + "D_" + mode + (dynamic ? "_dynamic" : "") + (drift ? "_drift" : "");
 
             WOLF_INFO("Creating prior from prefix ", prefix);
-            auto P = Prior(prefix, key, server);
+            auto P = Prior(input_node[prefix]);
 
             // Checks
             ASSERT_EQ(P.getMode(), mode);
@@ -403,7 +401,7 @@ TEST(Prior, ParamsServer)
 
         std::string prefix = "I_" + mode + (dynamic ? "_dynamic" : "") + (drift ? "_drift" : "");
         WOLF_INFO("Creating prior from prefix ", prefix);
-        auto P = Prior(prefix, "StateBlock", server);
+        auto P = Prior(input_node[prefix]);
         ASSERT_EQ(P.getMode(), mode);
         ASSERT_EQ(P.isDynamic(), dynamic);
         ASSERT_MATRIX_APPROX(P.getState(),p_state,wolf::Constants::EPS);
@@ -420,8 +418,7 @@ TEST(Prior, ParamsServer)
 
 TEST(Prior, ParamsServerWrong)
 {
-  ParserYaml parser   = ParserYaml(wolf_root + "/test/yaml/params_prior_wrong.yaml", true);
-  ParamsServer server = ParamsServer(parser.getParams());
+  YAML::Node input_node = YAML::LoadFile(wolf_root + "/test/yaml/params_prior_wrong.yaml");
 
   std::vector<std::string> keys({"P","O"});
   std::vector<int> dims({2,3});
@@ -443,7 +440,7 @@ TEST(Prior, ParamsServerWrong)
             std::string prefix = key + "_" + toString(dim) + "D_" + mode + (dynamic ? "_dynamic" : "") + (drift ? "_drift" : "");
 
             WOLF_INFO("Creating prior from prefix ", prefix);
-            ASSERT_THROW(auto P = Prior(prefix, key, server),std::runtime_error);
+            ASSERT_THROW(auto P = Prior(input_node[prefix]),std::runtime_error);
           }
 
   // I
@@ -457,7 +454,7 @@ TEST(Prior, ParamsServerWrong)
 
         std::string prefix = "I_" + mode + (dynamic ? "_dynamic" : "") + (drift ? "_drift" : "");
         WOLF_INFO("Creating prior from prefix ", prefix);
-        ASSERT_THROW(auto P = Prior(prefix, "StateBlock", server),std::runtime_error);
+        ASSERT_THROW(auto P = Prior(input_node[prefix]),std::runtime_error);
       }
 }
 
diff --git a/test/gtest_processor_base.cpp b/test/gtest_processor_base.cpp
index 58d13348145372cff58688b8df43d8a864ea4fbd..e71a0a1e75d5992c8b1b39d2d77eda60db0259e0 100644
--- a/test/gtest_processor_base.cpp
+++ b/test/gtest_processor_base.cpp
@@ -62,20 +62,22 @@ TEST(ProcessorBase, MotionProvider)
 
     // Install tracker (sensor and processor)
     auto sens_trk = problem->installSensor("SensorDummy",
-                                           "dummy_sensor",
-                                           wolf_root + "/test/yaml/sensor_tests/sensor_PO_2D_fix.yaml");
-    auto proc_trk = problem->installProcessor("ProcessorTrackerFeatureDummy",  "dummy", sens_trk);
+                                           wolf_root + "/test/yaml/sensor_tests/sensor_PO_2D_fix.yaml",
+                                           {wolf_root});
+    auto proc_trk_params = make_shared<ParamsProcessorTrackerFeatureDummy>();
+    proc_trk_params->name = "proc tracker";
+    auto proc_trk = problem->installProcessor("ProcessorTrackerFeatureDummy", sens_trk, proc_trk_params);
 
     // Install odometer (sensor and processor)
-    SensorBasePtr sens_odo = problem->installSensor("SensorOdom",
-                                                    "odometer",
-                                                    wolf_root + "/test/yaml/sensor_odom_2d.yaml");
-    ParamsProcessorOdom2dPtr proc_odo_params = make_shared<ParamsProcessorOdom2d>();
+    auto sens_odo = problem->installSensor("SensorOdom",
+                                           wolf_root + "/test/yaml/sensor_odom_2d.yaml",
+                                           {wolf_root});
+    auto proc_odo_params = make_shared<ParamsProcessorOdom2d>();
     proc_odo_params->time_tolerance = dt/2;
-    ProcessorBasePtr proc_odo = problem->installProcessor("ProcessorOdom2d",
-                                                          "odom processor",
-                                                          sens_odo,
-                                                          proc_odo_params);
+    proc_odo_params->name = "odom processor";
+    auto proc_odo = problem->installProcessor("ProcessorOdom2d",
+                                              sens_odo,
+                                              proc_odo_params);
 
     ASSERT_FALSE(proc_trk->isMotionProvider());
     ASSERT_TRUE (proc_odo->isMotionProvider());
@@ -100,17 +102,22 @@ TEST(ProcessorBase, KeyFrameCallback)
 
     // Install tracker (sensor and processor)
     auto sens_trk = problem->installSensor("SensorDummy",
-                                           "dummy_sensor",
-                                           wolf_root + "/test/yaml/sensor_tests/sensor_PO_2D_fix.yaml");
+                                           wolf_root + "/test/yaml/sensor_tests/sensor_PO_2D_fix.yaml",
+                                           {wolf_root});
     auto proc_trk_params = make_shared<ParamsProcessorTrackerFeatureDummy>();
-    proc_trk_params->time_tolerance = dt/2;
-    auto proc_trk = problem->installProcessor("ProcessorTrackerFeatureDummy",  "dummy", sens_trk, proc_trk_params);
+    proc_trk_params->name = "proc tracker";
+    auto proc_trk = problem->installProcessor("ProcessorTrackerFeatureDummy", sens_trk, proc_trk_params);
 
     // Install odometer (sensor and processor)
-    SensorBasePtr sens_odo = problem->installSensor("SensorOdom", "odometer", wolf_root + "/test/yaml/sensor_odom_2d.yaml");
-    ParamsProcessorOdom2dPtr proc_odo_params = make_shared<ParamsProcessorOdom2d>();
+    auto sens_odo = problem->installSensor("SensorOdom",
+                                           wolf_root + "/test/yaml/sensor_odom_2d.yaml",
+                                           {wolf_root});
+    auto proc_odo_params = make_shared<ParamsProcessorOdom2d>();
     proc_odo_params->time_tolerance = dt/2;
-    ProcessorBasePtr proc_odo = problem->installProcessor("ProcessorOdom2d", "odom processor", sens_odo, proc_odo_params);
+    proc_odo_params->name = "odom processor";
+    auto proc_odo = problem->installProcessor("ProcessorOdom2d",
+                                              sens_odo,
+                                              proc_odo_params);
 
     std::cout << "sensor & processor created and added to wolf problem" << std::endl;
 
diff --git a/test/gtest_processor_motion.cpp b/test/gtest_processor_motion.cpp
index e09d93e7c737cdc6be91297ce07a68d2b6fe4280..9e9e278c3301e0dd6fb2b3787f82c7044c92d769 100644
--- a/test/gtest_processor_motion.cpp
+++ b/test/gtest_processor_motion.cpp
@@ -19,12 +19,6 @@
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 //
 //--------LICENSE_END--------
-/*
- * gtest_processor_motion.cpp
- *
- *  Created on: Sep 27, 2017
- *      Author: jsola
- */
 
 #include "core/utils/utils_gtest.h"
 
@@ -75,7 +69,9 @@ class ProcessorMotion_test : public testing::Test{
 
             dt                      = 1.0;
             problem = Problem::create("PO", 2);
-            sensor = static_pointer_cast<SensorOdom>(problem->installSensor("SensorOdom", "odom", wolf_root + "/test/yaml/sensor_odom_2d.yaml"));
+            sensor = static_pointer_cast<SensorOdom>(problem->installSensor("SensorOdom", 
+                                                                            wolf_root + "/test/yaml/sensor_odom_2d.yaml",
+                                                                            {wolf_root}));
             ParamsProcessorOdom2dPtr params(std::make_shared<ParamsProcessorOdom2d>());
             params->time_tolerance  = 0.5;
             params->dist_traveled   = 100;
diff --git a/test/gtest_sensor_base.cpp b/test/gtest_sensor_base.cpp
index 22bf01d1139c6d96c1c8e273ad03df5aa7cef7fe..46dee21fc84b18e9f778cdbd00354223eb1c1682 100644
--- a/test/gtest_sensor_base.cpp
+++ b/test/gtest_sensor_base.cpp
@@ -22,13 +22,13 @@
 
 #include "core/sensor/sensor_base.h"
 #include "core/utils/utils_gtest.h"
-#include "core/yaml/parser_yaml.h"
-#include "core/utils/params_server.h"
 #include "dummy/sensor_dummy.h"
 #include "dummy/sensor_dummy_poia.h"
+#include "yaml-schema-cpp/yaml_server.hpp"
 
 using namespace wolf;
 using namespace Eigen;
+using namespace yaml_schema_cpp;
 
 std::string wolf_root = _WOLF_ROOT_DIR;
 
@@ -375,124 +375,6 @@ TEST(SensorBase, makeshared_priors_POIA_wrong)
                std::runtime_error);
 }
 
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////// CONSTRUCTOR WITH PARAM SERVER and KEY_TYPES ////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-TEST(SensorBase, makeshared_server_PO)
-{
-  std::vector<int> dims({2, 3});
-  std::vector<std::string> modes({"fix", "initial_guess", "factor"});
-  std::vector<bool> dynamics({false, true});
-  std::vector<bool> drifts({false, true});
-  std::vector<bool> wrongs({false, true});
-
-  VectorXd p_state(4), o_state(4), po_std(4), i_state(5), i_std(5);
-  p_state << 1, 2, 3, 4;
-  o_state << 1, 0, 0, 0;
-  po_std << 0.1, 0.2, 0.3, 0.4;
-  i_state << 1, 2, 3, 4, 5;
-  i_std << 0.1, 0.2, 0.3, 0.4, 0.5;
-
-  // P & O
-  for (auto dim : dims)
-    for (auto mode : modes)
-      for (auto dynamic : dynamics)
-        for (auto drift : drifts)
-          for (auto wrong : wrongs)
-          {
-            // nonsense combination
-            if (not dynamic and drift)
-              continue;
-
-            std::string name = "sensor_PO_" + 
-                               toString(dim) + 
-                               "D_" + 
-                               mode + 
-                               (dynamic ? "_dynamic" : "") + 
-                               (drift ? "_drift" : "") + 
-                               (wrong ? "_wrong" : "");
-
-            // Yaml parser
-            ParserYaml parser   = ParserYaml(wolf_root + "/test/yaml/sensor_tests/" + name + ".yaml", true);
-            ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1");
-
-            WOLF_INFO("Creating sensor from ", name, ".yaml");
-
-            // CORRECT YAML
-            if (not wrong)
-            {
-              auto params = std::make_shared<ParamsSensorDummy>("sensor_1", server);
-              auto S = std::make_shared<SensorDummy>("sensor_1", dim, params, server);
-
-              auto p_size = dim;
-              auto o_size = dim == 2 ? 1 : 4;
-              auto p_size_std = mode == "factor" ? dim : 0;
-              auto o_size_std = mode == "factor" ? (dim == 2 ? 1 : 3) : 0;
-              auto p_size_std_drift = drift ? dim : 0;
-              auto o_size_std_drift = drift ? (dim == 2 ? 1 : 3) : 0;
-
-              // noise
-              ASSERT_MATRIX_APPROX(S->computeNoiseCov(vector0), 
-                                   noise_cov_dummy, 
-                                   Constants::EPS);
-
-              // factors
-              ASSERT_EQ(S->getPriorFeatures().size(), mode == "factor" ? 2 : 0);
-
-              // check
-              checkSensor(S, 'P', p_state.head(p_size), mode == "fix", po_std.head(p_size_std), dynamic, po_std.head(p_size_std_drift));
-              checkSensor(S, 'O', o_state.head(o_size), mode == "fix", po_std.head(o_size_std), dynamic, po_std.head(o_size_std_drift));
-            }
-            // INCORRECT YAML
-            else
-            {
-              ASSERT_THROW(std::make_shared<SensorDummy>("sensor_1", dim, 
-                                                         std::make_shared<ParamsSensorDummy>("sensor_1", server),
-                                                         server),std::runtime_error);
-            }
-          }
-
-  // POIA - 3D - CORRECT YAML
-  {
-    // Yaml parser
-    ParserYaml parser   = ParserYaml(wolf_root + "/test/yaml/sensor_tests/sensor_POIA_3D.yaml", true);
-    ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1");
-    server.print();
-
-    WOLF_INFO("Creating sensor from sensor_POIA_3D.yaml");
-
-    auto params = std::make_shared<ParamsSensorDummyPoia>("sensor_1", server);
-    auto S = std::make_shared<SensorDummyPoia>("sensor_1", 3, params, server);
-
-    // noise
-    ASSERT_MATRIX_APPROX(S->computeNoiseCov(vector0), 
-                          noise_cov_dummy, 
-                          Constants::EPS);
-
-    // factors
-    ASSERT_EQ(S->getPriorFeatures().size(), 2);
-
-    // check
-    checkSensor(S, 'P', p_state.head(3), false, po_std.head(3), true,  vector0);
-    checkSensor(S, 'O', o_state.head(4), true,  vector0,        false, vector0);
-    checkSensor(S, 'I', i_state,         false, vector0,        true,  i_std);
-    checkSensor(S, 'A', o_state.head(4), false, po_std.head(3), true,  po_std.head(3));
-  }
-  // POIA - 3D - INCORRECT YAML
-  {
-    // Yaml parser
-    ParserYaml parser   = ParserYaml(wolf_root + "/test/yaml/sensor_tests/sensor_POIA_3D_wrong.yaml", true);
-    ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1");
-
-    WOLF_INFO("Creating sensor from sensor_POIA_3D_wrong.yaml");
-
-    ASSERT_THROW(std::make_shared<SensorDummyPoia>("sensor_1", 3,
-                                                   std::make_shared<ParamsSensorDummyPoia>("sensor_1", server), 
-                                                   server),
-                 std::runtime_error);
-  }
-}
-
 //////////////////////////////////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////// FactorySensor ///////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -529,16 +411,17 @@ TEST(SensorBase, factory)
                                (dynamic ? "_dynamic" : "") + 
                                (drift ? "_drift" : "") + 
                                (wrong ? "_wrong" : "");
-            // Yaml parser
-            ParserYaml parser   = ParserYaml(wolf_root + "/test/yaml/sensor_tests/" + name + ".yaml", true);
-            ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1");
+            // Yaml server
+            YamlServer server({wolf_root}, wolf_root + "/test/yaml/sensor_tests/" + name + ".yaml");
 
             WOLF_INFO("Creating sensor from ", name, ".yaml");
 
+            ASSERT_EQ(server.validate("SensorDummy"), not wrong);
+
             // CORRECT YAML
             if (not wrong)
             {
-              auto S = FactorySensor::create("SensorDummy", "sensor_1", dim, server);
+              auto S = FactorySensor::create("SensorDummy", dim, server.getNode());
 
               auto p_size = dim;
               auto o_size = dim == 2 ? 1 : 4;
@@ -562,7 +445,7 @@ TEST(SensorBase, factory)
             // INCORRECT YAML
             else
             {
-              ASSERT_THROW(FactorySensor::create("SensorDummy", "sensor_1", dim, server),std::runtime_error);
+              ASSERT_THROW(FactorySensor::create("SensorDummy", dim, server.getNode()),std::runtime_error);
             }
           }
 
@@ -570,13 +453,11 @@ TEST(SensorBase, factory)
   {
     WOLF_INFO("Creating sensor from name sensor_POIA_3D.yaml");
 
-    // Yaml parser
-    ParserYaml parser   = ParserYaml(wolf_root + "/test/yaml/sensor_tests/sensor_POIA_3D.yaml", true);
-    ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1");
-    server.print();
+    // Yaml server
+    YamlServer server({wolf_root}, wolf_root + "/test/yaml/sensor_tests/sensor_POIA_3D.yaml");
 
     // create sensor
-    auto S = FactorySensor::create("SensorDummyPoia","sensor_1", 3, server);
+    auto S = FactorySensor::create("SensorDummyPoia", 3, server.getNode());
 
     // noise
     ASSERT_MATRIX_APPROX(S->computeNoiseCov(vector0), 
@@ -596,12 +477,11 @@ TEST(SensorBase, factory)
   {
     WOLF_INFO("Creating sensor from name sensor_POIA_3D_wrong.yaml");
 
-    // Yaml parser
-    ParserYaml parser   = ParserYaml(wolf_root + "/test/yaml/sensor_tests/sensor_POIA_3D_wrong.yaml", true);
-    ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1");
+    // Yaml server
+    YamlServer server({wolf_root}, wolf_root + "/test/yaml/sensor_tests/sensor_POIA_3D_wrong.yaml");
 
     // create sensor
-    ASSERT_THROW(FactorySensor::create("SensorDummyPoia", "sensor_1", 3, server),std::runtime_error);
+    ASSERT_THROW(FactorySensor::create("SensorDummyPoia", 3, server.getNode()),std::runtime_error);
   }
 }
 
@@ -650,7 +530,7 @@ TEST(SensorBase, factory_yaml)
             // CORRECT YAML
             if (not wrong)
             {
-              auto S = FactorySensorYaml::create("SensorDummy", "sensor_1", dim, yaml_filepath);
+              auto S = FactorySensorYaml::create("SensorDummy", dim, yaml_filepath, {wolf_root});
 
               auto p_size = dim;
               auto o_size = dim == 2 ? 1 : 4;
@@ -674,7 +554,7 @@ TEST(SensorBase, factory_yaml)
             // INCORRECT YAML
             else
             {
-              ASSERT_THROW(FactorySensorYaml::create("SensorDummy", "sensor_1", dim, yaml_filepath),std::runtime_error);
+              ASSERT_THROW(FactorySensorYaml::create("SensorDummy", dim, yaml_filepath, {wolf_root}),std::runtime_error);
             }
           }
 
@@ -684,9 +564,9 @@ TEST(SensorBase, factory_yaml)
 
     // create sensor
     auto S = FactorySensorYaml::create("SensorDummyPoia",
-                                       "sensor_1", 
                                        3,
-                                       wolf_root + "/test/yaml/sensor_tests/sensor_POIA_3D.yaml");
+                                       wolf_root + "/test/yaml/sensor_tests/sensor_POIA_3D.yaml",
+                                       {wolf_root});
 
     // noise
     ASSERT_MATRIX_APPROX(S->computeNoiseCov(vector0), 
@@ -708,9 +588,9 @@ TEST(SensorBase, factory_yaml)
 
     // create sensor
     ASSERT_THROW(FactorySensorYaml::create("SensorDummyPoia",
-                                           "sensor_1", 
                                            3,
-                                           wolf_root + "/test/yaml/sensor_tests/sensor_POIA_3D_wrong.yaml"),
+                                           wolf_root + "/test/yaml/sensor_tests/sensor_POIA_3D_wrong.yaml",
+                                           {wolf_root}),
                  std::runtime_error);
   }
 }
@@ -723,10 +603,11 @@ TEST(SensorBase, factory_yaml)
 TEST(SensorBase, factory_priors_POfix2D)
 {
   auto params = std::make_shared<ParamsSensorDummy>();
+  params->name = "sensor1";
   params->noise_p_std = noise_p_std;
   params->noise_o_std = noise_o_std;
   
-  auto S = FactorySensorPriors::create("SensorDummy","sensor1", 2, params, 
+  auto S = FactorySensorPriors::create("SensorDummy", 2, params, 
                                        Priors({{'P',Prior("P", p_state_2D)}, //default "fix", not dynamic
                                                {'O',Prior("O", o_state_2D)}}));
 
@@ -742,10 +623,11 @@ TEST(SensorBase, factory_priors_POfix2D)
 TEST(SensorBase, factory_priors_POfix3D)
 {
   auto params = std::make_shared<ParamsSensorDummy>();
+  params->name = "sensor1";
   params->noise_p_std = noise_p_std;
   params->noise_o_std = noise_o_std;
   
-  auto S = FactorySensorPriors::create("SensorDummy","sensor1", 3, params, 
+  auto S = FactorySensorPriors::create("SensorDummy", 3, params, 
                                        Priors({{'P',Prior("P", p_state_3D)}, //default "fix", not dynamic
                                                {'O',Prior("O", o_state_3D)}}));
 
@@ -764,10 +646,11 @@ TEST(SensorBase, factory_priors_POfix3D)
 TEST(SensorBase, factory_priors_POinitial_guess2D)
 {
   auto params = std::make_shared<ParamsSensorDummy>();
+  params->name = "sensor1";
   params->noise_p_std = noise_p_std;
   params->noise_o_std = noise_o_std;
   
-  auto S = FactorySensorPriors::create("SensorDummy","sensor1", 2, params, 
+  auto S = FactorySensorPriors::create("SensorDummy", 2, params, 
                                        Priors({{'P',Prior("P", p_state_2D, "initial_guess")},
                                                {'O',Prior("O", o_state_2D, "initial_guess")}}));
 
@@ -786,10 +669,11 @@ TEST(SensorBase, factory_priors_POinitial_guess2D)
 TEST(SensorBase, factory_priors_POinitial_guess3D)
 {
   auto params = std::make_shared<ParamsSensorDummy>();
+  params->name = "sensor1";
   params->noise_p_std = noise_p_std;
   params->noise_o_std = noise_o_std;
   
-  auto S = FactorySensorPriors::create("SensorDummy","sensor1", 3, params, 
+  auto S = FactorySensorPriors::create("SensorDummy", 3, params, 
                                        Priors({{'P',Prior("P", p_state_3D, "initial_guess")},
                                                {'O',Prior("O", o_state_3D, "initial_guess")}}));
 
@@ -808,10 +692,11 @@ TEST(SensorBase, factory_priors_POinitial_guess3D)
 TEST(SensorBase, factory_priors_POfactor2D)
 {
   auto params = std::make_shared<ParamsSensorDummy>();
+  params->name = "sensor1";
   params->noise_p_std = noise_p_std;
   params->noise_o_std = noise_o_std;
   
-  auto S = FactorySensorPriors::create("SensorDummy","sensor1", 2, params, 
+  auto S = FactorySensorPriors::create("SensorDummy", 2, params, 
                                        Priors({{'P',Prior("P", p_state_2D, "factor", p_std_2D)},
                                                {'O',Prior("O", o_state_2D, "factor", o_std_2D)}}));
 
@@ -830,10 +715,11 @@ TEST(SensorBase, factory_priors_POfactor2D)
 TEST(SensorBase, factory_priors_POfactor3D)
 {
   auto params = std::make_shared<ParamsSensorDummy>();
+  params->name = "sensor1";
   params->noise_p_std = noise_p_std;
   params->noise_o_std = noise_o_std;
   
-  auto S = FactorySensorPriors::create("SensorDummy","sensor1", 3, params, 
+  auto S = FactorySensorPriors::create("SensorDummy", 3, params, 
                                        Priors({{'P',Prior("P", p_state_3D, "factor", p_std_3D)},
                                                {'O',Prior("O", o_state_3D, "factor", o_std_3D)}}));
 
@@ -852,10 +738,11 @@ TEST(SensorBase, factory_priors_POfactor3D)
 TEST(SensorBase, factory_priors_POinitial_guess_dynamic2D)
 {
   auto params = std::make_shared<ParamsSensorDummy>();
+  params->name = "sensor1";
   params->noise_p_std = noise_p_std;
   params->noise_o_std = noise_o_std;
   
-  auto S = FactorySensorPriors::create("SensorDummy","sensor1", 2, params, 
+  auto S = FactorySensorPriors::create("SensorDummy", 2, params, 
                                        Priors({{'P',Prior("P", p_state_2D, "initial_guess", vector0, true)},
                                                {'O',Prior("O", o_state_2D, "initial_guess", vector0, true)}}));
 
@@ -874,10 +761,11 @@ TEST(SensorBase, factory_priors_POinitial_guess_dynamic2D)
 TEST(SensorBase, factory_priors_POinitial_guess_dynamic3D)
 {
   auto params = std::make_shared<ParamsSensorDummy>();
+  params->name = "sensor1";
   params->noise_p_std = noise_p_std;
   params->noise_o_std = noise_o_std;
   
-  auto S = FactorySensorPriors::create("SensorDummy","sensor1", 3, params, 
+  auto S = FactorySensorPriors::create("SensorDummy", 3, params, 
                                        Priors({{'P',Prior("P", p_state_3D, "initial_guess", vector0, true)},
                                                {'O',Prior("O", o_state_3D, "initial_guess", vector0, true)}}));
 
@@ -896,10 +784,11 @@ TEST(SensorBase, factory_priors_POinitial_guess_dynamic3D)
 TEST(SensorBase, factory_priors_POinitial_guess_dynamic2D_drift)
 {
   auto params = std::make_shared<ParamsSensorDummy>();
+  params->name = "sensor1";
   params->noise_p_std = noise_p_std;
   params->noise_o_std = noise_o_std;
   
-  auto S = FactorySensorPriors::create("SensorDummy","sensor1", 2, params, 
+  auto S = FactorySensorPriors::create("SensorDummy", 2, params, 
                                        Priors({{'P',Prior("P", p_state_2D, "initial_guess", vector0, true, p_std_2D)},
                                                {'O',Prior("O", o_state_2D, "initial_guess", vector0, true, o_std_2D)}}));
 
@@ -918,10 +807,11 @@ TEST(SensorBase, factory_priors_POinitial_guess_dynamic2D_drift)
 TEST(SensorBase, factory_priors_POinitial_guess_dynamic3D_drift)
 {
   auto params = std::make_shared<ParamsSensorDummy>();
+  params->name = "sensor1";
   params->noise_p_std = noise_p_std;
   params->noise_o_std = noise_o_std;
   
-  auto S = FactorySensorPriors::create("SensorDummy","sensor1", 3, params, 
+  auto S = FactorySensorPriors::create("SensorDummy", 3, params, 
                                        Priors({{'P',Prior("P", p_state_3D, "initial_guess", vector0, true, p_std_3D)},
                                                {'O',Prior("O", o_state_3D, "initial_guess", vector0, true, o_std_3D)}}));
 
@@ -940,12 +830,13 @@ TEST(SensorBase, factory_priors_POinitial_guess_dynamic3D_drift)
 TEST(SensorBase, factory_priors_POIA_mixed)
 {
   auto params = std::make_shared<ParamsSensorDummyPoia>();
+  params->name = "sensor1";
   params->noise_p_std = noise_p_std;
   params->noise_o_std = noise_o_std;
   
   VectorXd i_state_3D = VectorXd::Random(5);
 
-  auto S = FactorySensorPriors::create("SensorDummyPoia","sensor1", 3, params, 
+  auto S = FactorySensorPriors::create("SensorDummyPoia", 3, params, 
                                        Priors({{'P',Prior("P", p_state_3D, "fix", vector0, true)},
                                                {'O',Prior("O", o_state_3D, "factor", o_std_3D, true, o_std_3D)},
                                                {'I',Prior("StateBlock", i_state_3D, "initial_guess")},
@@ -968,13 +859,14 @@ TEST(SensorBase, factory_priors_POIA_mixed)
 TEST(SensorBase, factory_priors_POIA_wrong)
 {
   auto params = std::make_shared<ParamsSensorDummyPoia>();
+  params->name = "sensor1";
   params->noise_p_std = noise_p_std;
   params->noise_o_std = noise_o_std;
   
   VectorXd i_state_3D = VectorXd::Random(5);
 
   // missing I
-  ASSERT_THROW(FactorySensorPriors::create("SensorDummyPoia","sensor1", 3, params, 
+  ASSERT_THROW(FactorySensorPriors::create("SensorDummyPoia", 3, params, 
                                            Priors({{'P',Prior("P", p_state_3D, "fix", vector0, true)},
                                                    {'O',Prior("O", o_state_3D, "factor", o_std_3D, true, o_std_3D)},
                                                    //{'I',Prior("StateBlock", i_state_3D, "initial_guess")},
@@ -982,7 +874,7 @@ TEST(SensorBase, factory_priors_POIA_wrong)
                std::runtime_error);
 
   // missing A
-  ASSERT_THROW(FactorySensorPriors::create("SensorDummyPoia","sensor1", 3, params, 
+  ASSERT_THROW(FactorySensorPriors::create("SensorDummyPoia", 3, params, 
                                            Priors({{'P',Prior("P", p_state_3D, "fix", vector0, true)},
                                                    {'O',Prior("O", o_state_3D, "factor", o_std_3D, true, o_std_3D)},
                                                    {'I',Prior("StateBlock", i_state_3D, "initial_guess")},
@@ -990,7 +882,7 @@ TEST(SensorBase, factory_priors_POIA_wrong)
                std::runtime_error);
 
   // wrong A type (expected StateQuaternion)
-  ASSERT_THROW(FactorySensorPriors::create("SensorDummyPoia","sensor1", 3, params, 
+  ASSERT_THROW(FactorySensorPriors::create("SensorDummyPoia", 3, params, 
                                            Priors({{'P',Prior("P", p_state_3D, "fix", vector0, true)},
                                                    {'O',Prior("O", o_state_3D, "factor", o_std_3D, true, o_std_3D)},
                                                    {'I',Prior("StateBlock", i_state_3D, "initial_guess")},
diff --git a/test/gtest_sensor_odom.cpp b/test/gtest_sensor_odom.cpp
index e58b353f301c86f2d3c866a8da1ff94744b0a27f..f3349edfbdc682efa42e32cc2f7884056c172a2e 100644
--- a/test/gtest_sensor_odom.cpp
+++ b/test/gtest_sensor_odom.cpp
@@ -24,7 +24,6 @@
 #include "core/sensor/factory_sensor.h"
 #include "core/utils/utils_gtest.h"
 #include "core/yaml/parser_yaml.h"
-#include "core/utils/params_server.h"
 
 using namespace wolf;
 using namespace Eigen;
diff --git a/test/gtest_tree_manager.cpp b/test/gtest_tree_manager.cpp
index 1ae353d9f48bf49466b77eb3cf1c3f7150718919..c77181e037bda6da8c7982ad60ea7f49acf6b679 100644
--- a/test/gtest_tree_manager.cpp
+++ b/test/gtest_tree_manager.cpp
@@ -24,7 +24,6 @@
 #include "core/problem/problem.h"
 #include "core/tree_manager/factory_tree_manager.h"
 #include "dummy/tree_manager_dummy.h"
-#include "core/yaml/parser_yaml.h"
 
 using namespace wolf;
 using namespace Eigen;
@@ -61,14 +60,15 @@ TEST(TreeManager, createParams)
     ASSERT_EQ(P->getTreeManager(), GM);
 }
 
-TEST(TreeManager, createParamServer)
+TEST(TreeManager, createNode)
 {
     ProblemPtr P = Problem::create("PO", 2);
 
-    ParserYaml parser = ParserYaml(wolf_root + "/test/yaml/params_tree_manager1.yaml");
-    ParamsServer server = ParamsServer(parser.getParams());
+    auto yaml_server = yaml_schema_cpp::YamlServer({wolf_root + "/schemas"}, 
+                                                   wolf_root + "/test/yaml/params_tree_manager1.yaml");
+    ASSERT_TRUE(yaml_server.validate("TreeManagerDummy"));
 
-    auto GM = TreeManagerDummy::create(server);
+    auto GM = TreeManagerDummy::create(yaml_server.getNode());
 
     ASSERT_TRUE(std::dynamic_pointer_cast<TreeManagerDummy>(GM) != nullptr);
 
@@ -82,7 +82,7 @@ TEST(TreeManager, createYaml)
 {
     ProblemPtr P = Problem::create("PO", 2);
 
-    auto GM = TreeManagerDummy::create(wolf_root + "/test/yaml/tree_manager_dummy.yaml");
+    auto GM = TreeManagerDummy::create(wolf_root + "/test/yaml/tree_manager_dummy.yaml", {wolf_root + "/schemas"});
 
     ASSERT_TRUE(std::dynamic_pointer_cast<TreeManagerDummy>(GM) != nullptr);
 
@@ -92,13 +92,13 @@ TEST(TreeManager, createYaml)
     ASSERT_EQ(P->getTreeManager(), GM);
 }
 
-TEST(TreeManager, Factory)
+TEST(TreeManager, FactoryParams)
 {
     ProblemPtr P = Problem::create("PO", 2);
 
     auto ParamsGM = std::make_shared<ParamsTreeManagerBase>();
 
-    auto GM = FactoryTreeManager::create("TreeManagerDummy",ParamsGM);
+    auto GM = FactoryTreeManagerParams::create("TreeManagerDummy",ParamsGM);
 
     ASSERT_TRUE(std::dynamic_pointer_cast<TreeManagerDummy>(GM) != nullptr);
 
@@ -108,14 +108,15 @@ TEST(TreeManager, Factory)
     ASSERT_EQ(P->getTreeManager(), GM);
 }
 
-TEST(TreeManager, FactoryParamServer)
+TEST(TreeManager, FactoryParam)
 {
     ProblemPtr P = Problem::create("PO", 2);
 
-    ParserYaml parser = ParserYaml(wolf_root + "/test/yaml/params_tree_manager1.yaml");
-    ParamsServer server = ParamsServer(parser.getParams());
+    auto yaml_server = yaml_schema_cpp::YamlServer({wolf_root + "/schemas"}, 
+                                                   wolf_root + "/test/yaml/params_tree_manager1.yaml");
+    ASSERT_TRUE(yaml_server.validate("TreeManagerDummy"));
 
-    auto GM = FactoryTreeManagerServer::create("TreeManagerDummy", server);
+    auto GM = FactoryTreeManager::create("TreeManagerDummy", yaml_server.getNode());
 
     ASSERT_TRUE(std::dynamic_pointer_cast<TreeManagerDummy>(GM) != nullptr);
 
@@ -129,7 +130,9 @@ TEST(TreeManager, FactoryYaml)
 {
     ProblemPtr P = Problem::create("PO", 2);
 
-    auto GM = FactoryTreeManagerYaml::create("TreeManagerDummy", wolf_root + "/test/yaml/tree_manager_dummy.yaml");
+    auto GM = FactoryTreeManagerYaml::create("TreeManagerDummy", 
+                                             wolf_root + "/test/yaml/tree_manager_dummy.yaml", 
+                                             {wolf_root + "/schemas"});
 
     ASSERT_TRUE(std::dynamic_pointer_cast<TreeManagerDummy>(GM) != nullptr);
 
@@ -141,11 +144,7 @@ TEST(TreeManager, FactoryYaml)
 
 TEST(TreeManager, autoConf)
 {
-
-    ParserYaml parser = ParserYaml(wolf_root + "/test/yaml/params_tree_manager1.yaml");
-    ParamsServer server = ParamsServer(parser.getParams());
-
-    ProblemPtr P = Problem::autoSetup(server);
+    ProblemPtr P = Problem::autoSetup(wolf_root + "/test/yaml/params_tree_manager1.yaml", {wolf_root + "/schemas"});
     P->applyPriorOptions(0);
 
     ASSERT_TRUE(std::dynamic_pointer_cast<TreeManagerDummy>(P->getTreeManager()) != nullptr);
@@ -154,10 +153,7 @@ TEST(TreeManager, autoConf)
 
 TEST(TreeManager, autoConfNone)
 {
-    ParserYaml parser = ParserYaml(wolf_root + "/test/yaml/params_tree_manager2.yaml");
-    ParamsServer server = ParamsServer(parser.getParams());
-
-    ProblemPtr P = Problem::autoSetup(server);
+    ProblemPtr P = Problem::autoSetup(wolf_root + "/test/yaml/params_tree_manager2.yaml", {wolf_root + "/schemas"});
     P->applyPriorOptions(0);
 
     ASSERT_TRUE(P->getTreeManager() == nullptr); // params_tree_manager2.yaml problem/tree_manager/type: None
diff --git a/test/yaml/params_prior.yaml b/test/yaml/params_prior.yaml
index eea5d70f1b1738291f2961d6fbabe61e0f1fa20f..dbdc6c608c75f3c8a62d96034a5fb825aba3f3e5 100644
--- a/test/yaml/params_prior.yaml
+++ b/test/yaml/params_prior.yaml
@@ -1,33 +1,39 @@
 # P in 2D
 P_2D_initial_guess:
+  type: StatePoint2d
   mode: initial_guess
   state: [1, 2]
   dynamic: false
 
 P_2D_fix:
+  type: StatePoint2d
   mode: fix
   state: [1, 2]
   dynamic: false
 
 P_2D_factor:
+  type: StatePoint2d
   mode: factor
   state: [1, 2]
   noise_std: [0.1, 0.2]
   dynamic: false
 
 P_2D_initial_guess_dynamic_drift:
+  type: StatePoint2d
   mode: initial_guess
   state: [1, 2]
   dynamic: true
   drift_std: [0.1, 0.2]
 
 P_2D_fix_dynamic_drift:
+  type: StatePoint2d
   mode: fix
   state: [1, 2]
   dynamic: true
   drift_std: [0.1, 0.2]
 
 P_2D_factor_dynamic_drift:
+  type: StatePoint2d
   mode: factor
   state: [1, 2]
   noise_std: [0.1, 0.2]
@@ -35,16 +41,19 @@ P_2D_factor_dynamic_drift:
   drift_std: [0.1, 0.2]
 
 P_2D_initial_guess_dynamic:
+  type: StatePoint2d
   mode: initial_guess
   state: [1, 2]
   dynamic: true
 
 P_2D_fix_dynamic:
+  type: StatePoint2d
   mode: fix
   state: [1, 2]
   dynamic: true
 
 P_2D_factor_dynamic:
+  type: StatePoint2d
   mode: factor
   state: [1, 2]
   noise_std: [0.1, 0.2]
@@ -52,34 +61,40 @@ P_2D_factor_dynamic:
 
 # P in 3D
 P_3D_initial_guess:
+  type: StatePoint3d
   mode: initial_guess
   state: [1, 2, 3]
   dynamic: false
 
 P_3D_fix:
+  type: StatePoint3d
   mode: fix
   state: [1, 2, 3]
   dynamic: false
 
 P_3D_factor:
+  type: StatePoint3d
   mode: factor
   state: [1, 2, 3]
   noise_std: [0.1, 0.2, 0.3]
   dynamic: false
 
 P_3D_initial_guess_dynamic_drift:
+  type: StatePoint3d
   mode: initial_guess
   state: [1, 2, 3]
   dynamic: true
   drift_std: [0.1, 0.2, 0.3]
 
 P_3D_fix_dynamic_drift:
+  type: StatePoint3d
   mode: fix
   state: [1, 2, 3]
   dynamic: true
   drift_std: [0.1, 0.2, 0.3]
 
 P_3D_factor_dynamic_drift:
+  type: StatePoint3d
   mode: factor
   state: [1, 2, 3]
   noise_std: [0.1, 0.2, 0.3]
@@ -87,16 +102,19 @@ P_3D_factor_dynamic_drift:
   drift_std: [0.1, 0.2, 0.3]
 
 P_3D_initial_guess_dynamic:
+  type: StatePoint3d
   mode: initial_guess
   state: [1, 2, 3]
   dynamic: true
 
 P_3D_fix_dynamic:
+  type: StatePoint3d
   mode: fix
   state: [1, 2, 3]
   dynamic: true
 
 P_3D_factor_dynamic:
+  type: StatePoint3d
   mode: factor
   state: [1, 2, 3]
   noise_std: [0.1, 0.2, 0.3]
@@ -104,34 +122,40 @@ P_3D_factor_dynamic:
 
 # O in 2D
 O_2D_initial_guess:
+  type: StateAngle
   mode: initial_guess
   state: [1]
   dynamic: false
 
 O_2D_fix:
+  type: StateAngle
   mode: fix
   state: [1]
   dynamic: false
 
 O_2D_factor:
+  type: StateAngle
   mode: factor
   state: [1]
   noise_std: [0.1]
   dynamic: false
 
 O_2D_initial_guess_dynamic_drift:
+  type: StateAngle
   mode: initial_guess
   state: [1]
   dynamic: true
   drift_std: [0.1]
 
 O_2D_fix_dynamic_drift:
+  type: StateAngle
   mode: fix
   state: [1]
   dynamic: true
   drift_std: [0.1]
 
 O_2D_factor_dynamic_drift:
+  type: StateAngle
   mode: factor
   state: [1]
   noise_std: [0.1]
@@ -139,16 +163,19 @@ O_2D_factor_dynamic_drift:
   drift_std: [0.1]
 
 O_2D_initial_guess_dynamic:
+  type: StateAngle
   mode: initial_guess
   state: [1]
   dynamic: true
 
 O_2D_fix_dynamic:
+  type: StateAngle
   mode: fix
   state: [1]
   dynamic: true
 
 O_2D_factor_dynamic:
+  type: StateAngle
   mode: factor
   state: [1]
   noise_std: [0.1]
@@ -156,34 +183,40 @@ O_2D_factor_dynamic:
 
 # O in 3D
 O_3D_initial_guess:
+  type: StateQuaternion
   mode: initial_guess
   state: [1, 0, 0, 0]
   dynamic: false
 
 O_3D_fix:
+  type: StateQuaternion
   mode: fix
   state: [1, 0, 0, 0]
   dynamic: false
 
 O_3D_factor:
+  type: StateQuaternion
   mode: factor
   state: [1, 0, 0, 0]
   noise_std: [0.1, 0.2, 0.3]
   dynamic: false
 
 O_3D_initial_guess_dynamic_drift:
+  type: StateQuaternion
   mode: initial_guess
   state: [1, 0, 0, 0]
   dynamic: true
   drift_std: [0.1, 0.2, 0.3]
 
 O_3D_fix_dynamic_drift:
+  type: StateQuaternion
   mode: fix
   state: [1, 0, 0, 0]
   dynamic: true
   drift_std: [0.1, 0.2, 0.3]
 
 O_3D_factor_dynamic_drift:
+  type: StateQuaternion
   mode: factor
   state: [1, 0, 0, 0]
   noise_std: [0.1, 0.2, 0.3]
@@ -191,16 +224,19 @@ O_3D_factor_dynamic_drift:
   drift_std: [0.1, 0.2, 0.3]
 
 O_3D_initial_guess_dynamic:
+  type: StateQuaternion
   mode: initial_guess
   state: [1, 0, 0, 0]
   dynamic: true
 
 O_3D_fix_dynamic:
+  type: StateQuaternion
   mode: fix
   state: [1, 0, 0, 0]
   dynamic: true
 
 O_3D_factor_dynamic:
+  type: StateQuaternion
   mode: factor
   state: [1, 0, 0, 0]
   noise_std: [0.1, 0.2, 0.3]
@@ -208,34 +244,40 @@ O_3D_factor_dynamic:
 
 # I
 I_initial_guess:
+  type: StateParam4
   mode: initial_guess
   state: [1, 2, 3, 4]
   dynamic: false
 
 I_fix:
+  type: StateParam4
   mode: fix
   state: [1, 2, 3, 4]
   dynamic: false
 
 I_factor:
+  type: StateParam4
   mode: factor
   state: [1, 2, 3, 4]
   noise_std: [0.1, 0.2, 0.3, 0.4]
   dynamic: false
 
 I_initial_guess_dynamic_drift:
+  type: StateParam4
   mode: initial_guess
   state: [1, 2, 3, 4]
   dynamic: true
   drift_std: [0.1, 0.2, 0.3, 0.4]
 
 I_fix_dynamic_drift:
+  type: StateParam4
   mode: fix
   state: [1, 2, 3, 4]
   dynamic: true
   drift_std: [0.1, 0.2, 0.3, 0.4]
 
 I_factor_dynamic_drift:
+  type: StateParam4
   mode: factor
   state: [1, 2, 3, 4]
   noise_std: [0.1, 0.2, 0.3, 0.4]
@@ -243,16 +285,19 @@ I_factor_dynamic_drift:
   drift_std: [0.1, 0.2, 0.3, 0.4]
 
 I_initial_guess_dynamic:
+  type: StateParam4
   mode: initial_guess
   state: [1, 2, 3, 4]
   dynamic: true
 
 I_fix_dynamic:
+  type: StateParam4
   mode: fix
   state: [1, 2, 3, 4]
   dynamic: true
 
 I_factor_dynamic:
+  type: StateParam4
   mode: factor
   state: [1, 2, 3, 4]
   noise_std: [0.1, 0.2, 0.3, 0.4]
diff --git a/test/yaml/params_prior_wrong.yaml b/test/yaml/params_prior_wrong.yaml
index afdaa97e76af653b6674fb7c62fa49fd5d514676..c3b2a43eb6d829d4567d1ff51a19872dde0e6a6f 100644
--- a/test/yaml/params_prior_wrong.yaml
+++ b/test/yaml/params_prior_wrong.yaml
@@ -1,49 +1,58 @@
 # P in _2D_
 P_2D_initial_guess:
+  type: StatePoint2d
   mode: initial_guess
   #state: [1, 2] # missing
   dynamic: false
 
 P_2D_fix:
+  type: StatePoint2d
   mode: fix
   #state: [1, 2] # missing
   dynamic: false
 
 P_2D_factor:
+  type: StatePoint2d
   mode: factor
   state: [1, 2]
   noise_std: [0.1, 0.2, 0.3] # wrong size
   dynamic: false
 
 P_2D_initial_guess_dynamic:
+  type: StatePoint2d
   mode: initial_guess
   state: [1, 2]
   #dynamic: true #missing
 
 P_2D_fix_dynamic:
+  type: StatePoint2d
   mode: fix
   state: [1] # wrong size
   dynamic: true
 
 P_2D_factor_dynamic:
+  type: StatePoint2d
   mode: factor
   state: [1, 2]
   #noise_std: [0.1, 0.2] # missing
   dynamic: true
 
 P_2D_initial_guess_dynamic_drift:
+  type: StatePoint2d
   mode: initial_guess
   state: [1, 2]
   dynamic: true
   drift_std: [0.1, 0.2, 0.3] # wrong size
 
 P_2D_fix_dynamic_drift:
+  type: StatePoint2d
   mode: fix
   state: [1, 2]
   dynamic: true
   drift_std: [0.1] # wrong size
 
 P_2D_factor_dynamic_drift:
+  type: StatePoint2d
   mode: factor
   state: [1, 2]
   #noise_std: [0.1, 0.2] # missing
@@ -52,32 +61,38 @@ P_2D_factor_dynamic_drift:
 
 # P in _3D_
 P_3D_initial_guess:
+  type: StatePoint3d
   #mode: initial_guess # missing
   state: [1, 2, 3]
   dynamic: false
 
 P_3D_fix:
+  type: StatePoint3d
   mode: fix
   state: [1, 2, 3, 4] # wrong size
   dynamic: false
 
 P_3D_factor:
+  type: StatePoint3d
   mode: factor
   state: [1, 2, 3]
   noise_std: [0.1, 0.2] # wrong size
   dynamic: false
 
 P_3D_initial_guess_dynamic:
+  type: StatePoint3d
   mode: initial_guess
   state: [1, 2, 3, 4] # wrong size
   dynamic: true
 
 P_3D_fix_dynamic:
+  type: StatePoint3d
   mode: fix
   state: [1, 2, 3]
   # dynamic: true # missing
 
 P_3D_factor_dynamic:
+  type: StatePoint3d
   mode: factor
   state: [1, 2, 3]
   noise_std: [0.1, 0.2] # wrong size
@@ -85,18 +100,21 @@ P_3D_factor_dynamic:
   drift_std: [0.1, 0.2, 0.3]
 
 P_3D_initial_guess_dynamic_drift:
+  type: StatePoint3d
   mode: initial_guess
   state: [1, 2, 3]
   dynamic: true
   drift_std: [0.1, 0.2] # wrong size
 
 P_3D_fix_dynamic_drift:
+  type: StatePoint3d
   #mode: fix
   state: [1, 2, 3]
   dynamic: true
   drift_std: [0.1, 0.2]
 
 P_3D_factor_dynamic_drift:
+  type: StatePoint3d
   mode: factor
   state: [1, 2, 3]
   noise_std: [0.1, 0.2] # wrong size
@@ -105,50 +123,59 @@ P_3D_factor_dynamic_drift:
 
 # O in _2D_
 O_2D_initial_guess:
+  type: StateAngle
   mode: initial_guess
   state: [1, 2]  # wrong size
   dynamic: false
 
 O_2D_fix:
+  type: StateAngle
   mode: fix
   state: [1]
   #dynamic: false # missing
 
 O_2D_factor:
+  type: StateAngle
   mode: factor
   state: [1]
   noise_std: [0.1, 0.2] # wrong size
   dynamic: false
 
 O_2D_initial_guess_dynamic:
+  type: StateAngle
   mode: initial_guess
   state: [1, 2] #wrong size
   dynamic: true
 
 O_2D_fix_dynamic:
+  type: StateAngle
   mode: fix
   state: [1 2] # wrong size
   dynamic: true
 
 O_2D_factor_dynamic:
+  type: StateAngle
   mode: factor
   state: [1]
   noise_std: [0.1 0.2] # wrong size
   dynamic: true
 
 O_2D_initial_guess_dynamic_drift:
+  type: StateAngle
   mode: initial_guess
   state: [1]
   dynamic: true
   drift_std: [0.1, 0.2] # wrong size
 
 O_2D_fix_dynamic_drift:
+  type: StateAngle
   mode: fix
   state: [1 2] # wrong size
   dynamic: true
   drift_std: [0.1]
 
 O_2D_factor_dynamic_drift:
+  type: StateAngle
   mode: factor
   state: [1]
   noise_std: [0.1 0.2] # wrong size
@@ -157,50 +184,59 @@ O_2D_factor_dynamic_drift:
 
 # O in _3D_
 O_3D_initial_guess:
+  type: StateQuaternion
   mode: initial_guess
   #state: [1, 0, 0, 0] # missing
   dynamic: false
 
 O_3D_fix:
+  type: StateQuaternion
   mode: fix
   state: [1, 0, 0, 0]
   #dynamic: false # missing
 
 O_3D_factor:
+  type: StateQuaternion
   mode: factor
   state: [1, 0, 0, 0]
   noise_std: [0.1, 0.2]  # wrong size
   dynamic: false
 
 O_3D_initial_guess_dynamic:
+  type: StateQuaternion
   mode: initial_guess
   state: [1, 0, 0] # wrong size
   dynamic: true
 
 O_3D_fix_dynamic:
+  type: StateQuaternion
   mode: fix
   state: [1, 0, 0, 0]
   #dynamic: true
 
 O_3D_factor_dynamic:
+  type: StateQuaternion
   mode: factor
   state: [1, 0, 0, 0]
   noise_std: [0.1, 0.2, 0.3, 0.4] # wrong size
   dynamic: true
 
 O_3D_initial_guess_dynamic_drift:
+  type: StateQuaternion
   mode: initial_guess
   state: [1, 0, 0] # wrong size
   dynamic: true
   drift_std: [0.1, 0.2, 0.3]
 
 O_3D_fix_dynamic_drift:
+  type: StateQuaternion
   mode: fix
   state: [1, 0, 0, 0]
   dynamic: true
   drift_std: [0.1, 0.2, 0.3, 0.4] #wrong size
 
 O_3D_factor_dynamic_drift:
+  type: StateQuaternion
   mode: factor
   state: [1, 0, 0, 0]
   noise_std: [0.1, 0.2, 0.3]
@@ -209,50 +245,59 @@ O_3D_factor_dynamic_drift:
 
 # I
 I_initial_guess:
+  type: StateParam4
   #mode: initial_guess # missing
   state: [1, 2, 3, 4]
   dynamic: false
 
 I_fix:
+  type: StateParam4
   mode: fix
   #state: [1, 2, 3, 4] # missing
   dynamic: false
 
 I_factor:
+  type: StateParam4
   mode: factor
   state: [1, 2, 3, 4]
   noise_std: [0.1, 0.2, 0.3]  # wrong size
   dynamic: false
 
 I_initial_guess_dynamic:
+  type: StateParam4
   #mode: initial_guess # missing
   state: [1, 2, 3, 4]
   dynamic: true
 
 I_fix_dynamic:
+  type: StateParam4
   mode: fix
   state: [] # wrong size
   dynamic: true
 
 I_factor_dynamic:
+  type: StateParam4
   mode: factor
   state: [1, 2, 3, 4]
   noise_std: [0.1, 0.2, 0.3]  # wrong size
   dynamic: true
 
 I_initial_guess_dynamic_drift:
+  type: StateParam4
   mode: initial_guess
   state: [1, 2, 3, 4]
   dynamic: true
   drift_std: [0.1, 0.2, 0.3] # wrong size
 
 I_fix_dynamic_drift:
+  type: StateParam4
   mode: fix
   state: [1, 2, 3] # wrong size
   dynamic: true
   drift_std: [0.1, 0.2, 0.3, 0.4]
 
 I_factor_dynamic_drift:
+  type: StateParam4
   mode: factor
   state: [1, 2, 3, 4]
   noise_std: [0.1, 0.2, 0.3]  # wrong size