diff --git a/src/multibody/constraint.hpp b/src/multibody/constraint.hpp
index c26b3f9a1a64953e5dcffbd441617e5e92c54ada..0ffb70af2552a229b6dc833a5d65f1bd6b149328 100644
--- a/src/multibody/constraint.hpp
+++ b/src/multibody/constraint.hpp
@@ -36,7 +36,7 @@ namespace se3
   {
   protected:
     typedef Derived  Derived_t;
-    SPATIAL_TYPEDEF_ARG(Derived_t);
+    SPATIAL_TYPEDEF_TEMPLATE(Derived_t);
     typedef typename traits<Derived_t>::JointMotion JointMotion;
     typedef typename traits<Derived_t>::JointForce JointForce;
     typedef typename traits<Derived_t>::DenseBase DenseBase;
@@ -87,7 +87,7 @@ namespace se3
   public:
 
     friend class ConstraintBase< ConstraintTpl< _Dim, _Scalar, _Options > >;
-    SPATIAL_TYPEDEF_ARG(ConstraintTpl);
+    SPATIAL_TYPEDEF_TEMPLATE(ConstraintTpl);
     
     enum { NV = _Dim, Options = _Options };
 
diff --git a/src/multibody/joint/joint-revolute.hpp b/src/multibody/joint/joint-revolute.hpp
index 296c76b76d080691c283f19190b4e67ac9bcaa8c..a89570a3183ea5a4f2f46b34b85b2f08738c0ecc 100644
--- a/src/multibody/joint/joint-revolute.hpp
+++ b/src/multibody/joint/joint-revolute.hpp
@@ -81,7 +81,7 @@ namespace se3
     template<int axis>
     struct MotionRevolute : MotionBase < MotionRevolute <axis > >
     {
-      SPATIAL_TYPEDEF_ARG(MotionRevolute);
+      SPATIAL_TYPEDEF_TEMPLATE(MotionRevolute);
       MotionRevolute()                   : w(NAN) {}
       MotionRevolute( const double & w ) : w(w)  {}
       double w;
@@ -136,7 +136,7 @@ namespace se3
     template<int axis>
     struct ConstraintRevolute : ConstraintBase < ConstraintRevolute <axis > >
     { 
-      SPATIAL_TYPEDEF_ARG(ConstraintRevolute);
+      SPATIAL_TYPEDEF_TEMPLATE(ConstraintRevolute);
 
       template<typename D>
       MotionRevolute<axis> operator*( const Eigen::MatrixBase<D> & v ) const
diff --git a/src/spatial/force.hpp b/src/spatial/force.hpp
index 388ce02cbc04a82ed2463e19e86859cf5d10d083..6d71cf8e55eefd7688030ac44c7a0059ca7a0191 100644
--- a/src/spatial/force.hpp
+++ b/src/spatial/force.hpp
@@ -32,7 +32,7 @@ namespace se3
   protected:
 
     typedef Derived  Derived_t;
-    SPATIAL_TYPEDEF_ARG(Derived_t);
+    SPATIAL_TYPEDEF_TEMPLATE(Derived_t);
 
   public:
     Derived_t & derived() { return *static_cast<Derived_t*>(this); }
@@ -118,7 +118,7 @@ namespace se3
 
   public:
     friend class ForceBase< ForceTpl< _Scalar, _Options > >;
-    SPATIAL_TYPEDEF_ARG(ForceTpl);
+    SPATIAL_TYPEDEF_TEMPLATE(ForceTpl);
 
 
   public:
diff --git a/src/spatial/fwd.hpp b/src/spatial/fwd.hpp
index aa044e836242640b73dd3e95843fc832b01ac590..5db86da15d7e5d2eec68aea41553c84ca901f932 100644
--- a/src/spatial/fwd.hpp
+++ b/src/spatial/fwd.hpp
@@ -30,27 +30,47 @@ namespace se3
 
   template<class C> struct traits {};
 
-  #define SPATIAL_TYPEDEF_ARG(derived)              \
-  typedef typename traits<derived>::Scalar_t Scalar_t; \
-  typedef typename traits<derived>::Vector3 Vector3; \
-  typedef typename traits<derived>::Vector4 Vector4; \
-  typedef typename traits<derived>::Vector6 Vector6; \
-  typedef typename traits<derived>::Matrix3 Matrix3; \
-  typedef typename traits<derived>::Matrix4 Matrix4; \
-  typedef typename traits<derived>::Matrix6 Matrix6; \
-  typedef typename traits<derived>::Angular_t Angular_t; \
-  typedef typename traits<derived>::Linear_t Linear_t; \
-  typedef typename traits<derived>::ActionMatrix_t ActionMatrix_t; \
-  typedef typename traits<derived>::Quaternion_t Quaternion_t; \
-  typedef typename traits<derived>::SE3 SE3; \
-  typedef typename traits<derived>::Force Force; \
-  typedef typename traits<derived>::Motion Motion; \
-  typedef typename traits<derived>::Symmetric3 Symmetric3; \
-  enum {  \
-    LINEAR = traits<derived>::LINEAR,  \
-    ANGULAR = traits<derived>::ANGULAR   \
-  }
+  #define SPATIAL_TYPEDEF_TEMPLATE(derived)              \
+    typedef typename traits<derived>::Scalar_t Scalar_t; \
+    typedef typename traits<derived>::Vector3 Vector3; \
+    typedef typename traits<derived>::Vector4 Vector4; \
+    typedef typename traits<derived>::Vector6 Vector6; \
+    typedef typename traits<derived>::Matrix3 Matrix3; \
+    typedef typename traits<derived>::Matrix4 Matrix4; \
+    typedef typename traits<derived>::Matrix6 Matrix6; \
+    typedef typename traits<derived>::Angular_t Angular_t; \
+    typedef typename traits<derived>::Linear_t Linear_t; \
+    typedef typename traits<derived>::ActionMatrix_t ActionMatrix_t; \
+    typedef typename traits<derived>::Quaternion_t Quaternion_t; \
+    typedef typename traits<derived>::SE3 SE3; \
+    typedef typename traits<derived>::Force Force; \
+    typedef typename traits<derived>::Motion Motion; \
+    typedef typename traits<derived>::Symmetric3 Symmetric3; \
+    enum {  \
+      LINEAR = traits<derived>::LINEAR,  \
+      ANGULAR = traits<derived>::ANGULAR   \
+    }
 
+  #define SPATIAL_TYPEDEF_NO_TEMPLATE(derived)              \
+    typedef traits<derived>::Scalar_t Scalar_t; \
+    typedef traits<derived>::Vector3 Vector3; \
+    typedef traits<derived>::Vector4 Vector4; \
+    typedef traits<derived>::Vector6 Vector6; \
+    typedef traits<derived>::Matrix3 Matrix3; \
+    typedef traits<derived>::Matrix4 Matrix4; \
+    typedef traits<derived>::Matrix6 Matrix6; \
+    typedef traits<derived>::Angular_t Angular_t; \
+    typedef traits<derived>::Linear_t Linear_t; \
+    typedef traits<derived>::ActionMatrix_t ActionMatrix_t; \
+    typedef traits<derived>::Quaternion_t Quaternion_t; \
+    typedef traits<derived>::SE3 SE3; \
+    typedef traits<derived>::Force Force; \
+    typedef traits<derived>::Motion Motion; \
+    typedef traits<derived>::Symmetric3 Symmetric3; \
+    enum {  \
+      LINEAR = traits<derived>::LINEAR,  \
+      ANGULAR = traits<derived>::ANGULAR   \
+    }
 
 
 } // namespace se3
diff --git a/src/spatial/inertia.hpp b/src/spatial/inertia.hpp
index 8f1951cd15cfe53cce0dc74343c717f033a3427d..edc7fa3fc0df2f0bcfd71df7a20bad51a43f6aee 100644
--- a/src/spatial/inertia.hpp
+++ b/src/spatial/inertia.hpp
@@ -33,7 +33,7 @@ namespace se3
   protected:
 
     typedef Derived  Derived_t;
-    SPATIAL_TYPEDEF_ARG(Derived_t);
+    SPATIAL_TYPEDEF_TEMPLATE(Derived_t);
 
   public:
     Derived_t & derived() { return *static_cast<Derived_t*>(this); }
@@ -114,7 +114,7 @@ namespace se3
   {
   public:
     friend class InertiaBase< InertiaTpl< _Scalar, _Options > >;
-    SPATIAL_TYPEDEF_ARG(InertiaTpl);
+    SPATIAL_TYPEDEF_TEMPLATE(InertiaTpl);
     
   public:
     // Constructors
diff --git a/src/spatial/motion.hpp b/src/spatial/motion.hpp
index d4712f3bd3cfbd82637770b746b7ffdc2ad7c5d0..1bebba72133c5219c3a7c6a122c38858bc497cdf 100644
--- a/src/spatial/motion.hpp
+++ b/src/spatial/motion.hpp
@@ -34,7 +34,7 @@ namespace se3
 
 
     typedef Derived  Derived_t;
-    SPATIAL_TYPEDEF_ARG(Derived_t);
+    SPATIAL_TYPEDEF_TEMPLATE(Derived_t);
 
   public:
     Derived_t & derived() { return *static_cast<Derived_t*>(this); }
@@ -135,7 +135,7 @@ namespace se3
   class MotionTpl : public MotionBase< MotionTpl< _Scalar, _Options > >
   {
   public:
-    SPATIAL_TYPEDEF_ARG(MotionTpl);
+    SPATIAL_TYPEDEF_TEMPLATE(MotionTpl);
 
 
   public:
@@ -332,7 +332,7 @@ namespace se3
 
   struct BiasZero : public MotionBase< BiasZero >
   {
-    SPATIAL_TYPEDEF_ARG(BiasZero);
+    SPATIAL_TYPEDEF_NO_TEMPLATE(BiasZero);
     operator Motion () const { return Motion::Zero(); }
   }; // struct BiasZero
 
diff --git a/src/spatial/se3.hpp b/src/spatial/se3.hpp
index 736131ddcec13839b20bf4c48861678ce930bc81..5b9153fbc2b72f5112843d623aa2190b0fbe4e41 100644
--- a/src/spatial/se3.hpp
+++ b/src/spatial/se3.hpp
@@ -55,7 +55,7 @@ namespace se3
   protected:
 
     typedef Derived  Derived_t;
-    SPATIAL_TYPEDEF_ARG(Derived_t);
+    SPATIAL_TYPEDEF_TEMPLATE(Derived_t);
 
   public:
       Derived_t & derived() { return *static_cast<Derived_t*>(this); }
@@ -147,7 +147,7 @@ namespace se3
 
   public:
     friend class SE3Base< SE3Tpl< _Scalar, _Options > >;
-    SPATIAL_TYPEDEF_ARG(SE3Tpl);
+    SPATIAL_TYPEDEF_TEMPLATE(SE3Tpl);
 
 
   public: