diff --git a/Control/Monad/Journal.hs b/Control/Monad/Journal.hs
--- a/Control/Monad/Journal.hs
+++ b/Control/Monad/Journal.hs
@@ -10,7 +10,7 @@
 -}
 
 module Control.Monad.Journal (
-    module X
+    module Control.Monad.Journal.Class
   ) where
 
-import Control.Monad.Journal.Class as X
+import Control.Monad.Journal.Class
diff --git a/Control/Monad/Trans/Journal.hs b/Control/Monad/Trans/Journal.hs
--- a/Control/Monad/Trans/Journal.hs
+++ b/Control/Monad/Trans/Journal.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving, TypeFamilies, UndecidableInstances #-}
 
 {- |
 Module      :  Control.Monad.Trans.Journal
@@ -16,21 +16,64 @@
     -- * JournalT monad transformer
     JournalT
   , runJournalT
-  , module X
+  , module Control.Monad.Journal.Class
   ) where
 
-import Control.Applicative ( Applicative )
-import Control.Monad.Journal.Class as X
-import Control.Monad.Trans ( MonadTrans, MonadIO )
-import Control.Monad.Trans.State ( StateT, get, modify, put, runStateT )
+import Control.Applicative ( Applicative, Alternative )
+import Control.Monad ( MonadPlus, liftM )
+import Control.Monad.Base ( MonadBase, liftBase, liftBaseDefault )
+import Control.Monad.Journal.Class
+import Control.Monad.Reader.Class ( MonadReader(..) )
+import Control.Monad.State.Class  ( MonadState )
+import qualified Control.Monad.State.Class as MS ( MonadState(..) )
+import Control.Monad.Trans ( MonadTrans, MonadIO, lift )
+import Control.Monad.Trans.State --( StateT, get, modify, put, runStateT, mapStateT )
+import Control.Monad.Trans.Control ( MonadTransControl(..), MonadBaseControl(..), ComposeSt, defaultLiftBaseWith, defaultRestoreM )
+import Control.Monad.Writer.Class ( MonadWriter(..) )
 import Data.Monoid ( Monoid(..) )
 
-newtype JournalT w m a = JournalT (StateT w m a) deriving (Applicative,Functor,Monad,MonadTrans,MonadIO)
+newtype JournalT w m a = JournalT (StateT w m a)
+    deriving ( Applicative
+             , Alternative
+             , Functor
+             , Monad
+             , MonadTrans
+             , MonadIO
+             , MonadPlus
+             , MonadReader r
+             , MonadWriter w'
+             )
 
 instance (Monoid w, Monad m) => MonadJournal w (JournalT w m) where
   journal !w = JournalT . modify $ flip mappend w
   history = JournalT get
   clear   = JournalT (put mempty)
+
+instance MonadState s m => MonadState s (JournalT w m) where
+    get = lift MS.get
+    put = lift . MS.put
+    state = lift . MS.state
+
+
+instance Monoid w => MonadTransControl (JournalT w) where
+    newtype StT (JournalT w) a = StJournal {unStJournal :: (a, w)}
+    liftWith f = JournalT $ StateT $ \w ->
+                   liftM (\x -> (x, w))
+                     (f $ \t -> liftM StJournal $ runJournalT (journal w >> t))
+    restoreT = JournalT . StateT . const . liftM unStJournal
+    {-# INLINE liftWith #-}
+    {-# INLINE restoreT #-}
+
+instance MonadBase b m => MonadBase b (JournalT w m) where
+    liftBase = liftBaseDefault
+
+instance (Monoid w, MonadBaseControl b m) => MonadBaseControl b (JournalT w m) where
+    newtype StM (JournalT w m) a =
+        StMJournal { unStMJournal :: ComposeSt (JournalT w) m a }
+    liftBaseWith = defaultLiftBaseWith StMJournal
+    restoreM     = defaultRestoreM   unStMJournal
+    {-# INLINE liftBaseWith #-}
+    {-# INLINE restoreM #-}
 
 runJournalT :: (Monoid w, Monad m) => JournalT w m a -> m (a,w)
 runJournalT (JournalT s) = runStateT s mempty
diff --git a/monad-journal.cabal b/monad-journal.cabal
--- a/monad-journal.cabal
+++ b/monad-journal.cabal
@@ -1,7 +1,7 @@
 name:                monad-journal
 license:             PublicDomain
-version:             0.2.1.2
-synopsis:            Pure logger typeclass and monad transformer 
+version:             0.2.2.0
+synopsis:            Pure logger typeclass and monad transformer
 description:         This package provides a typeclass for logging in
                      pure code, or more generally, in any kind of
                      context. You can do whatever you want with
@@ -25,8 +25,10 @@
   exposed-modules:         Control.Monad.Journal
                          , Control.Monad.Journal.Class
                          , Control.Monad.Trans.Journal
-  build-depends:           base         >= 4.5 && < 4.7
-                         , mtl          == 2.1.*
-                         , transformers == 0.3.*
-                         , either       == 4.1.*
+  build-depends:           base              >= 4.5 && < 4.8
+                         , mtl               >= 2.1 && < 2.3
+                         , transformers      >= 0.3 && < 0.5
+                         , either            >= 4.1 && < 4.4
+                         , monad-control     >= 0.3 && < 0.4
+                         , transformers-base >= 0.4 && < 0.5
   default-language:        Haskell2010
