diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+0.16
+----
+
+- Compatibility with mtl-2.3, used with GHC 9.6
+
 0.15
 ----
 
diff --git a/servant-machines.cabal b/servant-machines.cabal
--- a/servant-machines.cabal
+++ b/servant-machines.cabal
@@ -1,6 +1,6 @@
-cabal-version:       >=1.10
+cabal-version:       2.2
 name:                servant-machines
-version:             0.15.1
+version:             0.16
 
 synopsis:            Servant Stream support for machines
 category:            Servant, Web, Enumerator
@@ -10,35 +10,29 @@
 
 homepage:            http://docs.servant.dev/
 bug-reports:         http://github.com/haskell-servant/servant/issues
-license:             BSD3
+license:             BSD-3-Clause
 license-file:        LICENSE
 author:              Servant Contributors
 maintainer:          haskell-servant-maintainers@googlegroups.com
 copyright:           2018-2019 Servant Contributors
 build-type:          Simple
-tested-with:
-  GHC ==8.0.2
-   || ==8.2.2
-   || ==8.4.4
-   || ==8.6.5
-   || ==8.8.3
-   || ==8.10.1
+tested-with: GHC ==8.6.5 || ==8.8.4 || ==8.10.2
 
 extra-source-files:
   CHANGELOG.md
 
 source-repository head
   type: git
-  location: http://github.com/haskell-servant/servant-machines.git
+  location: http://github.com/haskell-servant/servant.git
 
 library
   exposed-modules:     Servant.Machines
   build-depends:
       base          >=4.9      && <5
-    , bytestring    >=0.10.8.1 && <0.11
+    , bytestring    >=0.10.8.1 && <0.12
     , machines      >=0.6.4    && <0.8
-    , mtl           >=2.2.2    && <2.3
-    , servant       >=0.15     && <0.19
+    , mtl           ^>=2.2.2   || ^>=2.3.1
+    , servant       >=0.20     && <0.21
   hs-source-dirs:      src
   default-language:    Haskell2010
   ghc-options: -Wall
@@ -54,11 +48,11 @@
     , base-compat
     , bytestring
     , http-media
-    , servant
+    , servant        >=0.20     && <0.21
     , machines
     , servant-machines
-    , servant-server >=0.15     && <0.19
-    , servant-client >=0.15     && <0.19
+    , servant-server >=0.20     && <0.21
+    , servant-client >=0.20     && <0.21
     , wai            >=3.2.1.2  && <3.3
     , warp           >=3.2.25   && <3.4
     , http-client
diff --git a/src/Servant/Machines.hs b/src/Servant/Machines.hs
--- a/src/Servant/Machines.hs
+++ b/src/Servant/Machines.hs
@@ -35,7 +35,7 @@
     toSourceIO = machineToSourceIO
 
 instance MonadIO m => FromSourceIO o (MachineT m k o) where
-    fromSourceIO src = MachineT $ liftIO $ S.unSourceT src go
+    fromSourceIO src = return $ MachineT $ liftIO $ S.unSourceT src go
       where
         go :: S.StepT IO o -> IO (Step k o (MachineT m k o))
         go S.Stop        = return Stop
@@ -43,4 +43,4 @@
         go (S.Skip s)    = go s
         go (S.Effect ms) = ms >>= go
         go (S.Yield x s) = return (Yield x (MachineT (liftIO (go s))))
-    {-# SPECIALIZE INLINE fromSourceIO :: SourceIO o -> MachineT IO k o #-}
+    {-# SPECIALIZE INLINE fromSourceIO :: SourceIO o -> IO (MachineT IO k o) #-}
