diff --git a/pusher-http-haskell.cabal b/pusher-http-haskell.cabal
--- a/pusher-http-haskell.cabal
+++ b/pusher-http-haskell.cabal
@@ -1,5 +1,5 @@
 name:                 pusher-http-haskell
-version:              0.1.0.0
+version:              0.2.0.0
 cabal-version:        >=1.18
 build-type:           Simple
 license:              MIT
@@ -11,8 +11,12 @@
 homepage:             https://github.com/pusher-community/pusher-http-haskell
 bug-reports:          https://github.com/pusher-community/pusher-http-haskell/issues
 synopsis:             Haskell client library for the Pusher HTTP API
+description:          Functions that correspond to endpoints of the Pusher HTTP
+                      API. Messages can be triggered, and information about the
+                      channel can be queried. Additionally there are functions
+                      for authenticating users of private and presence channels.
 category:             Network
-tested-with:          GHC == 7.8.4
+tested-with:          GHC==7.10.2
 
 library
   exposed-modules:    Control.Monad.Pusher,
@@ -28,18 +32,18 @@
   hs-source-dirs:     src
   default-extensions: OverloadedStrings
   build-depends:      aeson ==0.8.*,
-                      base ==4.7.*,
+                      base >=4.7 && <4.9,
                       bytestring ==0.10.*,
                       base16-bytestring ==0.1.*,
                       cryptohash ==0.11.*,
                       hashable ==1.2.*,
                       http-client ==0.4.*,
                       http-types ==0.8.*,
-                      mtl ==2.1.*,
-                      QuickCheck ==2.7.*,
+                      mtl ==2.2.*,
+                      QuickCheck >=2.7 && <2.9,
                       text ==1.2.*,
-                      time ==1.4.*,
-                      transformers ==0.3.*,
+                      time >=1.4 && <1.6,
+                      transformers >=0.3 && <0.5,
                       unordered-containers ==0.2.*
 
 executable api-example
diff --git a/src/Control/Monad/Pusher.hs b/src/Control/Monad/Pusher.hs
--- a/src/Control/Monad/Pusher.hs
+++ b/src/Control/Monad/Pusher.hs
@@ -17,9 +17,10 @@
 -}
 module Control.Monad.Pusher (MonadPusher, PusherM, PusherT, runPusherT) where
 
-import Control.Monad.Error (ErrorT, MonadError, runErrorT)
+import Control.Monad.Except (ExceptT, MonadError, runExceptT)
 import Control.Monad.Identity (Identity)
 import Control.Monad.Reader (MonadReader, ReaderT, runReaderT)
+import qualified Data.Text as T
 
 import Control.Monad.Pusher.HTTP (MonadHTTP)
 import Control.Monad.Pusher.Time (MonadTime)
@@ -29,17 +30,17 @@
 type PusherM a = PusherT Identity a
 
 -- |Use this if you wish to stack this on your own monads.
-type PusherT m a = ReaderT Pusher (ErrorT String m) a
+type PusherT m a = ReaderT Pusher (ExceptT T.Text m) a
 
 -- |Run the monadic Pusher code to extract the result
-runPusherT :: PusherT m a -> Pusher -> m (Either String a)
-runPusherT run p = runErrorT $ runReaderT run p
+runPusherT :: PusherT m a -> Pusher -> m (Either T.Text a)
+runPusherT run p = runExceptT $ runReaderT run p
 
 -- |Typeclass alias for the return type of the API functions (keeps the
 -- signatures less verbose)
 type MonadPusher m =
   ( Functor m
-  , MonadError String m
+  , MonadError T.Text m
   , MonadHTTP m
   , MonadReader Pusher m
   , MonadTime m
diff --git a/src/Control/Monad/Pusher/HTTP.hs b/src/Control/Monad/Pusher/HTTP.hs
--- a/src/Control/Monad/Pusher/HTTP.hs
+++ b/src/Control/Monad/Pusher/HTTP.hs
@@ -11,7 +11,7 @@
 -}
 module Control.Monad.Pusher.HTTP (MonadHTTP(..)) where
 
-import Control.Monad.Error (Error, ErrorT)
+import Control.Monad.Except (ExceptT)
 import Control.Monad.Reader (ReaderT)
 import Control.Monad.Trans.Class (lift)
 import Network.HTTP.Client (Manager, Request, Response)
@@ -29,5 +29,5 @@
 instance MonadHTTP m => MonadHTTP (ReaderT r m) where
   httpLbs req mngr = lift $ httpLbs req mngr
 
-instance (Error e, MonadHTTP m) => MonadHTTP (ErrorT e m) where
+instance MonadHTTP m => MonadHTTP (ExceptT e m) where
   httpLbs req mngr = lift $ httpLbs req mngr
diff --git a/src/Control/Monad/Pusher/Time.hs b/src/Control/Monad/Pusher/Time.hs
--- a/src/Control/Monad/Pusher/Time.hs
+++ b/src/Control/Monad/Pusher/Time.hs
@@ -9,7 +9,7 @@
 module Control.Monad.Pusher.Time (MonadTime(..)) where
 
 import Control.Applicative ((<$>))
-import Control.Monad.Error (Error, ErrorT)
+import Control.Monad.Except (ExceptT)
 import Control.Monad.Reader (ReaderT)
 import Control.Monad.Trans.Class (lift)
 import Network.HTTP.Client (Manager, Request, Response)
@@ -26,5 +26,5 @@
 instance MonadTime m => MonadTime (ReaderT r m) where
   getPOSIXTime = lift getPOSIXTime
 
-instance (Error e, MonadTime m) => MonadTime (ErrorT e m) where
+instance MonadTime m => MonadTime (ExceptT e m) where
   getPOSIXTime = lift getPOSIXTime
diff --git a/src/Network/Pusher.hs b/src/Network/Pusher.hs
--- a/src/Network/Pusher.hs
+++ b/src/Network/Pusher.hs
@@ -58,7 +58,7 @@
 
 import Control.Applicative ((<$>))
 import Control.Monad (when)
-import Control.Monad.Error (throwError)
+import Control.Monad.Except (throwError)
 import Control.Monad.Reader (MonadReader, asks)
 import Data.Maybe (maybeToList)
 import Data.Monoid ((<>))
diff --git a/src/Network/Pusher/Internal/HTTP.hs b/src/Network/Pusher/Internal/HTTP.hs
--- a/src/Network/Pusher/Internal/HTTP.hs
+++ b/src/Network/Pusher/Internal/HTTP.hs
@@ -16,7 +16,8 @@
 module Network.Pusher.Internal.HTTP (MonadHTTP(..), get, post) where
 
 import Control.Arrow (second)
-import Control.Monad.Error (MonadError, throwError)
+import Control.Monad.Except (MonadError, throwError)
+import Data.Text.Encoding (decodeUtf8')
 import Network.HTTP.Client
   ( Manager
   , RequestBody(RequestBodyLBS)
@@ -36,6 +37,7 @@
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Char8 as BC
 import qualified Data.ByteString.Lazy as BL
+import qualified Data.Text as T
 
 import Control.Monad.Pusher.HTTP (MonadHTTP(httpLbs))
 
@@ -44,7 +46,7 @@
 -- |Issue an HTTP GET request. On a 200 response, the response body is returned.
 -- On failure, an error will be thrown into the MonadError instance.
 get
-  :: (A.FromJSON a, Functor m, MonadError String m, MonadHTTP m)
+  :: (A.FromJSON a, Functor m, MonadError T.Text m, MonadHTTP m)
   => Manager
   -> B.ByteString
   -- ^The API endpoint, for example http://api.pusherapp.com/apps/123/events
@@ -56,13 +58,13 @@
   resp <- makeRequest connManager ep qs Nothing
   when200 resp $
     either
-      throwError
+      (throwError . T.pack)
       return
       (A.eitherDecode $ responseBody resp)
 
 -- |Issue an HTTP POST request.
 post
-  :: (A.ToJSON a, Functor m, MonadError String m, MonadHTTP m)
+  :: (A.ToJSON a, Functor m, MonadError T.Text m, MonadHTTP m)
   => Manager
   -> B.ByteString
   -> [(B.ByteString, B.ByteString)]
@@ -75,14 +77,14 @@
 -- |Make a request by building up an http-client Request data structure, and
 -- performing the IO action.
 makeRequest
-  :: (Functor m, MonadError String m, MonadHTTP m)
+  :: (Functor m, MonadError T.Text m, MonadHTTP m)
   => Manager
   -> B.ByteString
   -> [(B.ByteString, B.ByteString)]
   -> Maybe BL.ByteString
   -> m (Response BL.ByteString)
 makeRequest connManager ep qs body = do
-  req <- either (throwError . show) return (parseUrl $ BC.unpack ep)
+  req <- either (throwError . T.pack . show) return (parseUrl $ BC.unpack ep)
   let
     req' = setQueryString (map (second Just) qs) req
     req'' = case body of
@@ -94,13 +96,13 @@
       Nothing -> req'
   httpLbs req'' connManager
 
-when200 :: (MonadError String m) => Response BL.ByteString -> m a -> m a
+when200 :: (MonadError T.Text m) => Response BL.ByteString -> m a -> m a
 when200 response run =
   let status = responseStatus response in
   if statusCode status == 200 then
      run
   else
-     throwError $ show $ statusMessage status
+     throwError $ either (T.pack . show) id $ decodeUtf8' $ statusMessage status
 
-errorOn200 :: (MonadError String m) => Response BL.ByteString -> m ()
+errorOn200 :: (MonadError T.Text m) => Response BL.ByteString -> m ()
 errorOn200 response = when200 response (return ())
diff --git a/test/HTTP.hs b/test/HTTP.hs
--- a/test/HTTP.hs
+++ b/test/HTTP.hs
@@ -7,7 +7,7 @@
 module HTTP where
 
 import Control.Applicative (Applicative)
-import Control.Monad.Error (MonadError, catchError, throwError)
+import Control.Monad.Except (MonadError, catchError, throwError)
 import Control.Monad.Reader (MonadReader, ReaderT, ask, runReaderT)
 import Control.Monad.Trans.Class (MonadTrans, lift)
 import Test.Hspec (Spec, describe, it, shouldBe)
@@ -24,6 +24,7 @@
 import qualified Data.Aeson as A
 import qualified Data.ByteString.Lazy as BL
 import qualified Data.HashMap.Strict as HM
+import qualified Data.Text as T
 
 import Network.Pusher.Internal.HTTP
   ( MonadHTTP(httpLbs)
@@ -97,8 +98,8 @@
       (runMockServer
         (get mngr "http://example.com/path" [])
         failedResponse
-        :: Either String ())
-      `shouldBe` Left "\"fail\""
+        :: Either T.Text ())
+      `shouldBe` Left "fail"
 
   describe "HTTP.post" $ do
     it "returns the body when the request is 200" $ withConnManager $ \mngr ->
@@ -112,5 +113,5 @@
       (runMockServer
         (post mngr "http://example.com/path" [] (A.Object HM.empty))
         failedResponse
-        :: Either String ())
-      `shouldBe` Left "\"fail\""
+        :: Either T.Text ())
+      `shouldBe` Left "fail"
