diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,8 @@
+0.4.1.0
+-------
+
+ * Based on exceptions-0.4
+
 0.4.0.0
 -------
  * Compiles with ghc 7.8
diff --git a/hint.cabal b/hint.cabal
--- a/hint.cabal
+++ b/hint.cabal
@@ -1,5 +1,5 @@
 name:                hint
-version:             0.4.0.0
+version:             0.4.1.0
 description:
         This library defines an @Interpreter@ monad. It allows to load Haskell
         modules, browse them, type-check and evaluate strings with Haskell
@@ -38,7 +38,7 @@
                 ,filepath
                 ,mtl
                 ,extensible-exceptions
-                ,exceptions >= 0.3.2, exceptions < 0.4
+                ,exceptions
 
 Library
   build-depends:      ghc > 6.6,
@@ -47,15 +47,16 @@
                       filepath,
                       utf8-string,
                       extensible-exceptions,
-                      exceptions >= 0.3.2, exceptions < 0.4
+                      exceptions
   if impl(ghc >= 6.8) {
     build-depends:    random,
                       directory
 
     if impl(ghc >= 6.10) {
       build-depends:  base >= 4, base < 5,
-                      ghc-mtl == 1.1.*
+                      ghc-mtl == 1.2.*
                         -- version 1.1.* uses exceptions instead of MonadCatchIO
+                        -- version 1.2.* uses the exceptions-0.4 api
     } else {
       build-depends:  base >= 3, base < 4
     }
diff --git a/src/Hint/InterpreterT.hs b/src/Hint/InterpreterT.hs
--- a/src/Hint/InterpreterT.hs
+++ b/src/Hint/InterpreterT.hs
@@ -39,7 +39,7 @@
 newtype InterpreterT m a = InterpreterT{
                              unInterpreterT :: ReaderT InterpreterSession
                                                (ErrorT InterpreterError m) a}
-    deriving (Functor, Monad, MonadIO, MonadCatch)
+    deriving (Functor, Monad, MonadIO, MonadThrow,MonadCatch)
 
 execute :: (MonadIO m, MonadCatch m, Functor m)
         => InterpreterSession
@@ -50,7 +50,7 @@
 instance MonadTrans InterpreterT where
     lift = InterpreterT . lift . lift
 
-runGhc_impl :: (MonadIO m, MonadCatch m, Functor m) => RunGhc (InterpreterT m) a
+runGhc_impl :: (MonadIO m, MonadThrow m, MonadCatch m, Functor m) => RunGhc (InterpreterT m) a
 runGhc_impl f = do s <- fromSession versionSpecific -- i.e. the ghc session
                    r <- liftIO $ f' s
                    either throwError return r
@@ -63,7 +63,7 @@
 newtype InterpreterT m a = InterpreterT{
                              unInterpreterT :: ReaderT  InterpreterSession
                                               (GHC.GhcT m) a}
-    deriving (Functor, Monad, MonadIO, MonadCatch)
+    deriving (Functor, Monad, MonadIO, MonadThrow, MonadCatch)
 
 execute :: (MonadIO m, MonadCatch m, Functor m)
         => InterpreterSession
@@ -78,7 +78,7 @@
 instance MonadTrans InterpreterT where
     lift = InterpreterT . lift . lift
 
-runGhc_impl :: (MonadIO m, MonadCatch m, Functor m) => RunGhc (InterpreterT m) a
+runGhc_impl :: (MonadIO m, MonadThrow m, MonadCatch m, Functor m) => RunGhc (InterpreterT m) a
 runGhc_impl a =
   InterpreterT (lift a)
    `catches`
@@ -99,7 +99,7 @@
 
 -- ================= Executing the interpreter ==================
 
-initialize :: (MonadIO m, MonadCatch m, Functor m)
+initialize :: (MonadIO m, MonadThrow m, MonadCatch m, Functor m)
               => [String]
               -> InterpreterT m ()
 initialize args =
