diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,7 @@
+0.2.1
+-----
+* Fixed bug in `signum`
+
 0.2
 ---
 * Convert to/from Double to avoid precision issues.
diff --git a/fixed.cabal b/fixed.cabal
--- a/fixed.cabal
+++ b/fixed.cabal
@@ -1,6 +1,6 @@
 name:          fixed
 category:      Numeric
-version:       0.2
+version:       0.2.1
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
diff --git a/src/Numeric/Fixed.hs b/src/Numeric/Fixed.hs
--- a/src/Numeric/Fixed.hs
+++ b/src/Numeric/Fixed.hs
@@ -30,7 +30,7 @@
   (-) = coerce ((-) :: CInt -> CInt -> CInt)
   negate = coerce (negate :: CInt -> CInt)
   abs = coerce (abs :: CInt -> CInt)
-  signum = coerce (signum :: CInt -> CInt)
+  signum (Fixed a) = Fixed $ unsafeShiftL (signum a) 16
   Fixed a * Fixed b = Fixed $ fromIntegral (unsafeShiftR (fromIntegral a * fromIntegral b) 16 :: Int64)
   fromInteger i = Fixed $ unsafeShiftL (fromInteger i) 16
 
