diff --git a/System/Random/Mersenne/Pure64/MTBlock.hs b/System/Random/Mersenne/Pure64/MTBlock.hs
--- a/System/Random/Mersenne/Pure64/MTBlock.hs
+++ b/System/Random/Mersenne/Pure64/MTBlock.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE MagicHash, UnboxedTuples #-}
+{-# LANGUAGE MagicHash, UnboxedTuples, BangPatterns #-}
 --------------------------------------------------------------------
 -- |
 -- Module     : System.Random.Mersenne.Pure64
@@ -42,14 +42,14 @@
         (# s1, b0 #) -> case unsafeFreezeByteArray# b0 s1 of
             (# s2, b1 #) -> (# s2, MTBlock b1 #)
   where
-    I# blockSize# = blockSize
+    !(I# blockSize#) = blockSize
 
 blockAsPtr :: MTBlock -> Ptr a
 blockAsPtr (MTBlock b) = Ptr (byteArrayContents# b)
 
 -- | create a new MT block, seeded with the given Word64 value
 seedBlock :: Word64 -> MTBlock
-seedBlock seed = unsafePerformIO $ do
+seedBlock seed = unsafeDupablePerformIO $ do
     b <- allocateBlock
     c_seed_genrand64_block (blockAsPtr b) seed
     c_next_genrand64_block (blockAsPtr b) (blockAsPtr b)
@@ -59,7 +59,7 @@
 
 -- | step: create a new MTBlock buffer from the previous one
 nextBlock :: MTBlock -> MTBlock
-nextBlock b = unsafePerformIO $ do
+nextBlock b = unsafeDupablePerformIO $ do
     new <- allocateBlock
     c_next_genrand64_block (blockAsPtr b) (blockAsPtr new)
     touch b
diff --git a/mersenne-random-pure64.cabal b/mersenne-random-pure64.cabal
--- a/mersenne-random-pure64.cabal
+++ b/mersenne-random-pure64.cabal
@@ -1,5 +1,5 @@
 name:            mersenne-random-pure64
-version:         0.2.0.2
+version:         0.2.0.3
 homepage:        http://code.haskell.org/~dons/code/mersenne-random-pure64/
 synopsis:        Generate high quality pseudorandom numbers purely using a Mersenne Twister
 description:
@@ -41,7 +41,7 @@
     if flag(small_base)
         build-depends: base  < 3
     else
-        build-depends: base >= 3, old-time, random
+        build-depends: base >= 3 && < 6, old-time, random
 
     cc-options:
         -O3 -finline-functions -fomit-frame-pointer
