diff --git a/HFuse.cabal b/HFuse.cabal
--- a/HFuse.cabal
+++ b/HFuse.cabal
@@ -1,12 +1,12 @@
 Name:                   HFuse
-Version:                0.2.4.1
+Version:                0.2.4.2
 License:                BSD3
 License-File:           LICENSE
 Author:                 Jeremy Bobbio
-Maintainer:             Paul van der Walt <cabal@denknerd.org>
+Maintainer:             Montez Fitzpatrick <montezf@gmail.com>
 Synopsis:               HFuse is a binding for the Linux FUSE library.
-Description:            Bindings for the FUSE library, compatible with OSXFUSE.
-Homepage:               https://github.com/toothbrush/hfuse
+Description:            Bindings for the FUSE library, compatible with OSXFUSE and FreeBSD.
+Homepage:               https://github.com/m15k/hfuse
 Category:               System
 Stability:              Experimental
 Cabal-Version:          >= 1.6
@@ -19,17 +19,20 @@
   Extensions:             ForeignFunctionInterface ScopedTypeVariables EmptyDataDecls
   Includes:               dirent.h, fuse.h, fcntl.h
   Include-Dirs:           /usr/include, /usr/local/include, .
-  if os(darwin) {
+  if os(darwin)
       CC-Options:           "-DMACFUSE"
-      CC-Options:           "-DFUSE_USE_VERSION=26"
       Include-Dirs:           /usr/local/include/osxfuse
-  } else {
-      Includes:               sys/statfs.h
-  }
+  else
+      if os(freebsd) 
+         Includes:           sys/param.h, sys/mount.h
+         CC-Options:           "-Df_namelen=f_namemax"
+      else
+         Includes:               sys/statfs.h
+  
   Extra-Libraries:        fuse
   Extra-Lib-Dirs:         /usr/local/lib
-  CC-Options:             -D_FILE_OFFSET_BITS=64
+  CC-Options:             "-D_FILE_OFFSET_BITS=64"
 
 source-repository head
-    type:       head
-    location:   https://github.com/toothbrush/hfuse.git
+    type:       git
+    location:   https://github.com/m15k/hfuse.git
diff --git a/README b/README
--- a/README
+++ b/README
@@ -1,13 +1,14 @@
-Programs using HFuse should be compiled with -threaded.
+# Haskell FUSE API 
 
-HelloFS seems to work with:
-* Linux 2.6.24
-* The Glorious Glasgow Haskell Compilation System, version 6.8.2
-* fuse-2.6
+Filesystem in Userspace ("FUSE") makes it possible to implement a filesystem as a userspace program.
 
-BindFS (?) is known to have a lurking deadlock problem.
+This library is the Haskell binding to this library.
 
-LiveFS is broken (from the old distribution).
+## Information
+
+- Programs using HFuse should be compiled with -threaded.
+- This now works for base 4.6+
+- Added build options support for FreeBSD (contribution by https://github.com/pesco)
 
 Added support for MacFUSE. Tested HelloFS and BindFS with:
 * OSX 10.4.11 on a PPC G4 mac
diff --git a/System/Fuse.hsc b/System/Fuse.hsc
--- a/System/Fuse.hsc
+++ b/System/Fuse.hsc
@@ -4,9 +4,9 @@
 -- Copyright   :  (c) Jérémy Bobbio, Taru Karttunen
 -- License     :  BSD-style
 -- 
--- Maintainer  :  taruti@taruti.net, jeremy.bobbio@etu.upmc.fr
+-- Maintainer  :  Montez Fitzpatrick
 -- Stability   :  experimental
--- Portability :  GHC 6.4-6.12
+-- Portability :  GHC 6.4-7.8.1
 --
 -- A binding for the FUSE (Filesystem in USErspace) library
 -- (<http://fuse.sourceforge.net/>), which allows filesystems to be implemented
@@ -21,6 +21,8 @@
 --
 -----------------------------------------------------------------------------
 {-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE Rank2Types #-}
+{-# LANGUAGE CPP #-}
 module System.Fuse
     ( -- * Using FUSE
 
@@ -70,7 +72,11 @@
 import qualified System.Posix.Signals as Signals
 import GHC.IO.Handle(hDuplicateTo)
 import System.Exit
-import qualified System.IO.Error as IO(catch,ioeGetErrorString)
+#if MIN_VERSION_base(4,6,0)
+import System.IO.Error (catchIOError,ioeGetErrorString)
+#else
+import System.IO.Error (catch,ioeGetErrorString)
+#endif
 
 -- TODO: FileMode -> Permissions
 -- TODO: Arguments !
@@ -79,7 +85,7 @@
 
 #define FUSE_USE_VERSION 26
 
-#ifdef MACFUSE
+#if defined MACFUSE || defined __FreeBSD__
 #include <sys/mount.h>
 #else
 #include <sys/statfs.h>
@@ -757,16 +763,17 @@
 -- Mimic's daemon()s use of _exit() instead of exit(); we depend on this in fuseMainReal,
 -- because otherwise we'll unmount the filesystem when the foreground process exits.
 daemon f = forkProcess d >> exitImmediately ExitSuccess
-  where d = IO.catch (do createSession
-                         changeWorkingDirectory "/"
-                         -- need to open /dev/null twice because hDuplicateTo can't dup a ReadWriteMode to a ReadMode handle
-                         withFile "/dev/null" WriteMode (\devNullOut ->
-                           do hDuplicateTo devNullOut stdout
-                              hDuplicateTo devNullOut stderr)
-                         withFile "/dev/null" ReadMode (\devNullIn -> hDuplicateTo devNullIn stdin)
-                         f
-                         exitWith ExitSuccess)
-                     (const exitFailure)
+  where d = catch (do createSession
+                      changeWorkingDirectory "/"
+                      -- need to open /dev/null twice because hDuplicateTo can't dup a
+                      -- ReadWriteMode to a ReadMode handle
+                      withFile "/dev/null" WriteMode (\devNullOut ->
+                         do hDuplicateTo devNullOut stdout
+                            hDuplicateTo devNullOut stderr)
+                      withFile "/dev/null" ReadMode (\devNullIn -> hDuplicateTo devNullIn stdin)
+                      f
+                      exitWith ExitSuccess)
+                  (const exitFailure)
 
 -- Installs signal handlers for the duration of the main loop.
 withSignalHandlers exitHandler f =
@@ -843,14 +850,14 @@
 
 fuseRun :: String -> [String] -> Exception e => FuseOperations fh -> (e -> IO Errno) -> IO ()
 fuseRun prog args ops handler =
-    IO.catch
+    catch
        (withFuseArgs prog args (\pArgs ->
          do cmd <- fuseParseCommandLine pArgs
             case cmd of
               Nothing -> fail ""
               Just (Nothing, _, _) -> fail "Usage error: mount point required"
               Just (Just mountPt, _, foreground) -> fuseMainReal foreground ops handler pArgs mountPt))
-       ((\errStr -> when (not $ null errStr) (putStrLn errStr) >> exitFailure) . IO.ioeGetErrorString)
+       ((\errStr -> when (not $ null errStr) (putStrLn errStr) >> exitFailure) . ioeGetErrorString)
 
 -----------------------------------------------------------------------------
 -- Miscellaneous utilities
@@ -868,6 +875,11 @@
 pokeCStringLen0 :: CStringLen -> String -> IO ()
 pokeCStringLen0 (pBuf, bufSize) src =
     pokeArray0 0 pBuf $ take (bufSize - 1) $ map castCharToCChar src
+
+#if MIN_VERSION_base(4,6,0)
+catch = catchIOError
+#else
+#endif
 
 -----------------------------------------------------------------------------
 -- C land
