diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,1 +1,8 @@
 language: haskell
+notifications:
+  irc:
+    channels:
+      - "irc.freenode.org#haskell-lens"
+    skip_join: true
+    template:
+      - "\x0313comonads-fd\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"
diff --git a/Control/Comonad/Env.hs b/Control/Comonad/Env.hs
deleted file mode 100644
--- a/Control/Comonad/Env.hs
+++ /dev/null
@@ -1,38 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Env
--- Copyright   :  (C) 2008-2011 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
---
--- The Env comonad (aka the Coreader, Environment, or Product comonad)
---
--- A co-Kleisli arrow in the Env comonad is isomorphic to a Kleisli arrow
--- in the reader monad.
---
--- (a -> e -> m) ~ (a, e) -> m ~ Env e a -> m
-----------------------------------------------------------------------------
-module Control.Comonad.Env (
-  -- * ComonadEnv class
-    ComonadEnv(..)
-  , asks
-  , local
-  -- * The Env comonad
-  , Env
-  , env
-  , runEnv
-  -- * The EnvT comonad transformer
-  , EnvT(..)
-  , runEnvT
-  -- * Re-exported modules
-  , module Control.Comonad
-  , module Control.Comonad.Trans.Class
-  ) where
-
-import Control.Comonad
-import Control.Comonad.Env.Class (ComonadEnv(..), asks)
-import Control.Comonad.Trans.Class
-import Control.Comonad.Trans.Env (Env, env, runEnv, EnvT(..), runEnvT, local)
diff --git a/Control/Comonad/Env/Class.hs b/Control/Comonad/Env/Class.hs
deleted file mode 100644
--- a/Control/Comonad/Env/Class.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE FunctionalDependencies #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE UndecidableInstances #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Env.Class
--- Copyright   :  (C) 2008-2012 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
-----------------------------------------------------------------------------
-module Control.Comonad.Env.Class
-  ( ComonadEnv(..)
-  , asks
-  ) where
-
-import Control.Comonad
-import Control.Comonad.Trans.Class
-import qualified Control.Comonad.Trans.Env as Env
-import Control.Comonad.Trans.Store
-import Control.Comonad.Trans.Traced
-import Control.Comonad.Trans.Identity
-import Data.Semigroup
-
-class Comonad w => ComonadEnv e w | w -> e where
-  ask :: w a -> e
-
-asks :: ComonadEnv e w => (e -> e') -> w a -> e'
-asks f wa = f (ask wa)
-{-# INLINE asks #-}
-
-instance Comonad w => ComonadEnv e (Env.EnvT e w) where
-  ask = Env.ask
-
-instance ComonadEnv e ((,)e) where
-  ask = fst
-
-lowerAsk :: (ComonadEnv e w, ComonadTrans t) => t w a -> e
-lowerAsk = ask . lower
-{-# INLINE lowerAsk #-}
-
-instance ComonadEnv e w => ComonadEnv e (StoreT t w) where
-  ask = lowerAsk
-
-instance ComonadEnv e w => ComonadEnv e (IdentityT w) where
-  ask = lowerAsk
-
-instance (ComonadEnv e w, Monoid m) => ComonadEnv e (TracedT m w) where
-  ask = lowerAsk
diff --git a/Control/Comonad/Identity.hs b/Control/Comonad/Identity.hs
deleted file mode 100644
--- a/Control/Comonad/Identity.hs
+++ /dev/null
@@ -1,19 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Identity
--- Copyright   :  (C) 2008-2012 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
-----------------------------------------------------------------------------
-module Control.Comonad.Identity (
-    module Control.Comonad
-  , module Data.Functor.Identity
-  , module Control.Comonad.Trans.Identity
-  ) where
-
-import Control.Comonad
-import Data.Functor.Identity
-import Control.Comonad.Trans.Identity
diff --git a/Control/Comonad/Store.hs b/Control/Comonad/Store.hs
deleted file mode 100644
--- a/Control/Comonad/Store.hs
+++ /dev/null
@@ -1,29 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Store
--- Copyright   :  (C) 2008-2011 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
-----------------------------------------------------------------------------
-module Control.Comonad.Store (
-  -- * ComonadStore class
-    ComonadStore(..)
-  -- * The Store comonad
-  , Store
-  , store
-  , runStore
-  -- * The StoreT comonad transformer
-  , StoreT(..)
-  , runStoreT
-  -- * Re-exported modules
-  , module Control.Comonad
-  , module Control.Comonad.Trans.Class
-  ) where
-
-import Control.Comonad
-import Control.Comonad.Store.Class (ComonadStore(..))
-import Control.Comonad.Trans.Class
-import Control.Comonad.Trans.Store (Store, store, runStore, StoreT(..), runStoreT)
diff --git a/Control/Comonad/Store/Class.hs b/Control/Comonad/Store/Class.hs
deleted file mode 100644
--- a/Control/Comonad/Store/Class.hs
+++ /dev/null
@@ -1,78 +0,0 @@
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE FunctionalDependencies #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE UndecidableInstances #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Store.Class
--- Copyright   :  (C) 2008-2012 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
-----------------------------------------------------------------------------
-module Control.Comonad.Store.Class
-  ( ComonadStore(..)
-  , lowerPos
-  , lowerPeek
-  ) where
-
-import Control.Comonad
-import Control.Comonad.Trans.Class
-import Control.Comonad.Trans.Env
-import qualified Control.Comonad.Trans.Store as Store
-import Control.Comonad.Trans.Traced
-import Control.Comonad.Trans.Identity
-import Data.Semigroup
-
-class Comonad w => ComonadStore s w | w -> s where
-  pos :: w a -> s
-  peek :: s -> w a -> a
-
-  peeks :: (s -> s) -> w a -> a
-  peeks f w = peek (f (pos w)) w
-
-  seek :: s -> w a -> w a
-  seek s = peek s . duplicate
-
-  seeks :: (s -> s) -> w a -> w a
-  seeks f = peeks f . duplicate
-
-  experiment :: Functor f => (s -> f s) -> w a -> f a
-  experiment f w = fmap (`peek` w) (f (pos w))
-
-instance Comonad w => ComonadStore s (Store.StoreT s w) where
-  pos = Store.pos
-  peek = Store.peek
-  peeks = Store.peeks
-  seek = Store.seek
-  seeks = Store.seeks
-  experiment = Store.experiment
-
-lowerPos :: (ComonadTrans t, ComonadStore s w) => t w a -> s
-lowerPos = pos . lower
-{-# INLINE lowerPos #-}
-
-lowerPeek :: (ComonadTrans t, ComonadStore s w) => s -> t w a -> a
-lowerPeek s = peek s . lower
-{-# INLINE lowerPeek #-}
-
-lowerExperiment :: (ComonadTrans t, ComonadStore s w, Functor f) => (s -> f s) -> t w a -> f a
-lowerExperiment f = experiment f . lower
-{-# INLINE lowerExperiment #-}
-
-instance ComonadStore s w => ComonadStore s (IdentityT w) where
-  pos = lowerPos
-  peek = lowerPeek
-  experiment = lowerExperiment
-
-instance ComonadStore s w => ComonadStore s (EnvT e w) where
-  pos = lowerPos
-  peek = lowerPeek
-  experiment = lowerExperiment
-
-instance (ComonadStore s w, Monoid m) => ComonadStore s (TracedT m w) where
-  pos = lowerPos
-  peek = lowerPeek
-  experiment = lowerExperiment
diff --git a/Control/Comonad/Traced.hs b/Control/Comonad/Traced.hs
deleted file mode 100644
--- a/Control/Comonad/Traced.hs
+++ /dev/null
@@ -1,29 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Traced
--- Copyright   :  (C) 2008-2011 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
-----------------------------------------------------------------------------
-module Control.Comonad.Traced (
-  -- * ComonadTraced class
-    ComonadTraced(..)
-  , traces
-  -- * The Traced comonad
-  , Traced
-  , traced
-  , runTraced
-  -- * The TracedT comonad transformer
-  , TracedT(..)
-  -- * Re-exported modules
-  , module Control.Comonad
-  , module Control.Comonad.Trans.Class
-  ) where
-
-import Control.Comonad
-import Control.Comonad.Traced.Class (ComonadTraced(..), traces)
-import Control.Comonad.Trans.Class
-import Control.Comonad.Trans.Traced (Traced, traced, runTraced, TracedT(..), runTracedT)
diff --git a/Control/Comonad/Traced/Class.hs b/Control/Comonad/Traced/Class.hs
deleted file mode 100644
--- a/Control/Comonad/Traced/Class.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE FunctionalDependencies #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE UndecidableInstances #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Traced.Class
--- Copyright   :  (C) 2008-2012 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
-----------------------------------------------------------------------------
-module Control.Comonad.Traced.Class
-  ( ComonadTraced(..)
-  , traces
-  ) where
-
-import Control.Comonad
-import Control.Comonad.Trans.Class
-import Control.Comonad.Trans.Env
-import Control.Comonad.Trans.Store
-import qualified Control.Comonad.Trans.Traced as Traced
-import Control.Comonad.Trans.Identity
-import Data.Semigroup
-
-class Comonad w => ComonadTraced m w | w -> m where
-  trace :: m -> w a -> a
-
-traces :: ComonadTraced m w => (a -> m) -> w a -> a
-traces f wa = trace (f (extract wa)) wa
-{-# INLINE traces #-}
-
-instance (Comonad w, Monoid m) => ComonadTraced m (Traced.TracedT m w) where
-  trace = Traced.trace
-
-lowerTrace :: (ComonadTrans t, ComonadTraced m w) => m -> t w a -> a
-lowerTrace m = trace m . lower
-{-# INLINE lowerTrace #-}
-
--- All of these require UndecidableInstances because they do not satisfy the coverage condition
-
-instance ComonadTraced m w => ComonadTraced m (IdentityT w) where
-  trace = lowerTrace
-
-instance ComonadTraced m w => ComonadTraced m (EnvT e w) where
-  trace = lowerTrace
-
-instance ComonadTraced m w => ComonadTraced m (StoreT s w) where
-  trace = lowerTrace
diff --git a/comonads-fd.cabal b/comonads-fd.cabal
--- a/comonads-fd.cabal
+++ b/comonads-fd.cabal
@@ -1,6 +1,6 @@
 name:          comonads-fd
 category:      Control, Comonads
-version:       3.0
+version:       3.0.1
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -9,7 +9,7 @@
 stability:     experimental
 homepage:      http://github.com/ekmett/comonads-fd/
 bug-reports:   http://github.com/ekmett/comonads-fd/issues
-copyright:     Copyright (C) 2008-2012 Edward A. Kmett
+copyright:     Copyright (C) 2008-2013 Edward A. Kmett
 synopsis:      Comonad transformers using functional dependencies
 description:   Comonad transformers using functional dependencies
 build-type:    Simple
@@ -25,13 +25,14 @@
     FunctionalDependencies
     FlexibleInstances
     UndecidableInstances
+
   build-depends:
     base                 >= 4       && < 5,
     transformers         >= 0.2     && < 0.4,
     mtl                  >= 2.0     && < 2.2,
-    semigroups           >= 0.8.3.1 && < 0.9,
-    comonad              >= 3.0     && < 3.1,
-    comonad-transformers >= 3.0     && < 3.1
+    semigroups           >= 0.8.3.1,
+    comonad              >= 3.0,
+    comonad-transformers >= 3.0
 
   exposed-modules:
     Control.Comonad.Env
@@ -42,5 +43,6 @@
     Control.Comonad.Traced
     Control.Comonad.Traced.Class
 
-  ghc-options:      -Wall
+  ghc-options: -Wall
+  hs-source-dirs: src
 
diff --git a/src/Control/Comonad/Env.hs b/src/Control/Comonad/Env.hs
new file mode 100644
--- /dev/null
+++ b/src/Control/Comonad/Env.hs
@@ -0,0 +1,38 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Env
+-- Copyright   :  (C) 2008-2011 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
+-- Stability   :  experimental
+-- Portability :  non-portable (fundeps, MPTCs)
+--
+-- The Env comonad (aka the Coreader, Environment, or Product comonad)
+--
+-- A co-Kleisli arrow in the Env comonad is isomorphic to a Kleisli arrow
+-- in the reader monad.
+--
+-- (a -> e -> m) ~ (a, e) -> m ~ Env e a -> m
+----------------------------------------------------------------------------
+module Control.Comonad.Env (
+  -- * ComonadEnv class
+    ComonadEnv(..)
+  , asks
+  , local
+  -- * The Env comonad
+  , Env
+  , env
+  , runEnv
+  -- * The EnvT comonad transformer
+  , EnvT(..)
+  , runEnvT
+  -- * Re-exported modules
+  , module Control.Comonad
+  , module Control.Comonad.Trans.Class
+  ) where
+
+import Control.Comonad
+import Control.Comonad.Env.Class (ComonadEnv(..), asks)
+import Control.Comonad.Trans.Class
+import Control.Comonad.Trans.Env (Env, env, runEnv, EnvT(..), runEnvT, local)
diff --git a/src/Control/Comonad/Env/Class.hs b/src/Control/Comonad/Env/Class.hs
new file mode 100644
--- /dev/null
+++ b/src/Control/Comonad/Env/Class.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE UndecidableInstances #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Env.Class
+-- Copyright   :  (C) 2008-2012 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
+-- Stability   :  experimental
+-- Portability :  non-portable (fundeps, MPTCs)
+----------------------------------------------------------------------------
+module Control.Comonad.Env.Class
+  ( ComonadEnv(..)
+  , asks
+  ) where
+
+import Control.Comonad
+import Control.Comonad.Trans.Class
+import qualified Control.Comonad.Trans.Env as Env
+import Control.Comonad.Trans.Store
+import Control.Comonad.Trans.Traced
+import Control.Comonad.Trans.Identity
+import Data.Semigroup
+
+class Comonad w => ComonadEnv e w | w -> e where
+  ask :: w a -> e
+
+asks :: ComonadEnv e w => (e -> e') -> w a -> e'
+asks f wa = f (ask wa)
+{-# INLINE asks #-}
+
+instance Comonad w => ComonadEnv e (Env.EnvT e w) where
+  ask = Env.ask
+
+instance ComonadEnv e ((,)e) where
+  ask = fst
+
+lowerAsk :: (ComonadEnv e w, ComonadTrans t) => t w a -> e
+lowerAsk = ask . lower
+{-# INLINE lowerAsk #-}
+
+instance ComonadEnv e w => ComonadEnv e (StoreT t w) where
+  ask = lowerAsk
+
+instance ComonadEnv e w => ComonadEnv e (IdentityT w) where
+  ask = lowerAsk
+
+instance (ComonadEnv e w, Monoid m) => ComonadEnv e (TracedT m w) where
+  ask = lowerAsk
diff --git a/src/Control/Comonad/Identity.hs b/src/Control/Comonad/Identity.hs
new file mode 100644
--- /dev/null
+++ b/src/Control/Comonad/Identity.hs
@@ -0,0 +1,19 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Identity
+-- Copyright   :  (C) 2008-2012 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
+-- Stability   :  experimental
+-- Portability :  non-portable (fundeps, MPTCs)
+----------------------------------------------------------------------------
+module Control.Comonad.Identity (
+    module Control.Comonad
+  , module Data.Functor.Identity
+  , module Control.Comonad.Trans.Identity
+  ) where
+
+import Control.Comonad
+import Data.Functor.Identity
+import Control.Comonad.Trans.Identity
diff --git a/src/Control/Comonad/Store.hs b/src/Control/Comonad/Store.hs
new file mode 100644
--- /dev/null
+++ b/src/Control/Comonad/Store.hs
@@ -0,0 +1,29 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Store
+-- Copyright   :  (C) 2008-2011 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
+-- Stability   :  experimental
+-- Portability :  non-portable (fundeps, MPTCs)
+----------------------------------------------------------------------------
+module Control.Comonad.Store (
+  -- * ComonadStore class
+    ComonadStore(..)
+  -- * The Store comonad
+  , Store
+  , store
+  , runStore
+  -- * The StoreT comonad transformer
+  , StoreT(..)
+  , runStoreT
+  -- * Re-exported modules
+  , module Control.Comonad
+  , module Control.Comonad.Trans.Class
+  ) where
+
+import Control.Comonad
+import Control.Comonad.Store.Class (ComonadStore(..))
+import Control.Comonad.Trans.Class
+import Control.Comonad.Trans.Store (Store, store, runStore, StoreT(..), runStoreT)
diff --git a/src/Control/Comonad/Store/Class.hs b/src/Control/Comonad/Store/Class.hs
new file mode 100644
--- /dev/null
+++ b/src/Control/Comonad/Store/Class.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE UndecidableInstances #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Store.Class
+-- Copyright   :  (C) 2008-2012 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
+-- Stability   :  experimental
+-- Portability :  non-portable (fundeps, MPTCs)
+----------------------------------------------------------------------------
+module Control.Comonad.Store.Class
+  ( ComonadStore(..)
+  , lowerPos
+  , lowerPeek
+  ) where
+
+import Control.Comonad
+import Control.Comonad.Trans.Class
+import Control.Comonad.Trans.Env
+import qualified Control.Comonad.Trans.Store as Store
+import Control.Comonad.Trans.Traced
+import Control.Comonad.Trans.Identity
+import Data.Semigroup
+
+class Comonad w => ComonadStore s w | w -> s where
+  pos :: w a -> s
+  peek :: s -> w a -> a
+
+  peeks :: (s -> s) -> w a -> a
+  peeks f w = peek (f (pos w)) w
+
+  seek :: s -> w a -> w a
+  seek s = peek s . duplicate
+
+  seeks :: (s -> s) -> w a -> w a
+  seeks f = peeks f . duplicate
+
+  experiment :: Functor f => (s -> f s) -> w a -> f a
+  experiment f w = fmap (`peek` w) (f (pos w))
+
+instance Comonad w => ComonadStore s (Store.StoreT s w) where
+  pos = Store.pos
+  peek = Store.peek
+  peeks = Store.peeks
+  seek = Store.seek
+  seeks = Store.seeks
+  experiment = Store.experiment
+
+lowerPos :: (ComonadTrans t, ComonadStore s w) => t w a -> s
+lowerPos = pos . lower
+{-# INLINE lowerPos #-}
+
+lowerPeek :: (ComonadTrans t, ComonadStore s w) => s -> t w a -> a
+lowerPeek s = peek s . lower
+{-# INLINE lowerPeek #-}
+
+lowerExperiment :: (ComonadTrans t, ComonadStore s w, Functor f) => (s -> f s) -> t w a -> f a
+lowerExperiment f = experiment f . lower
+{-# INLINE lowerExperiment #-}
+
+instance ComonadStore s w => ComonadStore s (IdentityT w) where
+  pos = lowerPos
+  peek = lowerPeek
+  experiment = lowerExperiment
+
+instance ComonadStore s w => ComonadStore s (EnvT e w) where
+  pos = lowerPos
+  peek = lowerPeek
+  experiment = lowerExperiment
+
+instance (ComonadStore s w, Monoid m) => ComonadStore s (TracedT m w) where
+  pos = lowerPos
+  peek = lowerPeek
+  experiment = lowerExperiment
diff --git a/src/Control/Comonad/Traced.hs b/src/Control/Comonad/Traced.hs
new file mode 100644
--- /dev/null
+++ b/src/Control/Comonad/Traced.hs
@@ -0,0 +1,29 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Traced
+-- Copyright   :  (C) 2008-2011 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
+-- Stability   :  experimental
+-- Portability :  non-portable (fundeps, MPTCs)
+----------------------------------------------------------------------------
+module Control.Comonad.Traced (
+  -- * ComonadTraced class
+    ComonadTraced(..)
+  , traces
+  -- * The Traced comonad
+  , Traced
+  , traced
+  , runTraced
+  -- * The TracedT comonad transformer
+  , TracedT(..)
+  -- * Re-exported modules
+  , module Control.Comonad
+  , module Control.Comonad.Trans.Class
+  ) where
+
+import Control.Comonad
+import Control.Comonad.Traced.Class (ComonadTraced(..), traces)
+import Control.Comonad.Trans.Class
+import Control.Comonad.Trans.Traced (Traced, traced, runTraced, TracedT(..), runTracedT)
diff --git a/src/Control/Comonad/Traced/Class.hs b/src/Control/Comonad/Traced/Class.hs
new file mode 100644
--- /dev/null
+++ b/src/Control/Comonad/Traced/Class.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE UndecidableInstances #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Traced.Class
+-- Copyright   :  (C) 2008-2012 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
+-- Stability   :  experimental
+-- Portability :  non-portable (fundeps, MPTCs)
+----------------------------------------------------------------------------
+module Control.Comonad.Traced.Class
+  ( ComonadTraced(..)
+  , traces
+  ) where
+
+import Control.Comonad
+import Control.Comonad.Trans.Class
+import Control.Comonad.Trans.Env
+import Control.Comonad.Trans.Store
+import qualified Control.Comonad.Trans.Traced as Traced
+import Control.Comonad.Trans.Identity
+import Data.Semigroup
+
+class Comonad w => ComonadTraced m w | w -> m where
+  trace :: m -> w a -> a
+
+traces :: ComonadTraced m w => (a -> m) -> w a -> a
+traces f wa = trace (f (extract wa)) wa
+{-# INLINE traces #-}
+
+instance (Comonad w, Monoid m) => ComonadTraced m (Traced.TracedT m w) where
+  trace = Traced.trace
+
+lowerTrace :: (ComonadTrans t, ComonadTraced m w) => m -> t w a -> a
+lowerTrace m = trace m . lower
+{-# INLINE lowerTrace #-}
+
+-- All of these require UndecidableInstances because they do not satisfy the coverage condition
+
+instance ComonadTraced m w => ComonadTraced m (IdentityT w) where
+  trace = lowerTrace
+
+instance ComonadTraced m w => ComonadTraced m (EnvT e w) where
+  trace = lowerTrace
+
+instance ComonadTraced m w => ComonadTraced m (StoreT s w) where
+  trace = lowerTrace
