diff --git a/Data/LargeWord.hs b/Data/LargeWord.hs
--- a/Data/LargeWord.hs
+++ b/Data/LargeWord.hs
@@ -150,7 +150,7 @@
 instance (Ord a, Bits a, Num a, LargeWord a, Bits b, Num b, LargeWord b) => Show (LargeKey a b) where
    showsPrec p = showInt . largeWordToInteger
 
-instance (Ord b, Ord a, Bits a, Num a, LargeWord a, Bits b, Num b, LargeWord b) => 
+instance (Ord b, Ord a, Bits a, Num a, LargeWord a, Bits b, Num b, LargeWord b) =>
    Num (LargeKey a b) where
       (+) = largeWordPlus
       (-) = largeWordMinus
@@ -163,16 +163,21 @@
       negate = id
       abs    = id
       signum a = if a > 0 then 1 else 0
-      fromInteger = integerToLargeWord 
+      fromInteger = integerToLargeWord
 
 -- Larger keys are instances of Bits provided their constituents are keys.
 
-instance (Ord a, Ord b, Bits a, Num a, LargeWord a, Bits b, Num b, LargeWord b) => 
+instance (Ord a, Ord b, Bits a, Num a, LargeWord a, Bits b, Num b, LargeWord b) =>
    Bits (LargeKey a b) where
       (.&.) = largeWordAnd
       (.|.) = largeWordOr
       xor = largeWordXor
       shift = largeWordShift
+      x `rotate`  i | i < 0  = (x `largeWordShift` i) .|.
+                               (x `largeWordShift` (i + largeBitSize x))
+                    | i == 0 = x
+                    | i > 0  = (x `largeWordShift` i) .|.
+                               (x `largeWordShift` (i - largeBitSize x))
       complement (LargeKey a b) = LargeKey (complement a) (complement b)
       bitSize = largeBitSize
       isSigned _ = False
@@ -182,8 +187,8 @@
       popCount = popCountDefault
 #endif
 
-instance (Ord a, Bits a, Bounded a, Integral a, LargeWord a, 
-                 Bits b, Bounded b, Integral b, LargeWord b) => 
+instance (Ord a, Bits a, Bounded a, Integral a, LargeWord a,
+                 Bits b, Bounded b, Integral b, LargeWord b) =>
    Bounded (LargeKey a b) where
       minBound = 0
       maxBound =
diff --git a/largeword.cabal b/largeword.cabal
--- a/largeword.cabal
+++ b/largeword.cabal
@@ -1,5 +1,5 @@
 name:           largeword
-version:        1.0.4
+version:        1.0.5
 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.4.1
+tested-with:    GHC == 7.0.3, GHC == 7.6.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
@@ -34,7 +34,7 @@
                  test-framework-hunit >= 0.2.6 && < 0.4,
                  QuickCheck >= 2.4.0.1,
                  HUnit >= 1.2.2.3,
-                 largeword == 1.0.4
+                 largeword == 1.0.5
 
 
 
