diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,13 @@
+# optics-extra-0.4.2 (2022-05-19)
+* Allow `transformers-0.6` and `mtl-2.3`
+
+  Note that `optics-extra` no longer defines `Zoom` instances for `ErrorT` or `ListT` when
+  building with `mtl-2.3` or later. This is because `MonadState` is a superclass of
+  `Zoom`, and the `MonadState` instances for `ErrorT` and `ListT` were removed in
+  `mtl-2.3`. Be watchful of this if you build `optics-extra` with `mtl-2.3` (or
+  later) combined with an older version of `transformers` (pre-0.6) that defines
+  `ErrorT` or `ListT`.  Similarly for `Magnify` and `MagnifyMany`.
+
 # optics-extra-0.4.1 (2022-03-22)
 * Add support for GHC-9.2
 
diff --git a/optics-extra.cabal b/optics-extra.cabal
--- a/optics-extra.cabal
+++ b/optics-extra.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.2
 name:          optics-extra
-version:       0.4.1
+version:       0.4.2
 license:       BSD-3-Clause
 license-file:  LICENSE
 build-type:    Simple
@@ -67,10 +67,10 @@
                , containers             >= 0.5.10.2  && <0.7
                , hashable               >= 1.1.1     && <1.5
                , indexed-profunctors    >= 0.1       && <0.2
-               , mtl                    >= 2.2.2     && <2.3
+               , mtl                    >= 2.2.2     && <2.4
                , optics-core            >= 0.4.1     && <0.4.2
                , text                   >= 1.2       && <1.3 || >=2.0 && <2.1
-               , transformers           >= 0.5       && <0.6
+               , transformers           >= 0.5       && <0.7
                , unordered-containers   >= 0.2.6     && <0.3
                , vector                 >= 0.11      && <0.13
                , indexed-traversable-instances >=0.1 && <0.2
diff --git a/src/Optics/Zoom.hs b/src/Optics/Zoom.hs
--- a/src/Optics/Zoom.hs
+++ b/src/Optics/Zoom.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}
 module Optics.Zoom
@@ -11,10 +12,8 @@
 
 import Control.Monad.Reader (ReaderT (..), MonadReader)
 import Control.Monad.State (MonadState (..))
-import Control.Monad.Trans.Error (Error, ErrorT (..))
 import Control.Monad.Trans.Except (ExceptT (..), runExceptT)
 import Control.Monad.Trans.Identity (IdentityT (..))
-import Control.Monad.Trans.List (ListT (..))
 import Control.Monad.Trans.Maybe (MaybeT (..))
 import qualified Control.Monad.Trans.RWS.Lazy as L
 import qualified Control.Monad.Trans.RWS.Strict as S
@@ -23,6 +22,11 @@
 import qualified Control.Monad.Trans.Writer.Lazy as L
 import qualified Control.Monad.Trans.Writer.Strict as S
 
+#if !MIN_VERSION_transformers(0,6,0)
+import Control.Monad.Trans.Error (Error, ErrorT (..))
+import Control.Monad.Trans.List (ListT (..))
+#endif
+
 import Optics.Core
 import Optics.Internal.Utils
 import Optics.Extra.Internal.Zoom
@@ -158,14 +162,6 @@
   {-# INLINE zoomMaybe #-}
   {-# INLINE zoomMany #-}
 
-instance Zoom m n s t => Zoom (ListT m) (ListT n) s t where
-  zoom      o = ListT #.                  zoom      o .# runListT
-  zoomMaybe o = ListT #. fmap sequenceA . zoomMaybe o .# runListT
-  zoomMany  o = ListT #.                  zoomMany  o .# runListT
-  {-# INLINE zoom #-}
-  {-# INLINE zoomMaybe #-}
-  {-# INLINE zoomMany #-}
-
 instance Zoom m n s t => Zoom (MaybeT m) (MaybeT n) s t where
   zoom o =
     MaybeT #. zoom o .# runMaybeT
@@ -177,6 +173,18 @@
   {-# INLINE zoomMaybe #-}
   {-# INLINE zoomMany #-}
 
+instance Zoom m n s t => Zoom (ExceptT e m) (ExceptT e n) s t where
+  zoom o =
+    ExceptT #. zoom o .# runExceptT
+  zoomMaybe o =
+    ExceptT #. fmap (getErr . shuffleErr) . zoomMaybe o . fmap Err .# runExceptT
+  zoomMany o =
+    ExceptT #. fmap getErr . zoomMany o . fmap Err .# runExceptT
+  {-# INLINE zoom #-}
+  {-# INLINE zoomMaybe #-}
+  {-# INLINE zoomMany #-}
+
+#if !MIN_VERSION_transformers(0,6,0) && !MIN_VERSION_mtl(2,3,0)
 instance (Error e, Zoom m n s t) => Zoom (ErrorT e m) (ErrorT e n) s t where
   zoom o =
     ErrorT #. zoom o .# runErrorT
@@ -188,16 +196,14 @@
   {-# INLINE zoomMaybe #-}
   {-# INLINE zoomMany #-}
 
-instance Zoom m n s t => Zoom (ExceptT e m) (ExceptT e n) s t where
-  zoom o =
-    ExceptT #. zoom o .# runExceptT
-  zoomMaybe o =
-    ExceptT #. fmap (getErr . shuffleErr) . zoomMaybe o . fmap Err .# runExceptT
-  zoomMany o =
-    ExceptT #. fmap getErr . zoomMany o . fmap Err .# runExceptT
+instance Zoom m n s t => Zoom (ListT m) (ListT n) s t where
+  zoom      o = ListT #.                  zoom      o .# runListT
+  zoomMaybe o = ListT #. fmap sequenceA . zoomMaybe o .# runListT
+  zoomMany  o = ListT #.                  zoomMany  o .# runListT
   {-# INLINE zoom #-}
   {-# INLINE zoomMaybe #-}
   {-# INLINE zoomMany #-}
+#endif
 
 ------------------------------------------------------------------------------
 -- Magnify
@@ -367,16 +373,6 @@
   magnifyMany o = L.WriterT #. magnifyMany o .# L.runWriterT
   {-# INLINE magnifyMany #-}
 
-instance Magnify m n b a => Magnify (ListT m) (ListT n) b a where
-  magnify      o = ListT #.                  magnify      o .# runListT
-  magnifyMaybe o = ListT #. fmap sequenceA . magnifyMaybe o .# runListT
-  {-# INLINE magnify #-}
-  {-# INLINE magnifyMaybe #-}
-
-instance MagnifyMany m n b a => MagnifyMany (ListT m) (ListT n) b a where
-  magnifyMany o = ListT #. magnifyMany o .# runListT
-  {-# INLINE magnifyMany #-}
-
 instance Magnify m n b a => Magnify (MaybeT m) (MaybeT n) b a where
   magnify o = MaybeT #. magnify o .# runMaybeT
   magnifyMaybe o =
@@ -388,6 +384,18 @@
   magnifyMany o = MaybeT #. fmap getMay . magnifyMany o . fmap May .# runMaybeT
   {-# INLINE magnifyMany #-}
 
+instance Magnify m n b a => Magnify (ExceptT e m) (ExceptT e n) b a where
+  magnify o = ExceptT #. magnify o .# runExceptT
+  magnifyMaybe o =
+    ExceptT #. fmap (getErr . shuffleErr) . magnifyMaybe o . fmap Err .# runExceptT
+  {-# INLINE magnify #-}
+  {-# INLINE magnifyMaybe #-}
+
+instance MagnifyMany m n b a => MagnifyMany (ExceptT e m) (ExceptT e n) b a where
+  magnifyMany o = ExceptT #. fmap getErr . magnifyMany o . fmap Err .# runExceptT
+  {-# INLINE magnifyMany #-}
+
+#if !MIN_VERSION_transformers(0,6,0)
 instance (Error e, Magnify m n b a) => Magnify (ErrorT e m) (ErrorT e n) b a where
   magnify o = ErrorT #. magnify o .# runErrorT
   magnifyMaybe o =
@@ -401,13 +409,13 @@
   magnifyMany o = ErrorT #. fmap getErr . magnifyMany o . fmap Err .# runErrorT
   {-# INLINE magnifyMany #-}
 
-instance Magnify m n b a => Magnify (ExceptT e m) (ExceptT e n) b a where
-  magnify o = ExceptT #. magnify o .# runExceptT
-  magnifyMaybe o =
-    ExceptT #. fmap (getErr . shuffleErr) . magnifyMaybe o . fmap Err .# runExceptT
+instance Magnify m n b a => Magnify (ListT m) (ListT n) b a where
+  magnify      o = ListT #.                  magnify      o .# runListT
+  magnifyMaybe o = ListT #. fmap sequenceA . magnifyMaybe o .# runListT
   {-# INLINE magnify #-}
   {-# INLINE magnifyMaybe #-}
 
-instance MagnifyMany m n b a => MagnifyMany (ExceptT e m) (ExceptT e n) b a where
-  magnifyMany o = ExceptT #. fmap getErr . magnifyMany o . fmap Err .# runExceptT
+instance MagnifyMany m n b a => MagnifyMany (ListT m) (ListT n) b a where
+  magnifyMany o = ListT #. magnifyMany o .# runListT
   {-# INLINE magnifyMany #-}
+#endif
