diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
 All notable changes to this project will be documented in this file.
 This project adheres to the [Package Versioning Policy](https://wiki.haskell.org/Package_versioning_policy).
 
+## [3001.5.0.0]
+- Define a proper `MonadFail` instance for `CGIT`. This is necessary to compile
+  successfully with `ghc-8.8.x` Since that change affects our public API, a
+  major version bump is necessary.
+- The build no longer supports ghc prior to version 8.x.
+
 ## [3001.4.0.0]
 - Drop obsolete Network.CGI.Compat module. The code in that module relied on
   obsolete functions and types from `network` which have been dropped there in
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
-Copyright 2001-2014, The University Court of the University of
+Copyright 2001-2019, The University Court of the University of
 Glasgow, Bjorn Bringert, John Chee, Andy Gill, Anders Kaseorg,
-Ian Lynagh, Erik Meijer, Sven Panne, Jeremy Shaw
+Ian Lynagh, Erik Meijer, Sven Panne, Jeremy Shaw, Peter Simons
 
 All rights reserved.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -17,8 +17,6 @@
 - An efficient implementation of multipart/form-data
   using Data.ByteString. This allows for efficient
   handling of file uploads.
-- Wrapper functions for compatibility with the old
-  Network.CGI module.
 - A CGI monad transformer.
 - Basic exception handling and logging (these should be improved)
 - Low-level run functions that allow using programs written with
diff --git a/cgi.cabal b/cgi.cabal
--- a/cgi.cabal
+++ b/cgi.cabal
@@ -1,5 +1,5 @@
 name:               cgi
-version:            3001.4.0.0
+version:            3001.5.0.0
 synopsis:           A library for writing CGI programs
 description:        This is a Haskell library for writing CGI programs.
 license:            BSD3
@@ -8,7 +8,7 @@
                     Ian Lynagh, Erik Meijer, Sven Panne, Jeremy Shaw, Peter Simons
 author:             Bjorn Bringert
 maintainer:         John Chee <cheecheeo@gmail.com>, Peter Simons <simons@cryp.to>
-tested-with:        GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.3
+tested-with:        GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.1
 category:           Network
 homepage:           https://github.com/cheecheeo/haskell-cgi
 bug-reports:        https://github.com/cheecheeo/haskell-cgi/issues
@@ -32,16 +32,16 @@
                     Network.CGI.Protocol
   other-modules:    Network.CGI.Accept
   hs-source-dirs:   src
-  build-depends:    base       >= 4.7 && < 5
-                  , bytestring < 0.11
-                  , containers < 0.7
-                  , exceptions == 0.10.*
-                  , multipart  >= 0.1.2 && < 0.2
-                  , mtl        > 2.2.0.1 && < 2.3
+  build-depends:    base        >= 4.9 && < 5
+                  , bytestring  < 0.11
+                  , containers  < 0.7
+                  , exceptions  == 0.10.*
+                  , mtl         > 2.2.0.1 && < 2.3
+                  , multipart   >= 0.1.2 && < 0.3
                   , network-uri == 2.6.*
-                  , parsec     >= 2.0 && < 3.2
-                  , time       >= 1.5 && < 1.10
-                  , xhtml      >= 3000.0.0 && < 3000.3
+                  , parsec      >= 2.0 && < 3.2
+                  , time        >= 1.5 && < 1.10
+                  , xhtml       >= 3000.0.0 && < 3000.3
   other-extensions: MultiParamTypeClasses
 
 executable cookie.cgi
diff --git a/src/Network/CGI/Monad.hs b/src/Network/CGI/Monad.hs
--- a/src/Network/CGI/Monad.hs
+++ b/src/Network/CGI/Monad.hs
@@ -27,12 +27,15 @@
   throwCGI, catchCGI, tryCGI, handleExceptionCGI,
  ) where
 
+import Prelude hiding ( fail )
+
 import Control.Exception as Exception (SomeException)
 import Control.Applicative (Applicative(..))
 import Control.Monad.Catch (MonadCatch, MonadThrow, MonadMask, throwM, catch, try, mask, uninterruptibleMask, generalBracket)
 import Control.Monad.Except (MonadError(..))
 import Control.Monad.Reader (ReaderT(..), asks)
 import Control.Monad.Writer (WriterT(..), tell)
+import Control.Monad.Fail (MonadFail(..))
 import Control.Monad.Trans (MonadTrans, MonadIO, liftIO, lift)
 import Data.Typeable
 import Network.CGI.Protocol
@@ -59,7 +62,8 @@
 instance Monad m => Monad (CGIT m) where
     c >>= f = CGIT (unCGIT c >>= unCGIT . f)
     return = CGIT . return
-    -- FIXME: should we have an error monad instead?
+
+instance MonadFail m => MonadFail (CGIT m) where
     fail = CGIT . fail
 
 instance MonadIO m => MonadIO (CGIT m) where
