diff --git a/Data/LargeWord.hs b/Data/LargeWord.hs
--- a/Data/LargeWord.hs
+++ b/Data/LargeWord.hs
@@ -42,6 +42,23 @@
 import Data.Binary (Binary, put, get)
 
 
+#if MIN_VERSION_base(4,6,0) && !(MIN_VERSION_base(4,7,0))
+class FiniteBits a where
+  finiteBitSize :: a -> Int
+
+instance FiniteBits Word8 where
+  finiteBitSize = bitSize
+
+instance FiniteBits Word16 where
+  finiteBitSize = bitSize
+
+instance FiniteBits Word32 where
+  finiteBitSize = bitSize
+
+instance FiniteBits Word64 where
+  finiteBitSize = bitSize
+#endif
+
 -- Keys have certain capabilities.
 
 class LargeWord a where
@@ -208,7 +225,9 @@
                                           "but ghc can't determine this"
       complement (LargeKey a b) = LargeKey (complement a) (complement b)
       bitSize = largeBitSize
+#if MIN_VERSION_base(4,7,0)
       bitSizeMaybe = Just . largeBitSize
+#endif
       isSigned _ = False
 #if MIN_VERSION_base(4,6,0)
       bit = bitDefault
@@ -216,8 +235,8 @@
       popCount = popCountDefault
 #endif
 
-instance (LargeWord a, FiniteBits a, Ord a, Num a,
-          LargeWord b, FiniteBits b, Ord b, Num b) => FiniteBits (LargeKey a b) where
+instance (LargeWord a, Bits a, FiniteBits a, Ord a, Num a,
+          LargeWord b, Bits b, FiniteBits b, Ord b, Num b) => FiniteBits (LargeKey a b) where
   finiteBitSize = largeBitSize
 
 instance (Ord a, Bits a, FiniteBits a, Bounded a, Integral a, LargeWord a,
diff --git a/Tests/Properties.hs b/Tests/Properties.hs
--- a/Tests/Properties.hs
+++ b/Tests/Properties.hs
@@ -52,18 +52,20 @@
 
 pRepeatedShift :: Int -> Property
 pRepeatedShift n =
-  (n >= 0) ==> (((iterate (`shift` 8) (1::Word192))!!n) == shift (1::Word192) (n*8))
+  (n >= 0) && (n <= 1024) ==>
+  (((iterate (`shift` 8) (1::Word192))!!n) == shift (1::Word192) (n*8))
 
 pRepeatedShift' :: Int -> Property
 pRepeatedShift' n =
-  (n >= 0) ==> (((iterate (`shift` 8) a)!!n) == shift a (n*8))
+  (n >= 0) && (n <= 1024) ==>
+  (((iterate (`shift` 8) a)!!n) == shift a (n*8))
   where a :: Word192
         a = 0x0123456789ABCDEFFEDCBA98765432100011223344556677
 
-
 pRepeatedShift160 :: Int -> Property
 pRepeatedShift160 n =
-  (n >= 0) ==> (((iterate (`shift` 8) (1::Word160))!!n) == shift (1::Word160) (n*8))
+  (n >= 0) && (n <= 1024) ==>
+  (((iterate (`shift` 8) (1::Word160))!!n) == shift (1::Word160) (n*8))
 
 u2 :: Assertion
 u2 = (2 :: LargeKey Word256 Word128) ^ 254 @?=
diff --git a/largeword.cabal b/largeword.cabal
--- a/largeword.cabal
+++ b/largeword.cabal
@@ -1,5 +1,5 @@
 name:           largeword
-version:        1.2.1
+version:        1.2.2
 license:        BSD3
 copyright:      Dominic Steinitz <dominic@steinitz.org>
 author:         Dominic Steinitz <dominic@steinitz.org>
@@ -11,7 +11,7 @@
 stability:      stable
 build-type:     Simple
 cabal-version:  >= 1.9.2
-tested-with:    GHC == 7.0.3, GHC == 7.6.2
+tested-with:    GHC == 7.6.2, GHC == 7.8.2
 -- Tests/Properties.hs shouldn't have to go here, but the source files
 -- for the test-suite stanzas don't get picked up by `cabal sdist`.
 Extra-source-files: Tests/Properties.hs
@@ -37,7 +37,7 @@
                  test-framework-hunit >= 0.2.6 && < 0.4,
                  QuickCheck >= 2.4.0.1,
                  HUnit >= 1.2.2.3,
-                 largeword == 1.2.1
+                 largeword == 1.2.2
 
 
 
