diff --git a/include/imu/math/imu_tools.h b/include/imu/math/imu_tools.h
index 5be0bbd2b3ff0ace7264b83db249f382740ba362..d9b0b58454132c8abaa11d50a5847d18b829337f 100644
--- a/include/imu/math/imu_tools.h
+++ b/include/imu/math/imu_tools.h
@@ -80,9 +80,9 @@ inline Matrix<T, 10, 1> identity()
 inline VectorComposite identityComposite()
 {
     VectorComposite D;
-    D.emplace("P", Vector3d::Zero());
-    D.emplace("O", Quaterniond::Identity().coeffs());
-    D.emplace("V", Vector3d::Zero());
+    D.emplace('P', Vector3d::Zero());
+    D.emplace('O', Quaterniond::Identity().coeffs());
+    D.emplace('V', Vector3d::Zero());
     return D;
 }
 
@@ -194,13 +194,13 @@ inline void compose(const MatrixBase<D1>& d1,
 
 inline void compose(const VectorComposite& d1, const VectorComposite& d2, double dt, VectorComposite& dc)
 {
-    compose(d1.at("P"), d1.at("O"), d1.at("V"), d2.at("P"), d2.at("O"), d2.at("V"), dt, dc["P"], dc["O"], dc["V"]);
+    compose(d1.at('P'), d1.at('O'), d1.at('V'), d2.at('P'), d2.at('O'), d2.at('V'), dt, dc['P'], dc['O'], dc['V']);
 }
 
 inline VectorComposite compose(const VectorComposite& d1, const VectorComposite& d2, double dt)
 {
     VectorComposite dc("POV", {3,4,3});
-    compose(d1.at("P"), d1.at("O"), d1.at("V"), d2.at("P"), d2.at("O"), d2.at("V"), dt, dc["P"], dc["O"], dc["V"]);
+    compose(d1.at('P'), d1.at('O'), d1.at('V'), d2.at('P'), d2.at('O'), d2.at('V'), dt, dc['P'], dc['O'], dc['V']);
     return dc;
 }
 
@@ -258,33 +258,33 @@ inline void compose(const VectorComposite& d1,
 {
 
     // Some useful temporaries
-    Matrix3d dR1 = q2R(d1.at("O")); //dq1.matrix(); // First  Delta, DR
-    Matrix3d dR2 = q2R(d2.at("O")); //dq2.matrix(); // Second delta, dR
+    Matrix3d dR1 = q2R(d1.at('O')); //dq1.matrix(); // First  Delta, DR
+    Matrix3d dR2 = q2R(d2.at('O')); //dq2.matrix(); // Second delta, dR
 
     // Jac wrt first delta // TODO find optimal way to re-use memory allocation!!!
     J_sum_d1.clear();
-    J_sum_d1.emplace("P","P", Matrix3d::Identity());        // dDp'/dDp = I
-    J_sum_d1.emplace("P","O", - dR1 * skew(d2.at("P"))) ;   // dDp'/dDo
-    J_sum_d1.emplace("P","V", Matrix3d::Identity() * dt);   // dDp'/dDv = I*dt
-    J_sum_d1.emplace("O","P", Matrix3d::Zero());
-    J_sum_d1.emplace("O","O", dR2.transpose());             // dDo'/dDo
-    J_sum_d1.emplace("O","V", Matrix3d::Zero());
-    J_sum_d1.emplace("V","P", Matrix3d::Zero());
-    J_sum_d1.emplace("V","O", - dR1 * skew(d2.at("V"))) ;   // dDv'/dDo
-    J_sum_d1.emplace("V","V", Matrix3d::Identity());        // dDv'/dDv = I
+    J_sum_d1.emplace('P','P', Matrix3d::Identity());        // dDp'/dDp = I
+    J_sum_d1.emplace('P','O', - dR1 * skew(d2.at('P'))) ;   // dDp'/dDo
+    J_sum_d1.emplace('P','V', Matrix3d::Identity() * dt);   // dDp'/dDv = I*dt
+    J_sum_d1.emplace('O','P', Matrix3d::Zero());
+    J_sum_d1.emplace('O','O', dR2.transpose());             // dDo'/dDo
+    J_sum_d1.emplace('O','V', Matrix3d::Zero());
+    J_sum_d1.emplace('V','P', Matrix3d::Zero());
+    J_sum_d1.emplace('V','O', - dR1 * skew(d2.at('V'))) ;   // dDv'/dDo
+    J_sum_d1.emplace('V','V', Matrix3d::Identity());        // dDv'/dDv = I
 
 
     // Jac wrt second delta
     J_sum_d2.clear();
-    J_sum_d2.emplace("P","P", dR1);                 // dDp'/ddp
-    J_sum_d2.emplace("P","O", Matrix3d::Zero()) ;   // dDp'/ddo
-    J_sum_d2.emplace("P","V", Matrix3d::Zero());    // dDp'/ddv
-    J_sum_d2.emplace("O","P", Matrix3d::Zero());
-    J_sum_d2.emplace("O","O", Matrix3d::Identity());// dDo'/ddo
-    J_sum_d2.emplace("O","V", Matrix3d::Zero());
-    J_sum_d2.emplace("V","P", Matrix3d::Zero());
-    J_sum_d2.emplace("V","O", Matrix3d::Zero()) ;   // dDv'/ddo
-    J_sum_d2.emplace("V","V", dR1);                 // dDv'/ddv
+    J_sum_d2.emplace('P','P', dR1);                 // dDp'/ddp
+    J_sum_d2.emplace('P','O', Matrix3d::Zero()) ;   // dDp'/ddo
+    J_sum_d2.emplace('P','V', Matrix3d::Zero());    // dDp'/ddv
+    J_sum_d2.emplace('O','P', Matrix3d::Zero());
+    J_sum_d2.emplace('O','O', Matrix3d::Identity());// dDo'/ddo
+    J_sum_d2.emplace('O','V', Matrix3d::Zero());
+    J_sum_d2.emplace('V','P', Matrix3d::Zero());
+    J_sum_d2.emplace('V','O', Matrix3d::Zero()) ;   // dDv'/ddo
+    J_sum_d2.emplace('V','V', dR1);                 // dDv'/ddv
 
     // compose deltas -- done here to avoid aliasing when calling with input `d1` and result `sum` referencing the same variable
     compose(d1, d2, dt, sum);
@@ -428,14 +428,14 @@ inline void composeOverState(const VectorComposite& x,
                              T dt,
                              VectorComposite& x_plus_d)
 {
-        assert(x_plus_d.count("P") && "provided reference does not have key 'P'");
-        assert(x_plus_d.count("O") && "provided reference does not have key 'O'");
-        assert(x_plus_d.count("V") && "provided reference does not have key 'V'");
+        assert(x_plus_d.count('P') && "provided reference does not have key 'P'");
+        assert(x_plus_d.count('O') && "provided reference does not have key 'O'");
+        assert(x_plus_d.count('V') && "provided reference does not have key 'V'");
 
-        composeOverState(x.at("P"), x.at("O"), x.at("V"),
-                         d.at("P"), d.at("O"), d.at("V"),
+        composeOverState(x.at('P'), x.at('O'), x.at('V'),
+                         d.at('P'), d.at('O'), d.at('V'),
                          dt,
-                         x_plus_d["P"], x_plus_d["O"], x_plus_d["V"]);
+                         x_plus_d['P'], x_plus_d['O'], x_plus_d['V']);
 }
 
 template<class T>
@@ -592,7 +592,7 @@ inline Matrix<typename D1::Scalar, 10, 1> plus(const MatrixBase<D1>& d1,
 
 inline void plus(const VectorComposite& x, const VectorComposite& tau, VectorComposite& res)
 {
-    plus(x.at("P"), x.at("O"), x.at("V"), tau.at("P"), tau.at("O"), tau.at("V"), res.at("P"), res.at("O"), res.at("V"));
+    plus(x.at('P'), x.at('O'), x.at('V'), tau.at('P'), tau.at('O'), tau.at('V'), res.at('P'), res.at('O'), res.at('V'));
 }
 
 inline VectorComposite plus(const VectorComposite& x, const VectorComposite& tau)
@@ -755,22 +755,12 @@ inline void body2delta(const MatrixBase<D1>& body,
 {
     MatrixSizeCheck<6,1>::check(body);
 
-//    _delta["P"] = Vector3d();
-//    _delta["O"] = Vector4d();
-//    _delta["V"] = Vector3d();
-
     body2delta(body.block(0,0,3,1),
                body.block(3,0,3,1),
                dt,
-               _delta["P"],
-               _delta["O"],
-               _delta["V"]);
-//    body2delta(body.block(0,0,3,1),
-//               body.block(3,0,3,1),
-//               dt,
-//               _delta.at("P"),
-//               _delta.at("O"),
-//               _delta.at("V"));
+               _delta['P'],
+               _delta['O'],
+               _delta['V']);
 }
 
 template<typename D1, typename D2, typename D3>
@@ -808,29 +798,12 @@ inline void body2delta(const MatrixBase<D1>& body,
 
     Matrix<T, 3, 1> w = body.block(3,0,3,1);
 
-//    jac_body.setZero();
-//    jac_body.block(0,0,3,3) = 0.5 * dt * dt * Matrix<T, 3, 3>::Identity();
-//    jac_body.block(3,3,3,3) =            dt * jac_SO3_right(w * dt);
-//    jac_body.block(6,0,3,3) =            dt * Matrix<T, 3, 3>::Identity();
-
-//    Matrix<double, 3, 6> J_dp_data;
-//    Matrix<double, 3, 6> J_do_data;
-//    Matrix<double, 3, 6> J_dv_data;
-
-//    jac_body.emplace("P","I", MatrixXd(3,6));
-//    jac_body.emplace("O","I", MatrixXd(3,6));
-//    jac_body.emplace("V","I", MatrixXd(3,6));
-//
-//    jac_body.at("P","I") << 0.5 * dt * dt * Matrix3d::Identity() , Matrix3d::Zero() ;
-//    jac_body.at("O","I") << Matrix3d::Zero() , dt * jac_SO3_right(w * dt) ;
-//    jac_body.at("V","I") << dt * Matrix3d::Identity() , Matrix3d::Zero() ;
-
-    jac_body.emplace("P","a", 0.5 * dt * dt * Matrix3d::Identity());    // 0,0
-    jac_body.emplace("P","w",                 Matrix3d::Zero());        // 0,3
-    jac_body.emplace("O","a",                 Matrix3d::Zero());        // 3,0
-    jac_body.emplace("O","w",            dt * jac_SO3_right(w * dt));   // 3,3
-    jac_body.emplace("V","a",            dt * Matrix3d::Identity());    // 6,0
-    jac_body.emplace("V","w",                 Matrix3d::Zero());        // 6,6
+    jac_body.emplace('P','a', 0.5 * dt * dt * Matrix3d::Identity());    // 0,0
+    jac_body.emplace('P','w',                 Matrix3d::Zero());        // 0,3
+    jac_body.emplace('O','a',                 Matrix3d::Zero());        // 3,0
+    jac_body.emplace('O','w',            dt * jac_SO3_right(w * dt));   // 3,3
+    jac_body.emplace('V','a',            dt * Matrix3d::Identity());    // 6,0
+    jac_body.emplace('V','w',                 Matrix3d::Zero());        // 6,6
 }
 
 template<typename D1, typename D2, typename D3, typename D4, typename D5, typename D6, typename D7>