diff --git a/src/examples/test_imuPlateform_Offline.cpp b/src/examples/test_imuPlateform_Offline.cpp
index 487fac3754c1960e6979cc19fdc87a209fea5e6f..04e27bd4975af1f4839791cc48bcf4acaff815a5 100644
--- a/src/examples/test_imuPlateform_Offline.cpp
+++ b/src/examples/test_imuPlateform_Offline.cpp
@@ -96,7 +96,7 @@ int main(int argc, char** argv)
 
     // SENSOR + PROCESSOR ODOM 3D
     SensorBasePtr sen1_ptr = wolf_problem_ptr_->installSensor("ODOM 3D", "odom", (Vector7s()<<0,0,0,0,0,0,1).finished(), wolf_root + "/src/examples/sensor_odom_3D.yaml");
-    ProcessorOdom3DParamsPtr prc_odom3D_params = std::make_shared<ProcessorOdom3DParams>();
+    ProcessorOdom3DParamsPtr prc_odom3D_params = std::make_shared<ProcessorParamsOdom3D>();
     prc_odom3D_params->max_time_span = 1.9999;
     prc_odom3D_params->max_buff_length = 1000000000; //make it very high so that this condition will not pass
     prc_odom3D_params->dist_traveled = 1000000000;
diff --git a/src/examples/test_imu_constrained0.cpp b/src/examples/test_imu_constrained0.cpp
index 185406733ff2d9f5f13520d3a7de08e4c2539952..f5affb647c73cac0b2f5ab29eca4e9ec34b7889c 100644
--- a/src/examples/test_imu_constrained0.cpp
+++ b/src/examples/test_imu_constrained0.cpp
@@ -118,7 +118,7 @@ int main(int argc, char** argv)
 
     // SENSOR + PROCESSOR ODOM 3D
     SensorBasePtr sen1_ptr = wolf_problem_ptr_->installSensor("ODOM 3D", "odom", (Vector7s()<<0,0,0,0,0,0,1).finished(), wolf_root + "/src/examples/sensor_odom_3D_HQ.yaml");
-    ProcessorOdom3DParamsPtr prc_odom3D_params = std::make_shared<ProcessorOdom3DParams>();
+    ProcessorOdom3DParamsPtr prc_odom3D_params = std::make_shared<ProcessorParamsOdom3D>();
     prc_odom3D_params->max_time_span = 20.9999;
     prc_odom3D_params->max_buff_length = 1000000000; //make it very high so that this condition will not pass
     prc_odom3D_params->dist_traveled = 1000000000;
diff --git a/src/processor_odom_3D.cpp b/src/processor_odom_3D.cpp
index 70b31a4430236a4c07b4b5430585bebd3c66c40c..38c337fd8e19a0c26bf590ab85b98ab263b5da4b 100644
--- a/src/processor_odom_3D.cpp
+++ b/src/processor_odom_3D.cpp
@@ -2,12 +2,12 @@
 namespace wolf
 {
 
-ProcessorOdom3D::ProcessorOdom3D(ProcessorOdom3DParamsPtr _params, SensorOdom3DPtr _sensor_ptr) :
+ProcessorOdom3D::ProcessorOdom3D(const ProcessorParamsOdom3D& _params, SensorOdom3DPtr _sensor_ptr) :
                 ProcessorMotion("ODOM 3D", 7, 7, 6, 6),
-                max_time_span_  (_params ? _params    ->max_time_span   : 1.0  ),
-                max_buff_length_(_params ? _params    ->max_buff_length : 10   ),
-                dist_traveled_  (_params ? _params    ->dist_traveled   : 1.0  ),
-                angle_turned_   (_params ? _params    ->angle_turned    : 0.5  ),
+                max_time_span_  ( _params.max_time_span   ),
+                max_buff_length_( _params.max_buff_length ),
+                dist_traveled_  ( _params.dist_traveled   ),
+                angle_turned_   ( _params.angle_turned    ),
                 p1_(nullptr), p2_(nullptr), p_out_(nullptr),
                 q1_(nullptr), q2_(nullptr), q_out_(nullptr)
         {
@@ -261,12 +261,12 @@ Motion ProcessorOdom3D::interpolate(const Motion& _motion_ref, Motion& _motion_s
 ProcessorBasePtr ProcessorOdom3D::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params, const SensorBasePtr _sen_ptr)
 {
     // cast inputs to the correct type
-    std::shared_ptr<ProcessorOdom3DParams> prc_odo_params = std::static_pointer_cast<ProcessorOdom3DParams>(_params);
+    std::shared_ptr<ProcessorParamsOdom3D> prc_odo_params = std::static_pointer_cast<ProcessorParamsOdom3D>(_params);
 
     SensorOdom3DPtr sen_odo =std::static_pointer_cast<SensorOdom3D>(_sen_ptr);
 
     // construct processor
-    ProcessorOdom3DPtr prc_odo = std::make_shared<ProcessorOdom3D>(prc_odo_params, sen_odo);
+    ProcessorOdom3DPtr prc_odo = std::make_shared<ProcessorOdom3D>(*prc_odo_params, sen_odo);
 
     // setup processor
     prc_odo->setName(_unique_name);
diff --git a/src/processor_odom_3D.h b/src/processor_odom_3D.h
index 0827cd3bdd1b63f4910ab911310f355f52e359e7..1dbbf2ad3658c48cf5cf0bc257ade424d6e1f9b2 100644
--- a/src/processor_odom_3D.h
+++ b/src/processor_odom_3D.h
@@ -18,25 +18,14 @@
 
 namespace wolf {
     
-WOLF_STRUCT_PTR_TYPEDEFS(ProcessorOdom3DParams);
+WOLF_STRUCT_PTR_TYPEDEFS(ProcessorParamsOdom3D);
 
-struct ProcessorOdom3DParams : public ProcessorParamsBase
+struct ProcessorParamsOdom3D : public ProcessorParamsBase
 {
-        Scalar max_time_span;
-        Size   max_buff_length;
-        Scalar dist_traveled;
-        Scalar angle_turned;
-
-
-        ProcessorOdom3DParams() :
-            max_time_span(0),
-            max_buff_length(0),
-            dist_traveled(0),
-            angle_turned(0)
-        {
-            type = "ODOM 3D";
-            name = "";
-        }
+        Scalar max_time_span    = 1.0;
+        Size   max_buff_length  = 10;
+        Scalar dist_traveled    = 1.0;
+        Scalar angle_turned     = 0.5;
 };
 
 
@@ -67,7 +56,7 @@ WOLF_PTR_TYPEDEFS(ProcessorOdom3D);
 class ProcessorOdom3D : public ProcessorMotion
 {
     public:
-        ProcessorOdom3D(ProcessorOdom3DParamsPtr _params = nullptr, SensorOdom3DPtr _sensor_ptr = nullptr);
+        ProcessorOdom3D(const ProcessorParamsOdom3D& _params = ProcessorParamsOdom3D(), SensorOdom3DPtr _sensor_ptr = nullptr);
         virtual ~ProcessorOdom3D();
         void setup(SensorOdom3DPtr sen_ptr);
 
diff --git a/src/serialization/cereal/serialization_processor_odom3d_params.h b/src/serialization/cereal/serialization_processor_odom3d_params.h
index 06770f759cbcf96ca77faf3d83a2a16f0822db04..9b658a233d1832f914a2986d133ab61207e3ff52 100644
--- a/src/serialization/cereal/serialization_processor_odom3d_params.h
+++ b/src/serialization/cereal/serialization_processor_odom3d_params.h
@@ -8,7 +8,7 @@
 namespace cereal {
 
 template <class Archive>
-void serialize(Archive& ar, wolf::ProcessorOdom3DParams& o,
+void serialize(Archive& ar, wolf::ProcessorParamsOdom3D& o,
                std::uint32_t const /*version*/)
 {
   ar( cereal::make_nvp("ProcessorParamsBase",
@@ -22,6 +22,6 @@ void serialize(Archive& ar, wolf::ProcessorOdom3DParams& o,
 
 } // namespace cereal
 
-CEREAL_REGISTER_TYPE_WITH_NAME(wolf::ProcessorOdom3DParams, "ProcessorOdom3DParams")
+CEREAL_REGISTER_TYPE_WITH_NAME(wolf::ProcessorParamsOdom3D, "ProcessorOdom3DParams")
 
 #endif /* _WOLF_SERIALIZATION_CEREAL_PROCESSOR_ODOM3D_PARAMS_H_ */
diff --git a/src/test/gtest_constraint_IMU.cpp b/src/test/gtest_constraint_IMU.cpp
index 3accb792b20b23f5f7d5e6b31fbf0a7dfd7fd662..a507efbc0052ddf42863077c639f3448d787cc54 100644
--- a/src/test/gtest_constraint_IMU.cpp
+++ b/src/test/gtest_constraint_IMU.cpp
@@ -887,7 +887,7 @@ class ConstraintIMU_ODOM_biasTest_Move_NonNullBiasRot : public testing::Test
         WOLF_TRACE("IMU cov: ", sensor_imu->getNoiseCov().diagonal().transpose());
         WOLF_TRACE("ODO cov: ", sensor_odo->getNoiseCov().diagonal().transpose());
 
-        ProcessorOdom3DParamsPtr prc_odom3D_params = std::make_shared<ProcessorOdom3DParams>();
+        ProcessorOdom3DParamsPtr prc_odom3D_params = std::make_shared<ProcessorParamsOdom3D>();
         prc_odom3D_params->max_time_span    = 0.0099;
         prc_odom3D_params->max_buff_length  = 1000; //make it very high so that this condition will not pass
         prc_odom3D_params->dist_traveled    = 1000;
@@ -1064,7 +1064,7 @@ class ConstraintIMU_ODOM_biasTest_Move_NonNullBiasRotY : public testing::Test
 
         // SENSOR + PROCESSOR ODOM 3D
         SensorBasePtr sen1_ptr = wolf_problem_ptr_->installSensor("ODOM 3D", "odom", (Vector7s()<<0,0,0,0,0,0,1).finished(), wolf_root + "/src/examples/sensor_odom_3D_HQ.yaml");
-        ProcessorOdom3DParamsPtr prc_odom3D_params = std::make_shared<ProcessorOdom3DParams>();
+        ProcessorOdom3DParamsPtr prc_odom3D_params = std::make_shared<ProcessorParamsOdom3D>();
         prc_odom3D_params->max_time_span = 0.9999;
         prc_odom3D_params->max_buff_length = 1000000000; //make it very high so that this condition will not pass
         prc_odom3D_params->dist_traveled = 1000000000;
@@ -1205,7 +1205,7 @@ class ConstraintIMU_ODOM_biasTest_Move_NonNullBiasRotXY : public testing::Test
 
         // SENSOR + PROCESSOR ODOM 3D
         SensorBasePtr sen1_ptr = wolf_problem_ptr_->installSensor("ODOM 3D", "odom", (Vector7s()<<0,0,0,0,0,0,1).finished(), wolf_root + "/src/examples/sensor_odom_3D_HQ.yaml");
-        ProcessorOdom3DParamsPtr prc_odom3D_params = std::make_shared<ProcessorOdom3DParams>();
+        ProcessorOdom3DParamsPtr prc_odom3D_params = std::make_shared<ProcessorParamsOdom3D>();
         prc_odom3D_params->max_time_span = 0.9999;
         prc_odom3D_params->max_buff_length = 1000000000; //make it very high so that this condition will not pass
         prc_odom3D_params->dist_traveled = 1000000000;
diff --git a/src/test/serialization/cereal/gtest_serialization_processor_odom3d_params.cpp b/src/test/serialization/cereal/gtest_serialization_processor_odom3d_params.cpp
index ed2aaab3b9b257a708b680db2e38d7b6eb51d592..7a84ef3ffd56301409146ca855e313eef20d79f4 100644
--- a/src/test/serialization/cereal/gtest_serialization_processor_odom3d_params.cpp
+++ b/src/test/serialization/cereal/gtest_serialization_processor_odom3d_params.cpp
@@ -31,7 +31,7 @@ public:
 
   const std::string path_to_io = "/tmp/";
 
-  wolf::ProcessorOdom3DParams nb_;
+  wolf::ProcessorParamsOdom3D nb_;
 };
 
 TEST_F(WolfTestCerealSerializationProcessorOdom3DParams,
@@ -39,7 +39,7 @@ TEST_F(WolfTestCerealSerializationProcessorOdom3DParams,
 {
   const std::string filename(path_to_io + "params_odom3d_serialization.xml");
 
-  wolf::ProcessorOdom3DParams nb_save;
+  wolf::ProcessorParamsOdom3D nb_save;
   nb_save.name = "NAME2";
   //nb_.type = "ODOM 3D";
 
@@ -51,7 +51,7 @@ TEST_F(WolfTestCerealSerializationProcessorOdom3DParams,
   ASSERT_NO_THROW( wolf::save( filename, nb_, nb_save, 10 ) );
 
   {
-    wolf::ProcessorOdom3DParams nb_load;
+    wolf::ProcessorParamsOdom3D nb_load;
 
     ASSERT_NO_THROW( wolf::load( filename, nb_load ) );
 
@@ -62,7 +62,7 @@ TEST_F(WolfTestCerealSerializationProcessorOdom3DParams,
     ASSERT_EQ(nb_load.dist_traveled,   nb_.dist_traveled);
     ASSERT_EQ(nb_load.angle_turned,    nb_.angle_turned);
 
-    wolf::ProcessorOdom3DParams nb_load0, nb_load1;
+    wolf::ProcessorParamsOdom3D nb_load0, nb_load1;
     int myint;
     ASSERT_NO_THROW( wolf::load( filename, nb_load0, nb_load1, myint ) );
 
@@ -95,7 +95,7 @@ TEST_F(WolfTestCerealSerializationProcessorOdom3DParams,
 
   {
     wolf::ProcessorParamsBasePtr nb =
-        std::make_shared<wolf::ProcessorOdom3DParams>(nb_);
+        std::make_shared<wolf::ProcessorParamsOdom3D>(nb_);
 
     ASSERT_NO_THROW( wolf::save( filename, nb ) );
   }
@@ -106,7 +106,7 @@ TEST_F(WolfTestCerealSerializationProcessorOdom3DParams,
     ASSERT_NO_THROW( wolf::load( filename, nb ) );
 
     wolf::ProcessorOdom3DParamsPtr nb_cast =
-        std::dynamic_pointer_cast<wolf::ProcessorOdom3DParams>(nb);
+        std::dynamic_pointer_cast<wolf::ProcessorParamsOdom3D>(nb);
 
     ASSERT_TRUE(nb_cast != nullptr);
 
@@ -130,7 +130,7 @@ TEST_F(WolfTestCerealSerializationProcessorOdom3DParams,
 
   ASSERT_NO_THROW( wolf::save( filename, nb_ ) );
 
-  wolf::ProcessorOdom3DParams nb_load;
+  wolf::ProcessorParamsOdom3D nb_load;
 
   ASSERT_NO_THROW( wolf::load( filename, nb_load ) );
 
@@ -153,7 +153,7 @@ TEST_F(WolfTestCerealSerializationProcessorOdom3DParams,
 
   {
     wolf::ProcessorParamsBasePtr nb =
-        std::make_shared<wolf::ProcessorOdom3DParams>(nb_);
+        std::make_shared<wolf::ProcessorParamsOdom3D>(nb_);
 
     ASSERT_NO_THROW( wolf::save( filename, nb ) );
   }
@@ -164,7 +164,7 @@ TEST_F(WolfTestCerealSerializationProcessorOdom3DParams,
     ASSERT_NO_THROW( wolf::load( filename, nb ) );
 
     wolf::ProcessorOdom3DParamsPtr nb_cast =
-        std::dynamic_pointer_cast<wolf::ProcessorOdom3DParams>(nb);
+        std::dynamic_pointer_cast<wolf::ProcessorParamsOdom3D>(nb);
 
     ASSERT_TRUE(nb_cast != nullptr);
 
@@ -188,7 +188,7 @@ TEST_F(WolfTestCerealSerializationProcessorOdom3DParams,
 
   ASSERT_NO_THROW( wolf::save( filename, nb_ ) );
 
-  wolf::ProcessorOdom3DParams nb_load;
+  wolf::ProcessorParamsOdom3D nb_load;
 
   ASSERT_NO_THROW( wolf::load( filename, nb_load ) );
 
@@ -211,7 +211,7 @@ TEST_F(WolfTestCerealSerializationProcessorOdom3DParams,
 
   {
     wolf::ProcessorParamsBasePtr nb =
-        std::make_shared<wolf::ProcessorOdom3DParams>(nb_);
+        std::make_shared<wolf::ProcessorParamsOdom3D>(nb_);
 
     ASSERT_NO_THROW( wolf::save( filename, nb ) );
   }
@@ -222,7 +222,7 @@ TEST_F(WolfTestCerealSerializationProcessorOdom3DParams,
     ASSERT_NO_THROW( wolf::load( filename, nb ) );
 
     wolf::ProcessorOdom3DParamsPtr nb_cast =
-        std::dynamic_pointer_cast<wolf::ProcessorOdom3DParams>(nb);
+        std::dynamic_pointer_cast<wolf::ProcessorParamsOdom3D>(nb);
 
     ASSERT_TRUE(nb_cast != nullptr);
 
diff --git a/src/yaml/processor_odom_3D_yaml.cpp b/src/yaml/processor_odom_3D_yaml.cpp
index a8fbce5997d01b90abc2340fddb2556f4bfc2f91..450fec00b84ee22c1013640c168260fa229c7c11 100644
--- a/src/yaml/processor_odom_3D_yaml.cpp
+++ b/src/yaml/processor_odom_3D_yaml.cpp
@@ -34,7 +34,7 @@ static ProcessorParamsBasePtr createProcessorOdom3DParams(const std::string & _f
 
         YAML::Node kf_vote = config["keyframe vote"];
 
-        ProcessorOdom3DParamsPtr params = std::make_shared<ProcessorOdom3DParams>();
+        ProcessorParamsOdom3DPtr params = std::make_shared<ProcessorParamsOdom3D>();
 
         params->type                = processor_type;
         params->name                = processor_name;