diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,8 @@
+    0.6
+    * GHC 9.4 compatibility :
+        * get rid of MonadFail (ST s) instance use
+    * mtl-2.3 compatibility
+
     0.4.3
     * Ensure we don't grow with a negative size in DOM parser (#48)
     * Flatten code nesting in process function (#45)
diff --git a/src/Xeno/SAX.hs b/src/Xeno/SAX.hs
--- a/src/Xeno/SAX.hs
+++ b/src/Xeno/SAX.hs
@@ -5,9 +5,7 @@
 {-# LANGUAGE NamedFieldPuns      #-}
 {-# LANGUAGE OverloadedStrings   #-}
 {-# LANGUAGE ScopedTypeVariables #-}
-{-# options_ghc -Wno-unused-imports #-}
 -- | SAX parser and API for XML.
-
 module Xeno.SAX
   ( process
   , Process(..)
@@ -19,20 +17,21 @@
   , skipDoctype
   ) where
 
-import           Control.Exception
-import           Control.Monad.ST
-import           Control.Monad.State.Strict
-import           Control.Spork
-import           Data.Bits
+import           Control.Exception (throw)
+import           Control.Monad (unless)
+import           Control.Monad.ST (ST, runST)
+import           Control.Monad.State.Strict (State, evalStateT, execState, modify', lift, get, put)
+import           Control.Spork (spork)
+import           Data.Bits (testBit)
 import           Data.ByteString (ByteString)
 import qualified Data.ByteString as S
 import qualified Data.ByteString.Char8 as S8
 import qualified Data.ByteString.Unsafe as SU
-import           Data.Char(isSpace)
-import           Data.Functor.Identity
-import           Data.Semigroup
-import           Data.STRef
-import           Data.Word
+import           Data.Char (isSpace)
+import           Data.Functor.Identity (Identity(..))
+import           Data.Semigroup ()
+import           Data.STRef (newSTRef, modifySTRef', readSTRef)
+import           Data.Word (Word8, Word64)
 import           Xeno.Types
 
 
@@ -138,7 +137,7 @@
                s)
             readSTRef tags >>= \case
                 [] -> return ()
-                tags' -> fail $ "Not all tags closed: " ++ show tags'
+                tags' -> error $ "Not all tags closed: " ++ show tags'
          ) of
     Left (_ :: XenoException) -> False
     Right _ -> True
diff --git a/xeno.cabal b/xeno.cabal
--- a/xeno.cabal
+++ b/xeno.cabal
@@ -1,5 +1,5 @@
 name: xeno
-version: 0.5
+version: 0.6
 synopsis: A fast event-based XML parser in pure Haskell
 description: A fast, low-memory use, event-based XML parser in pure Haskell.  
 build-type: Simple
@@ -10,7 +10,7 @@
 license-file: LICENSE
 author: Christopher Done
 maintainer: Marco Zocca (ocramz fripost org)
-tested-with:         GHC == 8.0.1, GHC == 8.2.2, GHC == 8.4.2, GHC == 8.4.4, GHC == 8.6.5, GHC == 9.0.1
+tested-with:         GHC == 8.0.1, GHC == 8.2.2, GHC == 8.4.2, GHC == 8.4.4, GHC == 8.6.5, GHC == 9.0.1, GHC == 9.0.4
 extra-source-files:  README.md
                      CHANGELOG.markdown
                      CONTRIBUTORS.md
