diff --git a/Network/CGI.hs b/Network/CGI.hs
--- a/Network/CGI.hs
+++ b/Network/CGI.hs
@@ -94,7 +94,12 @@
   , module Network.CGI.Compat
   ) where
 
-import Control.Exception.Extensible (Exception(..), SomeException, ErrorCall(..))
+#if MIN_VERSION_base(4,0,0)
+import Control.Exception
+#else
+import Control.Exception.Extensible
+#endif
+  (Exception(..), SomeException, ErrorCall(..))
 import Control.Monad (liftM)
 import Control.Monad.Trans (MonadIO, liftIO)
 import Data.Char (toUpper)
diff --git a/Network/CGI/Compat.hs b/Network/CGI/Compat.hs
--- a/Network/CGI/Compat.hs
+++ b/Network/CGI/Compat.hs
@@ -20,7 +20,12 @@
   ) where
 
 import Control.Concurrent (forkIO)
-import Control.Exception.Extensible as Exception (SomeException,throw,catch,finally)
+#if MIN_VERSION_base(4,0,0)
+import Control.Exception
+#else
+import Control.Exception.Extensible
+#endif
+  as Exception (SomeException, throw, catch, finally)
 import Control.Monad (unless)
 import Control.Monad.Trans (MonadIO, liftIO)
 import qualified Data.Map as Map
@@ -89,7 +94,7 @@
                    (\ e -> abort "Cannot connect to CGI daemon." e)
           BS.hPut h str >> hPutStrLn h ""
           (sendBack h `finally` hClose h)
-               `Prelude.catch` (\e -> unless (isEOFError e) (ioError e))
+               `Exception.catch` (\e -> unless (isEOFError e) (ioError e))
 
 -- | Returns the query string, or the request body if it is
 --   a POST request, or the empty string if there is an error.
diff --git a/Network/CGI/Monad.hs b/Network/CGI/Monad.hs
--- a/Network/CGI/Monad.hs
+++ b/Network/CGI/Monad.hs
@@ -27,7 +27,12 @@
   throwCGI, catchCGI, tryCGI, handleExceptionCGI,
  ) where
 
-import Control.Exception.Extensible as Exception (SomeException, try, throwIO)
+#if MIN_VERSION_base(4,0,0)
+import Control.Exception
+#else
+import Control.Exception.Extensible
+#endif
+  as Exception (SomeException, try, throwIO)
 import Control.Monad (liftM)
 import Control.Monad.Error (MonadError(..))
 import Control.Monad.Reader (ReaderT(..), asks)
diff --git a/cgi.cabal b/cgi.cabal
--- a/cgi.cabal
+++ b/cgi.cabal
@@ -1,5 +1,5 @@
 Name: cgi
-Version: 3001.1.7.4
+Version: 3001.1.7.5
 Copyright: Bjorn Bringert, Andy Gill, Anders Kaseorg, Ian Lynagh, 
            Erik Meijer, Sven Panne, Jeremy Shaw
 Category: Network
@@ -16,6 +16,7 @@
 
 Flag split-base
 Flag bytestring-in-base
+Flag extensible-exceptions-in-base
 
 Library
   Exposed-Modules:
@@ -28,15 +29,16 @@
     Network.CGI.Accept,
     Network.CGI.Multipart,
     Network.CGI.Header
-  Extensions: MultiParamTypeClasses
+  Extensions:
+    CPP,
+    MultiParamTypeClasses
   ghc-options: -Wall
 
   Build-depends:
     network >= 2.0,
     parsec >= 2.0,
     mtl >= 1.0,
-    xhtml >= 3000.0.0,
-    extensible-exceptions
+    xhtml >= 3000.0.0
   If flag(split-base)
     Build-depends: base >= 3 && < 5, old-time, old-locale, containers
   Else
@@ -45,6 +47,10 @@
     Build-depends: base >= 2 && < 3
   Else
     Build-depends: base < 2 || < 5, bytestring
+  If flag(extensible-exceptions-in-base)
+    Build-depends: base >= 4
+  Else
+    Build-depends: base < 4, extensible-exceptions
 
 --Executable:     printinput
 --Main-Is:        printinput.hs
