diff --git a/demos/hello_wolf/hello_wolf.cpp b/demos/hello_wolf/hello_wolf.cpp
index dce04f5eff7d55bf2726075b07064a666af51f5f..e51f7a33658bf1c3afb9f2d20e8118825886ebf6 100644
--- a/demos/hello_wolf/hello_wolf.cpp
+++ b/demos/hello_wolf/hello_wolf.cpp
@@ -139,8 +139,10 @@ int main()
 
     // initialize
     TimeStamp   t(0.0);                          // t : 0.0
-    Vector3d    x(0,0,0);
-    Matrix3d    P = Matrix3d::Identity() * 0.1;
+    // Vector3d    x(0,0,0);
+    VectorComposite x(Vector3d(0,0,0), "PO", {2,1});
+    // Matrix3d    P = Matrix3d::Identity() * 0.1;
+    VectorComposite P(Vector3d(sqrt(0.1),sqrt(0.1),sqrt(0.1)), "PO", {2,1});
     FrameBasePtr KF1 = problem->setPriorFactor(x, P, t, 0.5);             // KF1 : (0,0,0)
     std::static_pointer_cast<ProcessorMotion>(processor)->setOrigin(KF1);
 
diff --git a/test/gtest_factor_block_difference.cpp b/test/gtest_factor_block_difference.cpp
index fa1e25a62820e0d7979de789b9dfcde17f3a07a6..985f05da3a869bc1d4b9c122643dc41b78ec65f5 100644
--- a/test/gtest_factor_block_difference.cpp
+++ b/test/gtest_factor_block_difference.cpp
@@ -48,8 +48,10 @@ class FixtureFactorBlockDifference : public testing::Test
             TimeStamp t0(0);
             TimeStamp t1(1);
 
-            Vector10d x_origin = problem_->stateZero().vector("POV");
-            Eigen::Matrix9d cov_prior = 1e-3 * Eigen::Matrix9d::Identity(); 
+            // Vector10d x_origin = problem_->stateZero().vector("POV");
+            VectorComposite x_origin(problem_->stateZero().vector("POV"), "POV", {3, 4, 3});
+            // Eigen::Matrix9d cov_prior = 1e-3 * Eigen::Matrix9d::Identity();
+            VectorComposite cov_prior(Vector3d(sqrt(0.1),sqrt(0.1),sqrt(0.1)), "POV", {1,1,1});
             KF0_ = problem_->setPriorFactor(x_origin, cov_prior, t0, 0.1);
             
             //CaptureBasePtr capV0 = CaptureBase::emplace<CaptureBase>(KF0_, "Vel0", t0);
diff --git a/test/gtest_factor_diff_drive.cpp b/test/gtest_factor_diff_drive.cpp
index 7aab9e5cef754bd1b9942ba5ee37c0d76e684634..8e97b7f177ef034f94e18c881c94630fcff96668 100644
--- a/test/gtest_factor_diff_drive.cpp
+++ b/test/gtest_factor_diff_drive.cpp
@@ -440,10 +440,11 @@ TEST(FactorDiffDrive, preintegrate_and_solve_sensor_intrinsics_gt)
 
     TimeStamp t(0.0);
     double dt = 1.0;
-    Vector3d x0(0,0,0);
+    VectorComposite x0(Vector3d(0,0,0), "PO", {2,1});
     Vector3d x1(1.5, -1.5, -M_PI/2.0);
     Vector3d x2(3.0, -3.0, 0.0);
-    Matrix3d P0; P0.setIdentity();
+    // Matrix3d P0; P0.setIdentity();
+    VectorComposite P0(Vector3d(0,0,0), "PO", {2,1});
 
     // set prior at t=0 and processor origin
     auto F0 = problem->setPriorFactor(x0, P0, t, 0.1);
@@ -572,10 +573,12 @@ TEST(FactorDiffDrive, preintegrate_and_solve_sensor_intrinsics)
 
     TimeStamp t(0.0);
     double dt = 1.0;
-    Vector3d x0(0,0,0);
+    // Vector3d x0(0,0,0);
+    VectorComposite x0(Vector3d(0,0,0), "PO", {2,1});
     Vector3d x1(1.5, -1.5, -M_PI/2.0);
     Vector3d x2(3.0, -3.0, 0.0);
-    Matrix3d P0; P0.setIdentity();
+    // Matrix3d P0; P0.setIdentity();
+    VectorComposite P0(Vector3d(1,1,1), "PO", {2,1});
 
     // set prior at t=0 and processor origin
     auto F0 = problem->setPriorFactor(x0, P0, t, 0.1);
diff --git a/test/gtest_odom_2d.cpp b/test/gtest_odom_2d.cpp
index cdf8a749bbd57846a9c200bb81c771ef3fca9d19..1afb7c474602426e4ba1a3ead594d7c1d7e73468 100644
--- a/test/gtest_odom_2d.cpp
+++ b/test/gtest_odom_2d.cpp
@@ -119,8 +119,8 @@ TEST(Odom2d, FactorFix_and_FactorOdom2d)
 
     TimeStamp t0(0.0),  t = t0;
     double              dt = .01;
-    Vector3d            x0   (0,0,0);
-    Eigen::Matrix3d     P0 = Eigen::Matrix3d::Identity() * 0.1;
+    VectorComposite x0(Vector3d(0,0,0), "PO", {2,1});
+    VectorComposite P0(Vector3d(0.1,0.1,0.1), "PO", {2,1});
     Vector3d            delta (2,0,0);
     Matrix3d delta_cov; delta_cov << .02, 0, 0, 0, .025, .02, 0, .02, .02;
 
@@ -187,8 +187,10 @@ TEST(Odom2d, VoteForKfAndSolve)
     TimeStamp t0(0.0), t = t0;
     double dt = .01;
     // Origin frame:
-    Vector3d x0(0,0,0);
-    Eigen::Matrix3d P0 = Eigen::Matrix3d::Identity() * 0.1;
+    // Vector3d x0(0,0,0);
+    VectorComposite x0(Vector3d(0,0,0), "PO", {2,1});
+    // Eigen::Matrix3d P0 = Eigen::Matrix3d::Identity() * 0.1;
+    VectorComposite P0(Vector3d(sqrt(0.1),sqrt(0.1),sqrt(0.1)), "PO", {2,1});
     // motion data
     VectorXd data(Vector2d(1, M_PI_4) ); // advance 1m turn pi/4 rad (45 deg). Need 8 steps for a complete turn
     Eigen::MatrixXd data_cov = Eigen::MatrixXd::Identity(2, 2) * 0.01;
@@ -229,8 +231,8 @@ TEST(Odom2d, VoteForKfAndSolve)
     //    std::cout << "Motion data  : " << data.transpose() << std::endl;
 
     // Check covariance values
-    Eigen::Vector3d integrated_pose      = x0;
-    Eigen::Matrix3d integrated_cov       = P0;
+    Eigen::Vector3d integrated_pose      = Vector3d(0,0,0);
+    Eigen::Matrix3d integrated_cov       = Eigen::Matrix3d::Identity() * 0.1;
     Eigen::Vector3d integrated_delta     = Eigen::Vector3d::Zero();
     Eigen::Matrix3d integrated_delta_cov = Eigen::Matrix3d::Zero();
     Eigen::MatrixXd Ju(3, 2);
@@ -325,8 +327,8 @@ TEST(Odom2d, KF_callback)
     // time
     TimeStamp t0(0.0), t = t0;
     double dt = .01;
-    Vector3d x0(0,0,0);
-    Eigen::Matrix3d x0_cov = Eigen::Matrix3d::Identity() * 0.1;
+    VectorComposite x0(Vector3d(0,0,0), "PO", {2,1});
+    VectorComposite x0_cov(Vector3d(0.1,0.1,0.1), "PO", {2,1});
     VectorXd data(Vector2d(1, M_PI/4) ); // advance 1m
     Eigen::MatrixXd data_cov = Eigen::MatrixXd::Identity(2, 2) * 0.01;
     int N = 8; // number of process() steps
@@ -362,8 +364,8 @@ TEST(Odom2d, KF_callback)
     processor_odom2d->setOrigin(keyframe_0);
 
     // Check covariance values
-    Eigen::Vector3d integrated_pose = x0;
-    Eigen::Matrix3d integrated_cov = x0_cov;
+    Eigen::Vector3d integrated_pose      = Vector3d(0,0,0);
+    Eigen::Matrix3d integrated_cov       = Eigen::Matrix3d::Identity() * 0.1;
     Eigen::Vector3d integrated_delta = Eigen::Vector3d::Zero();
     Eigen::Matrix3d integrated_delta_cov = Eigen::Matrix3d::Zero();
     Eigen::MatrixXd Ju(3, 2);
diff --git a/test/gtest_problem.cpp b/test/gtest_problem.cpp
index 26219e7a0f6e034983de50ac8ec53d8cb075823a..f2eef1fbe81a6599c5a373d2b17de7cd1b5158ef 100644
--- a/test/gtest_problem.cpp
+++ b/test/gtest_problem.cpp
@@ -106,8 +106,10 @@ TEST(Problem, SetOrigin_PO_2d)
 {
     ProblemPtr P = Problem::create("PO", 2);
     TimeStamp       t0(0);
-    Eigen::VectorXd x0(3); x0 << 1,2,3;
-    Eigen::MatrixXd P0(Eigen::MatrixXd::Identity(3,3) * 0.1); // P0 is 0.1*Id
+    // Eigen::VectorXd x0(3); x0 << 1,2,3;
+    VectorComposite x0(Vector3d(1,2,3), "PO", {2,1});
+    // Eigen::MatrixXd P0(Eigen::MatrixXd::Identity(3,3) * 0.1); // P0 is 0.1*Id
+    VectorComposite P0(Vector3d(sqrt(0.1),sqrt(0.1),sqrt(0.1)), "PO", {2,1});
 
     P->setPriorFactor(x0, P0, t0, 1.0);
 
@@ -159,8 +161,11 @@ TEST(Problem, SetOrigin_PO_3d)
 {
     ProblemPtr P = Problem::create("PO", 3);
     TimeStamp       t0(0);
-    Eigen::VectorXd x0(7); x0 << 1,2,3,4,5,6,7; // not normalized quaternion, this is not what's tested
-    Eigen::MatrixXd P0(6,6); P0.setIdentity(); P0 *= 0.1; // P0 is 0.1*Id
+    Eigen::VectorXd vec7(7); vec7 << 1,2,3,4,5,6,7; // not normalized quaternion, this is not what's tested
+    VectorComposite x0(vec7, "PO", {3,4});
+    // Eigen::MatrixXd P0(6,6); P0.setIdentity(); P0 *= 0.1; // P0 is 0.1*Id
+    Eigen::VectorXd vec6(6); vec6 << sqrt(0.1), sqrt(0.1), sqrt(0.1), sqrt(0.1), sqrt(0.1), sqrt(0.1);
+    VectorComposite P0(vec6, "PO", {3,3});
 
     P->setPriorFactor(x0, P0, t0, 1.0);
 
diff --git a/test/gtest_processor_base.cpp b/test/gtest_processor_base.cpp
index 8e71af5a7729f061f656e2a9d76ed1c3dc31589e..ed01245b29c903a7584e932196fb93a2c01c5c20 100644
--- a/test/gtest_processor_base.cpp
+++ b/test/gtest_processor_base.cpp
@@ -96,8 +96,10 @@ TEST(ProcessorBase, KeyFrameCallback)
 
     // initialize
     TimeStamp   t(0.0);
-    Vector3d    x(0,0,0);
-    Matrix3d    P = Matrix3d::Identity() * 0.1;
+    // Vector3d    x(0,0,0);
+    VectorComposite x(Vector3d(0,0,0), "PO", {2,1});
+    // Matrix3d    P = Matrix3d::Identity() * 0.1;
+    VectorComposite P(Vector3d(sqrt(0.1),sqrt(0.1),sqrt(0.1)), "PO", {2,1});
     problem->setPriorFactor(x, P, t, dt/2);             // KF1
 
     CaptureOdom2dPtr capt_odo = make_shared<CaptureOdom2d>(t, sens_odo, Vector2d(0.5,0));
diff --git a/test/gtest_processor_diff_drive.cpp b/test/gtest_processor_diff_drive.cpp
index 60990ad83928a235d76606208d91de35f5b9c385..ee908013b9eadd216363d528d7f60757ea331f29 100644
--- a/test/gtest_processor_diff_drive.cpp
+++ b/test/gtest_processor_diff_drive.cpp
@@ -309,8 +309,10 @@ TEST_F(ProcessorDiffDriveTest, process)
     Matrix2d data_cov; data_cov . setIdentity();
     TimeStamp t = 0.0;
     double   dt = 1.0;
-    Vector3d x(0,0,0);
-    Matrix3d P; P.setIdentity();
+    // Vector3d x(0,0,0);
+    VectorComposite x(Vector3d(0,0,0), "PO", {2,1});
+    // Matrix3d P; P.setIdentity();
+    VectorComposite P(Vector3d(1,1,1), "PO", {2,1});
 
     auto F0 = problem->setPriorFactor(x, P, t, 0.1);
     processor->setOrigin(F0);
@@ -338,8 +340,10 @@ TEST_F(ProcessorDiffDriveTest, linear)
     Vector2d data;
     Matrix2d data_cov; data_cov . setIdentity();
     TimeStamp t = 0.0;
-    Vector3d x(0,0,0);
-    Matrix3d P; P.setIdentity();
+    // Vector3d x(0,0,0);
+    VectorComposite x(Vector3d(0,0,0), "PO", {2,1});
+    // Matrix3d P; P.setIdentity();
+    VectorComposite P(Vector3d(1,1,1), "PO", {2,1});
 
     auto F0 = problem->setPriorFactor(x, P, t, 0.1);
     processor->setOrigin(F0);
@@ -364,8 +368,10 @@ TEST_F(ProcessorDiffDriveTest, angular)
     Vector2d data;
     Matrix2d data_cov; data_cov . setIdentity();
     TimeStamp t = 0.0;
-    Vector3d x(0,0,0);
-    Matrix3d P; P.setIdentity();
+    // Vector3d x(0,0,0);
+    VectorComposite x(Vector3d(0,0,0), "PO", {2,1});
+    // Matrix3d P; P.setIdentity();
+    VectorComposite P(Vector3d(1,1,1), "PO", {2,1});
 
     auto F0 = problem->setPriorFactor(x, P, t, 0.1);
     processor->setOrigin(F0);
diff --git a/test/gtest_processor_loopclosure.cpp b/test/gtest_processor_loopclosure.cpp
index 23d2f612eecfbf56f68cb6c39688a812d0d4898e..9b8683f8b74ee566370d4630a248d039257ebb17 100644
--- a/test/gtest_processor_loopclosure.cpp
+++ b/test/gtest_processor_loopclosure.cpp
@@ -78,8 +78,10 @@ TEST(ProcessorLoopClosure, installProcessor)
 
     // initialize
     TimeStamp   t(0.0);
-    Vector3d    x(0,0,0);
-    Matrix3d    P = Matrix3d::Identity() * 0.1;
+    // Vector3d x(0,0,0);
+    VectorComposite x(Vector3d(0,0,0), "PO", {2,1});
+    // Matrix3d    P = Matrix3d::Identity() * 0.1;
+    VectorComposite P(Vector3d(sqrt(0.1),sqrt(0.1),sqrt(0.1)), "PO", {2,1});
     problem->setPriorFactor(x, P, t, dt/2);             // KF1
 
 
diff --git a/test/gtest_processor_motion.cpp b/test/gtest_processor_motion.cpp
index aca6e7f5f3942d836da33e3321eb11c2fb9a1326..4ed782610c80de2e4e5dadd8c41b07acfe16515f 100644
--- a/test/gtest_processor_motion.cpp
+++ b/test/gtest_processor_motion.cpp
@@ -106,8 +106,10 @@ TEST_F(ProcessorMotion_test, IntegrateStraightFactorPrior)
 {
     // Prior
     TimeStamp t(0.0);
-    Vector3d x0; x0 << 0, 0, 0;
-    Matrix3d P0; P0.setIdentity();
+    // Vector3d x0; x0 << 0, 0, 0;
+    VectorComposite x0(Vector3d(0,0,0), "PO", {2,1});
+    // Matrix3d P0; P0.setIdentity();
+    VectorComposite P0(Vector3d(1,1,1), "PO", {2,1});
     auto KF_0 = problem->setPriorFactor(x0, P0, t, 0.01);
     processor->setOrigin(KF_0);
 
@@ -179,8 +181,10 @@ TEST_F(ProcessorMotion_test, IntegrateCircleFactorPrior)
 {
     // Prior
     TimeStamp t(0.0);
-    Vector3d x0; x0 << 0, 0, 0;
-    Matrix3d P0; P0.setIdentity();
+    // Vector3d x0; x0 << 0, 0, 0;
+    VectorComposite x0(Vector3d(0,0,0), "PO", {2,1});
+    // Matrix3d P0; P0.setIdentity();
+    VectorComposite P0(Vector3d(1,1,1), "PO", {2,1});
     auto KF_0 = problem->setPriorFactor(x0, P0, t, 0.01);
     processor->setOrigin(KF_0);
 
@@ -270,8 +274,10 @@ TEST_F(ProcessorMotion_test, splitBufferFactorPrior)
 {
     // Prior
     TimeStamp t(0.0);
-    Vector3d x0; x0 << 0, 0, 0;
-    Matrix3d P0; P0.setIdentity();
+    // Vector3d x0; x0 << 0, 0, 0;
+    VectorComposite x0(Vector3d(0,0,0), "PO", {2,1});
+    // Matrix3d P0; P0.setIdentity();
+    VectorComposite P0(Vector3d(1,1,1), "PO", {2,1});
     auto KF_0 = problem->setPriorFactor(x0, P0, t, 0.01);
     processor->setOrigin(KF_0);