diff --git a/Control/Monad/Free.hs b/Control/Monad/Free.hs
--- a/Control/Monad/Free.hs
+++ b/Control/Monad/Free.hs
@@ -18,8 +18,9 @@
   ) where
 
 import Control.Applicative
+import Control.DeepSeq
 import Control.Monad
-import Control.Monad.Trans
+import Control.Monad.Trans.Class
 import Data.Foldable
 import Data.Monoid
 import Data.Traversable as T
@@ -34,7 +35,7 @@
     free = evalFree (Pure . Left) (Pure . Right)
     wrap = Impure
 
-data Free f a = Impure (f (Free f a)) | Pure a
+data Free f a = Impure !(f (Free f a)) | Pure a
 deriving instance (Eq a, Eq (f(Free f a))) => Eq (Free f a)
 deriving instance (Ord a, Ord (f(Free f a))) => Ord (Free f a)
 deriving instance (Show a, Show (f(Free f a))) => Show (Free f a)
@@ -55,6 +56,10 @@
     return          = Pure
     Pure a    >>= f = f a
     Impure fa >>= f = Impure (fmap (>>= f) fa)
+
+instance (NFData a, NFData (f(Free f a))) => NFData (Free f a) where
+  rnf (Pure a) = rnf a `seq` ()
+  rnf (Impure fa) = rnf fa `seq` ()
 
 isPure Pure{} = True; isPure _ = False
 isImpure = not . isPure
diff --git a/Control/Monad/Free/Zip.hs b/Control/Monad/Free/Zip.hs
--- a/Control/Monad/Free/Zip.hs
+++ b/Control/Monad/Free/Zip.hs
@@ -2,7 +2,7 @@
 module Control.Monad.Free.Zip (zipFree, zipFree_) where
 
 import Control.Monad.Free
-import Control.Monad.Trans
+import Control.Monad.Trans.Class
 #ifdef TRANSFORMERS
 import Control.Monad.Trans.State
 #else
diff --git a/control-monad-free.cabal b/control-monad-free.cabal
--- a/control-monad-free.cabal
+++ b/control-monad-free.cabal
@@ -1,6 +1,6 @@
 name: control-monad-free
-version: 0.5
-Cabal-Version:  >= 1.2.3
+version: 0.5.0.1
+Cabal-Version:  >= 1.6
 build-type: Simple
 license: PublicDomain
 author: Luke Palmer, Pepe Iborra
@@ -23,9 +23,9 @@
 
 Library
   buildable: True
-  build-depends: base >= 2 && < 5
+  build-depends: base >= 2 && < 5, deepseq
   if flag(transformers)
-     build-depends: transformers
+     build-depends: transformers == 0.2.*
      cpp-options: -DTRANSFORMERS
   else
      build-depends: mtl
