diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
 Changelog for the `operational` package
 ---------------------------------------
 
+**0.2.4.2** -- Maintenance release.
+
+* Compatibility with `mtl-2.3.1`
+
 **0.2.4.1** -- Maintenance release.
 
 * Restrict dependencies to ensure GHC >= 7.10.
diff --git a/operational.cabal b/operational.cabal
--- a/operational.cabal
+++ b/operational.cabal
@@ -1,5 +1,5 @@
 Name:               operational
-Version:            0.2.4.1
+Version:            0.2.4.2
 Synopsis:           Implementation of difficult monads made easy
                     with operational semantics.
 Description:
@@ -28,6 +28,9 @@
 
 build-type:         Simple
 cabal-version:      >= 1.10
+tested-with:         GHC == 9.4.4
+                   , GHC == 9.2.5
+                   , GHC == 8.10.7
 extra-source-files: CHANGELOG.md
                     doc/*.md
                     doc/examples/*.hs
@@ -41,7 +44,7 @@
 
 source-repository head
     type:           git
-    location:       git://github.com/HeinrichApfelmus/operational.git
+    location:       https://github.com/HeinrichApfelmus/operational.git
 
 Library
     default-language:   Haskell2010
@@ -56,7 +59,9 @@
     hs-source-dirs:     src
     exposed-modules:    Control.Monad.Operational
 
-    build-depends:      base >= 4.8 && < 5, mtl >= 1.1 && < 2.3.0
+    build-depends:      base >= 4.8 && < 5
+                      , mtl >= 1.1 && < 2.4
+                      , transformers >=0.5.6 && <0.7
     ghc-options:        -Wall
 
 Executable operational-TicTacToe
diff --git a/src/Control/Monad/Operational.hs b/src/Control/Monad/Operational.hs
--- a/src/Control/Monad/Operational.hs
+++ b/src/Control/Monad/Operational.hs
@@ -22,13 +22,15 @@
 
     ) where
 
-import Control.Monad.Identity
-import Control.Monad.Trans
+import Control.Monad
+import Control.Monad.Identity (Identity, runIdentity)
+import Control.Monad.Trans    (MonadTrans, lift)
 
     -- mtl  classes to instantiate.
     -- Those commented out cannot be instantiated. For reasons see below.
 -- import Control.Monad.Cont.Class
 -- import Control.Monad.Error.Class
+import Control.Monad.IO.Class
 import Control.Monad.Reader.Class
 import Control.Monad.State.Class
 -- import Control.Monad.Writer.Class
@@ -293,7 +295,7 @@
         instruction :>>= continuation -> interpreter instruction >>= (go . continuation)
 
 -- | Utilitiy function for mapping a 'ProgramViewT' back into a 'ProgramT'.
--- 
+--
 -- Semantically, the function 'unviewT' is an inverse of 'viewT',
 -- e.g. we have
 --
