diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,7 +9,7 @@
   - export PATH=~/.cabal/bin:$PATH
   - cabal configure -flib-Werror $mode
   - cabal install packdeps packunused
-  - cabal build
+  - cabal build --ghc-option=-ddump-minimal-imports
 
 script:
   - $script
diff --git a/bytes.cabal b/bytes.cabal
--- a/bytes.cabal
+++ b/bytes.cabal
@@ -1,6 +1,6 @@
 name:          bytes
 category:      Data, Serialization
-version:       0.14.0.2
+version:       0.14.1
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -53,7 +53,7 @@
     text                      >= 0.2      && < 1.2,
     time                      >= 1.2      && < 1.5,
     transformers              >= 0.2      && < 0.5,
-    transformers-compat       >= 0.1      && < 1,
+    transformers-compat       >= 0.3      && < 1,
     void                      >= 0.6      && < 0.7
 
   if impl(ghc >= 7.4 && < 7.6)
diff --git a/src/Data/Bytes/Get.hs b/src/Data/Bytes/Get.hs
--- a/src/Data/Bytes/Get.hs
+++ b/src/Data/Bytes/Get.hs
@@ -27,6 +27,7 @@
 
 import Control.Applicative
 import Control.Monad.Reader
+import Control.Monad.Trans.Except as Except
 import Control.Monad.RWS.Lazy as Lazy
 import Control.Monad.RWS.Strict as Strict
 import Control.Monad.State.Lazy as Lazy
@@ -404,6 +405,24 @@
     where
     distribute (Left a, s', w') = Left (Left a, s', w')
     distribute (Right b, s', w') = Right (Right b, s', w')
+    factor = either id id
+  {-# INLINE lookAheadE #-}
+
+instance MonadGet m => MonadGet (ExceptT e m) where
+  type Remaining (ExceptT e m) = Remaining m
+  type Bytes (ExceptT e m) = Bytes m
+  lookAhead = mapExceptT lookAhead
+  {-# INLINE lookAhead #-}
+  lookAheadM (ExceptT m) = ExceptT (liftM factor $ lookAheadE $ liftM distribute m)
+    where
+    distribute (Left e) = (Left (Left e))
+    distribute (Right j) = (Right (Right j))
+    factor = either id id
+  {-# INLINE lookAheadM #-}
+  lookAheadE (ExceptT m) = ExceptT (liftM factor $ lookAheadE $ liftM distribute m)
+    where
+    distribute (Left e) = (Left (Left e))
+    distribute (Right a) = (Right (Right a))
     factor = either id id
   {-# INLINE lookAheadE #-}
 
diff --git a/src/Data/Bytes/Put.hs b/src/Data/Bytes/Put.hs
--- a/src/Data/Bytes/Put.hs
+++ b/src/Data/Bytes/Put.hs
@@ -29,6 +29,7 @@
 
 import Control.Applicative
 import Control.Monad.Reader
+import Control.Monad.Trans.Except as Except
 import Control.Monad.RWS.Lazy as Lazy
 import Control.Monad.RWS.Strict as Strict
 import Control.Monad.State.Lazy as Lazy
@@ -240,6 +241,7 @@
 instance (MonadPut m, Monoid w) => MonadPut (Strict.WriterT w m)
 instance (MonadPut m, Monoid w) => MonadPut (Lazy.RWST r w s m)
 instance (MonadPut m, Monoid w) => MonadPut (Strict.RWST r w s m)
+instance (MonadPut m) => MonadPut (ExceptT e m) where
 
 -- | Put a value into a lazy 'Lazy.ByteString' using 'B.runPut'.
 runPutL :: B.Put -> Lazy.ByteString
