diff --git a/lapack.cabal b/lapack.cabal
--- a/lapack.cabal
+++ b/lapack.cabal
@@ -1,5 +1,5 @@
 Name:             lapack
-Version:          0.2.3.1
+Version:          0.2.4
 License:          BSD3
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
@@ -45,7 +45,7 @@
   default:     False
 
 Source-Repository this
-  Tag:         0.2.3.1
+  Tag:         0.2.4
   Type:        darcs
   Location:    http://hub.darcs.net/thielema/lapack/
 
@@ -66,6 +66,7 @@
     transformers >=0.3 && <0.6,
     tfp >=1.0.1 && <1.1,
     fixed-length >=0.2 && <0.3,
+    semigroups >=0.18.3 && <0.19,
     non-empty >=0.3 && <0.4,
     utility-ht >=0.0.10 && <0.1,
     base >=4.5 && <5
@@ -142,7 +143,7 @@
     ChasingBottoms >=1.2.2 && <1.4,
     transformers,
     monoid-transformer >=0.0.3 && <0.1,
-    semigroups >=0.18.3 && <0.19,
+    semigroups,
     non-empty >=0.3.1,
     utility-ht,
     base
diff --git a/src/Numeric/LAPACK/Permutation/Private.hs b/src/Numeric/LAPACK/Permutation/Private.hs
--- a/src/Numeric/LAPACK/Permutation/Private.hs
+++ b/src/Numeric/LAPACK/Permutation/Private.hs
@@ -34,6 +34,8 @@
 import Control.Applicative ((<$>))
 
 import Data.Bool.HT (if')
+import Data.Monoid (Monoid, mempty, mappend)
+import Data.Semigroup (Semigroup, (<>))
 
 
 newtype Permutation sh = Permutation (Vector sh CInt)
@@ -101,6 +103,13 @@
 
 data Sign = Negative | Positive
    deriving (Eq, Show)
+
+instance Semigroup Sign where
+   x<>y = if x==y then Positive else Negative
+
+instance Monoid Sign where
+   mempty = Positive
+   mappend = (<>)
 
 {-
 We could also count the cycles of even number. This might be a little faster.
diff --git a/test/Test/Permutation.hs b/test/Test/Permutation.hs
--- a/test/Test/Permutation.hs
+++ b/test/Test/Permutation.hs
@@ -25,6 +25,8 @@
 import Control.Monad (forM)
 import Control.Applicative (liftA2, (<$>))
 
+import Data.Monoid ((<>))
+
 import qualified Test.QuickCheck as QC
 
 
@@ -45,6 +47,12 @@
    ==
    Array.toList xs
 
+determinantMultiply :: (Permutation ZeroInt, Permutation ZeroInt) -> Bool
+determinantMultiply (p0,p1) =
+   Perm.determinant (Perm.multiply p0 p1)
+   ==
+   Perm.determinant p0 <> Perm.determinant p1
+
 transposeMultiply :: (Permutation ZeroInt, Permutation ZeroInt) -> Bool
 transposeMultiply (p0,p1) =
    (Array.toList $ Perm.toPivots NonInverted $
@@ -128,6 +136,12 @@
          QC.forAll QC.arbitraryBoundedEnum $ \inv ->
          QC.forAll (QC.arbitrary >>= genPivots) $ \pivot ->
             permutationPivots inv pivot) :
+   ("determinantMultiply",
+      QC.property $
+         QC.forAll
+            (do nat <- QC.arbitrary
+                liftA2 (,) (genPerm nat) (genPerm nat))
+            determinantMultiply) :
    ("transposeMultiply",
       QC.property $
          QC.forAll
