diff --git a/src/handle.cc b/src/handle.cc
index 0a37c5bacd39afc8bc67e480092561cdc2140cb6..1022ad1b0754a3644abb074aeb61650925515af1 100644
--- a/src/handle.cc
+++ b/src/handle.cc
@@ -69,6 +69,15 @@ namespace hpp {
       return false;
     }
 
+    inline std::size_t 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;
+    }
+
     inline bool is6Dmask (const std::vector<bool>& mask)
     {
       for (std::size_t i = 0; i < 6; ++i) if (!mask[i]) return false;
@@ -123,7 +132,7 @@ namespace hpp {
       return constraints::implicit::RelativePose::create
         (n, gripper->joint ()->robot (), gripper->joint (), joint (),
          gripper->objectPositionInJoint (), localPosition(),
-         mask_, ComparisonTypes_t (mask_.size (), constraints::EqualToZero));
+         mask_, ComparisonTypes_t (maskSize (mask_), constraints::EqualToZero));
     }
 
     ImplicitPtr_t Handle::createGraspComplement
@@ -145,7 +154,7 @@ namespace hpp {
         return constraints::implicit::RelativePose::create
           (n, gripper->joint ()->robot (), gripper->joint (), joint (),
            gripper->objectPositionInJoint (), localPosition(),
-           Cmask, ComparisonTypes_t (Cmask.size (), constraints::Equality));
+           Cmask, ComparisonTypes_t (maskSize (Cmask), constraints::Equality));
       }
     }
 
@@ -192,7 +201,7 @@ namespace hpp {
         (constraints::implicit::RelativePose::create
          (n, gripper->joint()->robot(), gripper->joint (), joint (),
           transform, localPosition(), mask_, ComparisonTypes_t
-          (mask_.size (), constraints::EqualToZero)));
+          (maskSize (mask_), constraints::EqualToZero)));
       return result;
     }