diff --git a/bench/Benchmark.hs b/bench/Benchmark.hs
new file mode 100644
--- /dev/null
+++ b/bench/Benchmark.hs
@@ -0,0 +1,34 @@
+module Main where
+
+import Criterion.Main
+import Control.DeepSeq
+import Data.Int.Int24
+import Data.Word.Word24
+import Data.Word
+import Data.List
+
+main = defaultMain
+  [ bgroup "Int24" intses
+  , bgroup "Word24" wordses
+  , bgroup "Int"    baseses
+  , bgroup "Word64" basessW
+  ]
+
+benches :: (Enum i, Num i, NFData i, Integral i) => i -> [Benchmark]
+benches x =
+   [ bench "Add" $ nf (\i -> foldl' (+) i [1..100]) x
+   , bench "Mul" $ nf (\i -> foldl' (*) i [1..100]) x
+   , bench "quot" $ nf (\i -> map (flip quot i) [1..25]) x
+   , bench "rem" $ nf (\i -> map (flip rem i) [1..25]) x
+   , bench "div" $ nf (\i -> map (flip div i) [1..25]) x
+   , bench "mod" $ nf (\i -> map (flip mod i) [1..25]) x
+   ]
+{-# INLINE benches #-}
+
+intses  = benches (1 :: Int24)
+wordses = benches (1 :: Word24)
+baseses = benches (1 :: Int)
+basessW = benches (1 :: Word64)
+
+instance NFData Int24
+instance NFData Word24
diff --git a/src/Data/Int/Int24.hs b/src/Data/Int/Int24.hs
--- a/src/Data/Int/Int24.hs
+++ b/src/Data/Int/Int24.hs
@@ -164,6 +164,9 @@
     {-# INLINE shiftR #-}
     -- same as the default definition, but we want it inlined (#2376)
     x `shiftR`  i = x `shift`  (-i)
+    bit      = bitDefault
+    testBit  = testBitDefault
+    popCount = popCountDefault
 
 {-# RULES
 "fromIntegral/Word8->Int24"   fromIntegral = \(W8# x#) -> I24# (word2Int# x#)
diff --git a/src/Data/Word/Word24.hs b/src/Data/Word/Word24.hs
--- a/src/Data/Word/Word24.hs
+++ b/src/Data/Word/Word24.hs
@@ -124,6 +124,9 @@
       !(I# i'#) = i `mod` 24
   bitSize _                 = 24
   isSigned _                = False
+  bit                       = bitDefault
+  testBit (W24# x) n        = testBit (W32# x) n
+  popCount (W24# x)         = popCount (W32# x)
 
   {-# INLINE shiftR #-}
   x `shiftR` i = x `shift` (-i)
diff --git a/tests/QCUtils.hs b/tests/QCUtils.hs
deleted file mode 100644
--- a/tests/QCUtils.hs
+++ /dev/null
@@ -1,26 +0,0 @@
-module QCUtils where
-
-import Test.QuickCheck
-import Test.QuickCheck.Arbitrary
-import Test.QuickCheck.Gen
-
-import Data.Int
-import Data.Int.Int24
-import Data.Word
-import Data.Word.Word24
-
--- Arbitrary/CoArbitrary instances for Int24 and Word24
-
-instance Arbitrary Int24 where
-  arbitrary = arbitraryBoundedIntegral
-  shrink = shrinkIntegral
-
-instance CoArbitrary Int24 where
-  coarbitrary = coarbitraryIntegral
-
-instance Arbitrary Word24 where
-  arbitrary = arbitraryBoundedIntegral
-  shrink = shrinkIntegral
-
-instance CoArbitrary Word24 where
-  coarbitrary = coarbitraryIntegral
diff --git a/word24.cabal b/word24.cabal
--- a/word24.cabal
+++ b/word24.cabal
@@ -1,5 +1,5 @@
 name:		word24
-version:        1.0.3
+version:        1.0.4
 synopsis:       24-bit word and int types for GHC
 description:	24-bit Word and Int data types.
 category:       Data
@@ -11,20 +11,16 @@
 tested-with:    GHC == 7.0.4, GHC == 7.2.1, GHC == 7.4.2
 stability:	stable
 
-cabal-version:  >= 1.6
+cabal-version:  >= 1.10
 build-type:     Simple
 
 extra-source-files:
   README
   LICENSE
 
-flag buildTests
-  description: Build test executables.
-  default:     False
-
 library
- hs-source-dirs:
-   src
+ default-language: Haskell2010
+ hs-source-dirs: src
 
  build-depends:
    base >= 3 && < 5
@@ -33,30 +29,37 @@
    Data.Int.Int24
    Data.Word.Word24
 
- ghc-options:   -O2 -Wall
+ ghc-options:   -Wall
  if impl(ghc >= 6.8)
    ghc-options: -fwarn-tabs
 
-executable testWord24
-  hs-source-dirs:
-    src
-    tests
-
+Test-Suite test
+  default-language: Haskell2010
+  type: exitcode-stdio-1.0
   main-is: testword24.hs
+  hs-source-dirs: tests src
+  ghc-options:    -fhpc -hpcdir dist/hpc/mix/word24-1.0.4
 
-  other-modules:
-    QCUtils
+  build-depends:
+    base,
+    word24,
+    QuickCheck                 >= 2 && < 3,
+    test-framework             >= 0.2 && < 0.7,
+    test-framework-quickcheck2 >= 0.2 && < 0.7
 
-  if flag(buildTests)
-    build-depends:
-      QuickCheck                 >= 2 && < 3,
-      test-framework             >= 0.2 && < 0.3,
-      test-framework-quickcheck2 >= 0.2 && < 0.3
-  else
-    buildable:  False
+benchmark bench24
+  default-language: Haskell2010
+  type: exitcode-stdio-1.0
+  hs-source-dirs: bench
+  main-is:        Benchmark.hs
 
-  build-depends:  base >= 3 && < 5
+  build-depends:
+      base,
+      word24,
+      criterion  >= 0.6 && < 0.9,
+      deepseq    >= 1.2 && < 2
+  ghc-options: -O2
 
 source-repository head
-  type:     darcs
-  location: http://www.tiresiaspress.us/haskell/word24
+  type:     git
+  location: git@github.com:JohnLato/word24.git
