diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Changelog
 
+#### 0.36.0.4
+
+* Drop (internal) dependency on either, this removes 20(!) transitive
+  dependecies.
+
 #### 0.36.0.3
 
 * Allow `either 4.4.*`
diff --git a/rest-core.cabal b/rest-core.cabal
--- a/rest-core.cabal
+++ b/rest-core.cabal
@@ -1,5 +1,5 @@
 name:                rest-core
-version:             0.36.0.3
+version:             0.36.0.4
 description:         Rest API library.
 synopsis:            Rest API library.
 maintainer:          code@silk.co
@@ -44,7 +44,6 @@
     , aeson-utils >= 0.2 && < 0.4
     , bytestring >= 0.9 && < 0.11
     , case-insensitive >= 1.2 && < 1.3
-    , either >= 3.4 && < 4.5
     , errors >= 1.4 && < 2.1
     , fclabels == 2.0.*
     , hxt >= 9.2 && < 9.4
diff --git a/src/Rest/Driver/Routing.hs b/src/Rest/Driver/Routing.hs
--- a/src/Rest/Driver/Routing.hs
+++ b/src/Rest/Driver/Routing.hs
@@ -29,7 +29,6 @@
 import Control.Monad.Identity
 import Control.Monad.Reader
 import Control.Monad.State (MonadState, StateT, evalStateT)
-import Control.Monad.Trans.Either
 import Control.Monad.Trans.Except
 import Control.Monad.Trans.Maybe
 import Data.List.Split
@@ -65,7 +64,7 @@
 apiError = throwError
 
 newtype Router a =
-  Router { unRouter :: ReaderT Method (StateT UriParts (EitherT Reason_ Identity)) a }
+  Router { unRouter :: ReaderT Method (StateT UriParts (ExceptT Reason_ Identity)) a }
   deriving ( Functor
            , Applicative
            , Monad
@@ -76,7 +75,7 @@
 
 runRouter :: Method -> UriParts -> Router (RunnableHandler m) -> Either Reason_ (RunnableHandler m)
 runRouter method uri = runIdentity
-                     . runEitherT
+                     . runExceptT
                      . flip evalStateT uri
                      . flip runReaderT method
                      . unRouter
