diff --git a/dbus.cabal b/dbus.cabal
--- a/dbus.cabal
+++ b/dbus.cabal
@@ -1,6 +1,6 @@
 cabal-version: >=1.8
 name: dbus
-version: 1.2.9
+version: 1.2.10
 license: Apache-2.0
 license-file: license.txt
 maintainer: Andrey Sverdlichenko <blaze@ruddy.ru>
@@ -104,7 +104,7 @@
         parsec <3.2,
         random <1.2,
         split <0.3,
-        template-haskell <2.15,
+        template-haskell <2.16.0.0,
         text <1.3,
         th-lift <0.9,
         transformers <0.6,
diff --git a/lib/DBus/Internal/Address.hs b/lib/DBus/Internal/Address.hs
--- a/lib/DBus/Internal/Address.hs
+++ b/lib/DBus/Internal/Address.hs
@@ -16,6 +16,7 @@
 
 import qualified Control.Exception
 import           Data.Char (digitToInt, ord, chr)
+import           Data.Maybe (listToMaybe)
 import           Data.List (intercalate)
 import qualified Data.Map
 import           Data.Map (Map)
@@ -143,7 +144,7 @@
     env <- getenv "DBUS_SYSTEM_BUS_ADDRESS"
     return (parseAddress (maybe system id env))
 
--- | Returns the address in the environment variable
+-- | Returns the first address in the environment variable
 -- @DBUS_SESSION_BUS_ADDRESS@, which must be set.
 --
 -- Returns 'Nothing' if @DBUS_SYSTEM_BUS_ADDRESS@ is unset or contains an
@@ -151,7 +152,7 @@
 getSessionAddress :: IO (Maybe Address)
 getSessionAddress = do
     env <- getenv "DBUS_SESSION_BUS_ADDRESS"
-    return (env >>= parseAddress)
+    return (env >>= parseAddresses >>= listToMaybe)
 
 -- | Returns the address in the environment variable
 -- @DBUS_STARTER_ADDRESS@, which must be set.
