diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,17 @@
+Transformers-Base
+=================
+
+[![Build](https://github.com/mvv/transformers-base/actions/workflows/ci.yml/badge.svg)](https://github.com/mvv/transformers-base/actions/workflows/ci.yml) [![Hackage](https://img.shields.io/hackage/v/transformers-base.svg)](http://hackage.haskell.org/package/transformers-base)
+
+This package provides a straightforward port of [monadLib][monadLib]'s BaseM
+typeclass to [transformers][transformers].
+
+[monadLib]: http://hackage.haskell.org/package/monadLib
+[transformers]: http://hackage.haskell.org/package/transformers
+
+Installation
+------------
+The usual:
+
+	$ cabal install
+
diff --git a/src/Control/Monad/Base.hs b/src/Control/Monad/Base.hs
--- a/src/Control/Monad/Base.hs
+++ b/src/Control/Monad/Base.hs
@@ -5,23 +5,24 @@
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE UndecidableInstances #-}
 
+#if MIN_VERSION_base(4,4,0)
+{-# LANGUAGE Safe #-}
+#endif
+
 #if MIN_VERSION_transformers(0,4,0)
 -- Hide warnings for the deprecated ErrorT transformer:
 {-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}
 #endif
 
-module Control.Monad.Base (
-    MonadBase(..),
-    liftBaseDefault
+module Control.Monad.Base
+  ( MonadBase(..)
+  , liftBaseDefault
   ) where
 
-import Data.Monoid
 import Data.Functor.Identity
-import Control.Applicative (Applicative(..))
 import Control.Monad.Trans.Class
 import Control.Monad.Trans.Identity
 import Control.Monad.Trans.Maybe
-import Control.Monad.Trans.List
 import Control.Monad.Trans.Reader
 import qualified Control.Monad.Trans.Writer.Lazy as L
 import qualified Control.Monad.Trans.Writer.Strict as S
@@ -29,25 +30,37 @@
 import qualified Control.Monad.Trans.State.Strict as S
 import qualified Control.Monad.Trans.RWS.Lazy as L
 import qualified Control.Monad.Trans.RWS.Strict as S
+#if MIN_VERSION_transformers(0,5,6)
+import qualified Control.Monad.Trans.Writer.CPS as C
+import qualified Control.Monad.Trans.RWS.CPS as C
+#endif
+#if !MIN_VERSION_transformers(0,6,0)
+import Control.Monad.Trans.List
 import Control.Monad.Trans.Error
+#endif
 import Control.Monad.Trans.Cont
-
-#if MIN_VERSION_transformers(0,4,0)
 import Control.Monad.Trans.Except
+import Control.Monad.Trans.Accum
+import Control.Monad.Trans.Select
+#if !MIN_VERSION_base(4,8,0)
+import Data.Monoid
+import Control.Applicative (Applicative(..))
 #endif
-
 #if !MIN_VERSION_base(4,4,0) && HS_TRANSFORMERS_BASE__ORPHANS
-import Control.Monad (ap)
-#endif
-
-#if MIN_VERSION_base(4,4,0) || HS_TRANSFORMERS_BASE__ORPHANS
 import qualified Control.Monad.ST.Lazy as L
 import qualified Control.Monad.ST.Strict as S
+import Data.Orphans ()
 #endif
-
-#if MIN_VERSION_base(4,3,0)
-import GHC.Conc.Sync (STM)
+#if MIN_VERSION_base(4,4,0)
+# if MIN_VERSION_base(4,8,0)
+import qualified Control.Monad.ST.Lazy as L
+import qualified Control.Monad.ST.Strict as S
+# else
+import qualified Control.Monad.ST.Lazy.Safe as L
+import qualified Control.Monad.ST.Safe as S
+# endif
 #endif
+import Control.Monad.STM (STM)
 
 class (Applicative b, Applicative m, Monad b, Monad m)
       ⇒ MonadBase b m | m → b where
@@ -64,21 +77,14 @@
 BASE((→) r)
 BASE(Identity)
 
-#if MIN_VERSION_base(4,3,0)
 BASE(STM)
-#endif
 
 #if !MIN_VERSION_base(4,4,0) && HS_TRANSFORMERS_BASE__ORPHANS
-instance Applicative (L.ST s) where
-  pure  = return
-  (<*>) = ap
-
-instance Applicative (S.ST s) where
-  pure  = return
-  (<*>) = ap
+BASE(L.ST s)
+BASE(S.ST s)
 #endif
 
-#if MIN_VERSION_base(4,4,0) || HS_TRANSFORMERS_BASE__ORPHANS
+#if MIN_VERSION_base(4,4,0)
 BASE(L.ST s)
 BASE(S.ST s)
 #endif
@@ -96,13 +102,14 @@
 
 TRANS(IdentityT)
 TRANS(MaybeT)
-TRANS(ListT)
 TRANS(ReaderT r)
 TRANS(L.StateT s)
 TRANS(S.StateT s)
 TRANS(ContT r)
-#if MIN_VERSION_transformers(0,4,0)
 TRANS(ExceptT e)
+TRANS(SelectT r)
+#if !MIN_VERSION_transformers(0,6,0)
+TRANS(ListT)
 #endif
 #undef TRANS
 
@@ -113,5 +120,12 @@
 TRANS_CTX(Monoid w, S.WriterT w)
 TRANS_CTX(Monoid w, L.RWST r w s)
 TRANS_CTX(Monoid w, S.RWST r w s)
+#if MIN_VERSION_transformers(0,5,6)
+TRANS_CTX(Monoid w, C.WriterT w)
+TRANS_CTX(Monoid w, C.RWST r w s)
+#endif
+#if !MIN_VERSION_transformers(0,6,0)
 TRANS_CTX(Error e,  ErrorT e)
+#endif
+TRANS_CTX(Monoid w, AccumT w)
 #undef TRANS_CTX
diff --git a/transformers-base.cabal b/transformers-base.cabal
--- a/transformers-base.cabal
+++ b/transformers-base.cabal
@@ -1,5 +1,5 @@
 Name: transformers-base
-Version: 0.4.2
+Version: 0.4.6.1
 Category: Control
 Stability: experimental
 Synopsis: Lift computations from the bottom of a transformer stack
@@ -20,7 +20,15 @@
 License: BSD3
 License-File: LICENSE
 
-Cabal-Version: >= 1.6.0
+Extra-Source-Files:
+  README.md
+
+Tested-With: GHC==7.0.4, GHC==7.4.2, GHC==7.6.3, GHC==7.8.4, GHC==7.10.3,
+             GHC==8.0.2, GHC==8.2.2, GHC==8.4.4, GHC==8.6.5, GHC==8.8.4,
+             GHC==8.10.7, GHC==9.0.2, GHC==9.2.8, GHC==9.4.8, GHC==9.6.7,
+             GHC==9.8.4, GHC==9.10.3, GHC==9.12.2
+
+Cabal-Version: >= 1.10
 Build-Type: Simple
 
 Source-Repository head
@@ -29,16 +37,21 @@
 
 Flag OrphanInstances
   Description:
-    Declare orphan Applicative instances for lazy and strict ST if needed
+    Import orphan Applicative instances for lazy and strict ST if needed
   Default: True
 
 Library
+  Default-Language: Haskell2010
   Build-Depends:
-    base          >= 3 && < 5,
-    transformers  >= 0.2
+    base                >= 3 && < 5 && (< 4.4 || >= 4.5),
+    stm                 >= 2.3,
+    transformers        >= 0.2,
+    transformers-compat >= 0.6.1
   Hs-Source-Dirs: src
   GHC-Options: -Wall
   if flag(OrphanInstances)
+    Build-Depends:
+      base-orphans >= 0.3
     CPP-Options: -DHS_TRANSFORMERS_BASE__ORPHANS=1
   else
     CPP-Options: -DHS_TRANSFORMERS_BASE__ORPHANS=0
