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:              1.1.0.2
+version:              1.1.0.3
 cabal-version:        >=1.18
 build-type:           Simple
 license:              MIT
@@ -16,7 +16,7 @@
                       channel can be queried. Additionally there are functions
                       for authenticating users of private and presence channels.
 category:             Network
-tested-with:          GHC == 8.0.1
+tested-with:          GHC >= 7.10.2
 
 library
   exposed-modules:    Network.Pusher,
@@ -43,6 +43,15 @@
                       time >=1.4 && <1.7,
                       transformers >=0.3 && <0.6,
                       unordered-containers ==0.2.*
+  ghc-options:        -Wall
+  if impl(ghc >= 8.0.0)
+    ghc-options:      -Wcompat
+                      -Whi-shadowing
+                      -Wmissing-signatures
+  else
+    ghc-options:      -fwarn-hi-shadowing
+                      -fwarn-missing-signatures
+                      -fwarn-tabs
 
 test-suite tests
   default-language:   Haskell2010
@@ -63,3 +72,12 @@
                       text,
                       transformers,
                       unordered-containers
+  ghc-options:        -Wall
+  if impl(ghc >= 8.0.0)
+    ghc-options:      -Wcompat
+                      -Whi-shadowing
+                      -Wmissing-signatures
+  else
+    ghc-options:      -fwarn-hi-shadowing
+                      -fwarn-missing-signatures
+                      -fwarn-tabs
diff --git a/src/Network/Pusher.hs b/src/Network/Pusher.hs
--- a/src/Network/Pusher.hs
+++ b/src/Network/Pusher.hs
@@ -78,16 +78,8 @@
   , PusherError(..)
   ) where
 
-import Control.Applicative ((<$>))
-import Control.Monad (when)
-import Control.Monad.Trans.Except (ExceptT(ExceptT), runExceptT, throwE)
+import Control.Monad.Trans.Except (ExceptT(ExceptT), runExceptT)
 import Control.Monad.IO.Class (MonadIO, liftIO)
-import Data.Maybe (maybeToList)
-import Data.Monoid ((<>))
-import Network.HTTP.Client (Manager)
-import qualified Data.Aeson as A
-import qualified Data.ByteString as B
-import qualified Data.ByteString.Lazy as BL
 import qualified Data.Text as T
 
 import Network.Pusher.Data
@@ -115,7 +107,6 @@
   , AuthString
   , authenticatePresence
   , authenticatePrivate
-  , makeQS
   )
 import Network.Pusher.Internal.Util (getTime)
 import Network.Pusher.Protocol
@@ -124,7 +115,6 @@
   , ChannelsInfoQuery
   , FullChannelInfo
   , Users
-  , toURLParam
   )
 import qualified Network.Pusher.Internal as Pusher
 import qualified Network.Pusher.Internal.HTTP as HTTP
diff --git a/src/Network/Pusher/Data.hs b/src/Network/Pusher/Data.hs
--- a/src/Network/Pusher/Data.hs
+++ b/src/Network/Pusher/Data.hs
@@ -36,7 +36,6 @@
   , SocketID
   ) where
 
-import Control.Applicative ((<$>), (<*>))
 import Control.Monad.IO.Class (MonadIO, liftIO)
 import Data.Aeson ((.:))
 import Data.Foldable (asum)
diff --git a/src/Network/Pusher/Internal.hs b/src/Network/Pusher/Internal.hs
--- a/src/Network/Pusher/Internal.hs
+++ b/src/Network/Pusher/Internal.hs
@@ -42,10 +42,7 @@
   )
 import Network.Pusher.Protocol
   ( ChannelInfoQuery
-  , ChannelsInfo
   , ChannelsInfoQuery
-  , FullChannelInfo
-  , Users
   , toURLParam
   )
 
diff --git a/src/Network/Pusher/Internal/Auth.hs b/src/Network/Pusher/Internal/Auth.hs
--- a/src/Network/Pusher/Internal/Auth.hs
+++ b/src/Network/Pusher/Internal/Auth.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE FlexibleContexts #-}
 
 {-|
@@ -24,11 +25,13 @@
 import Data.Text.Encoding (encodeUtf8)
 import GHC.Exts (sortWith)
 import qualified Data.Aeson as A
+#if MIN_VERSION_aeson(1,0,0)
 import qualified Data.Aeson.Text as A
+#else
+import qualified Data.Aeson.Encode as A
+#endif
 import qualified Data.ByteString as B
-import qualified Data.ByteString.Char8 as BC
 import qualified Data.ByteString.Base16 as B16
-import qualified Data.ByteString.Lazy as BL
 import qualified Data.Text as T
 import qualified Data.Text.Lazy as TL
 import qualified Data.Text.Lazy.Builder as TL
@@ -126,8 +129,7 @@
 -- useful for testing because the encoder can be mocked; aeson's encoder enodes
 -- JSON object fields in arbitrary orders, which makes it impossible to test.
 authenticatePresenceWithEncoder
-  :: A.ToJSON a
-  => (a -> T.Text) -- ^The encoder of the user data.
+  :: (a -> T.Text) -- ^The encoder of the user data.
   -> Credentials
   -> SocketID
   -> Channel
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
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE TupleSections #-}
 
@@ -32,13 +33,11 @@
 import Network.HTTP.Types.Status (statusCode, statusMessage)
 import qualified Data.Aeson as A
 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 qualified Network.HTTP.Client as HTTP.Client
 
 import Network.Pusher.Error (PusherError(..))
-import Network.Pusher.Internal.Util (show')
 
 data RequestParams = RequestParams
   { requestEndpoint :: T.Text
@@ -84,9 +83,15 @@
   -> RequestQueryString
   -> Either PusherError HTTP.Client.Request
 mkRequest ep qs =
-  case HTTP.Client.parseRequest $ T.unpack ep of
+  case parseRequest $ T.unpack ep of
     Nothing -> Left $ PusherArgumentError $ "failed to parse url: " <> ep
     Just req -> Right $ HTTP.Client.setQueryString (map (second Just) qs) req
+ where
+#if MIN_VERSION_http_client(0,4,30)
+  parseRequest = HTTP.Client.parseRequest
+#else
+  parseRequest = HTTP.Client.parseUrl
+#endif
 
 mkPost :: BL.ByteString -> HTTP.Client.Request -> HTTP.Client.Request
 mkPost body req =
diff --git a/src/Network/Pusher/Internal/Util.hs b/src/Network/Pusher/Internal/Util.hs
--- a/src/Network/Pusher/Internal/Util.hs
+++ b/src/Network/Pusher/Internal/Util.hs
@@ -12,7 +12,6 @@
   , show'
   ) where
 
-import Control.Applicative ((<$>))
 import Data.String (IsString, fromString)
 import Data.Time.Clock.POSIX (getPOSIXTime)
 import qualified Data.Aeson as A
diff --git a/src/Network/Pusher/Protocol.hs b/src/Network/Pusher/Protocol.hs
--- a/src/Network/Pusher/Protocol.hs
+++ b/src/Network/Pusher/Protocol.hs
@@ -28,14 +28,9 @@
   , toURLParam
   ) where
 
-import Control.Applicative ((<$>), (<*>))
 import Data.Aeson ((.:), (.:?))
-import Data.Foldable (asum)
 import Data.Hashable (Hashable)
-import Data.Maybe (fromMaybe)
-import Data.Monoid ((<>))
 import GHC.Generics (Generic)
-import Test.QuickCheck (Arbitrary, arbitrary, elements)
 import qualified Data.Aeson as A
 import qualified Data.HashMap.Strict as HM
 import qualified Data.HashSet as HS
diff --git a/test/Protocol.hs b/test/Protocol.hs
--- a/test/Protocol.hs
+++ b/test/Protocol.hs
@@ -4,8 +4,6 @@
 import Test.QuickCheck (property)
 import qualified Data.Aeson as A
 import qualified Data.HashMap.Strict as HM
-import qualified Data.HashSet as HS
-import qualified Data.Text as T
 
 import Network.Pusher
   ( Channel(..)
