diff --git a/quaternion.lua b/quaternion.lua
index 4aed970626dbe0c7ff6e51435f7769ad223620fe..d0af7da243da330a413ec6d21177651eb61ac7c5 100644
--- a/quaternion.lua
+++ b/quaternion.lua
@@ -32,10 +32,10 @@ function quaternion.identity() return quaternion.new() end
 function quaternion.mul_quaternion(q1, q2)
   local b, c, d, a = q1:normalized():unpack()
   local f, g, h, e = q2:normalized():unpack()
-  return quaternion.new(a*e - b*f - c*g - d*h,
-                        a*f + b*e + c*h - d*g,
+  return quaternion.new(a*f + b*e + c*h - d*g,
                         a*g + c*e + d*f - b*h,
-                        a*h + d*e + b*g - c*f)
+                        a*h + d*e + b*g - c*f,
+                        a*e - b*f - c*g - d*h)
 end
 
 -- Returns a vector equal to the vector v (size >= 3)