diff --git a/include/core/sensor/sensor_diff_drive.h b/include/core/sensor/sensor_diff_drive.h
index 96af457291dbbbdf6737a5f13d7544e5091611bf..28d082a23d9cb303a9073ef8484dd558df2d8161 100644
--- a/include/core/sensor/sensor_diff_drive.h
+++ b/include/core/sensor/sensor_diff_drive.h
@@ -17,20 +17,24 @@ WOLF_STRUCT_PTR_TYPEDEFS(IntrinsicsDiffDrive);
 
 struct IntrinsicsDiffDrive : public IntrinsicsBase
 {
-        double radius_left;
-        double radius_right;
-        double wheel_separation;
-        double ticks_per_wheel_revolution;
+    double          radius_left;
+    double          radius_right;
+    double          wheel_separation;
+    double          ticks_per_wheel_revolution;
+    bool            set_intrinsics_prior;
+    Eigen::Vector3d prior_cov_diag;
+
+    IntrinsicsDiffDrive() = default;
+    IntrinsicsDiffDrive(std::string _unique_name, const wolf::ParamsServer& _server)
+      : IntrinsicsBase(_unique_name, _server)
+    {
+        radius_left                = _server.getParam<double>(prefix + _unique_name + "/radius_left");
+        radius_right               = _server.getParam<double>(prefix + _unique_name + "/radius_right");
+        wheel_separation           = _server.getParam<double>(prefix + _unique_name + "/wheel_separation");
+        ticks_per_wheel_revolution = _server.getParam<double>(prefix + _unique_name + "/ticks_per_wheel_revolution");
+        set_intrinsics_prior       = _server.getParam<bool>(prefix + _unique_name + "/set_intrinsics_prior");
+        prior_cov_diag             = _server.getParam<Eigen::Vector3d>(prefix + _unique_name + "/prior_cov_diag");
 
-
-        IntrinsicsDiffDrive() = default;
-        IntrinsicsDiffDrive(std::string _unique_name, const wolf::ParamsServer & _server) :
-            IntrinsicsBase(_unique_name, _server)
-        {
-            radius_left                 = _server.getParam<double>(prefix + _unique_name + "/radius_left");
-            radius_right                = _server.getParam<double>(prefix + _unique_name + "/radius_right");
-            wheel_separation            = _server.getParam<double>(prefix + _unique_name + "/wheel_separation");
-            ticks_per_wheel_revolution  = _server.getParam<double>(prefix + _unique_name + "/ticks_per_wheel_revolution");
         }
         std::string print() const
         {
@@ -38,7 +42,9 @@ struct IntrinsicsDiffDrive : public IntrinsicsBase
             + "radius_left: "                   + std::to_string(radius_left)               + "\n"
             + "radius_right: "                  + std::to_string(radius_right)              + "\n"
             + "wheel_separation: "              + std::to_string(wheel_separation)          + "\n"
-            + "ticks_per_wheel_revolution: "    + std::to_string(ticks_per_wheel_revolution)+ "\n";
+            + "ticks_per_wheel_revolution: "    + std::to_string(ticks_per_wheel_revolution)+ "\n"
+            + "set_intrinsics_prior: "          + std::to_string(set_intrinsics_prior)      + "\n"
+            + "prior_cov_diag:  to_string not implemented yet! \n";
         }
 
 };
diff --git a/src/sensor/sensor_diff_drive.cpp b/src/sensor/sensor_diff_drive.cpp
index ace8ba8f0e86e77c5488a2566d63c12f90565c5c..5b85000eca793039df8dc5b09b327f951440b0d7 100644
--- a/src/sensor/sensor_diff_drive.cpp
+++ b/src/sensor/sensor_diff_drive.cpp
@@ -22,6 +22,21 @@ SensorDiffDrive::SensorDiffDrive(const Eigen::VectorXd& _extrinsics,
     radians_per_tick = 2.0*M_PI / params_diff_drive_->ticks_per_wheel_revolution;
     getIntrinsic()->setState(Eigen::Vector3d(_intrinsics->radius_left,_intrinsics->radius_right,_intrinsics->wheel_separation));
     unfixIntrinsics();
+    std::cout << "Prior cov diag " << params_diff_drive_->prior_cov_diag.transpose() << std::endl;
+    if(params_diff_drive_->set_intrinsics_prior)
+        addPriorIntrinsics(getIntrinsic()->getState(), params_diff_drive_->prior_cov_diag.asDiagonal());
+
+    // compute noise covariance
+    // 1. measured wheel revolutions: sigma = 2*radians_per_tick
+    double sigma_rev = 2*radians_per_tick;
+    Eigen::Vector2d noise_sigma; noise_sigma << sigma_rev, sigma_rev;
+
+//    // 2. unmeasured lateral wheel slippage: sigma = 1mm
+//    double sigma_slippage = 0.001;
+//    Eigen::Vector3d noise_sigma; noise_sigma << sigma_rev, sigma_rev, sigma_slippage;
+
+    setNoiseStd(noise_sigma);
+   
 }
 
 SensorDiffDrive::~SensorDiffDrive()