diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,1 +1,33 @@
 # `exceptiot`
+
+Sometimes, it is nice to write code in `MonadError` to indicate that the code
+can throw an exception.
+
+```haskell
+foo :: MonadError FooError m => Int -> m Char
+```
+
+We can call `foo` in `Either FooError` for a pure test, or a `ExceptT FooError
+IO` if we are writing in some monad directly. However, sometimes you can't use
+`ExceptT`. One possible reason is performance: `ExceptT` can add overhead.
+Another reason is `MonadUnliftIO` - `ExceptT` cannot have an instance for this.
+
+You don't want to *stop* using `MonadError`, but you also can't use `ExceptT`
+anymore. What can you do?
+
+```haskell
+import Control.Monad.Except.IO
+
+main :: IO ()
+main = do
+    eres <- runExceptIOT (foo 3)
+    case eres of
+        Left FooError ->
+            putStrLn "got FooError"
+        Right c ->
+            putChar c
+```
+
+You can replace `ExceptT` with `ExceptIOT`, and all exception use will switch to
+`IO` based exceptions instead of `Either`-based values. This allows you to use
+`MonadUnliftIO` without fear.
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,11 @@
 # exceptiot
 
+## 0.0.1.1
+
+* [#3](https://github.com/parsonsmatt/exceptiot/pull/3)
+    * Add imports for `Control.Monad.Fix` and `Control.Monad`, allowing to build
+      with newer `mtl`.
+
 ## 0.0.1.0
 
 * [#1](https://github.com/parsonsmatt/exceptiot/pull/1)
diff --git a/exceptiot.cabal b/exceptiot.cabal
--- a/exceptiot.cabal
+++ b/exceptiot.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.35.0.
+-- This file has been generated from package.yaml by hpack version 0.36.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:           exceptiot
-version:        0.0.1.0
+version:        0.0.1.1
 synopsis:       ExceptT, but uses IO instead of Either
 description:    Please see the README on Github at <https://github.com/parsonsmatt/exceptiot#readme>
 category:       Control
diff --git a/src/Control/Monad/Except/Catch.hs b/src/Control/Monad/Except/Catch.hs
--- a/src/Control/Monad/Except/Catch.hs
+++ b/src/Control/Monad/Except/Catch.hs
@@ -11,9 +11,10 @@
     ) where
 
 import Control.Applicative
+import Control.Monad
 import Control.Monad.Catch
 import Control.Monad.Error.Class hiding (modifyError)
-import qualified Control.Monad.Except as Except
+import Control.Monad.Fix
 import Control.Monad.IO.Unlift
 import Control.Monad.Reader
 import Control.Monad.State
@@ -48,7 +49,7 @@
 runExceptCatchT :: (Exception e, MonadCatch m) => ExceptCatchT e m a -> m (Either e a)
 runExceptCatchT = try . unsafeRunExceptCatchT
 
--- | Like 'Except.modifyError', but it selects the 'ExceptCatchT' instance for 'IO'
+-- | Like 'Control.Monad.Except.modifyError', but it selects the 'ExceptCatchT' instance for 'IO'
 -- exceptions instead of the 'ExceptT' instance with an 'Either' error.
 --
 -- @since 0.1.0.0
diff --git a/src/Control/Monad/Except/IO.hs b/src/Control/Monad/Except/IO.hs
--- a/src/Control/Monad/Except/IO.hs
+++ b/src/Control/Monad/Except/IO.hs
@@ -11,9 +11,11 @@
     ) where
 
 import Control.Applicative
+import Control.Monad
 import Control.Monad.Catch hiding (catch, try)
 import Control.Monad.Error.Class hiding (modifyError)
 import qualified Control.Monad.Except as Except
+import Control.Monad.Fix
 import Control.Monad.Reader
 import Control.Monad.State
 import Control.Monad.Writer
