diff --git a/Network/DBus.hs b/Network/DBus.hs
--- a/Network/DBus.hs
+++ b/Network/DBus.hs
@@ -69,7 +69,7 @@
 import Network.DBus.StdMessage
 import Control.Concurrent (forkIO, killThread, ThreadId)
 import Control.Concurrent.MVar
-import Control.Exception
+import Control.Exception hiding (TypeError)
 import Data.Maybe
 import Control.Monad
 import qualified Data.Map as M
diff --git a/Network/DBus/MessageType.hs b/Network/DBus/MessageType.hs
--- a/Network/DBus/MessageType.hs
+++ b/Network/DBus/MessageType.hs
@@ -19,7 +19,7 @@
     , DBusMessageable(..)
     ) where
 
-import Control.Exception
+import Control.Exception hiding (TypeError)
 import Data.Data
 import Network.DBus.Message
 import Network.DBus.Type
diff --git a/Network/DBus/Wire.hs b/Network/DBus/Wire.hs
--- a/Network/DBus/Wire.hs
+++ b/Network/DBus/Wire.hs
@@ -59,7 +59,7 @@
 type DBusGet = (DBusEndian, Int) -- Specified endianness and alignment of this context.
 
 newtype GetWire a = GetWire { runGW :: ReaderT DBusGet Get a }
-    deriving (Monad, MonadReader DBusGet, Functor)
+    deriving (Functor, Applicative, Monad, MonadReader DBusGet)
 
 getWire :: DBusEndian -> Int -> GetWire a -> ByteString -> a
 getWire endian align f b = runGet (runReaderT (runGW f) (endian,align)) (L.fromChunks [b])
diff --git a/udbus.cabal b/udbus.cabal
--- a/udbus.cabal
+++ b/udbus.cabal
@@ -1,5 +1,5 @@
 Name:                udbus
-Version:             0.2.1
+Version:             0.2.2
 Description:         Small and flexible implementation of the dbus protocol.
 License:             BSD3
 License-file:        LICENSE
@@ -23,8 +23,12 @@
   Default:           False
 
 Library
-  Build-Depends:     base >= 3 && < 5
-                   , binary
+  if impl(ghc < 8.0)
+    Buildable: False
+  else
+    Build-Depends: base
+
+  Build-Depends:     binary
                    , cereal
                    , bytestring
                    , utf8-string
