diff --git a/Network/FastCGI.hsc b/Network/FastCGI.hsc
--- a/Network/FastCGI.hsc
+++ b/Network/FastCGI.hsc
@@ -28,7 +28,7 @@
 import Control.Concurrent ( forkOS )
 import Control.Concurrent.MVar
 import Control.Concurrent.QSem
-import Control.Exception as Exception (catch, finally)
+import Control.Exception
 import Control.Monad    ( liftM )
 import Data.Word (Word8)
 import Foreign          ( Ptr, castPtr, nullPtr, peekArray0 
@@ -75,7 +75,7 @@
 foreign import ccall unsafe "fcgiapp.h FCGX_PutStr" fcgx_putStr
     :: CString -> CInt -> StreamPtr -> IO CInt
 
-foreign import ccall threadsafe "fcgiapp.h FCGX_Accept" fcgx_accept
+foreign import ccall safe "fcgiapp.h FCGX_Accept" fcgx_accept
     :: Ptr StreamPtr -> Ptr StreamPtr -> Ptr StreamPtr -> Ptr Environ -> IO CInt
 foreign import ccall unsafe "fcgiapp.h FCGX_Finish" fcgx_finish
     :: IO ()
@@ -142,8 +142,8 @@
     do
     vars <- environToTable env
     input <- sRead ins
-    output <- runCGIEnvFPS vars input (runCGIT f)
-    sPutStr outs output
+    output' <- runCGIEnvFPS vars input (runCGIT f)
+    sPutStr outs output'
 
 
 
@@ -155,7 +155,7 @@
 foreign import ccall unsafe "fcgiapp.h FCGX_InitRequest" fcgx_initrequest
     :: Ptr FCGX_Request -> CInt -> CInt -> IO CInt
 
-foreign import ccall threadsafe "fcgiapp.h FCGX_Accept_r" fcgx_accept_r
+foreign import ccall safe "fcgiapp.h FCGX_Accept_r" fcgx_accept_r
     :: Ptr FCGX_Request -> IO CInt
 
 foreign import ccall unsafe "fcgiapp.h FCGX_Finish_r" fcgx_finish_r
@@ -176,11 +176,11 @@
          testReturn "FCGX_Init" $ fcgx_init
          let loop = do waitQSem qsem
                        reqp <- acceptRequest
-                       fork (oneRequestMT f reqp
+                       _ <- fork (oneRequestMT f reqp
                              `finally`
                             (finishRequest reqp >> signalQSem qsem))
                        loop
-         loop `catch` \e -> log (show e)
+         loop `catch` \(e::IOException) -> log (show e)
 
 oneRequestMT :: CGI CGIResult -> Ptr FCGX_Request -> IO ()
 oneRequestMT f r = do
@@ -188,9 +188,9 @@
      vars   <- environToTable env
      ins    <- peekIn r
      input  <- sRead ins
-     output <- runCGIEnvFPS vars input (runCGIT f)
+     output' <- runCGIEnvFPS vars input (runCGIT f)
      outs   <- peekOut r
-     sPutStr outs output
+     sPutStr outs output'
 --
 -- * FCGX_Reqest struct
 --
@@ -224,7 +224,9 @@
 
 sPutStr :: StreamPtr -> Lazy.ByteString -> IO ()
 sPutStr h str =
-    mapM_ (flip BSB.unsafeUseAsCStringLen (fcgxPutCStringLen h)) (Lazy.toChunks str)
+  mapM_ (flip BSB.unsafeUseAsCStringLen (fcgxPutCStringLen h))
+        (Lazy.toChunks str)
+  `catch` \(_ :: IOException) -> return ()
 
 fcgxPutCStringLen :: StreamPtr -> CStringLen -> IO ()
 fcgxPutCStringLen h (cs,len) =
diff --git a/fastcgi.cabal b/fastcgi.cabal
--- a/fastcgi.cabal
+++ b/fastcgi.cabal
@@ -1,7 +1,7 @@
 Name:           fastcgi
-Version:        3001.0.2.2
+Version:        3001.0.2.3
 Copyright:      Bjorn Bringert, Lemmih
-Maintainer:     bjorn@bringert.net
+Maintainer:     Chris Done <chrisdone@gmail.com>
 License:        BSD3
 license-file:   LICENSE
 Category:       Network
@@ -18,14 +18,10 @@
   description: Choose the new smaller, split-up base package.
 
 library
-  build-depends: cgi >= 3000.0.0
-  if flag(small_base)
-    build-depends:  base == 3.*, bytestring >= 0.9.0.1
-  else
-    build-depends: base == 2.*
-  Extensions: ForeignFunctionInterface, EmptyDataDecls
+  build-depends: base >= 4 && < 5, cgi >= 3000.0.0, bytestring >= 0.9.1.5
+  Extensions: ForeignFunctionInterface, EmptyDataDecls, ScopedTypeVariables
   Exposed-Modules: 
      Network.FastCGI
-  ghc-options: -O2 -fwarn-unused-binds -fwarn-unused-imports -fwarn-unused-matches
+  ghc-options: -Wall
   includes: fcgiapp.h
   extra-libraries: fcgi
