diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,42 +1,7 @@
--- The code is mostly ripped from
--- https://github.com/ekmett/lens/blob/697582fb9a980f273dbf8496253c5bbefedd0a8b/Setup.lhs
-import Data.List ( nub )
-import Data.Version ( showVersion )
-import Distribution.Package ( PackageName(PackageName), Package, PackageId, InstalledPackageId, packageVersion, packageName )
-import Distribution.PackageDescription ( PackageDescription(), TestSuite(..) )
-import Distribution.Simple ( defaultMainWithHooks, UserHooks(..), simpleUserHooks )
-import Distribution.Simple.Utils ( rewriteFile, createDirectoryIfMissingVerbose, copyFiles )
-import Distribution.Simple.BuildPaths ( autogenModulesDir )
-import Distribution.Simple.Setup ( BuildFlags(buildVerbosity), Flag(..), fromFlag, HaddockFlags(haddockDistPref))
-import Distribution.Simple.LocalBuildInfo ( withLibLBI, withTestLBI, LocalBuildInfo(), ComponentLocalBuildInfo(componentPackageDeps) )
-import Distribution.Text ( display )
-import Distribution.Verbosity ( Verbosity, normal )
-import System.FilePath ( (</>) )
-
-main :: IO ()
-main = defaultMainWithHooks simpleUserHooks
-  { buildHook = \pkg lbi hooks flags -> do
-     generateBuildModule (fromFlag (buildVerbosity flags)) pkg lbi
-     buildHook simpleUserHooks pkg lbi hooks flags
-  }
-
-generateBuildModule :: Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()
-generateBuildModule verbosity pkg lbi = do
-  let dir = autogenModulesDir lbi
-  createDirectoryIfMissingVerbose verbosity True dir
-  withLibLBI pkg lbi $ \_ libcfg -> do
-    withTestLBI pkg lbi $ \suite suitecfg -> do
-      rewriteFile (dir </> "Build_" ++ testName suite ++ ".hs") $ unlines
-        [ "module Build_" ++ testName suite ++ " where"
-        , "import Prelude"
-        , "deps :: [String]"
-        , "deps = " ++ (show $ formatdeps (testDeps libcfg suitecfg))
-        ]
-  where
-    formatdeps = map (formatone . snd)
-    formatone p = case packageName p of
-      PackageName n -> n ++ "-" ++ showVersion (packageVersion p)
+module Main (main) where
 
-testDeps :: ComponentLocalBuildInfo -> ComponentLocalBuildInfo -> [(InstalledPackageId, PackageId)]
-testDeps xs ys = nub $ componentPackageDeps xs ++ componentPackageDeps ys
+import Distribution.Extra.Doctest ( defaultMainWithDoctests )
 
+main :: IO ()
+main =
+  defaultMainWithDoctests "doctests"
diff --git a/doctest/Main.hs b/doctest/Main.hs
deleted file mode 100644
--- a/doctest/Main.hs
+++ /dev/null
@@ -1,67 +0,0 @@
--- The code is mostly ripped from
--- https://github.com/ekmett/lens/blob/d1d97469f0e93c1d3535308954a060e8a04e37aa/tests/doctests.hsc
-import BasePrelude
-import System.Directory
-import System.FilePath
-import Test.DocTest
-import Build_doctest (deps)
-
-main :: IO ()
-main = do
-  sources <- getSources
-  doctest $ dfltParams ++ map ("-package="++) deps ++ sources
-  where
-    dfltParams = 
-      [
-        "-isrc",
-        "-idist/build/autogen",
-        "-optP-include",
-        "-optPdist/build/autogen/cabal_macros.h",
-        "-XArrows",
-        "-XBangPatterns",
-        "-XConstraintKinds",
-        "-XDataKinds",
-        "-XDefaultSignatures",
-        "-XDeriveDataTypeable",
-        "-XDeriveFoldable",
-        "-XDeriveFunctor",
-        "-XDeriveGeneric",
-        "-XDeriveTraversable",
-        "-XEmptyDataDecls",
-        "-XFlexibleContexts",
-        "-XFlexibleInstances",
-        "-XFunctionalDependencies",
-        "-XGADTs",
-        "-XGeneralizedNewtypeDeriving",
-        "-XLambdaCase",
-        "-XLiberalTypeSynonyms",
-        "-XMultiParamTypeClasses",
-        "-XMultiWayIf",
-        "-XNoImplicitPrelude",
-        "-XNoMonomorphismRestriction",
-        "-XOverloadedStrings",
-        "-XPatternGuards",
-        "-XParallelListComp",
-        "-XQuasiQuotes",
-        "-XRankNTypes",
-        "-XRecordWildCards",
-        "-XScopedTypeVariables",
-        "-XStandaloneDeriving",
-        "-XTemplateHaskell",
-        "-XTupleSections",
-        "-XTypeFamilies",
-        "-XTypeOperators",
-        "-hide-all-packages"
-      ]
-
-getSources :: IO [FilePath]
-getSources = filter (isSuffixOf ".hs") <$> go "library"
-  where
-    go dir = do
-      (dirs, files) <- getFilesAndDirectories dir
-      (files ++) . concat <$> mapM go dirs
-
-getFilesAndDirectories :: FilePath -> IO ([FilePath], [FilePath])
-getFilesAndDirectories dir = do
-  c <- map (dir </>) . filter (`notElem` ["..", "."]) <$> getDirectoryContents dir
-  (,) <$> filterM doesDirectoryExist c <*> filterM doesFileExist c
diff --git a/doctests/Main.hs b/doctests/Main.hs
new file mode 100644
--- /dev/null
+++ b/doctests/Main.hs
@@ -0,0 +1,12 @@
+module Main where
+
+import Build_doctests (flags, pkgs, module_sources)
+import Data.Foldable (traverse_)
+import Test.DocTest (doctest)
+
+main :: IO ()
+main = do
+  traverse_ putStrLn args -- optionally print arguments
+  doctest args
+  where
+    args = flags ++ pkgs ++ module_sources
diff --git a/html-entities.cabal b/html-entities.cabal
--- a/html-entities.cabal
+++ b/html-entities.cabal
@@ -1,7 +1,7 @@
 name:
   html-entities
 version:
-  1.1.4
+  1.1.4.1
 synopsis:
   A codec library for HTML-escaped text and HTML-entities
 description:
@@ -32,8 +32,13 @@
 build-type:
   Custom
 cabal-version:
-  >=1.10
+  >= 1.24
 
+custom-setup
+  setup-depends:
+    base >= 4.5 && < 5,
+    Cabal >= 1.24 && < 3,
+    cabal-doctest >= 1 && < 2
 
 source-repository head
   type:
@@ -41,7 +46,6 @@
   location:
     git://github.com/nikita-volkov/html-entities.git
 
-
 library
   hs-source-dirs:
     library
@@ -57,20 +61,18 @@
     unordered-containers == 0.2.*,
     text >= 1 && < 2,
     attoparsec >= 0.10 && < 0.14,
-    base-prelude >= 0.1.19 && < 2
-  ghc-options:
-    -funbox-strict-fields
+    base-prelude >= 0.1.19 && < 2,
+    base < 5
   default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators
+    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
   default-language:
     Haskell2010
 
-
-test-suite doctest
+test-suite doctests
   type:
     exitcode-stdio-1.0
   hs-source-dirs:
-    doctest
+    doctests
   main-is:
     Main.hs
   ghc-options:
@@ -78,11 +80,11 @@
     "-with-rtsopts=-N"
     -funbox-strict-fields
   default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators
+    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
   default-language:
     Haskell2010
   build-depends:
-    doctest == 0.11.*,
+    doctest == 0.12.*,
     directory >= 1.2 && < 2,
     filepath >= 1.3 && < 2,
     base-prelude,
