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
@@ -16,11 +16,17 @@
 
 import Control.Comonad
 import Control.Comonad.Trans.Class
-import qualified Control.Comonad.Trans.Env as T
--- import qualified Control.Comonad.Trans.Pointer as P
-import Control.Comonad.Trans.Store
-import Control.Comonad.Trans.Discont
+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.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 Control.Comonad.Trans.Stream
 import Control.Comonad.Trans.Identity 
+import Data.Monoid
+import Data.Semigroup
 -- import Data.Ix
 
 class Comonad w => ComonadEnv e w | w -> e where
@@ -30,9 +36,12 @@
 asks f wa = f (ask wa)
 {-# INLINE asks #-}
 
-instance Comonad w => ComonadEnv e (T.EnvT e w) where
-  ask = T.ask
+instance Comonad w => ComonadEnv e (Lazy.EnvT e w) where
+  ask = Lazy.ask
 
+instance Comonad w => ComonadEnv e (Strict.EnvT e w) where
+  ask = Strict.ask
+
 instance ComonadEnv e ((,)e) where
   ask = fst
 
@@ -45,11 +54,23 @@
 -- instance (ComonadEnv e w, Ix i) => ComonadEnv e (PointerT i w) where
 --   ask = lowerAsk
 
-instance ComonadEnv e w => ComonadEnv e (StoreT t w) where
+instance ComonadEnv e w => ComonadEnv e (Strict.StoreT t w) where
   ask = lowerAsk
 
-instance ComonadEnv e w => ComonadEnv e (DiscontT t w) where
+instance ComonadEnv e w => ComonadEnv e (Strict.DiscontT t w) where
   ask = lowerAsk
 
+instance ComonadEnv e w => ComonadEnv e (Lazy.StoreT t w) where
+  ask = lowerAsk
+
+instance ComonadEnv e w => ComonadEnv e (Lazy.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
+  ask = lowerAsk
+
+instance (ComonadEnv e w, Functor f) => ComonadEnv e (StreamT f w) where
   ask = lowerAsk
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,12 +17,17 @@
 
 import Control.Comonad
 import Control.Comonad.Trans.Class
-import qualified Control.Comonad.Trans.Store as T
-import Control.Comonad.Trans.Discont
-import Control.Comonad.Trans.Env
+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 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
 
@@ -41,17 +46,15 @@
 experiment ff wa = fmap (`modify` wa) ff
 {-# INLINE experiment #-}
 
-instance Comonad w => ComonadStore s (T.StoreT s w) where
-  get = T.get
-  put = T.put
-  modify = T.modify
+instance Comonad w => ComonadStore s (Strict.StoreT s w) where
+  get = Strict.get
+  put = Strict.put
+  modify = Strict.modify
 
-{-
-instance (Comonad w, Ix i) => ComonadStore i (P.PointerT i w) where
-  get = P.get
-  put = P.put
-  modify = P.modify
--}
+instance Comonad w => ComonadStore s (Lazy.StoreT s w) where
+  get = Lazy.get
+  put = Lazy.put
+  modify = Lazy.modify
 
 -- All of these require UndecidableInstances because they do not satisfy the coverage condition
 
@@ -67,22 +70,37 @@
 lowerModify f = modify f . lower
 {-# INLINE lowerModify #-}
 
-instance ComonadStore s w => ComonadStore s (DiscontT k w) where
+instance ComonadStore s w => ComonadStore s (Lazy.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
+  modify = lowerModify
+
 instance ComonadStore s w => ComonadStore s (IdentityT w) where
   get = lowerGet
   put = lowerPut
   modify = lowerModify
 
-instance ComonadStore s w => ComonadStore s (EnvT e w) where
+instance ComonadStore s w => ComonadStore s (Lazy.EnvT e w) where
   get = lowerGet
   put = lowerPut
   modify = lowerModify
 
-instance (ComonadStore s w, Monoid m) => ComonadStore s (TracedT m w) where
+instance ComonadStore s w => ComonadStore s (Strict.EnvT e w) where
+  get = lowerGet
+  put = lowerPut
+  modify = lowerModify
+
+instance (ComonadStore s w, Semigroup m, Monoid m) => ComonadStore s (TracedT m w) where
+  get = lowerGet
+  put = lowerPut
+  modify = lowerModify
+
+instance (ComonadStore s w, Functor f) => ComonadStore s (StreamT f w) where
   get = lowerGet
   put = lowerPut
   modify = lowerModify
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,12 +16,17 @@
 
 import Control.Comonad
 import Control.Comonad.Trans.Class
-import qualified Control.Comonad.Trans.Traced as T
-import Control.Comonad.Trans.Discont
-import Control.Comonad.Trans.Env
-import Control.Comonad.Trans.Store
+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 Control.Comonad.Trans.Identity 
 import Data.Monoid
+import Data.Semigroup
 
 class Comonad w => ComonadTraced m w | w -> m where
   trace :: m -> w a -> a
@@ -30,8 +35,8 @@
 traces f wa = trace (f (extract wa)) wa
 {-# INLINE traces #-}
 
-instance (Comonad w, Monoid m) => ComonadTraced m (T.TracedT m w) where
-  trace = T.trace
+instance (Comonad w, Semigroup m, Monoid m) => ComonadTraced m (TracedT m w) where
+  trace = TracedT.trace
 
 lowerTrace :: (ComonadTrans t, ComonadTraced m w) => m -> t w a -> a
 lowerTrace m = trace m . lower
@@ -39,14 +44,23 @@
 
 -- All of these require UndecidableInstances because they do not satisfy the coverage condition
 
-instance ComonadTraced m w => ComonadTraced m (DiscontT k w) where
+instance ComonadTraced m w => ComonadTraced m (IdentityT w) where
   trace = lowerTrace
 
-instance ComonadTraced m w => ComonadTraced m (IdentityT w) where
+instance ComonadTraced m w => ComonadTraced m (Strict.EnvT e w) where
   trace = lowerTrace
 
-instance ComonadTraced m w => ComonadTraced m (EnvT e w) where
+instance ComonadTraced m w => ComonadTraced m (Strict.DiscontT k w) where
   trace = lowerTrace
 
-instance ComonadTraced m w => ComonadTraced m (StoreT s w) where
+instance ComonadTraced m w => ComonadTraced m (Strict.StoreT s w) where
+  trace = lowerTrace
+
+instance ComonadTraced m w => ComonadTraced m (Lazy.EnvT e w) where
+  trace = lowerTrace
+
+instance ComonadTraced m w => ComonadTraced m (Lazy.DiscontT k w) where
+  trace = lowerTrace
+
+instance ComonadTraced m w => ComonadTraced m (Lazy.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:       0.7.0
+version:       0.9.0
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -21,8 +21,9 @@
   build-depends: 
     base >= 4 && < 4.4,
     transformers >= 0.2 && < 0.3,
-    comonad >= 0.7 && < 0.8,
-    comonad-transformers >= 0.7 && < 0.8
+    semigroups >= 0.3.4 && < 0.4,
+    comonad >= 0.9 && < 0.10,
+    comonad-transformers >= 0.9 && < 0.10
 
   exposed-modules:
     Control.Comonad.Env
