diff --git a/src/handle.cc b/src/handle.cc
index 9d512a254fe749a55ba077194334aa81c2da57be..fe5c917413321839b71e6e4074e9e3513f38942e 100644
--- a/src/handle.cc
+++ b/src/handle.cc
@@ -72,13 +72,13 @@ namespace hpp {
       return false;
     }
 
-    inline std::size_t maskSize (const std::vector<bool>& mask)
+    inline int maskSize (const std::vector<bool>& mask)
     {
       std::size_t res (0);
       for (std::size_t i = 0; i < 6; ++i) {
         if (mask[i]) ++res;
       }
-      return res;
+      return (int)res;
     }
 
     inline bool is6Dmask (const std::vector<bool>& mask)
@@ -130,7 +130,7 @@ namespace hpp {
 	return constraints::explicit_::RelativePose::create
 	  (n, robot (), gripper->joint (), joint (),
 	   gripper->objectPositionInJoint (), localPosition(),
-           mask_, ComparisonTypes_t (6, constraints::EqualToZero));
+           6 * constraints::EqualToZero);
       }
       return Implicit::create (RelativeTransformation::create
          (n, robot (), gripper->joint (), joint (),
@@ -150,15 +150,14 @@ namespace hpp {
       if (is6Dmask(mask_)) {
         return Implicit::create (
             boost::shared_ptr <ZeroDiffFunc> (new ZeroDiffFunc (
-                r->configSize(), r->numberDof (), n))
-            );
+              r->configSize(), r->numberDof (), n)), ComparisonTypes_t());
       } else {
         std::vector<bool> Cmask = complementMask(mask_);
         return  Implicit::create (RelativeTransformation::create
            (n, r, gripper->joint (), joint (),
             gripper->objectPositionInJoint (), localPosition(),
             Cmask),
-           ComparisonTypes_t (maskSize (Cmask), constraints::Equality));
+           maskSize(Cmask) * constraints::Equality);
       }
     }
 
@@ -184,8 +183,7 @@ namespace hpp {
       if (isHandleOnFreeflyer (*this)) {
 	return constraints::explicit_::RelativePose::create
 	  (n, robot (), gripper->joint (), joint (),
-	   gripper->objectPositionInJoint (), localPosition(),
-           std::vector <bool> (6, true), comp);
+	   gripper->objectPositionInJoint (), localPosition(), comp);
       }
       return Implicit::create (RelativeTransformation::create
          (n, robot (), gripper->joint (), joint (),
@@ -206,7 +204,7 @@ namespace hpp {
          (RelativeTransformation::create
           (n, robot(), gripper->joint (), joint (),
            M, localPosition(), mask_),
-          ComparisonTypes_t(maskSize (mask_), constraints::EqualToZero)));
+          maskSize(mask_) * constraints::EqualToZero));
       return result;
     }
 
diff --git a/src/problem-solver.cc b/src/problem-solver.cc
index 43e64d85943b59875249ce6aa80b813f2e7c032c..381549a663ecfee2004e56587529a6c40b7a4d59 100644
--- a/src/problem-solver.cc
+++ b/src/problem-solver.cc
@@ -324,7 +324,8 @@ namespace hpp {
         (hpp::constraints::ConvexShapeContact::create
          (name, robot_, floorSurfaces, objectSurfaces));
       cvxShape->setNormalMargin(margin + width);
-      addNumericalConstraint (name, Implicit::create (cvxShape));
+      addNumericalConstraint (name, Implicit::create
+                              (cvxShape, 5 * constraints::EqualToZero));
     }
 
     void ProblemSolver::createGraspConstraint