diff --git a/Data/UUID.hs b/Data/UUID.hs
deleted file mode 100644
--- a/Data/UUID.hs
+++ /dev/null
@@ -1,97 +0,0 @@
-
-{-| The 'UUID' datatype.
- -}
-
-module Data.UUID
-  ( UUID()
-  ) where
-
-
-import Data.Word
-import Data.Char
-import Data.Binary
-import Data.Binary.Put
-import Data.Binary.Get
-import Data.Bits
-import Foreign.C
-import Foreign.ForeignPtr
-import Foreign
-import Control.Monad
-import Control.Applicative
-import Numeric
-import Text.ParserCombinators.ReadPrec (lift)
-import Text.ParserCombinators.ReadP
-import Text.Read hiding (pfail)
-import Data.List
-import Text.Printf
-
-
-{-| A type for Uniform Unique Identifiers. The 'Num' instance allows 'UUID's
-    to be specified with @0@, @1@, &c. -- testing for the null 'UUID' is
-    easier that way. The 'Storable' instance is compatible with most (all?)
-    systems' native representation of 'UUID's.
- -}
-data UUID                    =  UUID
-  !Word8 !Word8 !Word8 !Word8 !Word8 !Word8 !Word8 !Word8
-  !Word8 !Word8 !Word8 !Word8 !Word8 !Word8 !Word8 !Word8
- deriving (Eq, Ord)
-instance Show UUID where
-  show (UUID x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF)
-    = printf formatUUID x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
-   where
-    formatUUID               =  intercalate "-" $ map b [ 2, 1, 1, 1, 3 ]
-    b                        =  concat . (`replicate` "%02.2x%02.2x")
-instance Read UUID where
-  readPrec                   =  lift $ do
-    [x0,x1,x2,x3]           <-  count 4 byte
-    char '-'
-    [x4,x5]                 <-  count 2 byte
-    char '-'
-    [x6,x7]                 <-  count 2 byte
-    char '-'
-    [x8,x9]                 <-  count 2 byte
-    char '-'
-    [xA,xB,xC,xD,xE,xF]     <-  count 6 byte
-    return $ UUID x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
-   where
-    byte                     =  do
-      s                     <-  sequence $ replicate 2 $ satisfy isHexDigit
-      case readHex s of
-        [(b, _)]            ->  return b
-        _                   ->  pfail
-instance Storable UUID where
-  sizeOf _                   =  16
-  alignment _                =  4
-  peek p                     =  do
-    bytes                   <-  peekArray 16 $ castPtr p
-    return $ fromList bytes
-  poke p uuid                =  pokeArray (castPtr p) $ listOfBytes uuid 
-instance Num UUID where
-  fromInteger i             --  This really should be in a different class.
-    | i <= 0                 =  UUID  0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 0
-    | i >= 2^128             =  UUID  0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 0
-    | otherwise              =  fromList bytes 
-   where
-    bytes                    =  map shifter $ reverse [0,8..15*8]
-     where
-      shifter n              =  fromInteger $ i `shiftR` (8 * n)
-  (+)                        =  undefined
-  (-)                        =  undefined
-  (*)                        =  undefined
-  negate                     =  undefined
-  abs                        =  undefined
-  signum                     =  undefined
-instance Bounded UUID where
-  minBound                   =  0
-  maxBound                   =  2^128
-instance Binary UUID where
-  put                        =  mapM_ putWord8 . listOfBytes 
-  get                        =  fromList <$> sequence (replicate 16 getWord8) 
-
-
-listOfBytes (UUID x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF)
-  = [ x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, xA, xB, xC, xD, xE, xF ]
-
-fromList [ x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, xA, xB, xC, xD, xE, xF ]
-  = (UUID x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF)
-
diff --git a/System/UUID/V1.hs b/System/UUID/V1.hs
--- a/System/UUID/V1.hs
+++ b/System/UUID/V1.hs
@@ -12,6 +12,7 @@
 
 
 import System.UUID.FromForeign
+import Data.UUID (UUID)
 
 import Foreign.C
 import Foreign.Ptr
@@ -19,6 +20,7 @@
 
 {-| Obtain a Version 1 'UUID' with the native 'UUID' generator. 
  -}
+uuid                        ::  IO UUID
 uuid                         =  runAndRead native
 
 
diff --git a/System/UUID/V4.hs b/System/UUID/V4.hs
--- a/System/UUID/V4.hs
+++ b/System/UUID/V4.hs
@@ -12,6 +12,7 @@
 
 
 import System.UUID.FromForeign
+import Data.UUID (UUID)
 
 import Foreign.C
 import Foreign.Ptr
@@ -19,6 +20,7 @@
 
 {-| Obtain a Version 4 'UUID' with the native 'UUID' generator. 
  -}
+uuid                        ::  IO UUID
 uuid                         =  runAndRead native
 
 
diff --git a/system-uuid.cabal b/system-uuid.cabal
--- a/system-uuid.cabal
+++ b/system-uuid.cabal
@@ -1,11 +1,11 @@
 name                          : system-uuid
-version                       : 1.1.0
+version                       : 1.2.0
 category                      : System
 license                       : BSD3
 license-file                  : LICENSE
 author                        : Jason Dusek
-maintainer                    : jason.dusek@gmail.com
-homepage                      : http://github.com/jsnx/system-uuid/
+maintainer                    : system-uuid@solidsnack.be
+homepage                      : http://github.com/solidsnack/system-uuid/
 synopsis                      : Bindings to system UUID functions.
 description                   :
   Bindings to the native UUID generator for a number of platforms. Please
@@ -24,16 +24,16 @@
 
 
 library
-  build-depends               : base 
+  build-depends               : base <= 4
                               , containers
                               , binary
                               , regex-compat
                               , template-haskell
                               , parsec
+                              , uuid >= 1.0 && < 1.3
   exposed-modules             : System.UUID.V1
                                 System.UUID.V4
                                 System.UUID.FromForeign
-                                Data.UUID
   if os(linux)
     extra-libraries           : uuid
   if os(mingw32)
