diff --git a/src/processor_IMU.cpp b/src/processor_IMU.cpp
index 0341a5ee48dfc763f00d2fb7a2ece8a86f2f520f..14ab30164adb44619dc294c5a8e69533f07a0810 100644
--- a/src/processor_IMU.cpp
+++ b/src/processor_IMU.cpp
@@ -3,13 +3,13 @@
 
 namespace wolf {
 
-ProcessorIMU::ProcessorIMU(ProcessorParamsIMUPtr _params) :
+ProcessorIMU::ProcessorIMU(const ProcessorParamsIMU& _params) :
         ProcessorMotion("IMU", 10, 10, 9, 6, 0.01, 6),
-        max_time_span_  (_params ? _params    ->max_time_span   : 1.0  ),
-        max_buff_length_(_params ? _params    ->max_buff_length : 10000   ),
-        dist_traveled_  (_params ? _params    ->dist_traveled   : 1.0  ),
-        angle_turned_   (_params ? _params    ->angle_turned    : 0.2  ),
-        voting_active_  (_params ? _params    ->voting_active    : false  )
+        max_time_span_  (_params.max_time_span   ),
+        max_buff_length_(_params.max_buff_length ),
+        dist_traveled_  (_params.dist_traveled   ),
+        angle_turned_   (_params.angle_turned    ),
+        voting_active_  (_params.voting_active   )
 {
     // Set constant parts of Jacobians
     jacobian_delta_preint_.setIdentity(9,9);                                    // dDp'/dDp, dDv'/dDv, all zeros
@@ -24,12 +24,22 @@ ProcessorIMU::~ProcessorIMU()
 
 ProcessorBasePtr ProcessorIMU::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params, const SensorBasePtr _sen_ptr)
 {
-    // cast inputs to the correct type
-    std::shared_ptr<ProcessorParamsIMU> prc_imu_params = std::static_pointer_cast<ProcessorParamsIMU>(_params);
+    if (_params)
+    {
+        // cast inputs to the correct type
+        std::shared_ptr<ProcessorParamsIMU> prc_imu_params = std::static_pointer_cast<ProcessorParamsIMU>(_params);
 
-    ProcessorIMUPtr prc_ptr = std::make_shared<ProcessorIMU>(prc_imu_params);
-    prc_ptr->setName(_unique_name);
-    return prc_ptr;
+        ProcessorIMUPtr prc_ptr = std::make_shared<ProcessorIMU>(*prc_imu_params);
+        prc_ptr->setName(_unique_name);
+        return prc_ptr;
+    }
+    else
+    {
+        ProcessorIMUPtr prc_ptr = std::make_shared<ProcessorIMU>();
+
+        prc_ptr->setName(_unique_name);
+        return prc_ptr;
+    }
 }
 
 bool ProcessorIMU::voteForKeyFrame()
diff --git a/src/processor_IMU.h b/src/processor_IMU.h
index da50c60943812a412f6057516611ec5edc00f7f6..1dab8cd154439c10e7a261dbfa94471b83103818 100644
--- a/src/processor_IMU.h
+++ b/src/processor_IMU.h
@@ -12,23 +12,23 @@ WOLF_STRUCT_PTR_TYPEDEFS(ProcessorParamsIMU);
 
 struct ProcessorParamsIMU : public ProcessorParamsBase
 {
-        Scalar max_time_span;
-        Size   max_buff_length;
-        Scalar dist_traveled;
-        Scalar angle_turned;
-        bool voting_active; //IMU will not vote for key Frames to be created
-
-
-        ProcessorParamsIMU() :
-            max_time_span(0.5),
-            max_buff_length(10),
-            dist_traveled(5),
-            angle_turned(.5),
-            voting_active(false)
-        {
-            type = "IMU";
-            name = "";
-        }
+        Scalar max_time_span    = 0.5;
+        Size   max_buff_length  = 10;
+        Scalar dist_traveled    = 5;
+        Scalar angle_turned     = 0.5;
+        bool voting_active      = false; //IMU will not vote for key Frames to be created
+
+
+//        ProcessorParamsIMU() :
+//            max_time_span(0.5),
+//            max_buff_length(10),
+//            dist_traveled(5),
+//            angle_turned(.5),
+//            voting_active(false)
+//        {
+//            type = "IMU";
+//            name = "";
+//        }
 };
 
 WOLF_PTR_TYPEDEFS(ProcessorIMU);
@@ -36,7 +36,7 @@ WOLF_PTR_TYPEDEFS(ProcessorIMU);
 //class
 class ProcessorIMU : public ProcessorMotion{
     public:
-        ProcessorIMU(ProcessorParamsIMUPtr _params = nullptr);
+        ProcessorIMU(const ProcessorParamsIMU& _params = ProcessorParamsIMU());
         virtual ~ProcessorIMU();
 
     protected:
diff --git a/src/test/gtest_processor_IMU.cpp b/src/test/gtest_processor_IMU.cpp
index b6035ee527755c6e39e007c9b228abac15749077..cf0a563391970fc136001cfc3ff28b5d316db47c 100644
--- a/src/test/gtest_processor_IMU.cpp
+++ b/src/test/gtest_processor_IMU.cpp
@@ -85,19 +85,20 @@ TEST(ProcessorIMU_constructors, ALL)
 
     //constructor without any argument
     ProcessorIMUPtr prc0 = std::make_shared<ProcessorIMU>();
-    ASSERT_EQ(prc0->getMaxTimeSpan(), 1.0);
-    ASSERT_EQ(prc0->getMaxBuffLength(), 10000);
-    ASSERT_EQ(prc0->getDistTraveled(), 1.0);
-    ASSERT_EQ(prc0->getAngleTurned(), 0.2);
+    ProcessorParamsIMU params_default;
+    ASSERT_EQ(prc0->getMaxTimeSpan(),   params_default.max_time_span);
+    ASSERT_EQ(prc0->getMaxBuffLength(), params_default.max_buff_length);
+    ASSERT_EQ(prc0->getDistTraveled(),  params_default.dist_traveled);
+    ASSERT_EQ(prc0->getAngleTurned(),   params_default.angle_turned);
 
     //constructor with ProcessorIMUParamsPtr argument only
     ProcessorParamsIMUPtr param_ptr = std::make_shared<ProcessorParamsIMU>();
-    param_ptr->max_time_span = 2.0;
+    param_ptr->max_time_span =   2.0;
     param_ptr->max_buff_length = 20000;
-    param_ptr->dist_traveled = 2.0;
-    param_ptr->angle_turned = 2.0;
+    param_ptr->dist_traveled =   2.0;
+    param_ptr->angle_turned =    2.0;
 
-    ProcessorIMUPtr prc1 = std::make_shared<ProcessorIMU>(param_ptr);
+    ProcessorIMUPtr prc1 = std::make_shared<ProcessorIMU>(*param_ptr);
     ASSERT_EQ(prc1->getMaxTimeSpan(), param_ptr->max_time_span);
     ASSERT_EQ(prc1->getMaxBuffLength(), param_ptr->max_buff_length);
     ASSERT_EQ(prc1->getDistTraveled(), param_ptr->dist_traveled);
@@ -109,17 +110,17 @@ TEST(ProcessorIMU_constructors, ALL)
     Vector7s extrinsics = (Vector7s()<<1,0,0, 0,0,0,1).finished();
     SensorBasePtr sensor_ptr = problem->installSensor("IMU", "Main IMU", extrinsics, wolf_root + "/src/examples/sensor_imu.yaml");
     ProcessorBasePtr processor_ptr = problem->installProcessor("IMU", "IMU pre-integrator", "Main IMU", "");
-    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getMaxTimeSpan(), 1.0);
-    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getMaxBuffLength(), 10000);
-    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getDistTraveled(), 1.0);
-    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getAngleTurned(), 0.2);
+    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getMaxTimeSpan(),   params_default.max_time_span);
+    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getMaxBuffLength(), params_default.max_buff_length);
+    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getDistTraveled(),  params_default.dist_traveled);
+    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getAngleTurned(),   params_default.angle_turned);
 
     //Factory constructor with yaml
     processor_ptr = problem->installProcessor("IMU", "Sec IMU pre-integrator", "Main IMU", wolf_root + "/src/examples/processor_imu.yaml");
-    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getMaxTimeSpan(), 2.0);
+    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getMaxTimeSpan(),   2.0);
     ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getMaxBuffLength(), 20000);
-    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getDistTraveled(), 2.0);
-    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getAngleTurned(), 0.2);
+    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getDistTraveled(),  2.0);
+    ASSERT_EQ(std::static_pointer_cast<ProcessorIMU>(processor_ptr)->getAngleTurned(),   0.2);
 }
 
 TEST(ProcessorIMU, voteForKeyFrame)