diff --git a/d-bus.cabal b/d-bus.cabal
--- a/d-bus.cabal
+++ b/d-bus.cabal
@@ -1,5 +1,5 @@
 name:                d-bus
-version:             0.1.3.1
+version:             0.1.3.2
 synopsis:            Permissively licensed D-Bus client library
 description:         This library uses modern extensions to the Haskell type system
                      (including GADTs, DataKinds and TypeFamilies) and the
diff --git a/src/DBus/Property.hs b/src/DBus/Property.hs
--- a/src/DBus/Property.hs
+++ b/src/DBus/Property.hs
@@ -193,3 +193,24 @@
         slot = Map.singleton (rpObject rp, rpInterface rp, rpName rp) [f]
     atomically $ modifyTVar' (dbusPropertySlots con) (Map.unionWith (++) slot)
     addMatch mr con
+
+propertyToTVar :: Representable a =>
+                  RemoteProperty (RepType a)
+               -> DBusConnection
+               -> IO (TVar a)
+propertyToTVar rp con = do
+    eiv <- getProperty rp con
+    case eiv of
+     Left e -> Ex.throwIO e
+     Right iv -> do
+        tv <- newTVarIO iv
+        handlePropertyChanged rp
+            (\mbv -> case mbv of
+                      Nothing -> do
+                          eniv <- getProperty rp con
+                          case eniv of
+                           Left e -> return () -- @TODO
+                           Right nv -> atomically $ writeTVar tv nv
+                      Just v -> atomically $ writeTVar tv v
+            ) con
+        return tv
