diff --git a/src/System/Tianbar/UriOverride.hs b/src/System/Tianbar/UriOverride.hs
new file mode 100644
--- /dev/null
+++ b/src/System/Tianbar/UriOverride.hs
@@ -0,0 +1,29 @@
+module System.Tianbar.UriOverride where
+
+import Control.Monad
+
+import Data.List.Split
+import qualified Data.Map as M
+
+import Network.URI
+
+type UriOverride = String -> Maybe (IO String)
+
+withScheme :: String -> (URI -> IO String) -> UriOverride
+withScheme schemeMatch func uriStr
+    | uriScheme uri == schemeMatch = Just $ func uri
+    | otherwise = Nothing
+    where (Just uri) = parseURI uriStr
+
+mergeOverrides :: [UriOverride] -> UriOverride
+mergeOverrides overrides = foldr mplus Nothing . flip map overrides . flip ($)
+
+parseQuery :: URI -> M.Map String String
+parseQuery = M.fromList
+           . map ((\[a, b] -> (a, unEscapeString b)) . splitOn "=")
+           . splitOn "&"
+           . tail
+           . uriQuery
+
+returnContent :: String -> IO String
+returnContent content = return $ "data:text/plain," ++ content
diff --git a/tianbar.cabal b/tianbar.cabal
--- a/tianbar.cabal
+++ b/tianbar.cabal
@@ -1,5 +1,5 @@
 name:                tianbar
-version:             0.3.1.0
+version:             0.3.2.0
 synopsis:            A desktop bar based on WebKit
 description:
   A desktop bar using WebKit for rendering as much as possible.
@@ -41,6 +41,7 @@
                      , System.Tianbar.Configuration
                      , System.Tianbar.StrutProperties
                      , System.Tianbar.Systray
+                     , System.Tianbar.UriOverride
                      , System.Tianbar.WebKit
   c-sources:           src/gdk_property_change_wrapper.c
   ghc-options:         -Wall -rtsopts -threaded
