diff --git a/include/core/processor/processor_odom_2d.h b/include/core/processor/processor_odom_2d.h
index 2dfa88f603dbb3ffda760f1a31231ff235b9e0e1..6d46ab61a32c1b9573f386c97f1ae671086478c6 100644
--- a/include/core/processor/processor_odom_2d.h
+++ b/include/core/processor/processor_odom_2d.h
@@ -42,7 +42,7 @@ class ProcessorOdom2d : public ProcessorMotion
     public:
         ProcessorOdom2d(ProcessorParamsOdom2dPtr _params);
         virtual ~ProcessorOdom2d();
-        virtual void configure(SensorBasePtr _sensor) override { };
+        virtual void configure(SensorBasePtr _sensor) override;
 
         // Factory method for high level API
         WOLF_PROCESSOR_CREATE(ProcessorOdom2d, ProcessorParamsOdom2d);
diff --git a/src/processor/processor_diff_drive.cpp b/src/processor/processor_diff_drive.cpp
index 0150a58113493713810b46479735ff31cdf3aa5c..d80f89ccee5cddff4aab89ec3737c5b518463e7e 100644
--- a/src/processor/processor_diff_drive.cpp
+++ b/src/processor/processor_diff_drive.cpp
@@ -36,7 +36,8 @@ void ProcessorDiffDrive::configure(SensorBasePtr _sensor)
 {
     assert(_sensor && "Provided sensor is nullptr");
 
-    SensorDiffDriveConstPtr sensor_diff_drive = std::static_pointer_cast<SensorDiffDrive>(_sensor);
+    SensorDiffDriveConstPtr sensor_diff_drive = std::dynamic_pointer_cast<SensorDiffDrive>(_sensor);
+    assert(sensor_diff_drive != nullptr && "Sensor is not of type SensorDiffDrive");
 
     radians_per_tick_ = sensor_diff_drive->getRadiansPerTick();
 }
diff --git a/src/processor/processor_odom_2d.cpp b/src/processor/processor_odom_2d.cpp
index 190f7c95a6955535c8044f5acecad0024f520d7f..31b7cc70be659c06b600b85637a0016677be1f07 100644
--- a/src/processor/processor_odom_2d.cpp
+++ b/src/processor/processor_odom_2d.cpp
@@ -15,7 +15,12 @@ ProcessorOdom2d::~ProcessorOdom2d()
 {
 }
 
-void ProcessorOdom2d::computeCurrentDelta(const Eigen::VectorXd& _data, const Eigen::MatrixXd& _data_cov,
+void ProcessorOdom2D::configure(SensorBasePtr _sensor)
+{
+    auto sensor_       = std::dynamic_pointer_cast<SensorOdom2D>(_sensor);
+    assert(sensor_ != nullptr && "Sensor is not of type SensorOdom2D");
+}
+void ProcessorOdom2D::computeCurrentDelta(const Eigen::VectorXd& _data, const Eigen::MatrixXd& _data_cov,
                                           const Eigen::VectorXd& _calib, const double _dt, Eigen::VectorXd& _delta,
                                           Eigen::MatrixXd& _delta_cov, Eigen::MatrixXd& _jacobian_calib) const
 {
diff --git a/src/processor/processor_odom_3d.cpp b/src/processor/processor_odom_3d.cpp
index 7fd2c4654e00bbc905e002ca8966962ad2285fd5..ac491d9c1e56bc528c9f5692d30586f10e0f8fd4 100644
--- a/src/processor/processor_odom_3d.cpp
+++ b/src/processor/processor_odom_3d.cpp
@@ -21,8 +21,8 @@ ProcessorOdom3d::~ProcessorOdom3d()
 void ProcessorOdom3d::configure(SensorBasePtr _sensor)
 {
     assert (_sensor && "Trying to configure processor with a sensor but provided sensor is nullptr.");
-
-    SensorOdom3dPtr sen_ptr = std::static_pointer_cast<SensorOdom3d>(_sensor);
+    auto sen_ptr = std::dynamic_pointer_cast<SensorOdom3d>(_sensor);
+    assert(sen_ptr != nullptr && "Sensor is not of type SensorOdom3d");
 
     // we steal the parameters from the provided odom3d sensor.
     k_disp_to_disp_ = sen_ptr->getDispVarToDispNoiseFactor();
@@ -151,7 +151,7 @@ void ProcessorOdom3d::deltaPlusDelta(const Eigen::VectorXd& _delta1, const Eigen
 
 void ProcessorOdom3d::statePlusDelta(const Eigen::VectorXd& _x, const Eigen::VectorXd& _delta, const double _Dt,
                                  Eigen::VectorXd& _x_plus_delta) const
-{   
+{
     assert(_x.size() >= x_size_ && "Wrong _x vector size"); //we need a state vector which size is at least x_size_
     assert(_delta.size() == delta_size_ && "Wrong _delta vector size");
     assert(_x_plus_delta.size() >= x_size_ && "Wrong _x_plus_delta vector size");