diff --git a/HFuse.cabal b/HFuse.cabal
--- a/HFuse.cabal
+++ b/HFuse.cabal
@@ -1,11 +1,11 @@
 Name:                   HFuse
-Version:                0.2.3
+Version:                0.2.4
 License:                BSD3
 License-File:		LICENSE
 Author:                 Jeremy Bobbio
 Maintainer: 		Taru Karttunen <taruti@taruti.net>
 Synopsis:               HFuse is a binding for the Linux FUSE library.
-Homepage:               http://code.haskell.org/hfuse
+Homepage:               https://github.com/realdesktop/hfuse
 Category:               System
 Stability:              Experimental
 Cabal-Version:          >= 1.2
diff --git a/README b/README
--- a/README
+++ b/README
@@ -1,9 +1,9 @@
 Programs using HFuse should be compiled with -threaded.
 
 HelloFS seems to work with:
-* Linux 2.6.24
-* The Glorious Glasgow Haskell Compilation System, version 6.8.2
-* fuse-2.6
+* Linux 2.6.39
+* The Glorious Glasgow Haskell Compilation System, version 7.0.3
+* fuse-2.8.5
 
 BindFS (?) is known to have a lurking deadlock problem.
 
diff --git a/System/Fuse.hsc b/System/Fuse.hsc
--- a/System/Fuse.hsc
+++ b/System/Fuse.hsc
@@ -29,6 +29,7 @@
     , FuseOperations(..)
     , defaultFuseOps
     , fuseMain -- :: FuseOperations fh -> (Exception -> IO Errno) -> IO ()
+    , fuseRun -- :: String -> [String] -> FuseOperations fh -> (Exception -> IO Errno) -> IO ()
     , defaultExceptionHandler -- :: Exception -> IO Errno
       -- * Operations datatypes
     , FileStat(..)
@@ -433,11 +434,9 @@
                    }
 
 -- Allocates a fuse_args struct to hold the commandline arguments.
-withFuseArgs :: (Ptr CFuseArgs -> IO b) -> IO b
-withFuseArgs f =
-    do prog <- getProgName
-       args <- getArgs
-       let allArgs = (prog:args)
+withFuseArgs :: String -> [String] -> (Ptr CFuseArgs -> IO b) -> IO b
+withFuseArgs prog args f =
+    do let allArgs = (prog:args)
            argc = length allArgs
        withMany withCString allArgs (\ cArgs ->
            withArray cArgs $ (\ pArgv ->
@@ -832,13 +831,19 @@
 --
 --   * calls FUSE event loop.
 fuseMain :: Exception e => FuseOperations fh -> (e -> IO Errno) -> IO ()
-fuseMain ops handler =
+fuseMain ops handler = do
     -- this used to be implemented using libfuse's fuse_main. Doing this will fork()
     -- from C behind the GHC runtime's back, which deadlocks in GHC 6.8.
     -- Instead, we reimplement fuse_main in Haskell using the forkProcess and the
     -- lower-level fuse_new/fuse_loop_mt API.
+    prog <- getProgName
+    args <- getArgs
+    fuseRun prog args ops handler
+
+fuseRun :: String -> [String] -> Exception e => FuseOperations fh -> (e -> IO Errno) -> IO ()
+fuseRun prog args ops handler =
     IO.catch
-       (withFuseArgs (\pArgs ->
+       (withFuseArgs prog args (\pArgs ->
          do cmd <- fuseParseCommandLine pArgs
             case cmd of
               Nothing -> fail ""
