diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,7 @@
+4.0.3
+-----
+* Added `liftCoT0M`, `liftCoT1M`, `diter` and `dctrlM` for using `CoT w m` to model a state machine with states in `w` and effects in `m`.
+
 4.0.2
 -----
 * Made fixes necessary to work around changes in `ImpredicativeTypes` for GHC 7.8.1rc2
diff --git a/kan-extensions.cabal b/kan-extensions.cabal
--- a/kan-extensions.cabal
+++ b/kan-extensions.cabal
@@ -1,6 +1,6 @@
 name:          kan-extensions
 category:      Data Structures, Monads, Comonads, Functors
-version:       4.0.2
+version:       4.0.3
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
diff --git a/src/Control/Monad/Co.hs b/src/Control/Monad/Co.hs
--- a/src/Control/Monad/Co.hs
+++ b/src/Control/Monad/Co.hs
@@ -50,28 +50,31 @@
   -- * Monad Transformers from Comonads
   , CoT(..)
   -- * Klesili from CoKleisli
-  , liftCoT0, lowerCoT0, lowerCo0
-  , liftCoT1, lowerCoT1, lowerCo1
+  , liftCoT0, liftCoT0M, lowerCoT0, lowerCo0
+  , liftCoT1, liftCoT1M, lowerCoT1, lowerCo1
+  , diter, dctrlM
   , posW, peekW, peeksW
   , askW, asksW, traceW
   )where
 
 import Control.Applicative
 import Control.Comonad
+import Control.Comonad.Cofree
+import Control.Comonad.Density
 import Control.Comonad.Env.Class as Env
-import Control.Comonad.Traced.Class as Traced
 import Control.Comonad.Store.Class
-import Control.Monad.Trans.Class
+import Control.Comonad.Traced.Class as Traced
+import Control.Concurrent.Speculation
+import Control.Concurrent.Speculation.Class
+import Control.Monad.Error.Class
 import Control.Monad.IO.Class
+import Control.Monad.Identity
 import Control.Monad.Reader.Class as Reader
 import Control.Monad.State.Class
-import Control.Monad.Error.Class
+import Control.Monad.Trans.Class
 import Control.Monad.Writer.Class as Writer
-import Control.Monad.Identity
 import Data.Functor.Bind
 import Data.Functor.Extend
-import Control.Concurrent.Speculation
-import Control.Concurrent.Speculation.Class
 
 instance Comonad w => MonadSpec (CoT w m) where
   specByM f g a = CoT (\k -> specBy f g (extract k) a)
@@ -151,6 +154,18 @@
 
 traceW :: (ComonadTraced e w, Monad m) => e -> CoT w m ()
 traceW e = liftCoT1 (Traced.trace e)
+
+liftCoT0M :: (Comonad w, Monad m) => (forall a. w a -> m s) -> CoT w m s
+liftCoT0M f = CoT (\wa -> extract wa =<< f wa)
+
+liftCoT1M :: Monad m => (forall a. w a -> m a) -> CoT w m ()
+liftCoT1M f = CoT (($ ()) <=< f)
+
+diter :: Functor f => a -> (a -> f a) -> Density (Cofree f) a
+diter x y = liftDensity . coiter y $ x
+
+dctrlM :: (Comonad w, Monad m) => (forall a. w a -> m (w a)) -> CoT (Density w) m ()
+dctrlM k = liftCoT1M (\(Density w a) -> liftM w (k a))
 
 instance (Comonad w, MonadReader e m) => MonadReader e (CoT w m) where
   ask = lift Reader.ask
