diff --git a/src/System/Tianbar/Plugin/DBus/FromData.hs b/src/System/Tianbar/Plugin/DBus/FromData.hs
new file mode 100644
--- /dev/null
+++ b/src/System/Tianbar/Plugin/DBus/FromData.hs
@@ -0,0 +1,53 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module System.Tianbar.Plugin.DBus.FromData () where
+
+import Control.Monad
+
+import Data.List.Split
+import Data.Maybe
+
+import DBus
+import DBus.Client
+
+import Happstack.Server
+
+instance FromData MatchRule where
+    fromData = do
+        objPath <- fromData
+        iface <- fromData
+        memberName <- fromData
+        return $ matchAny { matchSender = Nothing
+                          , matchDestination = Nothing
+                          , matchPath = objPath
+                          , matchInterface = iface
+                          , matchMember = memberName
+                          }
+
+instance FromData MethodCall where
+    fromData = do
+        callPath <- fromData
+        iface <- fromData
+        member <- fromData
+        callBody <- liftM (map variantFromString) $ looks "body[]"
+        dest <- fromData
+        let setBodyDest mcall = mcall { methodCallBody = callBody
+                                      , methodCallDestination = dest
+                                      }
+        return $ setBodyDest $ methodCall callPath iface member
+
+instance FromData ObjectPath where
+    fromData = liftM (fromJust . parseObjectPath) $ look "path"
+
+instance FromData InterfaceName where
+    fromData = liftM (fromJust . parseInterfaceName) $ look "iface"
+
+instance FromData MemberName where
+    fromData = liftM (fromJust . parseMemberName) $ look "member"
+
+instance FromData BusName where
+    fromData = liftM (fromJust . parseBusName) $ look "destination"
+
+variantFromString :: String -> Variant
+variantFromString param = case splitOn ":" param of
+    ["string", str] -> toVariant str
+    _ -> error "Invalid variant string"
diff --git a/tianbar.cabal b/tianbar.cabal
--- a/tianbar.cabal
+++ b/tianbar.cabal
@@ -1,5 +1,5 @@
 name:                tianbar
-version:             0.4.0.0
+version:             0.4.0.1
 synopsis:            A desktop bar based on WebKit
 description:
   A desktop bar using WebKit for rendering as much as possible.
@@ -54,6 +54,7 @@
                      , System.Tianbar.Plugin.Basic
                      , System.Tianbar.Plugin.Combined
                      , System.Tianbar.Plugin.DBus
+                     , System.Tianbar.Plugin.DBus.FromData
                      , System.Tianbar.Plugin.DBus.JSON
                      , System.Tianbar.Plugin.Socket
                      , System.Tianbar.Utils
