diff --git a/src/axial-handle.cc b/src/axial-handle.cc
index 0ef632faddeb3ba7a731194cd7d7749476aabdd1..42dc75a80ed7e249972b962a2bd01104b4961b0d 100644
--- a/src/axial-handle.cc
+++ b/src/axial-handle.cc
@@ -35,61 +35,66 @@ namespace hpp {
     (const GripperPtr_t& gripper) const
     {
       using boost::assign::list_of;
-      std::vector <bool> mask = list_of (true)(true)(true)(false)(true)(true);
-      Transform3f transform = inverse (localPosition()) * gripper->objectPositionInJoint ();
-      return RelativeTransformation::create ("Transformation_(1,1,1,0,1,1)_" + name () + "_" + gripper->name (),
-          gripper->joint()->robot(), gripper->joint (), joint(),
-          inverse (localPosition()) * gripper->objectPositionInJoint (), mask);
+      std::vector <bool> mask = list_of (true)(true)(true)(true)(true)(false);
+      return RelativeTransformation::create
+	("Transformation_(1,1,1,1,1,1)_" + name () + "_" + gripper->name (),
+	 gripper->joint()->robot(), gripper->joint (), joint (),
+	 gripper->objectPositionInJoint (), localPosition(), mask);
     }
 
     DifferentiableFunctionPtr_t AxialHandle::createGraspComplement
     (const GripperPtr_t& gripper) const
     {
       using boost::assign::list_of;
-      std::vector <bool> mask = list_of (true)(false)(false);
-      Transform3f transform = inverse (localPosition()) * gripper->objectPositionInJoint ();
-      return RelativeOrientation::create ("Orientation_(1,0,0)_" + name () + "_" + gripper->name (),
-          gripper->joint()->robot(), gripper->joint (), joint(), transform.getRotation (), mask);
+      std::vector <bool> mask = list_of (false)(false)(false)(false)(true)
+	(false);
+      return RelativeTransformation::create
+	("Transformation_(0,0,0,0,0,0)_" + name () + "_" + gripper->name (),
+	 gripper->joint()->robot(), gripper->joint (), joint (),
+	 gripper->objectPositionInJoint (), localPosition(), mask);
     }
 
     DifferentiableFunctionPtr_t AxialHandle::createPreGrasp
     (const GripperPtr_t& gripper) const
     {
       using boost::assign::list_of;
-      std::vector <bool> mask = list_of (false)(true)(true)(false)(true)(true);
-      return RelativeTransformation::create ("Transformation_(0,1,1,0,1,1)_" + name () + "_" + gripper->name (),
-          gripper->joint()->robot(), gripper->joint (), joint(),
-          inverse (localPosition()) * gripper->objectPositionInJoint (), mask);
+      std::vector <bool> mask = list_of (false)(true)(true)(true)(true)(false);
+      return RelativeTransformation::create
+	("Transformation_(0,1,1,1,1,1)_" + name () + "_" + gripper->name (),
+	 gripper->joint()->robot(), gripper->joint (), joint (),
+	 gripper->objectPositionInJoint (), localPosition(), mask);
     }
 
     DifferentiableFunctionPtr_t AxialHandle::createPreGraspComplement
-      (const GripperPtr_t& gripper) const
+    (const GripperPtr_t& gripper) const
     {
       using boost::assign::list_of;
-      std::vector <bool> mask = list_of (true)(false)(false);
-      Transform3f transform = inverse (localPosition()) * gripper->objectPositionInJoint ();
-      fcl::Vec3f target = transform.getTranslation ()
-                        + fcl::Vec3f (clearance () + gripper->clearance (),0,0);
-      return RelativePosition::create ("Position_(1,0,0)_" + name () + "_" + gripper->name (),
-          gripper->joint()->robot(), gripper->joint (), joint(), target, fcl::Vec3f (0,0,0), mask);
+      std::vector <bool> mask = list_of (true)(false)(false)(false)(true)
+	(false);
+      Transform3f transform (gripper->objectPositionInJoint ().getRotation (),
+			     gripper->objectPositionInJoint ().getTranslation ()
+			     + fcl::Vec3f (gripper->clearance () +
+					   clearance (),0,0));
+      return RelativeTransformation::create
+	("Transformation_(1,0,0,0,0,0)_" + name () + "_" + gripper->name (),
+	 gripper->joint()->robot(), gripper->joint (), joint (),
+	 transform, localPosition(), mask);
     }
 
-
     DifferentiableFunctionPtr_t AxialHandle::createPreGraspComplement
-      (const GripperPtr_t& gripper, const value_type& shift) const
+    (const GripperPtr_t& gripper, const value_type& shift) const
     {
-      //using boost::assign::list_of;
-      //std::vector <bool> mask = list_of (true)(false)(false)(true)(false)(false);
-      //Transform3f transform = inverse (localPosition()) * gripper->objectPositionInJoint ();
-      //transform.setTranslation (transform.getTranslation () + fcl::Vec3f (shift,0,0));
-      //return RelativeTransformation::create
-	//(gripper->joint()->robot(), gripper->joint (), joint(), transform, mask);
       using boost::assign::list_of;
-      std::vector <bool> mask = list_of (true)(false)(false);
-      Transform3f transform = inverse (localPosition()) * gripper->objectPositionInJoint ();
-      fcl::Vec3f target = transform.getTranslation () + fcl::Vec3f (shift,0,0);
-      return RelativePosition::create ("Position_(1,0,0)_" + name () + "_" + gripper->name (),
-          gripper->joint()->robot(), gripper->joint (), joint(), target, fcl::Vec3f (0,0,0), mask);
+      std::vector <bool> mask = list_of (true)(false)(false)(false)(true)
+	(false);
+      Transform3f transform (gripper->objectPositionInJoint ().getRotation (),
+			     gripper->objectPositionInJoint ().getTranslation ()
+			     + fcl::Vec3f (gripper->clearance () +
+					   clearance () + shift,0,0));
+      return RelativeTransformation::create
+	("Transformation_(1,0,0,0,0,0)_" + name () + "_" + gripper->name (),
+	 gripper->joint()->robot(), gripper->joint (), joint (),
+	 transform, localPosition(), mask);
     }
 
     HandlePtr_t AxialHandle::clone () const
diff --git a/src/handle.cc b/src/handle.cc
index b456ea69e934f9d7bb541bc8e449ec940b1b5c71..473f7d9895a0f770db5e7da4821de771f1ff4fb5 100644
--- a/src/handle.cc
+++ b/src/handle.cc
@@ -17,6 +17,7 @@
 // hpp-manipulation. If not, see
 // <http://www.gnu.org/licenses/>.
 
+#include <hpp/util/debug.hh>
 #include <hpp/manipulation/handle.hh>
 
 #include <boost/assign/list_of.hpp>
@@ -37,19 +38,22 @@ namespace hpp {
     {
       using boost::assign::list_of;
       std::vector <bool> mask = list_of (true)(true)(true)(true)(true)(true);
-      return RelativeTransformation::create ("Transformation_(1,1,1,1,1,1)_" + name () + "_" + gripper->name (),
-          gripper->joint()->robot(), gripper->joint (), joint(),
-          inverse (localPosition()) * gripper->objectPositionInJoint (), mask);
+      return RelativeTransformation::create
+	("Transformation_(1,1,1,1,1,1)_" + name () + "_" + gripper->name (),
+	 gripper->joint()->robot(), gripper->joint (), joint (),
+	 gripper->objectPositionInJoint (), localPosition(), mask);
     }
 
     DifferentiableFunctionPtr_t Handle::createGraspComplement
     (const GripperPtr_t& gripper) const
     {
       using boost::assign::list_of;
-      std::vector <bool> mask = list_of (false)(false)(false)(false)(false)(false);
-      return RelativeTransformation::create ("Transformation_(0,0,0,0,0,0)_" + name () + "_" + gripper->name (),
-      gripper->joint()->robot(), gripper->joint (), joint(),
-       inverse (localPosition()) * gripper->objectPositionInJoint (), mask);
+      std::vector <bool> mask = list_of (false)(false)(false)(false)(false)
+	(false);
+      return RelativeTransformation::create
+	("Transformation_(0,0,0,0,0,0)_" + name () + "_" + gripper->name (),
+	 gripper->joint()->robot(), gripper->joint (), joint (),
+	 gripper->objectPositionInJoint (), localPosition(), mask);
     }
 
     DifferentiableFunctionPtr_t Handle::createPreGrasp
@@ -57,32 +61,42 @@ namespace hpp {
     {
       using boost::assign::list_of;
       std::vector <bool> mask = list_of (false)(true)(true)(true)(true)(true);
-      Transform3f transform = inverse (localPosition()) * gripper->objectPositionInJoint ();
-      return RelativeTransformation::create ("Transformation_(0,1,1,1,1,1)_" + name () + "_" + gripper->name (),
-          gripper->joint()->robot(), gripper->joint (), joint(), transform, mask);
+      return RelativeTransformation::create
+	("Transformation_(0,1,1,1,1,1)_" + name () + "_" + gripper->name (),
+	 gripper->joint()->robot(), gripper->joint (), joint (),
+	 gripper->objectPositionInJoint (), localPosition(), mask);
     }
 
     DifferentiableFunctionPtr_t Handle::createPreGraspComplement
     (const GripperPtr_t& gripper) const
     {
       using boost::assign::list_of;
-      std::vector <bool> mask = list_of (true)(false)(false);
-      Transform3f transform = inverse (localPosition()) * gripper->objectPositionInJoint ();
-      fcl::Vec3f target = transform.getTranslation ()
-        + fcl::Vec3f (clearance () + gripper->clearance (),0,0);
-      return RelativePosition::create ("Position_(1,0,0)_" + name () + "_" + gripper->name (),
-          gripper->joint()->robot(), gripper->joint (), joint(), target, fcl::Vec3f (0,0,0), mask);
+      std::vector <bool> mask = list_of (true)(false)(false)(false)(false)
+	(false);
+      Transform3f transform (gripper->objectPositionInJoint ().getRotation (),
+			     gripper->objectPositionInJoint ().getTranslation ()
+			     + fcl::Vec3f (gripper->clearance () +
+					   clearance (),0,0));
+      return RelativeTransformation::create
+	("Transformation_(1,0,0,0,0,0)_" + name () + "_" + gripper->name (),
+	 gripper->joint()->robot(), gripper->joint (), joint (),
+	 transform, localPosition(), mask);
     }
 
     DifferentiableFunctionPtr_t Handle::createPreGraspComplement
     (const GripperPtr_t& gripper, const value_type& shift) const
     {
       using boost::assign::list_of;
-      std::vector <bool> mask = list_of (true)(false)(false);
-      Transform3f transform = inverse (localPosition()) * gripper->objectPositionInJoint ();
-      fcl::Vec3f target = transform.getTranslation () + fcl::Vec3f (shift,0,0);
-      return RelativePosition::create ("Position_(1,0,0)_" + name () + "_" + gripper->name (),
-          gripper->joint()->robot(), gripper->joint (), joint(), target, fcl::Vec3f (0,0,0), mask);
+      std::vector <bool> mask = list_of (true)(false)(false)(false)(false)
+	(false);
+      Transform3f transform (gripper->objectPositionInJoint ().getRotation (),
+			     gripper->objectPositionInJoint ().getTranslation ()
+			     + fcl::Vec3f (gripper->clearance () +
+					   clearance () + shift,0,0));
+      return RelativeTransformation::create
+	("Transformation_(1,0,0,0,0,0)_" + name () + "_" + gripper->name (),
+	 gripper->joint()->robot(), gripper->joint (), joint (),
+	 transform, localPosition(), mask);
     }
 
     HandlePtr_t Handle::clone () const