diff --git a/include/IMU/math/IMU_tools_Lie.h b/include/IMU/math/IMU_tools_Lie.h
index a2140e0992e3c6e22e8828ea9a8468513db6f15d..0bf90615af4681080551cace400b0fbac4a9e2c9 100644
--- a/include/IMU/math/IMU_tools_Lie.h
+++ b/include/IMU/math/IMU_tools_Lie.h
@@ -215,14 +215,44 @@ inline Matrix<typename D::Scalar, 10, 10> adjoint(const MatrixBase<D>& delta){
 }
 
 
-// template<typename D1, typename D2>
-// inline Matrix<T, 11, 1> smalladjoint(const MatrixBase<D1> d, MatrixBase<D1> sadjd)
-// {
-//     // Adjoint matrix associated to the adjoint operator
-//         TODO  
+template<typename D1, typename D2>
+inline Matrix<T, 10, 10> smalladjoint(const MatrixBase<D1> tau)
+{
+    MatrixSizeCheck<10, 1>::check(tau);
+
+    typedef typename D1::Scalar T;
+
+
+    Map<const Matrix<T, 3, 1> >   p   ( & tau(0) );
+    Map<const Matrix<T, 3, 1> >   th  ( & tau(3) );
+    Map<const Matrix<T, 3, 1> >   v   ( & tau(6) );
+    const T&                      t =     tau(9);
+
+    // Adjoint matrix associated to the adjoint operator
+    Matrix<T, 3, 3> px  = skew(p);
+    Matrix<T, 3, 3> thx = skew(th);
+    Matrix<T, 3, 3> vx  = skew(v);
+
+    Matrix<T, 10, 10> adj;
+    adj.setZero();
     
-//     return ret;
-// }
+    /* Attention to variable order in the adjoint!
+     *
+     * Paper: PVOT = 0639
+     * WOLF:  POVT = 0369
+     *
+     */
+
+    adj.block<3,3>(0,0) = thx;                              // 0,0 in paper
+    adj.block<3,3>(0,3) = px;                               // 0,6 in paper
+    adj.block<3,3>(0,6) = - Matrix<T,3,3>::Identity() * t;  // 0,3 in paper
+    adj.block<3,1>(0,9) = v;                                // 0,9 in paper
+    adj.block<3,3>(3,3) = thx;                              // 6,6 in paper
+    adj.block<3,3>(6,3) = vx;                               // 3,6 in paper
+    adj.block<3,3>(6,6) = thx;                              // 3,3 in paper
+
+    return adj;
+}
 
 template<typename D1, typename D2, typename D3, typename D4, typename D5>
 inline void compose(const MatrixBase<D1>& delta1,