diff --git a/bindings/python/joint.hpp b/bindings/python/joint.hpp
index 094bb7f02102f11fa6268a549bd5a0c2e6b9e90d..9014d720fdbbb2e9609aa0db29bc280911f6ccf6 100644
--- a/bindings/python/joint.hpp
+++ b/bindings/python/joint.hpp
@@ -20,7 +20,7 @@
 
 #include <eigenpy/exception.hpp>
 #include <eigenpy/eigenpy.hpp>
-#include "pinocchio/multibody/joint/joint-composite.hpp"
+#include "pinocchio/multibody/joint/joint.hpp"
 
 namespace se3
 {
diff --git a/src/multibody/joint/joint-composite.hpp b/src/multibody/joint/joint-composite.hpp
index 40228586ff5118b44efa822dc25a3f050f7b6c5b..4ce66486a99014cc6707be8d0fa0613c7127c59d 100644
--- a/src/multibody/joint/joint-composite.hpp
+++ b/src/multibody/joint/joint-composite.hpp
@@ -19,13 +19,11 @@
 #define __se3_joint_composite_hpp__
 
 #include "pinocchio/assert.hpp"
-#include "pinocchio/multibody/joint/joint.hpp"
+#include "pinocchio/multibody/joint/joint-variant.hpp"
+#include "pinocchio/multibody/joint/joint-basic-visitors.hpp"
 
 #include <Eigen/StdVector>
 
-EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(se3::SE3)
-EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(se3::Motion)
-
 namespace se3
 {
 
@@ -67,6 +65,7 @@ namespace se3
     EIGEN_MAKE_ALIGNED_OPERATOR_NEW
     
     typedef JointComposite Joint;
+    typedef JointDataVariant JointData;
     typedef std::vector<JointData, Eigen::aligned_allocator<JointData> > JointDataVector;
     SE3_JOINT_TYPEDEF;
 
@@ -74,7 +73,7 @@ namespace se3
     int nq_composite,nv_composite;
 
     Constraint_t S;
-    std::vector<Transformation_t> ljMj;
+    std::vector<Transformation_t, Eigen::aligned_allocator<Transformation_t> > ljMj;
     Transformation_t M;
     Motion_t v;
     Bias_t c;
@@ -110,8 +109,13 @@ namespace se3
     typedef JointComposite Joint;
     SE3_JOINT_TYPEDEF;
     SE3_JOINT_USE_INDEXES;
+    
+    typedef JointModelVariant JointModel;
     typedef std::vector<JointModel, Eigen::aligned_allocator<JointModel> > JointModelVector;
     
+    typedef JointDataVariant JointData;
+    typedef std::vector<JointData, Eigen::aligned_allocator<JointData> > JointDataVector;
+    
     using JointModelBase<JointModelComposite>::id;
     using JointModelBase<JointModelComposite>::setIndexes;
 
@@ -475,15 +479,16 @@ namespace se3
   };
   
 
-    inline std::ostream & operator << (std::ostream & os, const JointModelComposite & jmodel)
+  inline std::ostream & operator << (std::ostream & os, const JointModelComposite & jmodel)
+  {
+    typedef JointModelComposite::JointModelVector JointModelVector;
+    os << "JointModelComposite containing following models:\n" ;
+    for (JointModelVector::const_iterator i = jmodel.joints.begin(); i != jmodel.joints.end(); ++i)
     {
-      os << "JointModelComposite containing following models:\n" ;
-      for (JointModelVector::const_iterator i = jmodel.joints.begin(); i != jmodel.joints.end(); ++i)
-      {
-        os << shortname(*i) << std::endl;
-      }
-      return os;
+      os << shortname(*i) << std::endl;
     }
+    return os;
+  }
 
 } // namespace se3
 
diff --git a/src/multibody/joint/joint.hpp b/src/multibody/joint/joint.hpp
index 34b8f2074ece0f9719556c9bec3234c805e89a94..f5f829301131c516cfcd5905920d0328f60389e2 100644
--- a/src/multibody/joint/joint.hpp
+++ b/src/multibody/joint/joint.hpp
@@ -150,12 +150,9 @@ namespace se3
     void setIndexes(JointIndex id,int nq,int nv) { ::se3::setIndexes(*this,id, nq, nv); }
   };
   
-  typedef std::vector<JointData> JointDataVector;
-  typedef std::vector<JointModel> JointModelVector;
+  typedef std::vector<JointData, Eigen::aligned_allocator<JointData> > JointDataVector;
+  typedef std::vector<JointModel, Eigen::aligned_allocator<JointModel> > JointModelVector;
 
 } // namespace se3
 
-EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(se3::JointModel)
-EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(se3::JointData)
-
 #endif // ifndef __se3_joint_model_hpp__