diff --git a/src/BVH/BV_fitter.cpp b/src/BVH/BV_fitter.cpp
index a303d8a5ba9a93aba8ede5ebda50065032f9d57b..419c38eb033f6d45db2b2cde1be1128a244f8188 100644
--- a/src/BVH/BV_fitter.cpp
+++ b/src/BVH/BV_fitter.cpp
@@ -156,11 +156,10 @@ void fit2(Vec3f* ps, RSS& bv)
 {
   const Vec3f& p1 = ps[0];
   const Vec3f& p2 = ps[1];
-  Vec3f p1p2 = p1 - p2;
-  FCL_REAL len_p1p2 = p1p2.norm();
-  p1p2.normalize();
+  bv.axes.col(0).noalias() = p1 - p2;
+  FCL_REAL len_p1p2 = bv.axes.col(0).norm();
+  bv.axes.col(0) /= len_p1p2;
 
-  bv.axes.col(0) = p1p2;
   generateCoordinateSystem(bv.axes.col(0), bv.axes.col(1), bv.axes.col(2));
   bv.l[0] = len_p1p2;
   bv.l[1] = 0;
diff --git a/src/narrowphase/gjk.cpp b/src/narrowphase/gjk.cpp
index fc65947a3c8dc9bd961a584dc9d613d80c63b602..1a705c617f60ef65fffe489feb0aa47d542e6f23 100644
--- a/src/narrowphase/gjk.cpp
+++ b/src/narrowphase/gjk.cpp
@@ -305,14 +305,14 @@ GJK::Status GJK::evaluate(const MinkowskiDiff& shape_, const Vec3f& guess)
 
 void GJK::getSupport(const Vec3f& d, SimplexV& sv) const
 {
-  sv.d = d.normalized();
-  sv.w = shape.support(sv.d);
+  sv.d.noalias() = d.normalized();
+  sv.w.noalias() = shape.support(sv.d);
 }
 
 void GJK::getSupport(const Vec3f& d, const Vec3f& v, SimplexV& sv) const
 {
-  sv.d = d.normalized();
-  sv.w = shape.support(sv.d, v);
+  sv.d.noalias() = d.normalized();
+  sv.w.noalias() = shape.support(sv.d, v);
 }
 
 void GJK::removeVertex(Simplex& simplex)
diff --git a/src/narrowphase/narrowphase.cpp b/src/narrowphase/narrowphase.cpp
index befa60902cfa77b950d5662dd8b0488a20b8f9a6..662f7e19a166f060dc5f07efac288a23d6cabf19 100644
--- a/src/narrowphase/narrowphase.cpp
+++ b/src/narrowphase/narrowphase.cpp
@@ -89,7 +89,7 @@ bool sphereCapsuleIntersect(const Sphere& s1, const Transform3f& tf1,
   if (distance > 0)
     return false;
 
-  Vec3f normal = diff.normalized() * - FCL_REAL(1);
+  Vec3f normal (-diff.normalized());
 
   if (distance < 0 && penetration_depth)
     *penetration_depth = -distance;
@@ -799,8 +799,8 @@ int boxBox2(const Vec3f& side1, const Matrix3f& R1, const Vec3f& T1,
   Vec3f pp (R1.transpose() * p); // get pp = p relative to body 1
 
   // get side lengths / 2
-  Vec3f A = side1 * 0.5;
-  Vec3f B = side2 * 0.5;
+  Vec3f A (side1 * 0.5);
+  Vec3f B (side2 * 0.5);
 
   // Rij is R1'*R2, i.e. the relative rotation between R1 and R2
   Matrix3f R (R1.transpose() * R2);
diff --git a/src/shape/geometric_shapes_utility.cpp b/src/shape/geometric_shapes_utility.cpp
index 97d0a8d5c02a3e4dcff8b8e2f45b1c21166bb5ab..84a30982ef5c78149558ad12201a0aabb9293e26 100644
--- a/src/shape/geometric_shapes_utility.cpp
+++ b/src/shape/geometric_shapes_utility.cpp
@@ -411,7 +411,7 @@ void computeBV<OBB, Box>(const Box& s, const Transform3f& tf, OBB& bv)
   const Matrix3f& R = tf.getRotation();
   const Vec3f& T = tf.getTranslation();
 
-  bv.To = T;
+  bv.To.noalias() = T;
   bv.axes.noalias() = R;
   bv.extent = s.side * (FCL_REAL)0.5;
 }
@@ -421,7 +421,7 @@ void computeBV<OBB, Sphere>(const Sphere& s, const Transform3f& tf, OBB& bv)
 {
   const Vec3f& T = tf.getTranslation();
 
-  bv.To = T;
+  bv.To.noalias() = T;
   bv.axes.setIdentity();
   bv.extent.setConstant(s.radius);
 }
@@ -432,7 +432,7 @@ void computeBV<OBB, Capsule>(const Capsule& s, const Transform3f& tf, OBB& bv)
   const Matrix3f& R = tf.getRotation();
   const Vec3f& T = tf.getTranslation();
 
-  bv.To = T;
+  bv.To.noalias() = T;
   bv.axes.noalias() = R;
   bv.extent << s.radius, s.radius, s.lz / 2 + s.radius;
 }
@@ -443,7 +443,7 @@ void computeBV<OBB, Cone>(const Cone& s, const Transform3f& tf, OBB& bv)
   const Matrix3f& R = tf.getRotation();
   const Vec3f& T = tf.getTranslation();
 
-  bv.To = T;
+  bv.To.noalias() = T;
   bv.axes.noalias() = R;
   bv.extent << s.radius, s.radius, s.lz / 2;
 }
@@ -454,7 +454,7 @@ void computeBV<OBB, Cylinder>(const Cylinder& s, const Transform3f& tf, OBB& bv)
   const Matrix3f& R = tf.getRotation();
   const Vec3f& T = tf.getTranslation();
 
-  bv.To = T;
+  bv.To.noalias() = T;
   bv.axes.noalias() = R;
   bv.extent << s.radius, s.radius, s.lz / 2;
 }
@@ -467,7 +467,7 @@ void computeBV<OBB, Convex>(const Convex& s, const Transform3f& tf, OBB& bv)
 
   fit(s.points, s.num_points, bv);
 
-  bv.axes = R * bv.axes;
+  bv.axes.applyOnTheLeft(R);
 
   bv.To = R * bv.To + T;
 }