diff --git a/include/bodydynamics/sensor/sensor_force_torque_inertial.h b/include/bodydynamics/sensor/sensor_force_torque_inertial.h
index 74f4617ad8b937b7d7aa3ece19bc20a872a84888..7b9234cf9e013fb6e04e907c1469351d08fdf048 100644
--- a/include/bodydynamics/sensor/sensor_force_torque_inertial.h
+++ b/include/bodydynamics/sensor/sensor_force_torque_inertial.h
@@ -48,6 +48,11 @@ struct ParamsSensorForceTorqueInertial : public ParamsSensorBase
     Vector3d inertia;
     double   mass;
     bool     imu_bias_fix, com_fix, inertia_fix, mass_fix;
+    bool     set_mass_prior,set_com_prior,set_inertia_prior,set_bias_prior;
+    double   prior_mass_std;
+    Vector3d prior_com_std, prior_inertia_std;
+    Vector6d prior_bias_std;
+
 
     ParamsSensorForceTorqueInertial() = default;
     ParamsSensorForceTorqueInertial(std::string _unique_name, const ParamsServer& _server)
@@ -80,6 +85,33 @@ struct ParamsSensorForceTorqueInertial : public ParamsSensorBase
         com_fix      = _server.getParam<bool>(prefix + _unique_name + "/com_fix");
         inertia_fix  = _server.getParam<bool>(prefix + _unique_name + "/inertia_fix");
         mass_fix     = _server.getParam<bool>(prefix + _unique_name + "/mass_fix");
+
+        // regularization
+        if (_server.hasParam(prefix + _unique_name + "/set_mass_prior"))
+        {
+            set_mass_prior     = _server.getParam<bool>(prefix + _unique_name + "/set_mass_prior");
+            prior_mass_std     = _server.getParam<double>(prefix + _unique_name + "/prior_mass_std");
+        } else
+            set_mass_prior = false;
+        if (_server.hasParam(prefix + _unique_name + "/set_com_prior"))
+        {
+            set_com_prior      = _server.getParam<bool>(prefix + _unique_name + "/set_com_prior");
+            prior_com_std      = _server.getParam<Eigen::Vector3d>(prefix + _unique_name + "/prior_com_std");
+        } else
+            set_com_prior = false;
+        if (_server.hasParam(prefix + _unique_name + "/set_inertia_prior"))
+        {
+            set_inertia_prior  = _server.getParam<bool>(prefix + _unique_name + "/set_inertia_prior");
+            prior_inertia_std  = _server.getParam<Eigen::Vector3d>(prefix + _unique_name + "/prior_inertia_std");
+        } else
+            set_inertia_prior = false;
+        if (_server.hasParam(prefix + _unique_name + "/set_bias_prior"))
+        {
+            set_bias_prior  = _server.getParam<bool>(prefix + _unique_name + "/set_bias_prior");
+            prior_bias_std  = _server.getParam<Eigen::Vector6d>(prefix + _unique_name + "/prior_bias_std");
+        } else
+            set_bias_prior = false;
+
     }
     ~ParamsSensorForceTorqueInertial() override = default;
     std::string print() const override
diff --git a/src/sensor/sensor_force_torque_inertial.cpp b/src/sensor/sensor_force_torque_inertial.cpp
index f07db4cec4b0bee7f8fbcefe17361ba33609c870..ed627f8f07a7691cb49dd79ea89f5b35142ad386 100644
--- a/src/sensor/sensor_force_torque_inertial.cpp
+++ b/src/sensor/sensor_force_torque_inertial.cpp
@@ -53,6 +53,49 @@ SensorForceTorqueInertial::SensorForceTorqueInertial(const VectorXd&
     setStateBlockDynamic('i', false);
     setStateBlockDynamic('m', false);
 
+    // set priors for regularization
+    if(params_fti_->set_mass_prior)
+    {
+        std::cout<<"Setting prior for mass: "<<params_fti_->mass;
+        std::cout<<"\n  With std: "<<params_fti_->prior_mass_std;
+        Vector1d prior_mass;
+        prior_mass<<params_fti_->mass;
+        Matrix1d prior_mass_var;
+        prior_mass_var<<params_fti_->prior_mass_std*params_fti_->prior_mass_std;
+        std::cout<<"\n  With cov:\n"<<prior_mass_var<<"\n";
+        addPriorParameter('m',prior_mass,prior_mass_var);
+        std::cout<<"Done\n";
+    }
+    if(params_fti_->set_com_prior)
+    {
+        std::cout<<"Setting prior for center of mass: "<<params_fti_->com.transpose();
+        std::cout<<"\n  With std: "<<params_fti_->prior_com_std.transpose();
+        Matrix3d prior_com_cov = params_fti_->prior_com_std.array().pow(2).matrix().asDiagonal();
+        std::cout<<"\n  With cov:\n"<<prior_com_cov<<"\n";
+        addPriorParameter('C',params_fti_->com, prior_com_cov);
+        std::cout<<"Done\n";
+    }
+    if(params_fti_->set_inertia_prior)
+    {
+        std::cout<<"Setting prior for inertia: "<<params_fti_->inertia.transpose();
+        Matrix3d prior_inertia_cov = params_fti_->prior_inertia_std.array().pow(2).matrix().asDiagonal();
+        std::cout<<"\n  With std: "<<params_fti_->prior_inertia_std.transpose();
+        std::cout<<"\n  With cov: \n"<<prior_inertia_cov<<"\n";
+        addPriorParameter('i',params_fti_->inertia, prior_inertia_cov);
+        std::cout<<"Done\n";
+    }
+    if(params_fti_->set_bias_prior)
+    {
+        std::cout<<"Setting prior for bias: "<<Vector6d::Zero().transpose();
+        Matrix6d prior_bias_cov = params_fti_->prior_bias_std.array().pow(2).matrix().asDiagonal();
+        std::cout<<"\n  With std: "<<params_fti_->prior_bias_std.transpose();
+        std::cout<<"\n  With cov: \n"<<prior_bias_cov<<"\n";
+        addPriorParameter('I',Vector6d::Zero(), prior_bias_cov);
+        std::cout<<"Done\n";
+    }
+ 
+
+
     VectorXd noise_std_vector(12);
     Vector3d acc_noise_std_vector = Vector3d::Ones() * params_fti_->acc_noise_std; 
     Vector3d gyro_noise_std_vector = Vector3d::Ones() * params_fti_->gyro_noise_std;