diff --git a/include/core/capture/capture_base.h b/include/core/capture/capture_base.h
index 99dc9a25ec2875115901eabf2cfe9b39fc42890d..5b8cc7863c15b35143be567e5298b4732871ad32 100644
--- a/include/core/capture/capture_base.h
+++ b/include/core/capture/capture_base.h
@@ -95,7 +95,7 @@ class CaptureBase : public NodeBase, public HasStateBlocks, public std::enable_s
 
         bool hasCalibration() {return calib_size_ > 0;}
         SizeEigen getCalibSize() const;
-        virtual Eigen::VectorXd getCalibration() const;
+        virtual VectorComposite getCalibration() const;
         void setCalibration(const Eigen::VectorXd& _calib);
         void move(FrameBasePtr);
         void link(FrameBasePtr);
diff --git a/include/core/processor/processor_motion.h b/include/core/processor/processor_motion.h
index 0ca665a661a83409d17540f8caa94a5dfd1b5603..7a4e2af97aedf58f7fa829ddcdde65ad3d73a46f 100644
--- a/include/core/processor/processor_motion.h
+++ b/include/core/processor/processor_motion.h
@@ -544,16 +544,18 @@ inline bool ProcessorMotion::voteForKeyFrame() const
 
 inline void ProcessorMotion::getCurrentState(Eigen::VectorXd& _x) const
 {
+    // TODO REMOVE function
     // ensure integrity
     assert(origin_ptr_ && "Trying to access origin_ptr_ but it is nullptr!");
 
-    // ensure proper size of the provided reference
-    Eigen::VectorXd curr_x = origin_ptr_->getFrame()->getState(state_structure_);
-    _x.resize( curr_x.size() );
+    Eigen::VectorXd x_origin = origin_ptr_->getFrame()->getState();
 
-    // do get timestamp and state corrected by possible self-calibrations
-    double Dt = getCurrentTimeStamp() - origin_ptr_->getTimeStamp();
-    statePlusDelta(curr_x, last_ptr_->getDeltaCorrected(origin_ptr_->getCalibration()), Dt, _x);
+//    // do get timestamp and state corrected by possible self-calibrations
+//    double Dt = getCurrentTimeStamp() - origin_ptr_->getTimeStamp();
+//    statePlusDelta(x_origin, last_ptr_->getDeltaCorrected(origin_ptr_->getCalibration()), Dt, _x);
+
+    // let it compile
+    _x = x_origin;
 }
 
 inline const MatrixComposite ProcessorMotion::getCurrentDeltaPreintCov() const
@@ -591,16 +593,17 @@ inline MotionBuffer& ProcessorMotion::getBuffer()
 
 inline Motion ProcessorMotion::motionZero(const TimeStamp& _ts) const
 {
+    // TODO check this code
     return Motion(_ts,
                   VectorXd::Zero(data_size_), // data
                   Eigen::MatrixXd::Zero(data_size_, data_size_), // Cov data
                   deltaZero(),
-                  Eigen::MatrixXd::Zero(delta_cov_size_, delta_cov_size_), // Cov delta
+                  MatrixComposite(), // Cov delta
                   deltaZero(),
-                  Eigen::MatrixXd::Zero(delta_cov_size_, delta_cov_size_), // Cov delta_integr
-                  Eigen::MatrixXd::Zero(delta_cov_size_, delta_cov_size_), // Jac delta
-                  Eigen::MatrixXd::Zero(delta_cov_size_, delta_cov_size_), // Jac delta_integr
-                  Eigen::MatrixXd::Zero(delta_cov_size_, calib_size_)      // Jac calib
+                  MatrixComposite(), // Cov delta_integr
+                  MatrixComposite(), // Jac delta
+                  MatrixComposite(), // Jac delta_integr
+                  MatrixComposite()      // Jac calib
     );
 }
 
diff --git a/include/core/processor/processor_odom_2d.h b/include/core/processor/processor_odom_2d.h
index b03416837ec1b0a6a86a67ff0cf40fdf820b1370..e768e6ff0e95a7251ffbb1d9e635a292bd315315 100644
--- a/include/core/processor/processor_odom_2d.h
+++ b/include/core/processor/processor_odom_2d.h
@@ -52,26 +52,26 @@ class ProcessorOdom2d : public ProcessorMotion
     protected:
         virtual void computeCurrentDelta(const Eigen::VectorXd& _data,
                                          const Eigen::MatrixXd& _data_cov,
-                                         const Eigen::VectorXd& _calib,
+                                         const VectorComposite& _calib,
                                          const double _dt,
-                                         Eigen::VectorXd& _delta,
-                                         Eigen::MatrixXd& _delta_cov,
-                                         Eigen::MatrixXd& _jacobian_calib) const override;
-        virtual void deltaPlusDelta(const Eigen::VectorXd& _delta1,
-                                    const Eigen::VectorXd& _delta2,
+                                         Eigen::VectorComposite& _delta,
+                                         MatrixComposite& _delta_cov,
+                                         MatrixComposite& _jacobian_calib) const override;
+        virtual void deltaPlusDelta(const VectorComposite& _delta1,
+                                    const VectorComposite& _delta2,
                                     const double _Dt2,
-                                    Eigen::VectorXd& _delta1_plus_delta2) const override;
-        virtual void deltaPlusDelta(const Eigen::VectorXd& _delta1,
-                                    const Eigen::VectorXd& _delta2,
+                                    VectorComposite& _delta1_plus_delta2) const override;
+        virtual void deltaPlusDelta(const VectorComposite& _delta1,
+                                    const VectorComposite& _delta2,
                                     const double _Dt2,
-                                    Eigen::VectorXd& _delta1_plus_delta2,
-                                    Eigen::MatrixXd& _jacobian1,
-                                    Eigen::MatrixXd& _jacobian2) const override;
-        virtual void statePlusDelta(const Eigen::VectorXd& _x,
-                                    const Eigen::VectorXd& _delta,
+                                    VectorComposite& _delta1_plus_delta2,
+                                    MatrixComposite& _jacobian1,
+                                    MatrixComposite& _jacobian2) const override;
+        virtual void statePlusDelta(const VectorComposite& _x,
+                                    const VectorComposite& _delta,
                                     const double _Dt,
-                                    Eigen::VectorXd& _x_plus_delta) const override;
-        virtual Eigen::VectorXd deltaZero() const override;
+                                    VectorComposite& _x_plus_delta) const override;
+        virtual VectorComposite deltaZero() const override;
 
         virtual CaptureMotionPtr emplaceCapture(const FrameBasePtr& _frame_own,
                                                 const SensorBasePtr& _sensor,
diff --git a/include/core/state_block/state_composite.h b/include/core/state_block/state_composite.h
index 1b506aeaeb3498eeaf1b46293589f7364dc5aea9..631b3b18119ddcefc9761fd31a041df4e3ee6478 100644
--- a/include/core/state_block/state_composite.h
+++ b/include/core/state_block/state_composite.h
@@ -33,14 +33,17 @@ namespace Eigen
 {
 std::ostream& operator <<(std::ostream &_os, const wolf::VectorComposite &_x);
 
-wolf::VectorComposite& operator + (wolf::VectorComposite& _v1, const wolf::VectorComposite& _v2);
-wolf::VectorComposite operator + (const wolf::VectorComposite& _v1, const wolf::VectorComposite& _v2);
-wolf::VectorComposite& operator - (wolf::VectorComposite& _v1, const wolf::VectorComposite& _v2);
-wolf::VectorComposite operator - (const wolf::VectorComposite& _v1, const wolf::VectorComposite& _v2);
 }
 
 namespace wolf{
 
+VectorComposite& operator + (      VectorComposite& _v1, const VectorComposite& _v2);
+VectorComposite  operator + (const VectorComposite& _v1, const VectorComposite& _v2);
+VectorComposite& operator - (      VectorComposite& _v1, const VectorComposite& _v2);
+VectorComposite  operator - (const VectorComposite& _v1, const VectorComposite& _v2);
+
+Eigen::VectorXd toVector(const VectorComposite& _v, const StateStructure& _s);
+
 class StateBlockComposite
 {
     public:
diff --git a/src/capture/capture_base.cpp b/src/capture/capture_base.cpp
index 949bf1740e13096a5ceafc2bb301a7f39d061fc4..ed4271be7c63622d634193b8bbbd4291ec5374c2 100644
--- a/src/capture/capture_base.cpp
+++ b/src/capture/capture_base.cpp
@@ -191,19 +191,43 @@ SizeEigen CaptureBase::computeCalibSize() const
     return sz;
 }
 
-Eigen::VectorXd CaptureBase::getCalibration() const
+VectorComposite CaptureBase::getCalibration() const
 {
-    Eigen::VectorXd calib(calib_size_);
-    SizeEigen index = 0;
-    for (const auto& key : getStructure())
+    VectorComposite calib;
+
+    // gather unfixed state blocks from capture, then from sensor
+    for (const auto& pair_key_sb : getStateBlockMap())
     {
-        auto sb = getStateBlock(key);
-        if (sb && !sb->isFixed())
+        const auto& key = pair_key_sb.first;
+        const auto& sb  = pair_key_sb.second;
+        if (not sb->isFixed())
+            calib.emplace(key, sb->getState());
+    }
+
+    // gather unfixed state blocks from sensor that were not in capture
+    for (const auto& pair_key_sb : getSensor()->getStateBlockMap())
+    {
+        const auto& key = pair_key_sb.first;
+        if (calib.count(key) == 0)
         {
-            calib.segment(index, sb->getSize()) = sb->getState();
-            index += sb->getSize();
+            const auto& sb = pair_key_sb.second;
+            // const auto& sb  = getSensor()->getStateBlockDynamic(key);
+            if (not sb->isFixed())
+                calib.emplace(key, sb->getState());
         }
     }
+
+////    SizeEigen index = 0;
+//    for (const auto& key : getStructure())
+//    {
+//        auto sb = getStateBlock(key);
+//        if (sb && !sb->isFixed())
+//        {
+//            calib.segment(index, sb->getSize()) = sb->getState();
+//            index += sb->getSize();
+//        }
+//    }
+
     return calib;
 }
 
diff --git a/src/processor/processor_motion.cpp b/src/processor/processor_motion.cpp
index b31ae1e1b94dd7a33684684986c844fc0d09dc9f..2ca33d8d1a6844cec2097ca1b2f50ce07e284dae 100644
--- a/src/processor/processor_motion.cpp
+++ b/src/processor/processor_motion.cpp
@@ -25,24 +25,24 @@ ProcessorMotion::ProcessorMotion(const std::string& _type,
         ProcessorBase(_type, _dim, _params_motion),
         params_motion_(_params_motion),
         processing_step_(RUNNING_WITHOUT_PACK),
-        x_size_(_state_size),
+        x_size_(),
         data_size_(_data_size),
-        delta_size_(_delta_size),
-        delta_cov_size_(_delta_cov_size),
-        calib_size_(_calib_size),
+        delta_size_(),
+        delta_cov_size_(),
+        calib_size_(),
         origin_ptr_(),
         last_ptr_(),
         incoming_ptr_(),
         dt_(0.0), 
-        x_(_state_size),
-        delta_(_delta_size),
-        delta_cov_(_delta_cov_size, _delta_cov_size),
-        delta_integrated_(_delta_size),
-        delta_integrated_cov_(_delta_cov_size, _delta_cov_size),
-        calib_preint_(_calib_size),
-        jacobian_delta_preint_(delta_cov_size_, delta_cov_size_),
-        jacobian_delta_(delta_cov_size_, delta_cov_size_),
-        jacobian_calib_(delta_cov_size_, calib_size_)
+        x_(),
+        delta_(),
+        delta_cov_(),
+        delta_integrated_(),
+        delta_integrated_cov_(),
+        calib_preint_(),
+        jacobian_delta_preint_(),
+        jacobian_delta_(),
+        jacobian_calib_()
 {   
     setStateStructure(_state_structure);
     //
@@ -70,7 +70,7 @@ void ProcessorMotion::splitBuffer(const wolf::CaptureMotionPtr& _capture_source,
     _capture_source->setOriginCapture(_capture_target);
 
     // Get optimized calibration params from 'origin' keyframe
-    VectorXd calib_preint_optim = _capture_source->getOriginCapture()->getCalibration();
+    VectorComposite calib_preint_optim = _capture_source->getOriginCapture()->getCalibration();
 
     // Write the calib params into the capture before re-integration
     _capture_source->setCalibrationPreint(calib_preint_optim);
@@ -150,7 +150,7 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr)
             auto capture_origin     = capture_existing->getOriginCapture();
 
             // Get calibration params for preintegration from origin, since it has chances to have optimized values
-            VectorXd calib_origin   = capture_origin->getCalibration();
+            VectorComposite calib_origin   = capture_origin->getCalibration();
 
             // emplace a new motion capture to the new keyframe
             TimeStamp ts_from_callback          = keyframe_from_callback->getTimeStamp();
diff --git a/src/state_block/state_composite.cpp b/src/state_block/state_composite.cpp
index e8e0ec769f1810bb4870fe508a708f314adad2ba..e3615683dd04e245fef6b15ede59ead685699bf7 100644
--- a/src/state_block/state_composite.cpp
+++ b/src/state_block/state_composite.cpp
@@ -16,6 +16,11 @@ std::ostream& operator <<(std::ostream &_os, const wolf::VectorComposite &_x)
     return _os;
 }
 
+}
+
+namespace wolf
+{
+
 wolf::VectorComposite& operator + (wolf::VectorComposite& _v1, const wolf::VectorComposite& _v2)
 {
     wolf::VectorComposite v;
@@ -68,10 +73,21 @@ wolf::VectorComposite operator - (const wolf::VectorComposite& _v1, const wolf::
     return v;
 }
 
+Eigen::VectorXd toVector(const VectorComposite &_v, const StateStructure &_s)
+{
+    Eigen::VectorXd x;
+    unsigned int index = 0;
+    unsigned int size = 0;
+    for (const auto& ckey : _s)
+    {
+        const auto key = std::string(1, ckey); // ckey is char
+        const auto& v = _v.at(key);
+        size =      v.size();
+        x.segment(index, size) = v;
+    }
+    return x;
 }
 
-namespace wolf
-{
 
 bool MatrixComposite::emplace(const std::string &_row, const std::string &_col, const Eigen::MatrixXd &_mat_blk)
 {