diff --git a/FileManip.cabal b/FileManip.cabal
--- a/FileManip.cabal
+++ b/FileManip.cabal
@@ -1,5 +1,5 @@
 Name:               FileManip
-Version:            0.3.2
+Version:            0.3.3
 License:            BSD3
 License-File:       LICENSE
 Author:             Bryan O'Sullivan <bos@serpentine.com>
@@ -10,6 +10,8 @@
                     Includes code for pattern matching, finding files,
                     modifying file contents, and more.
 Cabal-version:      >= 1.2
+Build-type:         Simple
+
 Extra-Source-Files: README
 
 Flag splitBase
@@ -17,13 +19,15 @@
 
 Library
   if flag(splitBase)
-    Build-Depends: base, bytestring, directory, filepath, mtl, unix
+    Build-Depends: base >= 2 && < 5, bytestring, directory, filepath, mtl, unix, extensible-exceptions
   else
-    Build-Depends: base, filepath, mtl, unix
+    Build-Depends: base >= 2 && < 5,                        filepath, mtl, unix, extensible-exceptions
 
-  GHC-Options:    -Wall -O2
+  GHC-Options:    -Wall
   Exposed-Modules:
           System.FilePath.Find,
           System.FilePath.Glob,
           System.FilePath.GlobPattern,
           System.FilePath.Manip
+  Other-Modules:
+          System.FilePath.Error
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2007, 2008 Bryan O'Sullivan.
+Copyright (c) Bryan O'Sullivan 2007, 2010.
 
 All rights reserved.
 
diff --git a/System/FilePath/Error.hs b/System/FilePath/Error.hs
new file mode 100644
--- /dev/null
+++ b/System/FilePath/Error.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
+
+-- |
+-- Module:      System.FilePath.Manip
+-- Copyright:   Sergei Trofimovich
+-- License:     BSD3
+-- Maintainer:  Bryan O'Sullivan <bos@serpentine.com>
+-- Stability:   unstable
+-- Portability: Unix-like systems (requires flexible instances)
+
+module System.FilePath.Error
+    (
+      bracket
+    , bracket_
+    , catch
+    , handle
+    , throwIO
+    , Exception
+    ) where
+
+import qualified Control.Exception.Extensible as EE
+import Prelude hiding (catch)
+
+-- we can catch any exceptions if we need to
+-- type Exception = SomeException
+type Exception = EE.IOException
+
+-- we just pin down 'EE.Exception e' to local Exception
+bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c
+bracket  = EE.bracket
+
+bracket_ :: IO a -> IO b -> IO c -> IO c
+bracket_ = EE.bracket_
+
+catch :: IO a -> (Exception -> IO a) -> IO a
+catch  = EE.catch
+
+handle :: (Exception -> IO a) -> IO a -> IO a
+handle = EE.handle
+
+throwIO :: (EE.Exception e) => e -> IO a
+throwIO  = EE.throwIO
diff --git a/System/FilePath/Find.hs b/System/FilePath/Find.hs
--- a/System/FilePath/Find.hs
+++ b/System/FilePath/Find.hs
@@ -119,7 +119,7 @@
 import System.FilePath.GlobPattern (GlobPattern, (~~), (/~))
 import System.IO (hPutStrLn, stderr)
 import System.IO.Unsafe (unsafeInterleaveIO, unsafePerformIO)
-import qualified Control.Exception as E
+import qualified System.FilePath.Error as E
 import qualified System.Posix.Files as F
 import qualified System.Posix.Types as T
 
diff --git a/System/FilePath/Glob.hs b/System/FilePath/Glob.hs
--- a/System/FilePath/Glob.hs
+++ b/System/FilePath/Glob.hs
@@ -10,13 +10,14 @@
       namesMatching
     ) where
 
-import Control.Exception (handle)
 import Control.Monad (forM)
 import System.FilePath.GlobPattern ((~~))
 import System.Directory (doesDirectoryExist, doesFileExist,
                          getCurrentDirectory, getDirectoryContents)
 import System.FilePath (dropTrailingPathSeparator, splitFileName, (</>))
 import System.IO.Unsafe (unsafeInterleaveIO)
+
+import System.FilePath.Error (handle)
 
 -- | Return a list of names matching a glob pattern.  The list is
 -- generated lazily.
diff --git a/System/FilePath/Manip.hs b/System/FilePath/Manip.hs
--- a/System/FilePath/Manip.hs
+++ b/System/FilePath/Manip.hs
@@ -16,7 +16,8 @@
     , modifyInPlace
     ) where
 
-import Control.Exception (bracket, bracket_, handle, throwIO)
+import System.FilePath.Error (bracket, bracket_, handle, throwIO)
+
 import Control.Monad (liftM)
 import Data.Bits ((.&.))
 import System.Directory (removeFile)
