diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,11 @@
 Changelog
 =========
 
+v0.2.4.4
+--------
+
+- Fixed handling of exceptions
+
 v0.2.4.3
 --------
 
diff --git a/HFuse.cabal b/HFuse.cabal
--- a/HFuse.cabal
+++ b/HFuse.cabal
@@ -1,5 +1,5 @@
 Name:                   HFuse
-Version:                0.2.4.3
+Version:                0.2.4.4
 License:                BSD3
 License-File:           LICENSE
 Author:                 Jeremy Bobbio
diff --git a/System/Fuse.hsc b/System/Fuse.hsc
--- a/System/Fuse.hsc
+++ b/System/Fuse.hsc
@@ -501,7 +501,7 @@
         else E.finally (f structFuse)
                        (fuse_destroy structFuse)
     where fuseHandler :: e -> IO CInt
-          fuseHandler e = handler e >>= return . unErrno
+          fuseHandler e = handler e >>= return . negate . unErrno
           wrapGetAttr :: CGetAttr
           wrapGetAttr pFilePath pStat = handle fuseHandler $
               do filePath <- peekCString pFilePath
