diff --git a/include/core/sensor/sensor_base.h b/include/core/sensor/sensor_base.h
index 0fdcac98b7c6c317b29f2a6dd718ae155db6e018..94897853c9d3011d7b847fb7bd47088c9b4dbdee 100644
--- a/include/core/sensor/sensor_base.h
+++ b/include/core/sensor/sensor_base.h
@@ -95,6 +95,14 @@ SensorBasePtr create(const std::string& _unique_name, const Eigen::VectorXd& _ex
 struct ParamsSensorBase: public ParamsBase
 {
     std::string prefix = "sensor/";
+    Eigen::VectorXd noise_std; // std of sensor noise
+    Eigen::MatrixXd noise_cov; // cov matrix of noise
+    ParamsSensorBase(std::string _unique_name, const ParamsServer& _server):
+        ParamsBase(_unique_name, _server)
+    {
+        noise_std = _server.getParam<Eigen::VectorXd>(prefix + _unique_name + "/noise_std");
+        noise_cov = noise_std.array().square().matrix().asDiagonal();
+    }
     ~ParamsSensorBase() override = default;
     using ParamsBase::ParamsBase;
     std::string print() const override
@@ -121,8 +129,7 @@ class SensorBase : public NodeBase, public HasStateBlocks, public std::enable_sh
         std::map<char, FeatureBasePtr> params_prior_map_; // Priors (value and covariance) of extrinsic & intrinsic state blocks (by key in state_block_map_)
 
     protected:
-        Eigen::VectorXd noise_std_; // std of sensor noise
-        Eigen::MatrixXd noise_cov_; // cov matrix of noise
+        ParamsSensorBase params_;
 
         CaptureBasePtr last_capture_; // last capture of the sensor (in the WOLF tree)
 
@@ -336,12 +343,12 @@ inline bool SensorBase::isStateBlockDynamic(const char& _key) const
 
 inline Eigen::VectorXd SensorBase::getNoiseStd() const
 {
-    return noise_std_;
+    return params_.noise_std;
 }
 
 inline Eigen::MatrixXd SensorBase::getNoiseCov() const
 {
-    return noise_cov_;
+    return params_.noise_cov;
 }
 
 inline HardwareBasePtr SensorBase::getHardware() const
diff --git a/include/core/sensor/sensor_odom_2d.h b/include/core/sensor/sensor_odom_2d.h
index a734043ce8a94776831d3ed43819d0c321935e16..8d017da3f40e61bb0896937a4e687fbfba5e7fe0 100644
--- a/include/core/sensor/sensor_odom_2d.h
+++ b/include/core/sensor/sensor_odom_2d.h
@@ -32,26 +32,25 @@ WOLF_STRUCT_PTR_TYPEDEFS(ParamsSensorOdom2d);
 
 struct ParamsSensorOdom2d : public ParamsSensorBase
 {
-        ~ParamsSensorOdom2d() override = default;
 
         double k_disp_to_disp; ///< ratio of displacement variance to displacement, for odometry noise calculation
         double k_rot_to_rot; ///< ratio of rotation variance to rotation, for odometry noise calculation
-    ParamsSensorOdom2d()
-    {
-        //DEFINED FOR COMPATIBILITY PURPOSES. TO BE REMOVED IN THE FUTURE.
-    }
-    ParamsSensorOdom2d(std::string _unique_name, const ParamsServer& _server):
-        ParamsSensorBase(_unique_name, _server)
-    {
-        k_disp_to_disp = _server.getParam<double>(prefix + _unique_name + "/k_disp_to_disp");
-        k_rot_to_rot   = _server.getParam<double>(prefix + _unique_name + "/k_rot_to_rot");
-    }
-    std::string print() const override
-    {
-        return ParamsSensorBase::print()                               + "\n"
-                + "k_disp_to_disp: "    + std::to_string(k_disp_to_disp)    + "\n"
-                + "k_rot_to_rot: "      + std::to_string(k_rot_to_rot)      + "\n";
-    }
+
+        ParamsSensorOdom2d() = default;
+
+        ParamsSensorOdom2d(std::string _unique_name, const ParamsServer& _server):
+            ParamsSensorBase(_unique_name, _server)
+        {
+            k_disp_to_disp = _server.getParam<double>(prefix + _unique_name + "/k_disp_to_disp");
+            k_rot_to_rot   = _server.getParam<double>(prefix + _unique_name + "/k_rot_to_rot");
+        }
+        ~ParamsSensorOdom2d() override = default;
+        std::string print() const override
+        {
+            return ParamsSensorBase::print()                               + "\n"
+                    + "k_disp_to_disp: "    + std::to_string(k_disp_to_disp)    + "\n"
+                    + "k_rot_to_rot: "      + std::to_string(k_rot_to_rot)      + "\n";
+        }
 };
 
 WOLF_PTR_TYPEDEFS(SensorOdom2d);
diff --git a/include/core/sensor/sensor_odom_3d.h b/include/core/sensor/sensor_odom_3d.h
index 2b94194e2e1cb37fe33a34008d0647e7130e43c9..cc1c13f873f31e3781104dc249d3409b2c3470a2 100644
--- a/include/core/sensor/sensor_odom_3d.h
+++ b/include/core/sensor/sensor_odom_3d.h
@@ -44,10 +44,8 @@ struct ParamsSensorOdom3d : public ParamsSensorBase
         double k_rot_to_rot; ///< ratio of rotation variance to rotation, for odometry noise calculation
         double min_disp_var;
         double min_rot_var;
-    ParamsSensorOdom3d()
-    {
-        //DEFINED FOR COMPATIBILITY PURPOSES. TO BE REMOVED IN THE FUTURE.
-    }
+    ParamsSensorOdom3d() = default;
+
     ParamsSensorOdom3d(std::string _unique_name, const ParamsServer& _server):
         ParamsSensorBase(_unique_name, _server)
     {
diff --git a/include/core/sensor/sensor_pose.h b/include/core/sensor/sensor_pose.h
index e653fe458d39107c143da729a006c727df3959e3..e9b853e81bd6452c16d60fd24c633bc807701781 100644
--- a/include/core/sensor/sensor_pose.h
+++ b/include/core/sensor/sensor_pose.h
@@ -41,10 +41,8 @@ struct ParamsSensorPose : public ParamsSensorBase
 {
     double std_p = 1;  // m
     double std_o = 1;  // rad
-    ParamsSensorPose()
-    {
-        //DEFINED FOR COMPATIBILITY PURPOSES. TO BE REMOVED IN THE FUTURE.
-    }
+    ParamsSensorPose() = default;
+
     ParamsSensorPose(std::string _unique_name, const ParamsServer& _server):
         ParamsSensorBase(_unique_name, _server)
     {
diff --git a/src/sensor/sensor_base.cpp b/src/sensor/sensor_base.cpp
index 0e649ec5cce5c11ca522c21bab70c67855922839..3d2453078416f8506039e796aa65819a4be1b5a1 100644
--- a/src/sensor/sensor_base.cpp
+++ b/src/sensor/sensor_base.cpp
@@ -42,16 +42,14 @@ SensorBase::SensorBase(const std::string& _type,
         HasStateBlocks(""),
         hardware_ptr_(),
         sensor_id_(++sensor_id_count_), // simple ID factory
-        noise_std_(_noise_size),
-        noise_cov_(_noise_size, _noise_size),
         last_capture_(nullptr)
 {
     assert((_p_ptr or not _p_dyn) and "Trying to set dynamic position state block without providing a position state block. It is required anyway.");
     assert((_o_ptr or not _o_dyn) and "Trying to set dynamic orientation state block without providing an orientation state block. It is required anyway.");
     assert((_intr_ptr or not _intr_dyn) and "Trying to set dynamic intrinsics state block without providing an intrinsics state block. It is required anyway.");
 
-    noise_std_.setZero();
-    noise_cov_.setZero();
+    params_.noise_std.setZero(_noise_size);
+    params_.noise_cov.setZero(_noise_size,_noise_size);
 
     if (_p_ptr)
         addStateBlock('P', _p_ptr, _p_dyn);
@@ -76,8 +74,6 @@ SensorBase::SensorBase(const std::string& _type,
         HasStateBlocks(""),
         hardware_ptr_(),
         sensor_id_(++sensor_id_count_), // simple ID factory
-        noise_std_(_noise_std),
-        noise_cov_(_noise_std.size(), _noise_std.size()),
         last_capture_(nullptr)
 {
     setNoiseStd(_noise_std);
@@ -219,13 +215,13 @@ void SensorBase::registerNewStateBlocks() const
 }
 
 void SensorBase::setNoiseStd(const Eigen::VectorXd& _noise_std) {
-    noise_std_ = _noise_std;
-    noise_cov_ = _noise_std.array().square().matrix().asDiagonal();
+    params_.noise_std = _noise_std;
+    params_.noise_cov = _noise_std.array().square().matrix().asDiagonal();
 }
 
 void SensorBase::setNoiseCov(const Eigen::MatrixXd& _noise_cov) {
-    noise_std_ = _noise_cov.diagonal().array().sqrt();
-    noise_cov_ = _noise_cov;
+    params_.noise_std = _noise_cov.diagonal().array().sqrt();
+    params_.noise_cov = _noise_cov;
 }
 
 void SensorBase::setLastCapture(CaptureBasePtr cap)
diff --git a/src/sensor/sensor_odom_3d.cpp b/src/sensor/sensor_odom_3d.cpp
index b44561ff402bef4971b211cfa2eae43724457fc3..09d90d753440edb5e34e7c698906c112adae8387 100644
--- a/src/sensor/sensor_odom_3d.cpp
+++ b/src/sensor/sensor_odom_3d.cpp
@@ -44,8 +44,8 @@ SensorOdom3d::SensorOdom3d(const Eigen::VectorXd& _extrinsics_pq, const ParamsSe
 {
     assert(_extrinsics_pq.size() == 7 && "Bad extrinsics vector size! Should be 7 for 3d.");
 
-    noise_cov_ = (Eigen::Vector6d() << min_disp_var_, min_disp_var_, min_disp_var_, min_rot_var_, min_rot_var_, min_rot_var_).finished().asDiagonal();
-    setNoiseCov(noise_cov_); // sets also noise_std_
+    Matrix6d noise_cov = (Eigen::Vector6d() << min_disp_var_, min_disp_var_, min_disp_var_, min_rot_var_, min_rot_var_, min_rot_var_).finished().asDiagonal();
+    setNoiseCov(noise_cov); // sets also noise_std_
 }
 
 SensorOdom3d::SensorOdom3d(const Eigen::VectorXd& _extrinsics_pq, ParamsSensorOdom3dPtr _intrinsics) :
diff --git a/src/sensor/sensor_pose.cpp b/src/sensor/sensor_pose.cpp
index 87f2880b8f3e58e1898470572e630375bd792d8c..fcb765c4363eef3d9a294bbec642298e275cbe06 100644
--- a/src/sensor/sensor_pose.cpp
+++ b/src/sensor/sensor_pose.cpp
@@ -41,8 +41,8 @@ SensorPose::SensorPose(const Eigen::VectorXd& _extrinsics_pq, const ParamsSensor
 {
     assert(_extrinsics_pq.size() == 7 && "Bad extrinsics vector size! Should be 7 for 3d.");
 
-    noise_cov_ = (Eigen::Vector6d() << std_p_*std_p_, std_p_*std_p_, std_p_*std_p_, std_o_*std_o_, std_o_*std_o_, std_o_*std_o_).finished().asDiagonal();
-    setNoiseCov(noise_cov_); // sets also noise_std_
+    Vector6d noise_std = (Eigen::Vector6d() << std_p_, std_p_, std_p_, std_o_, std_o_, std_o_).finished();
+    setNoiseStd(noise_std); // sets also noise_cov_
 }
 
 SensorPose::SensorPose(const Eigen::VectorXd& _extrinsics_pq, ParamsSensorPosePtr _intrinsics) :