diff --git a/include/IMU/processor/processor_IMU.h b/include/IMU/processor/processor_IMU.h
index 34b2b14916e5eece2fbd4bb948285165cbb5e59e..42099045146461b1ca9145dd5e3b450b75916f96 100644
--- a/include/IMU/processor/processor_IMU.h
+++ b/include/IMU/processor/processor_IMU.h
@@ -35,6 +35,9 @@ class ProcessorIMU : public ProcessorMotion{
         virtual ~ProcessorIMU();
         virtual void configure(SensorBasePtr _sensor) override { };
 
+        // Factory method for high level API
+        static ProcessorBasePtr create(const std::string& _unique_name, const ProcessorParamsBasePtr _params);
+
     protected:
         virtual void computeCurrentDelta(const Eigen::VectorXs& _data,
                                          const Eigen::MatrixXs& _data_cov,
@@ -78,9 +81,6 @@ class ProcessorIMU : public ProcessorMotion{
         ProcessorParamsIMUPtr params_motion_IMU_;
         Eigen::Matrix<Scalar, 9, 9> unmeasured_perturbation_cov_;
 
-    public:
-        //for factory
-        static ProcessorBasePtr create(const std::string& _unique_name, const ProcessorParamsBasePtr _params, const SensorBasePtr sensor_ptr = nullptr);
 };
 
 }
diff --git a/src/processor/processor_IMU.cpp b/src/processor/processor_IMU.cpp
index 0bda304c2123fbb95f72e6572b7b9a7e5bc80e06..fb2803d725dd1c57328cd81f26759fabb68bfba9 100644
--- a/src/processor/processor_IMU.cpp
+++ b/src/processor/processor_IMU.cpp
@@ -21,16 +21,14 @@ ProcessorIMU::~ProcessorIMU()
     //
 }
 
-ProcessorBasePtr ProcessorIMU::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params, const SensorBasePtr _sen_ptr)
+ProcessorBasePtr ProcessorIMU::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params)
 {
-    std::shared_ptr<ProcessorParamsIMU> prc_imu_params;
-    if (_params)
-        prc_imu_params = std::static_pointer_cast<ProcessorParamsIMU>(_params);
-    else
-        prc_imu_params = std::make_shared<ProcessorParamsIMU>();
+    auto prc_imu_params = std::static_pointer_cast<ProcessorParamsIMU>(_params);
+
+    auto prc_ptr = std::make_shared<ProcessorIMU>(prc_imu_params);
 
-    ProcessorIMUPtr prc_ptr = std::make_shared<ProcessorIMU>(prc_imu_params);
     prc_ptr->setName(_unique_name);
+
     return prc_ptr;
 }
 
diff --git a/test/gtest_processor_IMU.cpp b/test/gtest_processor_IMU.cpp
index 8b5e45c73a6d3fbcbb3222f9aa8d323289454347..9abf094e61b6a9d31819c27c100fe2b179214ab5 100644
--- a/test/gtest_processor_IMU.cpp
+++ b/test/gtest_processor_IMU.cpp
@@ -98,17 +98,17 @@ TEST(ProcessorIMU_constructors, ALL)
     ASSERT_EQ(prc1->getDistTraveled(), param_ptr->dist_traveled);
     ASSERT_EQ(prc1->getAngleTurned(), param_ptr->angle_turned);
 
-    //Factory constructor without yaml
+    //Factory constructor with pointers
     std::string wolf_root = _WOLF_IMU_ROOT_DIR;
     ProblemPtr problem = Problem::create("POV", 3);
     Vector7s extrinsics = (Vector7s()<<1,0,0, 0,0,0,1).finished();
     SensorBasePtr sensor_ptr = problem->installSensor("IMU", "Main IMU", extrinsics, wolf_root + "/demos/sensor_imu.yaml");
-    ProcessorBasePtr processor_ptr = problem->installProcessor("IMU", "IMU pre-integrator", "Main IMU", "");
-    ProcessorParamsIMU params_default;
-    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);
+    ProcessorParamsIMUPtr params_default = std::make_shared<ProcessorParamsIMU>();
+    ProcessorBasePtr processor_ptr = problem->installProcessor("IMU", "IMU pre-integrator", sensor_ptr, params_default);
+    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 + "/demos/processor_imu.yaml");