diff --git a/Control/Monad/Tardis.hs b/Control/Monad/Tardis.hs
--- a/Control/Monad/Tardis.hs
+++ b/Control/Monad/Tardis.hs
@@ -1,24 +1,7 @@
-{-# LANGUAGE CPP                        #-}
-{-# OPTIONS_GHC -Wall -fno-warn-orphans #-}
-
-{-# LANGUAGE DoRec                      #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# LANGUAGE FunctionalDependencies     #-}
-
-#ifdef USE_UNDECIDABLE_INSTANCES
-{-# LANGUAGE FlexibleContexts           #-}
-{-# LANGUAGE UndecidableInstances       #-}
-{-# LANGUAGE OverlappingInstances       #-}
-#endif
+{-# OPTIONS_GHC -Wall #-}
 
 -- | This module re-exports both 'MonadTardis' and 'TardisT'
--- (Wherever there is overlap, the 'MonadTardis' version is preferred.),
--- as well as the 'TardisT' instance of 'MonadTardis'.
--- If you installed this library with the use-undecidable-instances flag,
--- then another instance was also exported:
--- any 'MonadTrans' on top of any 'MonadTardis'
--- is also a 'MonadTardis'.
+-- (Wherever there is overlap, the 'MonadTardis' version is preferred.)
 -- 
 -- The recommended usage of a Tardis is to import this module.
 module Control.Monad.Tardis
@@ -34,15 +17,6 @@
   ) where
 
 
-#ifdef USE_UNDECIDABLE_INSTANCES
-import Control.Applicative (Applicative)
-import Control.Monad.Trans (MonadTrans, lift)
-#endif
-
-import Control.Monad.Fix
-import Control.Monad.State.Class
-
-import qualified Control.Monad.Trans.Tardis as T
 import Control.Monad.Tardis.Class
 import Control.Monad.Trans.Tardis
   ( TardisT
@@ -58,31 +32,7 @@
   , noState
   )
 
-instance MonadFix m => MonadTardis bw fw (TardisT bw fw m) where
-  getPast    = T.getPast
-  getFuture  = T.getFuture
-  sendPast   = T.sendPast
-  sendFuture = T.sendFuture
-  tardis     = T.tardis
 
-instance MonadFix m => MonadState fw (TardisT bw fw m) where
-  get = getPast
-  put = sendFuture
-
-
-#ifdef USE_UNDECIDABLE_INSTANCES
-instance ( MonadTrans t
-         , MonadTardis bw fw m
-         , MonadFix (t m)
-         , Applicative (t m)
-         ) => MonadTardis bw fw (t m) where
-  getPast    = lift getPast
-  getFuture  = lift getFuture
-  sendPast   = lift . sendPast
-  sendFuture = lift . sendFuture
-  tardis     = lift . tardis
-#endif
-
 {- $whatis
     A Tardis is the combination of the State monad transformer
     and the Reverse State monad transformer.
@@ -171,7 +121,7 @@
     This code is equivalent to the previous example:
 
 > flip execTardis (10, "Dan") $ do
->   modifyForwards (++ "Burton")
+>   modifyForwards (++ " Burton")
 >   modifyBackwards (+ 1)
 
 -}
diff --git a/Control/Monad/Tardis/Class.hs b/Control/Monad/Tardis/Class.hs
--- a/Control/Monad/Tardis/Class.hs
+++ b/Control/Monad/Tardis/Class.hs
@@ -1,8 +1,10 @@
-{-# OPTIONS_GHC -Wall               #-}
-{-# LANGUAGE DoRec                  #-}
+{-# OPTIONS_GHC -Wall -fno-warn-warnings-deprecations   #-}
+{-# LANGUAGE DoRec                           #-}
 {-# LANGUAGE MultiParamTypeClasses  #-}
 {-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE FlexibleInstances      #-}
 
+
 -- | The class definition of a Tardis,
 -- as well as a few straightforward combinators
 -- based on its primitives.
@@ -22,6 +24,8 @@
 import Control.Applicative
 import Control.Monad.Fix
 
+import qualified Control.Monad.Trans.Tardis as T
+
 -- | A Tardis is parameterized by two state streams:
 -- a 'backwards-traveling' state and a 'forwards-traveling' state.
 -- This library consistently puts the backwards-traveling state first
@@ -95,3 +99,10 @@
 getsFuture :: MonadTardis bw fw m => (bw -> a) -> m a
 getsFuture f = f <$> getFuture
 
+
+instance MonadFix m => MonadTardis bw fw (T.TardisT bw fw m) where
+  getPast    = T.getPast
+  getFuture  = T.getFuture
+  sendPast   = T.sendPast
+  sendFuture = T.sendFuture
+  tardis     = T.tardis
diff --git a/Control/Monad/Trans/Tardis.hs b/Control/Monad/Trans/Tardis.hs
--- a/Control/Monad/Trans/Tardis.hs
+++ b/Control/Monad/Trans/Tardis.hs
@@ -1,6 +1,7 @@
-{-# OPTIONS_GHC -Wall #-}
-{-# LANGUAGE DoRec #-}
+{-# OPTIONS_GHC -Wall -fno-warn-warnings-deprecations #-}
+{-# LANGUAGE DoRec                           #-}
 
+
 -- | The data definition of a "TardisT"
 -- as well as its primitive operations,
 -- and straightforward combinators based on the primitives.
@@ -9,8 +10,7 @@
 -- of what a Tardis is and how to use it.
 module Control.Monad.Trans.Tardis (
     -- * The Tardis monad transformer
-    TardisT
-  , runTardisT
+    TardisT (TardisT, runTardisT)
   , evalTardisT
   , execTardisT
 
@@ -36,12 +36,14 @@
   , getsFuture
 
     -- * Other
+  , mapTardisT
   , noState
   ) where
 
 import Control.Applicative
 import Control.Monad.Identity
 import Control.Monad.Trans
+import Control.Monad.Morph
 
 
 -- Definition
@@ -98,6 +100,12 @@
 execTardis t = runIdentity . execTardisT t
 
 
+-- | A function that operates on the internal representation of a Tardis
+-- can also be used on a Tardis.
+mapTardisT :: (m (a, (bw, fw)) -> n (b, (bw, fw)))
+           -> TardisT bw fw m a -> TardisT bw fw n b
+mapTardisT f m = TardisT $ f . runTardisT m
+
 -- | Some Tardises never observe the 'initial' state
 -- of either state stream, so it is convenient
 -- to simply hand dummy values to such Tardises.
@@ -135,6 +143,8 @@
     rec (x, s') <- runTardisT (f x) s
     return (x, s')
 
+instance MFunctor (TardisT bw fw) where
+  hoist = mapTardisT
 
 -- Basics
 -------------------------------------------------
diff --git a/tardis.cabal b/tardis.cabal
--- a/tardis.cabal
+++ b/tardis.cabal
@@ -1,5 +1,5 @@
 name:                tardis
-version:             0.3.0.0
+version:             0.4.1.0
 synopsis:            Bidirectional state monad transformer
 homepage:            https://github.com/DanBurton/tardis
 bug-reports:         https://github.com/DanBurton/tardis/issues
@@ -16,31 +16,18 @@
   state transformer, providing two state values that \"travel\"
   in opposite directions.
   .
-  You can install this library with the @use-undecidable-instances@ flag,
-  but this feature is only provided for toying around.
-  If you depend on this library, or install any libraries that
-  depend on this library, then you should install this library /without/
-  that flag.
-  .
   A detailed description of what a Tardis is and how to use it
   can be found in the documentation for Control.Monad.Tardis.
 
-Flag use-undecidable-instances
-  description:    Include additional instances for MonadTardis
-                  that require some sketchy language extensions
-  default:        False
 
 library
   exposed-modules:     Control.Monad.Tardis
                      , Control.Monad.Tardis.Class
                      , Control.Monad.Trans.Tardis
 
-
   build-depends:       base==4.*
                      , mtl==2.*
-
-  if flag(use-undecidable-instances)
-    cpp-options: -DUSE_UNDECIDABLE_INSTANCES
+                     , mmorph==1.*
 
 
 source-repository head
@@ -50,5 +37,4 @@
 source-repository this
   type:     git
   location: git://github.com/DanBurton/tardis.git
-  tag:      tardis-0.3.0.0
-
+  tag:      tardis-0.4.1.0
