diff --git a/dbus.cabal b/dbus.cabal
--- a/dbus.cabal
+++ b/dbus.cabal
@@ -1,178 +1,183 @@
-cabal-version:      >=1.10
-name:               dbus
-version:            1.2.25
-license:            Apache-2.0
-license-file:       license.txt
-maintainer:         Andrey Sverdlichenko <blaze@ruddy.ru>
-author:             John Millikin <john@john-millikin.com>
-stability:          experimental
-homepage:           https://github.com/rblaze/haskell-dbus#readme
-synopsis:           A client library for the D-Bus IPC system.
+name: dbus
+version: 1.2.26
+license: Apache-2.0
+license-file: license.txt
+author: John Millikin <john@john-millikin.com>
+maintainer: Andrey Sverdlichenko <blaze@ruddy.ru>
+build-type: Simple
+cabal-version: >= 1.10
+category: Network, Desktop
+stability: experimental
+homepage: https://github.com/rblaze/haskell-dbus#readme
+
+synopsis: A client library for the D-Bus IPC system.
 description:
-    D-Bus is a simple, message-based protocol for inter-process
-    communication, which allows applications to interact with other parts of
-    the machine and the user's session using remote procedure calls.
-    .
-    D-Bus is a essential part of the modern Linux desktop, where it replaces
-    earlier protocols such as CORBA and DCOP.
-    .
-    This library is an implementation of the D-Bus protocol in Haskell. It
-    can be used to add D-Bus support to Haskell applications, without the
-    awkward interfaces common to foreign bindings.
-    .
-    Example: connect to the session bus, and get a list of active names.
-    .
-    @
-    &#x7b;-\# LANGUAGE OverloadedStrings \#-&#x7d;
-    .
-    import Data.List (sort)
-    import DBus
-    import DBus.Client
-    .
-    main = do
-    &#x20;   client <- connectSession
-    &#x20;
-    &#x20;   -- Request a list of connected clients from the bus
-    &#x20;   reply <- call_ client (methodCall \"\/org\/freedesktop\/DBus\" \"org.freedesktop.DBus\" \"ListNames\")
-    &#x20;       &#x7b; methodCallDestination = Just \"org.freedesktop.DBus\"
-    &#x20;       &#x7d;
-    &#x20;
-    &#x20;   -- org.freedesktop.DBus.ListNames() returns a single value, which is
-    &#x20;   -- a list of names (here represented as [String])
-    &#x20;   let Just names = fromVariant (methodReturnBody reply !! 0)
-    &#x20;
-    &#x20;   -- Print each name on a line, sorted so reserved names are below
-    &#x20;   -- temporary names.
-    &#x20;   mapM_ putStrLn (sort names)
-    @
-    .
-    >$ ghc --make list-names.hs
-    >$ ./list-names
-    >:1.0
-    >:1.1
-    >:1.10
-    >:1.106
-    >:1.109
-    >:1.110
-    >ca.desrt.dconf
-    >org.freedesktop.DBus
-    >org.freedesktop.Notifications
-    >org.freedesktop.secrets
-    >org.gnome.ScreenSaver
+  D-Bus is a simple, message-based protocol for inter-process
+  communication, which allows applications to interact with other parts of
+  the machine and the user's session using remote procedure calls.
+  .
+  D-Bus is a essential part of the modern Linux desktop, where it replaces
+  earlier protocols such as CORBA and DCOP.
+  .
+  This library is an implementation of the D-Bus protocol in Haskell. It
+  can be used to add D-Bus support to Haskell applications, without the
+  awkward interfaces common to foreign bindings.
+  .
+  Example: connect to the session bus, and get a list of active names.
+  .
+  @
+  &#x7b;-\# LANGUAGE OverloadedStrings \#-&#x7d;
+  .
+  import Data.List (sort)
+  import DBus
+  import DBus.Client
+  .
+  main = do
+  &#x20;   client <- connectSession
+  &#x20;
+  &#x20;   -- Request a list of connected clients from the bus
+  &#x20;   reply <- call_ client (methodCall \"\/org\/freedesktop\/DBus\" \"org.freedesktop.DBus\" \"ListNames\")
+  &#x20;       &#x7b; methodCallDestination = Just \"org.freedesktop.DBus\"
+  &#x20;       &#x7d;
+  &#x20;
+  &#x20;   -- org.freedesktop.DBus.ListNames() returns a single value, which is
+  &#x20;   -- a list of names (here represented as [String])
+  &#x20;   let Just names = fromVariant (methodReturnBody reply !! 0)
+  &#x20;
+  &#x20;   -- Print each name on a line, sorted so reserved names are below
+  &#x20;   -- temporary names.
+  &#x20;   mapM_ putStrLn (sort names)
+  @
+  .
+  >$ ghc --make list-names.hs
+  >$ ./list-names
+  >:1.0
+  >:1.1
+  >:1.10
+  >:1.106
+  >:1.109
+  >:1.110
+  >ca.desrt.dconf
+  >org.freedesktop.DBus
+  >org.freedesktop.Notifications
+  >org.freedesktop.secrets
+  >org.gnome.ScreenSaver
 
-category:           Network, Desktop
-build-type:         Simple
+
 extra-source-files:
-    examples/dbus-monitor.hs
-    examples/export.hs
-    examples/introspect.hs
-    examples/list-names.hs
-    idlxml/dbus.xml
+  examples/dbus-monitor.hs
+  examples/export.hs
+  examples/introspect.hs
+  examples/list-names.hs
+  idlxml/dbus.xml
 
 source-repository head
-    type:     git
-    location: https://github.com/rblaze/haskell-dbus
+  type: git
+  location: https://github.com/rblaze/haskell-dbus
 
 library
-    exposed-modules:
-        DBus
-        DBus.Client
-        DBus.Generation
-        DBus.Internal.Address
-        DBus.Internal.Message
-        DBus.Internal.Types
-        DBus.Internal.Wire
-        DBus.Introspection
-        DBus.Introspection.Parse
-        DBus.Introspection.Render
-        DBus.Introspection.Types
-        DBus.Socket
-        DBus.TH
-        DBus.Transport
+  default-language: Haskell2010
+  ghc-options: -W -Wall
+  hs-source-dirs: lib
 
-    hs-source-dirs:   lib
-    default-language: Haskell2010
-    ghc-options:      -W -Wall
-    build-depends:
-        base >=4.16 && <5,
-        bytestring <0.12,
-        cereal <0.6,
-        conduit >=1.3.0 && <1.4,
-        containers <0.7,
-        deepseq <1.5,
-        exceptions <0.11,
-        filepath <1.5,
-        lens <5.2,
-        network >=3.1.2.1 && <3.2,
-        parsec <3.2,
-        random <1.3,
-        split <0.3,
-        template-haskell ==2.18.*,
-        text <1.3,
-        th-lift <0.9,
-        transformers <0.6,
-        unix <2.8,
-        vector <0.14,
-        xml-conduit >=1.9.0.0 && <1.10.0.0,
-        xml-types <0.4
+  build-depends:
+      base >=4.16 && <5
+    , bytestring < 0.12
+    , cereal < 0.6
+    , conduit >= 1.3.0 && < 1.4
+    , containers < 0.7
+    , deepseq < 1.5
+    , exceptions < 0.11
+    , filepath < 1.5
+    , lens < 5.3
+    , network >= 3.1.2.1 && < 3.2
+    , parsec < 3.2
+    , random < 1.3
+    , split < 0.3
+    , template-haskell >= 2.18 && < 2.19
+    , text < 2.1
+    , th-lift < 0.9
+    , transformers < 0.6
+    , unix < 2.8
+    , vector < 0.14
+    , xml-conduit >= 1.9.0.0 && < 1.10.0.0
+    , xml-types < 0.4
 
+  exposed-modules:
+    DBus
+    DBus.Client
+    DBus.Generation
+    DBus.Internal.Address
+    DBus.Internal.Message
+    DBus.Internal.Types
+    DBus.Internal.Wire
+    DBus.Introspection
+    DBus.Introspection.Parse
+    DBus.Introspection.Render
+    DBus.Introspection.Types
+    DBus.Socket
+    DBus.TH
+    DBus.Transport
+
 test-suite dbus_tests
-    type:             exitcode-stdio-1.0
-    main-is:          DBusTests.hs
-    hs-source-dirs:   tests
-    other-modules:
-        DBusTests.Address
-        DBusTests.BusName
-        DBusTests.Client
-        DBusTests.ErrorName
-        DBusTests.Generation
-        DBusTests.Integration
-        DBusTests.InterfaceName
-        DBusTests.Introspection
-        DBusTests.MemberName
-        DBusTests.Message
-        DBusTests.ObjectPath
-        DBusTests.Serialization
-        DBusTests.Signature
-        DBusTests.Socket
-        DBusTests.TH
-        DBusTests.Transport
-        DBusTests.Util
-        DBusTests.Variant
-        DBusTests.Wire
+  type: exitcode-stdio-1.0
+  main-is: DBusTests.hs
+  hs-source-dirs: tests
+  default-language: Haskell2010
+  ghc-options: -W -Wall -fno-warn-orphans
 
-    default-language: Haskell2010
-    ghc-options:      -W -Wall -fno-warn-orphans
-    build-depends:
-        dbus -any,
-        base ==4.*,
-        bytestring <0.12,
-        cereal <0.6,
-        containers <0.7,
-        directory <1.4,
-        extra <1.8,
-        filepath <1.5,
-        network >=3.1.2.1 && <3.2,
-        parsec <3.2,
-        process <1.7,
-        QuickCheck <2.15,
-        random <1.3,
-        resourcet <1.3,
-        tasty <1.5,
-        tasty-hunit <0.11,
-        tasty-quickcheck <0.11,
-        text <1.3,
-        transformers <0.6,
-        unix <2.8,
-        vector <0.14
+  build-depends:
+      dbus
+    , base >=4 && <5
+    , bytestring < 0.12
+    , cereal < 0.6
+    , containers < 0.7
+    , directory < 1.4
+    , extra < 1.8
+    , filepath < 1.5
+    , network >= 3.1.2.1 && < 3.2
+    , parsec < 3.2
+    , process < 1.7
+    , QuickCheck < 2.15
+    , random < 1.3
+    , resourcet < 1.3
+    , tasty < 1.5
+    , tasty-hunit < 0.11
+    , tasty-quickcheck < 0.11
+    , text < 2.1
+    , transformers < 0.6
+    , unix < 2.8
+    , vector < 0.14
 
+  other-modules:
+    DBusTests.Address
+    DBusTests.BusName
+    DBusTests.Client
+    DBusTests.ErrorName
+    DBusTests.Generation
+    DBusTests.Integration
+    DBusTests.InterfaceName
+    DBusTests.Introspection
+    DBusTests.MemberName
+    DBusTests.Message
+    DBusTests.ObjectPath
+    DBusTests.Serialization
+    DBusTests.Signature
+    DBusTests.Socket
+    DBusTests.TH
+    DBusTests.Transport
+    DBusTests.Util
+    DBusTests.Variant
+    DBusTests.Wire
+
 benchmark dbus_benchmarks
-    type:             exitcode-stdio-1.0
-    main-is:          DBusBenchmarks.hs
-    hs-source-dirs:   benchmarks
-    default-language: Haskell2010
-    ghc-options:      -Wall -fno-warn-orphans
-    build-depends:
-        dbus -any,
-        base ==4.*,
-        criterion <1.6
+  type: exitcode-stdio-1.0
+  main-is: DBusBenchmarks.hs
+  hs-source-dirs: benchmarks
+  default-language: Haskell2010
+  ghc-options: -Wall -fno-warn-orphans
+
+  build-depends:
+      dbus
+    , base >=4 && <5
+    , criterion < 1.7
