diff --git a/src/examples/test_image.cpp b/src/examples/test_image.cpp
index e79354c92eb1a51b38692985f03986ef4dc688ff..d4733afce5d9af93617663ca5db0d26b8169d8f4 100644
--- a/src/examples/test_image.cpp
+++ b/src/examples/test_image.cpp
@@ -139,7 +139,6 @@ int main(int argc, char** argv)
     // PROCESSOR
     // one-liner API
     ProcessorImageFeaturePtr prc_img_ptr = std::static_pointer_cast<ProcessorImageFeature>( wolf_problem_->installProcessor("IMAGE FEATURE", "ORB", "PinHole", wolf_root + "/src/examples/processor_image_ORB.yaml") );
-    prc_img_ptr->setup(camera_ptr);
     std::cout << "sensor & processor created and added to wolf problem" << std::endl;
     //=====================================================
 
diff --git a/src/hello_wolf/processor_range_bearing.h b/src/hello_wolf/processor_range_bearing.h
index 0706bc145f732176ba89da29a8904590aafce149..2c5d4702c513217530dbcbed4723312d8cf379cb 100644
--- a/src/hello_wolf/processor_range_bearing.h
+++ b/src/hello_wolf/processor_range_bearing.h
@@ -35,6 +35,7 @@ class ProcessorRangeBearing : public ProcessorBase
 
         ProcessorRangeBearing(const SensorRangeBearingPtr _sensor_ptr, const Scalar& _time_tolerance = 0);
         virtual ~ProcessorRangeBearing() {/* empty */}
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
         // Factory method for high level API
         static ProcessorBasePtr create(const std::string& _unique_name,
diff --git a/src/problem.cpp b/src/problem.cpp
index 11852deb2469e4b8e8861d4a90fcd3fe119894d9..f1f2558ef2bd0723ce1000607ff203afc1f19f51 100644
--- a/src/problem.cpp
+++ b/src/problem.cpp
@@ -118,6 +118,7 @@ ProcessorBasePtr Problem::installProcessor(const std::string& _prc_type, //
     }
 
     ProcessorBasePtr prc_ptr = ProcessorFactory::get().create(uppercase(_prc_type), _unique_processor_name, _prc_params, _corresponding_sensor_ptr);
+    prc_ptr->configure(_corresponding_sensor_ptr);
     _corresponding_sensor_ptr->addProcessor(prc_ptr);
 
     // setting the origin in all processor motion if origin already setted
diff --git a/src/processor_GPS.h b/src/processor_GPS.h
index 7a72dbadedd9290300758aef7dedc17ccefbce98..b846ac414f56692e64ab93212ff848acdcfbc339 100644
--- a/src/processor_GPS.h
+++ b/src/processor_GPS.h
@@ -26,6 +26,7 @@ class ProcessorGPS : public ProcessorBase
     public:
         ProcessorGPS();
         virtual ~ProcessorGPS(Scalar time_tolerance_);
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
         virtual void init(CaptureBasePtr _capture_ptr);
         virtual void process(CaptureBasePtr _capture_ptr);
         virtual bool voteForKeyFrame();
diff --git a/src/processor_IMU.h b/src/processor_IMU.h
index 3954d5ac18b600a5ef4a5f40aaf6fa46115f81d3..499c9399701ef1b100ecbfcbfd2284e4bb1f8e95 100644
--- a/src/processor_IMU.h
+++ b/src/processor_IMU.h
@@ -25,6 +25,7 @@ class ProcessorIMU : public ProcessorMotion{
     public:
         ProcessorIMU(const ProcessorParamsIMU& _params = ProcessorParamsIMU());
         virtual ~ProcessorIMU();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
     protected:
         virtual void computeCurrentDelta(const Eigen::VectorXs& _data,
diff --git a/src/processor_base.h b/src/processor_base.h
index de6ecd94b37291e0c85f9b067fa0c35a2eb9b4ab..e3990f51f895f257bd154f91ee726f0109bfc397 100644
--- a/src/processor_base.h
+++ b/src/processor_base.h
@@ -133,6 +133,7 @@ class ProcessorBase : public NodeBase, public std::enable_shared_from_this<Proce
     public:
         ProcessorBase(const std::string& _type, const Scalar& _time_tolerance);
         virtual ~ProcessorBase();
+        virtual void configure(SensorBasePtr _sensor) = 0;
         void remove();
 
         unsigned int id();
diff --git a/src/processor_capture_holder.h b/src/processor_capture_holder.h
index 43eeab833691abdb458980773713ebf8e1ae0206..b07823cb6907207a9f08432d9f8470768e3b59de 100644
--- a/src/processor_capture_holder.h
+++ b/src/processor_capture_holder.h
@@ -35,6 +35,7 @@ public:
 
   ProcessorCaptureHolder(const Scalar& _buffer_size = 1);
   virtual ~ProcessorCaptureHolder() = default;
+  virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
   virtual void process(CaptureBasePtr _capture_ptr) override;
 
diff --git a/src/processor_frame_nearest_neighbor_filter.h b/src/processor_frame_nearest_neighbor_filter.h
index 16c3985e035ce795e116fadec3e2ae1a83e224da..a2234628375acb80ccafa9d1379e3a0dc0acb3e5 100644
--- a/src/processor_frame_nearest_neighbor_filter.h
+++ b/src/processor_frame_nearest_neighbor_filter.h
@@ -40,6 +40,7 @@ struct ProcessorParamsFrameNearestNeighborFilter : public ProcessorParamsLoopClo
   }
 
   virtual ~ProcessorParamsFrameNearestNeighborFilter() = default;
+  virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
   int buffer_size_;
   int sample_step_degree_;
diff --git a/src/processor_image_feature.h b/src/processor_image_feature.h
index aa007e00780b8372c1493e15541a264d5fbe68e1..47632ad97dde96ae28d2a31ee2a799ef9f321908 100644
--- a/src/processor_image_feature.h
+++ b/src/processor_image_feature.h
@@ -70,6 +70,7 @@ class ProcessorImageFeature : public ProcessorTrackerFeature
     public:
         ProcessorImageFeature(ProcessorParamsImage _params);
         virtual ~ProcessorImageFeature();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
         virtual void setup(SensorCameraPtr _camera_ptr);
 
diff --git a/src/processor_image_landmark.h b/src/processor_image_landmark.h
index 489502b529eaf72dead7ff4938b3c32514ca437c..0aa32aea3555d95f2f708cc9e307fc7a6de0c180 100644
--- a/src/processor_image_landmark.h
+++ b/src/processor_image_landmark.h
@@ -91,6 +91,7 @@ class ProcessorImageLandmark : public ProcessorTrackerLandmark
     public:
         ProcessorImageLandmark(const ProcessorParamsImage& _params);
         virtual ~ProcessorImageLandmark();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
         virtual void setup(SensorCameraPtr _camera_ptr);
 
diff --git a/src/processor_loopclosure_base.h b/src/processor_loopclosure_base.h
index 1dd3becb335af5c26227465f605bec95e466949e..54cbd57a10ba5528ea06a3dee8f264f5121b2b05 100644
--- a/src/processor_loopclosure_base.h
+++ b/src/processor_loopclosure_base.h
@@ -46,8 +46,8 @@ protected:
 public:
 
   ProcessorLoopClosureBase(const std::string& _type, const Scalar _time_tolerance);
-
   virtual ~ProcessorLoopClosureBase() = default;
+  virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
   /** \brief Full processing of an incoming Capture.
      *
diff --git a/src/processor_odom_2D.h b/src/processor_odom_2D.h
index 4434b2a84f1a0d186c0ad9e6c7041a5cc2f73a08..48e8dcdc6cc03470bf13cf70e120b2289da739ef 100644
--- a/src/processor_odom_2D.h
+++ b/src/processor_odom_2D.h
@@ -33,6 +33,7 @@ class ProcessorOdom2D : public ProcessorMotion
     public:
         ProcessorOdom2D(const ProcessorParamsOdom2D& _params = ProcessorParamsOdom2D());
         virtual ~ProcessorOdom2D();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
         virtual bool voteForKeyFrame() override;
 
diff --git a/src/processor_odom_3D.cpp b/src/processor_odom_3D.cpp
index 8165797715f213d27459eff3ad86944beaff495e..8ee85a73cdf9ad8cc06e3a8b5ade87d267dcee28 100644
--- a/src/processor_odom_3D.cpp
+++ b/src/processor_odom_3D.cpp
@@ -11,7 +11,6 @@ ProcessorOdom3D::ProcessorOdom3D(const ProcessorParamsOdom3D& _params, SensorOdo
                 p1_(nullptr), p2_(nullptr), p_out_(nullptr),
                 q1_(nullptr), q2_(nullptr), q_out_(nullptr)
         {
-            setup(_sensor_ptr);
             delta_ = deltaZero();
             delta_integrated_ = deltaZero();
             jacobian_delta_preint_.setZero(delta_cov_size_, delta_cov_size_);
@@ -23,10 +22,12 @@ ProcessorOdom3D::~ProcessorOdom3D()
 {
 }
 
-void ProcessorOdom3D::setup(SensorOdom3DPtr sen_ptr)
+void ProcessorOdom3D::configure(SensorBasePtr _sensor)
 {
-    if (sen_ptr)
+    if (_sensor)
     {
+        SensorOdom3DPtr sen_ptr = std::static_pointer_cast<SensorOdom3D>(_sensor);
+
         // we steal the parameters from the provided odom3D sensor.
         k_disp_to_disp_ = sen_ptr->getDispVarToDispNoiseFactor();
         k_disp_to_rot_ = sen_ptr->getDispVarToRotNoiseFactor();
diff --git a/src/processor_odom_3D.h b/src/processor_odom_3D.h
index 1dbbf2ad3658c48cf5cf0bc257ade424d6e1f9b2..cf7167073a34faafe2cf184b4746e3af1aaa153b 100644
--- a/src/processor_odom_3D.h
+++ b/src/processor_odom_3D.h
@@ -58,7 +58,7 @@ class ProcessorOdom3D : public ProcessorMotion
     public:
         ProcessorOdom3D(const ProcessorParamsOdom3D& _params = ProcessorParamsOdom3D(), SensorOdom3DPtr _sensor_ptr = nullptr);
         virtual ~ProcessorOdom3D();
-        void setup(SensorOdom3DPtr sen_ptr);
+        virtual void configure(SensorBasePtr _sensor);
 
     public:
         virtual void computeCurrentDelta(const Eigen::VectorXs& _data,
diff --git a/src/processor_tracker_feature_corner.h b/src/processor_tracker_feature_corner.h
index 7fe63a9ef664db4b5f57f5aa8fbd0beef0d3f4d0..a6fb69bb8babd0d57a5446252bceb8032314b45e 100644
--- a/src/processor_tracker_feature_corner.h
+++ b/src/processor_tracker_feature_corner.h
@@ -67,6 +67,7 @@ class ProcessorTrackerFeatureCorner : public ProcessorTrackerFeature
         ProcessorTrackerFeatureCorner(const laserscanutils::LineFinderIterativeParams& _line_finder_params,
                                       const unsigned int& _n_corners_th);
         virtual ~ProcessorTrackerFeatureCorner();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
     protected:
 
diff --git a/src/processor_tracker_feature_dummy.h b/src/processor_tracker_feature_dummy.h
index f6a917cf12cd5ed09bc62afdc88a7b207df9ffb0..38df13c74bb0f37261003d640b561e3fb1a2aeb8 100644
--- a/src/processor_tracker_feature_dummy.h
+++ b/src/processor_tracker_feature_dummy.h
@@ -24,6 +24,7 @@ class ProcessorTrackerFeatureDummy : public ProcessorTrackerFeature
     public:
         ProcessorTrackerFeatureDummy(const Scalar _time_tolerance, const unsigned int _max_new_features, const unsigned int _min_feat_for_keyframe);
         virtual ~ProcessorTrackerFeatureDummy();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
     protected:
 
diff --git a/src/processor_tracker_landmark_corner.h b/src/processor_tracker_landmark_corner.h
index 734acc5083260b65e1933d897d7fb1214f9ae075..74373f5c5141f221320a158d16dc8c322f1161c5 100644
--- a/src/processor_tracker_landmark_corner.h
+++ b/src/processor_tracker_landmark_corner.h
@@ -88,8 +88,8 @@ class ProcessorTrackerLandmarkCorner : public ProcessorTrackerLandmark
 
         ProcessorTrackerLandmarkCorner(const laserscanutils::LineFinderIterativeParams& _line_finder_params,
                                        const unsigned int& _new_corners_th, const unsigned int& _loop_frames_th);
-
         virtual ~ProcessorTrackerLandmarkCorner();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
     protected:
 
diff --git a/src/processor_tracker_landmark_dummy.h b/src/processor_tracker_landmark_dummy.h
index 835fa27ce8a323ea71583166673ee903b2fa1973..b53326176cde094250a4763413768ec6f387d0eb 100644
--- a/src/processor_tracker_landmark_dummy.h
+++ b/src/processor_tracker_landmark_dummy.h
@@ -20,6 +20,7 @@ class ProcessorTrackerLandmarkDummy : public ProcessorTrackerLandmark
     public:
         ProcessorTrackerLandmarkDummy(const Scalar _time_tolerance, const unsigned int& _max_new_features);
         virtual ~ProcessorTrackerLandmarkDummy();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
     protected:
 
diff --git a/src/processor_tracker_landmark_polyline.h b/src/processor_tracker_landmark_polyline.h
index 795e4627c1b6d491527eb242baa9006caed112ed..8236cb65e6744be35c11945f8ec675bf06d050af 100644
--- a/src/processor_tracker_landmark_polyline.h
+++ b/src/processor_tracker_landmark_polyline.h
@@ -114,8 +114,8 @@ class ProcessorTrackerLandmarkPolyline : public ProcessorTrackerLandmark
         EIGEN_MAKE_ALIGNED_OPERATOR_NEW; // to guarantee alignment (see http://eigen.tuxfamily.org/dox-devel/group__TopicStructHavingEigenMembers.html)
 
         ProcessorTrackerLandmarkPolyline(const ProcessorParamsPolyline& _params);
-
         virtual ~ProcessorTrackerLandmarkPolyline();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
         const FeatureBaseList& getLastPolylines() const;
 
diff --git a/src/processors/processor_diff_drive.h b/src/processors/processor_diff_drive.h
index 6daba603107608f25cbd79db659ca5de30b850ea..f47873b227b1df0a448f86d4d55946d6682d2d15 100644
--- a/src/processors/processor_diff_drive.h
+++ b/src/processors/processor_diff_drive.h
@@ -56,8 +56,8 @@ class ProcessorDiffDrive : public ProcessorMotion
 public:
 
   ProcessorDiffDrive(const ProcessorParamsDiffDrive& params);
-
   virtual ~ProcessorDiffDrive() = default;
+  virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
   virtual bool voteForKeyFrame() override;