diff --git a/library/ListT.hs b/library/ListT.hs
--- a/library/ListT.hs
+++ b/library/ListT.hs
@@ -42,7 +42,7 @@
 import Control.Monad.Trans.Class
 import Control.Monad.Trans.Reader
 import Control.Monad.Trans.Maybe
-import Control.Monad.Trans.Control
+import Control.Monad.Trans.Control hiding (embed, embed_)
 import Control.Monad.Base
 
 -- |
@@ -114,6 +114,12 @@
 instance MFunctor ListT where
   hoist f (ListT m) =
     ListT $ f $ m >>= return . fmap (\(h, t) -> (h, hoist f t))
+
+instance MMonad ListT where
+  embed f (ListT m) =
+    f m >>= \case
+      Nothing -> mzero
+      Just (h, t) -> ListT $ return $ Just $ (h, embed f t)
 
 instance MonadBase b m => MonadBase b (ListT m) where
   liftBase =
diff --git a/list-t.cabal b/list-t.cabal
--- a/list-t.cabal
+++ b/list-t.cabal
@@ -1,7 +1,7 @@
 name:
   list-t
 version:
-  0.3.1
+  0.3.2
 synopsis:
   ListT done right
 description:
@@ -63,6 +63,7 @@
     Main.hs
   build-depends:
     list-t,
+    mmorph,
     HTF == 0.12.*,
     mtl-prelude < 3,
     base-prelude >= 0.1.3 && < 0.2
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -2,11 +2,30 @@
 
 import BasePrelude hiding (toList)
 import MTLPrelude
+import Control.Monad.Morph
 import Test.Framework
 import qualified ListT as L
 
 
 main = htfMain $ htf_thisModulesTests
+
+
+-- * MMonad
+-------------------------
+
+-- embed lift = id
+prop_mmonadLaw1 (l :: [Int]) =
+  let s = L.fromFoldable l
+      in runIdentity $ streamsEqual s (embed lift s)
+
+-- embed f (lift m) = f m
+prop_mmonadLaw2 l =
+  let s = (L.fromFoldable :: [Int] -> L.ListT Identity Int) l
+      f = MaybeT . fmap Just
+      run = runIdentity . L.toList . runMaybeT
+      in 
+        run (f s) == 
+        run (embed f (lift s))
 
 
 -- * Applicative
