diff --git a/src/narrowphase/gjk_libccd.cpp b/src/narrowphase/gjk_libccd.cpp
index 0d76b060fb4a7c7dcbc8a792b54987d269454dba..145e3a5b168d61e074957b4a32431ea45a1c754a 100644
--- a/src/narrowphase/gjk_libccd.cpp
+++ b/src/narrowphase/gjk_libccd.cpp
@@ -579,11 +579,12 @@ static void supportCap(const void* obj, const ccd_vec3_t* dir_, ccd_vec3_t* v)
   ccdVec3Set(&pos2, CCD_ZERO, CCD_ZERO, -o->height);
 
   ccdVec3Copy(v, &dir);
+  ccdVec3Normalize (v);
   ccdVec3Scale(v, o->radius);
   ccdVec3Add(&pos1, v);
   ccdVec3Add(&pos2, v);
 
-  if(ccdVec3Dot(&dir, &pos1) > ccdVec3Dot(&dir, &pos2))
+  if(ccdVec3Z (&dir) > 0)
     ccdVec3Copy(v, &pos1);
   else
     ccdVec3Copy(v, &pos2);