diff --git a/Control/Comonad/Cofree.hs b/Control/Comonad/Cofree.hs
--- a/Control/Comonad/Cofree.hs
+++ b/Control/Comonad/Cofree.hs
@@ -140,7 +140,11 @@
   typeOf = typeOfDefault
 
 cofreeTyCon :: TyCon
+#if __GLASGOW_HASKELL__ < 704
 cofreeTyCon = mkTyCon "Control.Comonad.Cofree.Cofree"
+#else
+cofreeTyCon = mkTyCon3 "free" "Control.Comonad.Cofree" "Cofree"
+#endif
 {-# NOINLINE cofreeTyCon #-}
 
 instance
diff --git a/Control/Comonad/Cofree/Class.hs b/Control/Comonad/Cofree/Class.hs
--- a/Control/Comonad/Cofree/Class.hs
+++ b/Control/Comonad/Cofree/Class.hs
@@ -12,23 +12,16 @@
 -- Stability   :  experimental
 -- Portability :  fundeps, MPTCs
 ----------------------------------------------------------------------------
-module Control.Comonad.Cofree.Class 
+module Control.Comonad.Cofree.Class
   ( ComonadCofree(..)
   ) where
 
 import Control.Applicative
 import Control.Comonad
-import qualified Control.Comonad.Trans.Env.Strict as Strict
-import qualified Control.Comonad.Trans.Store.Strict as Strict
-import qualified Control.Comonad.Trans.Discont.Strict as Strict
-import qualified Control.Comonad.Trans.Env.Lazy as Lazy
-import qualified Control.Comonad.Trans.Store.Lazy as Lazy
-import qualified Control.Comonad.Trans.Discont.Lazy as Lazy
-import qualified Control.Comonad.Trans.Traced as Simple
-import qualified Control.Comonad.Trans.Traced.Memo as Memo
-import qualified Control.Comonad.Trans.Store.Memo as Memo
-import qualified Control.Comonad.Trans.Discont.Memo as Memo
-import Control.Comonad.Trans.Identity 
+import Control.Comonad.Trans.Env
+import Control.Comonad.Trans.Store
+import Control.Comonad.Trans.Traced
+import Control.Comonad.Trans.Identity
 import Data.Semigroup
 
 class (Functor f, Comonad w) => ComonadCofree f w | w -> f where
@@ -36,35 +29,12 @@
 
 instance ComonadCofree f w => ComonadCofree f (IdentityT w) where
   unwrap = fmap IdentityT . unwrap . runIdentityT
-  
-instance ComonadCofree f w => ComonadCofree f (Strict.EnvT e w) where
-  unwrap (Strict.EnvT e wa) = Strict.EnvT e <$> unwrap wa
 
-instance ComonadCofree f w => ComonadCofree f (Lazy.EnvT e w) where
-  unwrap (Lazy.EnvT e wa) = Lazy.EnvT e <$> unwrap wa
-
-instance ComonadCofree f w => ComonadCofree f (Strict.StoreT s w) where
-  unwrap (Strict.StoreT wsa s) = flip Strict.StoreT s <$> unwrap wsa
-
-instance ComonadCofree f w => ComonadCofree f (Lazy.StoreT s w) where
-  unwrap (Lazy.StoreT wsa s) = flip Lazy.StoreT s <$> unwrap wsa
-
-instance ComonadCofree f w => ComonadCofree f (Memo.StoreT s w) where
-  unwrap w = flip Memo.storeT s <$> unwrap wsa
-    where (wsa, s) = Memo.runStoreT w
-
-instance (ComonadCofree f w, Semigroup m, Monoid m) => ComonadCofree f (Simple.TracedT m w) where
-  unwrap (Simple.TracedT wma) = Simple.TracedT <$> unwrap wma
-
-instance (ComonadCofree f w, Semigroup m, Monoid m) => ComonadCofree f (Memo.TracedT m w) where
-  unwrap = fmap Memo.tracedT . unwrap . Memo.runTracedT
-
-instance ComonadCofree f w => ComonadCofree f (Strict.DiscontT k w) where
-  unwrap (Strict.DiscontT f ws) = Strict.DiscontT f <$> unwrap ws
+instance ComonadCofree f w => ComonadCofree f (EnvT e w) where
+  unwrap (EnvT e wa) = EnvT e <$> unwrap wa
 
-instance ComonadCofree f w => ComonadCofree f (Lazy.DiscontT k w) where
-  unwrap (Lazy.DiscontT f ws) = Lazy.DiscontT f <$> unwrap ws
+instance ComonadCofree f w => ComonadCofree f (StoreT s w) where
+  unwrap (StoreT wsa s) = flip StoreT s <$> unwrap wsa
 
-instance ComonadCofree f w => ComonadCofree f (Memo.DiscontT k w) where
-  unwrap w = Memo.discontT f <$> unwrap wa
-    where (f, wa) = Memo.runDiscontT w
+instance (ComonadCofree f w, Semigroup m, Monoid m) => ComonadCofree f (TracedT m w) where
+  unwrap (TracedT wma) = TracedT <$> unwrap wma
diff --git a/free.cabal b/free.cabal
--- a/free.cabal
+++ b/free.cabal
@@ -1,6 +1,6 @@
 name:          free
 category:      Control, Monads
-version:       2.0.3
+version:       2.1
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -24,17 +24,17 @@
     FlexibleInstances
     UndecidableInstances
 
-  build-depends: 
+  build-depends:
     base                 >= 4       && < 5,
-    distributive         >= 0.2     && < 0.3,
-    transformers         >= 0.2.0   && < 0.3,
-    mtl                  >= 2.0.1.0 && < 2.1,
-    semigroupoids        >= 1.2.6.1 && < 1.3,
-    comonad              >= 1.1.1.1 && < 1.2,
-    comonad-transformers >= 2.0.3   && < 2.1,
-    comonads-fd          >= 2.0.2.1 && < 2.1,
-    data-lens            >= 2.0.2   && < 2.1,
-    semigroups           >= 0.8     && < 0.9
+    distributive         >= 0.2.1   && < 0.3,
+    transformers         >= 0.2.0   && < 0.4,
+    mtl                  >= 2.0.1.0 && < 2.2,
+    semigroupoids        >= 1.2.6.1 && < 1.4,
+    comonad              >= 1.1.1.3 && < 1.2,
+    comonad-transformers >= 2.1     && < 2.2,
+    comonads-fd          >= 2.1     && < 2.2,
+    data-lens            >= 2.0.3   && < 2.1,
+    semigroups           >= 0.8.2   && < 0.9
 
   if impl(ghc)
     cpp-options: -DGHC_TYPEABLE
@@ -47,4 +47,4 @@
     Control.Comonad.Cofree
     Control.Comonad.Cofree.Class
 
-  ghc-options:      -Wall 
+  ghc-options:      -Wall
