diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+#### 0.2.0.0
+
+* Change to use `ExceptT` and bump rest dependencies
+
 #### 0.1.2.2
 
 * Bump `rest-core`.
diff --git a/example-api/Api/Post.hs b/example-api/Api/Post.hs
--- a/example-api/Api/Post.hs
+++ b/example-api/Api/Post.hs
@@ -9,9 +9,10 @@
 import Control.Applicative
 import Control.Concurrent.STM (STM, TVar, atomically, modifyTVar, readTVar)
 import Control.Monad (unless)
-import Control.Monad.Error (ErrorT, throwError)
+import Control.Monad.Error.Class
 import Control.Monad.Reader (ReaderT, asks)
 import Control.Monad.Trans (lift, liftIO)
+import Control.Monad.Trans.Except (ExceptT)
 import Data.List (sortBy)
 import Data.Ord (comparing)
 import Data.Set (Set)
@@ -74,7 +75,7 @@
 get :: Handler WithPost
 get = mkIdHandler xmlJsonO handler
   where
-    handler :: () -> Identifier -> ErrorT Reason_ WithPost Post
+    handler :: () -> Identifier -> ExceptT Reason_ WithPost Post
     handler _ i = do
       mpost <- liftIO . atomically . postFromIdentifier i =<< (lift . lift) (asks posts)
       case mpost of
@@ -85,7 +86,7 @@
 list :: ListHandler BlogApi
 list = mkListing xmlJsonO handler
   where
-    handler :: Range -> ErrorT Reason_ BlogApi [Post]
+    handler :: Range -> ExceptT Reason_ BlogApi [Post]
     handler r = do
       psts <- liftIO . atomically . readTVar =<< asks posts
       return . take (count r) . drop (offset r) . sortBy (flip $ comparing Post.createdTime) . Set.toList $ psts
@@ -93,7 +94,7 @@
 create :: Handler BlogApi
 create = mkInputHandler (xmlJsonE . xmlJson) handler
   where
-    handler :: UserPost -> ErrorT (Reason PostError) BlogApi Post
+    handler :: UserPost -> ExceptT (Reason PostError) BlogApi Post
     handler (UserPost usr pst) = do
       -- Make sure the credentials are valid
       checkLogin usr
@@ -113,7 +114,7 @@
 remove :: Handler WithPost
 remove = mkIdHandler id handler
   where
-    handler :: () -> Identifier -> ErrorT Reason_ WithPost ()
+    handler :: () -> Identifier -> ExceptT Reason_ WithPost ()
     handler _ i = do
       pstsVar <- lift . lift $ asks posts
       merr <- liftIO . atomically $ do
@@ -148,7 +149,7 @@
 validContent = (>= 1) . T.length . CreatePost.content
 
 -- | Throw an error if the user isn't logged in.
-checkLogin :: User -> ErrorT (Reason e) BlogApi ()
+checkLogin :: User -> ExceptT (Reason e) BlogApi ()
 checkLogin usr = do
   usrs <- liftIO . atomically . readTVar =<< asks users
   unless (usr `F.elem` usrs) $ throwError NotAllowed
diff --git a/example-api/Api/Post/Comment.hs b/example-api/Api/Post/Comment.hs
--- a/example-api/Api/Post/Comment.hs
+++ b/example-api/Api/Post/Comment.hs
@@ -3,7 +3,7 @@
 
 import Control.Concurrent.STM (atomically, modifyTVar', readTVar)
 import Control.Monad.Reader
-import Control.Monad.Trans.Error
+import Control.Monad.Trans.Except
 import Data.List
 import Data.Monoid
 import Data.Ord
@@ -37,7 +37,7 @@
 list :: ListHandler WithPost
 list = mkListing xmlJsonO handler
   where
-    handler :: Range -> ErrorT Reason_ WithPost [Comment]
+    handler :: Range -> ExceptT Reason_ WithPost [Comment]
     handler r = do
       postId <- getPostId `orThrow` NotFound
       comms <- liftIO . atomically . readTVar
@@ -49,7 +49,7 @@
 create :: Handler WithPost
 create = mkInputHandler xmlJson handler
   where
-    handler :: UserComment -> ErrorT Reason_ WithPost Comment
+    handler :: UserComment -> ExceptT Reason_ WithPost Comment
     handler ucomm = do
       postId <- getPostId `orThrow` NotFound
       comm   <- liftIO $ userCommentToComment ucomm
@@ -58,7 +58,7 @@
         modifyTVar' comms (H.insertWith (<>) postId (Set.singleton comm))
       return comm
 
-getPostId :: ErrorT Reason_ WithPost (Maybe Post.Id)
+getPostId :: ExceptT Reason_ WithPost (Maybe Post.Id)
 getPostId = do
   postIdent <- ask
   return . fmap Post.id
diff --git a/example-api/Api/Test.hs b/example-api/Api/Test.hs
--- a/example-api/Api/Test.hs
+++ b/example-api/Api/Test.hs
@@ -9,8 +9,8 @@
   #-}
 module Api.Test where
 
+import Control.Monad.Error.Class
 import Control.Monad.Reader
-import Control.Monad.Trans.Error
 import Data.Aeson
 import Data.Data
 import Data.JSON.Schema
@@ -71,41 +71,41 @@
 noResponse = mkConstHandler id $ return ()
 
 onlyError :: Handler WithText
-onlyError = mkConstHandler (jsonE . someE) $
+onlyError = mkConstHandler jsonE $
   throwError $ domainReason Err
 
 differentFormats :: Handler WithText
-differentFormats = mkInputHandler (jsonE . someE . xmlO . someO . stringI . someI) $
+differentFormats = mkInputHandler (jsonE . xmlO . stringI) $
   \case
     "error" -> throwError $ domainReason Err
     _       -> return Ok
 
 intersectedFormats :: Handler WithText
-intersectedFormats = mkInputHandler (jsonE . someE . xmlO . jsonO . someO . stringI . someI) $
+intersectedFormats = mkInputHandler (jsonE . xmlO . jsonO . stringI) $
   \case
     "error" -> throwError $ domainReason Err
     _       -> return Ok
 
 intersectedFormats2 :: Handler WithText
-intersectedFormats2 = mkInputHandler (xmlE . someE . xmlO . jsonO . someO . stringI . someI) $
+intersectedFormats2 = mkInputHandler (xmlE . xmlO . jsonO . stringI) $
   \case
     "error" -> throwError $ domainReason Err
     _       -> return Ok
 
 errorImport :: Handler WithText
-errorImport = mkIdHandler (stringI . rawXmlO . xmlE . someE) $ \s (_::Text) ->
+errorImport = mkIdHandler (stringI . rawXmlO . xmlE) $ \s (_::Text) ->
   case s of
     "error" -> throwError $ domainReason E2.Err
     _       -> return "<ok/>"
 
 noError :: Handler WithText
-noError = mkConstHandler (jsonO . someO) $ return Ok
+noError = mkConstHandler jsonO $ return Ok
 
 justStringO :: Handler WithText
-justStringO = mkConstHandler (stringO . someO) $ return "Ok"
+justStringO = mkConstHandler stringO $ return "Ok"
 
 preferJson :: Handler WithText
-preferJson = mkInputHandler (xmlJsonO . xmlJsonE . stringI . someI) $
+preferJson = mkInputHandler (xmlJsonO . xmlJsonE . stringI) $
   \case
     "error" -> throwError $ domainReason Err
     _       -> return Ok
@@ -117,4 +117,4 @@
     _       -> return ("ok", "ok")
 
 onlyInput :: Handler WithText
-onlyInput = mkInputHandler (jsonI . someI) $ \() -> throwError NotFound
+onlyInput = mkInputHandler jsonI $ \() -> throwError NotFound
diff --git a/example-api/Api/Test/DashedName.hs b/example-api/Api/Test/DashedName.hs
--- a/example-api/Api/Test/DashedName.hs
+++ b/example-api/Api/Test/DashedName.hs
@@ -1,8 +1,8 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 module Api.Test.DashedName (resource) where
 
-import Control.Monad.Error
 import Control.Monad.Reader
+import Control.Monad.Trans.Except
 import Rest
 import qualified Rest.Resource as R
 
@@ -22,5 +22,5 @@
 remove :: Handler WithSiteSubscription
 remove = mkConstHandler id handler
   where
-    handler :: ErrorT Reason_ WithSiteSubscription ()
+    handler :: ExceptT Reason_ WithSiteSubscription ()
     handler = return ()
diff --git a/example-api/Api/User.hs b/example-api/Api/User.hs
--- a/example-api/Api/User.hs
+++ b/example-api/Api/User.hs
@@ -2,9 +2,10 @@
 
 import Control.Applicative ((<$>))
 import Control.Concurrent.STM (atomically, modifyTVar, readTVar)
-import Control.Monad.Error (ErrorT, throwError)
+import Control.Monad.Error.Class (throwError)
 import Control.Monad.Reader (ReaderT, asks)
 import Control.Monad.Trans (liftIO)
+import Control.Monad.Trans.Except (ExceptT)
 import Data.Set (Set)
 import qualified Data.Foldable as F
 import qualified Data.Set      as Set
@@ -36,7 +37,7 @@
 list :: ListHandler BlogApi
 list = mkListing xmlJsonO handler
   where
-    handler :: Range -> ErrorT Reason_ BlogApi [UserInfo]
+    handler :: Range -> ExceptT Reason_ BlogApi [UserInfo]
     handler r = do
       usrs <- liftIO . atomically . readTVar =<< asks users
       return . map toUserInfo . take (count r) . drop (offset r) . Set.toList $ usrs
@@ -48,7 +49,7 @@
 create :: Handler BlogApi
 create = mkInputHandler (xmlJsonE . xmlJsonO . xmlJsonI) handler
   where
-    handler :: User -> ErrorT (Reason UserSignupError) BlogApi UserInfo
+    handler :: User -> ExceptT (Reason UserSignupError) BlogApi UserInfo
     handler usr = do
       usrs <- asks users
       merr <- liftIO . atomically $ do
diff --git a/rest-example.cabal b/rest-example.cabal
--- a/rest-example.cabal
+++ b/rest-example.cabal
@@ -1,5 +1,5 @@
 name:                rest-example
-version:             0.1.2.2
+version:             0.2.0.0
 synopsis:            Example project for rest
 homepage:            http://www.github.com/silkapp/rest
 license:             BSD3
@@ -50,13 +50,14 @@
     , mtl >= 2.0 && < 2.3
     , regular == 0.3.*
     , regular-xmlpickler == 0.2.*
-    , rest-core >= 0.33 && < 0.35
+    , rest-core == 0.35.*
     , safe >= 0.2 && < 0.4
     , transformers >= 0.2 && < 0.5
+    , transformers-compat == 0.4.*
     , stm >= 2.1 && < 2.5
     , text >= 0.11 && < 1.3
     , time >= 1.1 && < 1.6
-    , transformers-base == 0.4.*
+    , transformers-base >= 0.4.4 && < 0.5
     , unordered-containers == 0.2.*
 
 -------------------------------------------------------------------------------
@@ -93,9 +94,10 @@
         base >= 4.6 && < 4.8
       , happstack-server >= 7.1 && < 7.5
       , mtl >= 2.0 && < 2.3
-      , rest-core >= 0.33 && < 0.35
+      , rest-core == 0.35.*
       , rest-example
       , rest-happstack == 0.2.*
+      , transformers-compat == 0.4.*
   else
     buildable: False
 
@@ -109,11 +111,12 @@
     build-depends:
         base >= 4.6 && < 4.8
       , mtl >= 2.0 && < 2.3
-      , rest-core >= 0.33 && < 0.35
+      , rest-core == 0.35.*
       , rest-example
       , rest-wai == 0.1.*
       , wai >= 2.1 && < 3.1
       , warp >= 2.1 && < 3.1
+      , transformers-compat == 0.4.*
   else
     buildable: False
 
@@ -127,11 +130,12 @@
     build-depends:
         base >= 4.6 && < 4.8
       , mtl >= 2.0 && < 2.3
-      , rest-core >= 0.33 && < 0.35
+      , rest-core == 0.35.*
       , rest-example
       , rest-snap == 0.1.*
       , snap-core == 0.9.*
       , snap-server == 0.9.*
+      , transformers-compat == 0.4.*
   else
     buildable: False
 
@@ -145,8 +149,9 @@
     build-depends:
         base >= 4.6 && < 4.8
       , mtl >= 2.0 && < 2.3
-      , rest-core >= 0.33 && < 0.35
+      , rest-core == 0.35.*
       , rest-example
-      , rest-gen >= 0.14 && < 0.17
+      , rest-gen >= 0.14 && < 0.18
+      , transformers-compat == 0.4.*
   else
     buildable: False
