diff --git a/System/Random/Mersenne/Pure64.hs b/System/Random/Mersenne/Pure64.hs
--- a/System/Random/Mersenne/Pure64.hs
+++ b/System/Random/Mersenne/Pure64.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE CPP, ForeignFunctionInterface #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
 --------------------------------------------------------------------
 -- |
 -- Module     : System.Random.Mersenne.Pure64
@@ -43,6 +44,7 @@
 ------------------------------------------------------------------------
 
 import System.Random.Mersenne.Pure64.MTBlock
+import System.Random.Mersenne.Pure64.Internal
 import System.Random
 import Data.Word
 import Data.Int
@@ -110,13 +112,6 @@
     mt | i < blockLen-1 = PureMT block (i+1) nxt
        | otherwise      = mkPureMT nxt
 {-# INLINE randomWord64 #-}
-
--- | 'PureMT', a pure mersenne twister pseudo-random number generator
---
-data PureMT  = PureMT {-# UNPACK #-} !MTBlock {-# UNPACK #-} !Int MTBlock
-
-instance Show PureMT where
-    show _ = show "<PureMT>"
 
 -- create a new PureMT from an MTBlock
 mkPureMT :: MTBlock -> PureMT
diff --git a/System/Random/Mersenne/Pure64/Internal.hs b/System/Random/Mersenne/Pure64/Internal.hs
new file mode 100644
--- /dev/null
+++ b/System/Random/Mersenne/Pure64/Internal.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE MagicHash #-}
+module System.Random.Mersenne.Pure64.Internal
+  ( PureMT(..)
+
+  , blockLen
+  , blockSize
+  , MTBlock(..)
+  ) where
+
+import GHC.Exts
+import System.Random.Mersenne.Pure64.Base
+
+-- | 'PureMT', a pure mersenne twister pseudo-random number generator
+--
+data PureMT  = PureMT {-# UNPACK #-} !MTBlock {-# UNPACK #-} !Int MTBlock
+
+instance Show PureMT where
+    show _ = show "<PureMT>"
+
+data MTBlock = MTBlock ByteArray#
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
@@ -37,8 +37,7 @@
 #endif
 import GHC.Word
 import System.Random.Mersenne.Pure64.Base
-
-data MTBlock = MTBlock ByteArray#
+import System.Random.Mersenne.Pure64.Internal
 
 allocateBlock :: IO MTBlock
 allocateBlock =
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.4
+version:         0.2.0.5
 homepage:        http://code.haskell.org/~dons/code/mersenne-random-pure64/
 synopsis:        Generate high quality pseudorandom numbers purely using a Mersenne Twister
 description:
@@ -40,6 +40,7 @@
     exposed-modules: System.Random.Mersenne.Pure64
                      System.Random.Mersenne.Pure64.Base
                      System.Random.Mersenne.Pure64.MTBlock
+                     System.Random.Mersenne.Pure64.Internal
     extensions:      CPP, ForeignFunctionInterface
 
     if flag(small_base)
