diff --git a/Control/Monad/Maybe.hs b/Control/Monad/Maybe.hs
deleted file mode 100644
--- a/Control/Monad/Maybe.hs
+++ /dev/null
@@ -1,105 +0,0 @@
-------------------------------------------------------------------------------
--- | 
--- Maintainer	: Ralf Laemmel, Joost Visser
--- Stability	: experimental
--- Portability	: portable
---
--- This module introduces the MaybeT monad transformer.
--- It is basically a simplification of the ErrorT monad transformer.
-
-------------------------------------------------------------------------------
-
-module Control.Monad.Maybe ( 
-
- MaybeT(..)
-
-) where
-
-import Control.Monad.Fix
-import Control.Monad.Trans
-import Control.Monad.Reader
-import Control.Monad.Writer
-import Control.Monad.State
-import Control.Monad.RWS
-import Control.Monad.Cont
-import Control.Monad.Error
-
-------------------------------------------------------------------------------
-
--- | The monad transformer 'MaybeT'.
-newtype MaybeT m a = MaybeT { runMaybeT :: m (Maybe a) }
-
-instance (Monad m) => Functor (MaybeT m) where
-	fmap f m = MaybeT $ do
-		a <- runMaybeT m
-		case a of
-			Nothing -> return (Nothing)
-			Just  r -> return (Just  (f r))
-
-instance (Monad m) => Monad (MaybeT m) where
-	return a = MaybeT $ return (Just  a)
-	m >>= k  = MaybeT $ do
-		a <- runMaybeT m
-		case a of
-			Nothing -> return (Nothing)
-			Just  r -> runMaybeT (k r)
-	fail msg = MaybeT $ return (Nothing)
-
-instance (Monad m) => MonadPlus (MaybeT m) where
-	mzero       = MaybeT $ return (Nothing)
-	m `mplus` n = MaybeT $ do
-		a <- runMaybeT m
-		case a of
-			Nothing -> runMaybeT n
-			Just  r -> return (Just  r)
-
-instance (MonadFix m) => MonadFix (MaybeT m) where
-	mfix f = MaybeT $ mfix $ \a -> runMaybeT $ f $ case a of
-		Just  r -> r
-		_       -> error "empty mfix argument"
-
-{-
-instance (Monad m) => MonadError e (MaybeT m) where
-	throwError l     = MaybeT $ return (Nothing)
-	m `catchError` h = MaybeT $ do
-		a <- runMaybeT m
-		case a of
-			Nothing -> runMaybeT (h l)
-			Just  r -> return (Just  r)
--}
-
-instance MonadTrans (MaybeT) where
-	lift m = MaybeT $ do
-		a <- m
-		return (Just  a)
-
-instance (MonadIO m) => MonadIO (MaybeT m) where
-	liftIO = lift . liftIO
-
-instance (MonadReader r m) => MonadReader r (MaybeT m) where
-	ask       = lift ask
-	local f m = MaybeT $ local f (runMaybeT m)
-
-instance (MonadWriter w m) => MonadWriter w (MaybeT m) where
-	tell     = lift . tell
-	listen m = MaybeT $ do
-		(a, w) <- listen (runMaybeT m)
-		return $ case a of
-			Nothing -> Nothing
-			Just  r -> Just  (r, w)
-	pass   m = MaybeT $ pass $ do
-		a <- runMaybeT m
-		return $ case a of
-			Nothing      -> (Nothing, id)
-			Just  (r, f) -> (Just  r, f)
-
-instance (MonadState s m) => MonadState s (MaybeT m) where
-	get = lift get
-	put = lift . put
-
-instance (MonadCont m) => MonadCont (MaybeT m) where
-	callCC f = MaybeT $
-		callCC $ \c ->
-		runMaybeT (f (\a -> MaybeT $ c (Just  a)))
-
-------------------------------------------------------------------------------
diff --git a/Control/Monad/Run.hs b/Control/Monad/Run.hs
--- a/Control/Monad/Run.hs
+++ b/Control/Monad/Run.hs
@@ -15,10 +15,10 @@
 module Control.Monad.Run where
 
 import Control.Monad.Trans
+import Control.Monad.Trans.Maybe
 import Control.Monad.Identity
 import Control.Monad.State
 import Control.Monad.List
-import Control.Monad.Maybe
 import Control.Monad.Error
 import System.IO.Unsafe (unsafePerformIO) -- for running IO monads
 
diff --git a/Data/Generics/Strafunski/StrategyLib/MonadicFunctions.hs b/Data/Generics/Strafunski/StrategyLib/MonadicFunctions.hs
--- a/Data/Generics/Strafunski/StrategyLib/MonadicFunctions.hs
+++ b/Data/Generics/Strafunski/StrategyLib/MonadicFunctions.hs
@@ -16,21 +16,6 @@
 import Control.Monad
 
 ------------------------------------------------------------------------------
--- * The identity monad 
-
--- | Identity type constructor.
-newtype Id a = Id a
-
--- | Unwrap identity type constructor
-unId 		:: Id a -> a
-unId (Id x) 	 = x
-
-instance Monad Id where
- return = Id
- (Id x) >>= f = f x
-
-
-------------------------------------------------------------------------------
 -- * Recover from partiality
 
 -- | Force success. If the argument value corresponds to failure, 
diff --git a/Data/Generics/Strafunski/StrategyLib/StrategyLib.hs b/Data/Generics/Strafunski/StrategyLib/StrategyLib.hs
--- a/Data/Generics/Strafunski/StrategyLib/StrategyLib.hs
+++ b/Data/Generics/Strafunski/StrategyLib/StrategyLib.hs
@@ -46,8 +46,8 @@
 import Control.Monad
 import Control.Monad.Fix
 import Control.Monad.Trans
+import Control.Monad.Trans.Maybe
 import Control.Monad.Identity
-import Control.Monad.Maybe
 import Control.Monad.State
 import Data.Monoid
 import Data.Generics.Strafunski.StrategyLib.MoreMonoids
diff --git a/Strafunski-StrategyLib.cabal b/Strafunski-StrategyLib.cabal
--- a/Strafunski-StrategyLib.cabal
+++ b/Strafunski-StrategyLib.cabal
@@ -1,5 +1,5 @@
 name:                Strafunski-StrategyLib
-version:             5.0.0.4
+version:             5.0.0.5
 synopsis:            Library for strategic programming
 description:         This is a version of the StrategyLib library originally shipped with Strafunski, Cabalized and updated to newer versions of GHC. A description of much of StrategyLib can be found in the paper "Design Patterns for Functional Strategic Programming."
 license:             BSD3
@@ -27,7 +27,6 @@
         Rank2Types
 
   exposed-modules:
-        Control.Monad.Maybe,
         Control.Monad.Run,
         Data.Generics.Strafunski.StrategyLib.ChaseImports,
         Data.Generics.Strafunski.StrategyLib.ContainerTheme,
@@ -55,5 +54,6 @@
         base > 4.4 && < 4.8,
         mtl > 2.2,
         syb > 0.3 && < 4.1,
-        directory > 1.1 && < 1.2.1
+        directory > 1.1 && < 1.2.2,
+        transformers >= 0.2
   
