diff --git a/Control/Comonad/Discont.hs b/Control/Comonad/Discont.hs
new file mode 100644
--- /dev/null
+++ b/Control/Comonad/Discont.hs
@@ -0,0 +1,15 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Discont
+-- 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.Discont ( 
+  module Control.Comonad.Discont.Lazy
+  ) where
+
+import Control.Comonad.Discont.Lazy
diff --git a/Control/Comonad/Discont/Class.hs b/Control/Comonad/Discont/Class.hs
new file mode 100644
--- /dev/null
+++ b/Control/Comonad/Discont/Class.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, UndecidableInstances #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Discont.Class
+-- 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.Discont.Class 
+  ( ComonadDiscont(..)
+  ) where
+
+import Control.Comonad
+import qualified Control.Comonad.Trans.Discont.Strict as Strict
+import qualified Control.Comonad.Trans.Discont.Lazy as Lazy
+import qualified Control.Comonad.Trans.Discont.Memo as Memo
+{-
+import Control.Comonad.Trans.Class
+import qualified Control.Comonad.Trans.Env.Strict as Strict
+import qualified Control.Comonad.Trans.Store.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.Traced as Simple
+import qualified Control.Comonad.Trans.Traced.Memo as Memo
+import qualified Control.Comonad.Trans.Store.Memo as Memo
+import Control.Comonad.Trans.Stream
+import Control.Comonad.Trans.Identity 
+import Data.Monoid
+import Data.Semigroup
+-}
+
+class Comonad w => ComonadDiscont s w | w -> s where
+  callCV :: w (w (w a -> a) -> b) -> b
+
+instance ComonadDiscont s w => ComonadDiscont s (Lazy.DiscontT k w) where
+  callCV = Lazy.callCV
+
+instance ComonadDiscont s w => ComonadDiscont s (Memo.DiscontT k w) where
+  callCV = Memo.callCV
+
+instance ComonadDiscont s w => ComonadDiscont s (Strict.DiscontT k w) where
+  callCV = Strict.callCV
+
+{-
+instance Comonad w => ComonadDiscont s (Strict.StoreT s w) where
+
+instance Comonad w => ComonadDiscont s (Lazy.StoreT s w) where
+
+instance Comonad w => ComonadDiscont s (Memo.StoreT s w) where
+
+instance ComonadDiscont s w => ComonadDiscont s (IdentityT w) where
+
+instance ComonadDiscont s w => ComonadDiscont s (Lazy.EnvT e w) where
+
+instance ComonadDiscont s w => ComonadDiscont s (Strict.EnvT e w) where
+
+instance (ComonadDiscont s w, Semigroup m, Monoid m) => ComonadDiscont s (Simple.TracedT m w) where
+
+instance (ComonadDiscont s w, Monoid m) => ComonadDiscont s (Memo.TracedT m w) where
+
+instance (ComonadDiscont s w, Functor f) => ComonadDiscont s (StreamT f w) where
+-}
diff --git a/Control/Comonad/Discont/Lazy.hs b/Control/Comonad/Discont/Lazy.hs
new file mode 100644
--- /dev/null
+++ b/Control/Comonad/Discont/Lazy.hs
@@ -0,0 +1,30 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Discont.Lazy
+-- 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.Discont.Lazy ( 
+  -- * ComonadDiscont class
+    ComonadDiscont(..)
+  , label
+  -- * The Discont comonad
+  , Discont
+  , discont
+  , runDiscont
+  -- * The DiscontT comonad transformer
+  , DiscontT(..)
+  , runDiscontT
+  -- * Re-exported modules
+  , module Control.Comonad
+  , module Control.Comonad.Trans.Class
+  ) where
+
+import Control.Comonad
+import Control.Comonad.Discont.Class (ComonadDiscont(..))
+import Control.Comonad.Trans.Class
+import Control.Comonad.Trans.Discont.Lazy (Discont, discont, runDiscont, DiscontT(..), runDiscontT, label)
diff --git a/Control/Comonad/Discont/Memo.hs b/Control/Comonad/Discont/Memo.hs
new file mode 100644
--- /dev/null
+++ b/Control/Comonad/Discont/Memo.hs
@@ -0,0 +1,31 @@
+----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Discont.Memo
+-- 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.Discont.Memo ( 
+  -- * ComonadDiscont class
+    ComonadDiscont(..)
+  , label
+  -- * The Discont comonad
+  , Discont
+  , discont
+  , runDiscont
+  -- * The DiscontT comonad transformer
+  , DiscontT
+  , discontT
+  , runDiscontT
+  -- * Re-exported modules
+  , module Control.Comonad
+  , module Control.Comonad.Trans.Class
+  ) where
+
+import Control.Comonad
+import Control.Comonad.Discont.Class (ComonadDiscont(..))
+import Control.Comonad.Trans.Class
+import Control.Comonad.Trans.Discont.Memo (Discont, discont, runDiscont, DiscontT, discontT, runDiscontT, label)
diff --git a/Control/Comonad/Discont/Strict.hs b/Control/Comonad/Discont/Strict.hs
new file mode 100644
--- /dev/null
+++ b/Control/Comonad/Discont/Strict.hs
@@ -0,0 +1,30 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Discont.Strict
+-- 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.Discont.Strict ( 
+  -- * ComonadDiscont class
+    ComonadDiscont(..)
+  , label
+  -- * The Discont comonad
+  , Discont
+  , discont
+  , runDiscont
+  -- * The DiscontT comonad transformer
+  , DiscontT(..)
+  , runDiscontT
+  -- * Re-exported modules
+  , module Control.Comonad
+  , module Control.Comonad.Trans.Class
+  ) where
+
+import Control.Comonad
+import Control.Comonad.Discont.Class (ComonadDiscont(..))
+import Control.Comonad.Trans.Class
+import Control.Comonad.Trans.Discont.Strict (Discont, discont, runDiscont, DiscontT(..), runDiscontT, label)
diff --git a/Control/Comonad/Env/Class.hs b/Control/Comonad/Env/Class.hs
--- a/Control/Comonad/Env/Class.hs
+++ b/Control/Comonad/Env/Class.hs
@@ -22,7 +22,10 @@
 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 Control.Comonad.Trans.Traced
+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.Stream
 import Control.Comonad.Trans.Identity 
 import Data.Monoid
@@ -66,10 +69,19 @@
 instance ComonadEnv e w => ComonadEnv e (Lazy.DiscontT t w) where
   ask = lowerAsk
 
+instance ComonadEnv e w => ComonadEnv e (Memo.StoreT t w) where
+  ask = lowerAsk
+
+instance ComonadEnv e w => ComonadEnv e (Memo.DiscontT t w) where
+  ask = lowerAsk
+
 instance ComonadEnv e w => ComonadEnv e (IdentityT w) where
   ask = lowerAsk
 
-instance (ComonadEnv e w, Semigroup m, Monoid m) => ComonadEnv e (TracedT m w) where
+instance (ComonadEnv e w, Semigroup m, Monoid m) => ComonadEnv e (Simple.TracedT m w) where
+  ask = lowerAsk
+
+instance (ComonadEnv e w, Monoid m) => ComonadEnv e (Memo.TracedT m w) where
   ask = lowerAsk
 
 instance (ComonadEnv e w, Functor f) => ComonadEnv e (StreamT f w) where
diff --git a/Control/Comonad/Store/Class.hs b/Control/Comonad/Store/Class.hs
--- a/Control/Comonad/Store/Class.hs
+++ b/Control/Comonad/Store/Class.hs
@@ -17,19 +17,23 @@
 
 import Control.Comonad
 import Control.Comonad.Trans.Class
+import qualified Control.Comonad.Trans.Env.Strict as Strict
 import qualified Control.Comonad.Trans.Store.Strict as Strict
-import qualified Control.Comonad.Trans.Store.Lazy as Lazy
 import qualified Control.Comonad.Trans.Discont.Strict as Strict
-import qualified Control.Comonad.Trans.Discont.Lazy as Lazy
-import qualified Control.Comonad.Trans.Env.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.Stream
 import Control.Comonad.Trans.Identity 
-import Control.Comonad.Trans.Traced
 import Data.Monoid
 import Data.Semigroup
--- import qualified Control.Comonad.Trans.Pointer as P
--- import Data.Ix
 
 class Comonad w => ComonadStore s w | w -> s where
   get :: w a -> s
@@ -56,6 +60,11 @@
   put = Lazy.put
   modify = Lazy.modify
 
+instance Comonad w => ComonadStore s (Memo.StoreT s w) where
+  get = Memo.get
+  put = Memo.put
+  modify = Memo.modify
+
 -- All of these require UndecidableInstances because they do not satisfy the coverage condition
 
 lowerGet :: (ComonadTrans t, ComonadStore s w) => t w a -> s
@@ -75,6 +84,11 @@
   put = lowerPut
   modify = lowerModify
 
+instance ComonadStore s w => ComonadStore s (Memo.DiscontT k w) where
+  get = lowerGet
+  put = lowerPut
+  modify = lowerModify
+
 instance ComonadStore s w => ComonadStore s (Strict.DiscontT k w) where
   get = lowerGet
   put = lowerPut
@@ -95,7 +109,12 @@
   put = lowerPut
   modify = lowerModify
 
-instance (ComonadStore s w, Semigroup m, Monoid m) => ComonadStore s (TracedT m w) where
+instance (ComonadStore s w, Semigroup m, Monoid m) => ComonadStore s (Simple.TracedT m w) where
+  get = lowerGet
+  put = lowerPut
+  modify = lowerModify
+
+instance (ComonadStore s w, Monoid m) => ComonadStore s (Memo.TracedT m w) where
   get = lowerGet
   put = lowerPut
   modify = lowerModify
diff --git a/Control/Comonad/Store/Memo.hs b/Control/Comonad/Store/Memo.hs
new file mode 100644
--- /dev/null
+++ b/Control/Comonad/Store/Memo.hs
@@ -0,0 +1,32 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Store.Memo
+-- 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.Memo ( 
+  -- * ComonadStore class
+    ComonadStore(..)
+  , gets
+  , experiment
+  -- * The Store comonad
+  , Store
+  , store
+  , runStore
+  -- * The StoreT comonad transformer
+  , StoreT
+  , storeT
+  , runStoreT
+  -- * Re-exported modules
+  , module Control.Comonad
+  , module Control.Comonad.Trans.Class
+  ) where
+
+import Control.Comonad
+import Control.Comonad.Store.Class (ComonadStore(..), gets, experiment)
+import Control.Comonad.Trans.Class
+import Control.Comonad.Trans.Store.Memo (Store, store, runStore, StoreT, storeT, runStoreT)
diff --git a/Control/Comonad/Stream.hs b/Control/Comonad/Stream.hs
new file mode 100644
--- /dev/null
+++ b/Control/Comonad/Stream.hs
@@ -0,0 +1,15 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Stream
+-- 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.Stream ( 
+    module Control.Comonad.Trans.Stream
+  ) where
+
+import Control.Comonad.Trans.Stream
diff --git a/Control/Comonad/Traced/Class.hs b/Control/Comonad/Traced/Class.hs
--- a/Control/Comonad/Traced/Class.hs
+++ b/Control/Comonad/Traced/Class.hs
@@ -16,14 +16,17 @@
 
 import Control.Comonad
 import Control.Comonad.Trans.Class
-import Control.Comonad.Trans.Traced (TracedT)
-import qualified Control.Comonad.Trans.Traced as TracedT
-import Control.Comonad.Trans.Env.Strict as Strict
-import Control.Comonad.Trans.Store.Strict as Strict
-import Control.Comonad.Trans.Discont.Strict as Strict
-import Control.Comonad.Trans.Env.Lazy as Lazy
-import Control.Comonad.Trans.Store.Lazy as Lazy
-import Control.Comonad.Trans.Discont.Lazy as Lazy
+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.Stream
 import Control.Comonad.Trans.Identity 
 import Data.Monoid
 import Data.Semigroup
@@ -35,9 +38,12 @@
 traces f wa = trace (f (extract wa)) wa
 {-# INLINE traces #-}
 
-instance (Comonad w, Semigroup m, Monoid m) => ComonadTraced m (TracedT m w) where
-  trace = TracedT.trace
+instance (Comonad w, Semigroup m, Monoid m) => ComonadTraced m (Simple.TracedT m w) where
+  trace = Simple.trace
 
+instance (Comonad w, Monoid m) => ComonadTraced m (Memo.TracedT m w) where
+  trace = Memo.trace
+
 lowerTrace :: (ComonadTrans t, ComonadTraced m w) => m -> t w a -> a
 lowerTrace m = trace m . lower
 {-# INLINE lowerTrace #-}
@@ -63,4 +69,13 @@
   trace = lowerTrace
 
 instance ComonadTraced m w => ComonadTraced m (Lazy.StoreT s w) where
+  trace = lowerTrace
+
+instance ComonadTraced m w => ComonadTraced m (Memo.DiscontT k w) where
+  trace = lowerTrace
+
+instance ComonadTraced m w => ComonadTraced m (Memo.StoreT s w) where
+  trace = lowerTrace
+
+instance (Functor s, ComonadTraced m w) => ComonadTraced m (StreamT s w) where
   trace = lowerTrace
diff --git a/Control/Comonad/Traced/Memo.hs b/Control/Comonad/Traced/Memo.hs
new file mode 100644
--- /dev/null
+++ b/Control/Comonad/Traced/Memo.hs
@@ -0,0 +1,31 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Traced.Memo
+-- 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.Memo ( 
+  -- * ComonadTraced class
+    ComonadTraced(..)
+  , traces
+  -- * The Traced comonad
+  , Traced
+  , traced
+  , runTraced
+  -- * The TracedT comonad transformer
+  , TracedT
+  , tracedT
+  , runTracedT
+  -- * 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.Memo (Traced, traced, runTraced, TracedT, tracedT, runTracedT)
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:       1.0.0
+version:       1.3.0
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -9,8 +9,8 @@
 stability:     experimental
 homepage:      http://github.com/ekmett/comonads-fd/
 copyright:     Copyright (C) 2008-2011 Edward A. Kmett
-synopsis:      Comonad transformers using functional dependencies.
-description:   Comonad transformers using functional dependencies.
+synopsis:      Comonad transformers using functional dependencies
+description:   Comonad transformers using functional dependencies
 build-type:    Simple
 
 source-repository head
@@ -23,9 +23,14 @@
     transformers >= 0.2 && < 0.3,
     semigroups >= 0.3.4 && < 0.4,
     comonad >= 1.0 && < 1.1,
-    comonad-transformers >= 1.0 && < 1.1
+    comonad-transformers >= 1.2.1 && < 1.3
 
   exposed-modules:
+    Control.Comonad.Discont
+    Control.Comonad.Discont.Class
+    Control.Comonad.Discont.Lazy
+    Control.Comonad.Discont.Memo
+    Control.Comonad.Discont.Strict
     Control.Comonad.Env
     Control.Comonad.Env.Class
     Control.Comonad.Env.Strict
@@ -35,7 +40,11 @@
     Control.Comonad.Store.Class
     Control.Comonad.Store.Strict
     Control.Comonad.Store.Lazy
+    Control.Comonad.Store.Memo
+    Control.Comonad.Stream
     Control.Comonad.Traced
     Control.Comonad.Traced.Class
+    Control.Comonad.Traced.Memo
 
   ghc-options:      -Wall 
+
