diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2024-10-30 Laurent P. René de Cotret <laurent.decotret@outlook.com> 0.3.7
+
+* Removed dependency on `rematch` (#459)
+
 2024-09-03 Laurent P. René de Cotret <laurent.decotret@outlook.com> 0.3.6
 
 * Bumped dependency bounds to support GHC 8.10.7 - GHC 9.10.1
diff --git a/distributed-process-extras.cabal b/distributed-process-extras.cabal
--- a/distributed-process-extras.cabal
+++ b/distributed-process-extras.cabal
@@ -1,6 +1,6 @@
 cabal-version:  3.0
 name:           distributed-process-extras
-version:        0.3.6
+version:        0.3.7
 build-type:     Simple
 license:        BSD-3-Clause
 license-file:   LICENCE
@@ -37,7 +37,7 @@
   build-depends:   base >= 4.14 && < 5,
                    distributed-process >= 0.6.0 && < 0.8,
                    binary >= 0.8 && < 0.9,
-                   deepseq >= 1.4 && < 1.6,
+                   deepseq >= 1.4 && < 1.7,
                    mtl >= 2.0 && < 2.4,
                    containers >= 0.6 && < 0.8,
                    exceptions >= 0.10,
@@ -75,13 +75,12 @@
                    ansi-terminal >= 0.5 && < 0.9,
                    distributed-process >= 0.6.0 && < 0.8,
                    distributed-process-extras,
-                   distributed-process-systest >= 0.1.0 && < 0.4,
+                   distributed-process-systest ^>= 0.4,
                    HUnit >= 1.2 && < 2,
                    test-framework >= 0.6 && < 0.9,
                    test-framework-hunit,
                    QuickCheck >= 2.4,
                    test-framework-quickcheck2,
-                   rematch >= 0.2.0.0,
                    ghc-prim
   hs-source-dirs:  tests
   ghc-options:     -rtsopts
@@ -98,7 +97,7 @@
                    ansi-terminal >= 0.5 && < 0.9,
                    distributed-process >= 0.6.0 && < 0.8,
                    distributed-process-extras,
-                   distributed-process-systest >= 0.1.0 && < 0.4,
+                   distributed-process-systest ^>= 0.4,
                    network-transport >= 0.4 && < 0.6,
                    mtl,
                    containers,
@@ -110,7 +109,6 @@
                    stm,
                    test-framework >= 0.6 && < 0.9,
                    test-framework-hunit,
-                   rematch >= 0.2.0.0,
                    transformers
   hs-source-dirs:  tests
   ghc-options:     -threaded -rtsopts -with-rtsopts=-N -fno-warn-unused-do-bind
@@ -127,7 +125,7 @@
                    deepseq,
                    distributed-process >= 0.6.0 && < 0.8,
                    distributed-process-extras,
-                   distributed-process-systest >= 0.1.0 && < 0.4,
+                   distributed-process-systest ^>= 0.4,
                    network-transport >= 0.4 && < 0.6,
                    network-transport-tcp >= 0.4 && < 0.9,
                    HUnit >= 1.2 && < 2,
@@ -135,7 +133,6 @@
                    test-framework-hunit,
                    QuickCheck >= 2.4,
                    test-framework-quickcheck2,
-                   rematch >= 0.2.0.0,
                    ghc-prim
   hs-source-dirs:  tests
   ghc-options:     -rtsopts
@@ -155,7 +152,7 @@
                    unordered-containers >= 0.2.3.0 && < 0.3,
                    distributed-process >= 0.6.0 && < 0.8,
                    distributed-process-extras,
-                   distributed-process-systest >= 0.1.0 && < 0.4,
+                   distributed-process-systest ^>= 0.4,
                    distributed-static,
                    bytestring,
                    data-accessor,
@@ -172,7 +169,6 @@
                    test-framework >= 0.6 && < 0.9,
                    test-framework-hunit,
                    transformers,
-                   rematch >= 0.2.0.0,
                    ghc-prim
   hs-source-dirs:  tests
   ghc-options:     -threaded -rtsopts -with-rtsopts=-N -fno-warn-unused-do-bind
diff --git a/tests/TestLog.hs b/tests/TestLog.hs
--- a/tests/TestLog.hs
+++ b/tests/TestLog.hs
@@ -4,7 +4,6 @@
 
 module Main where
 
--- import Control.Exception (SomeException)
 import Control.Concurrent.MVar (MVar, newMVar, takeMVar, putMVar, newEmptyMVar)
 import Control.Concurrent.STM (atomically)
 import Control.Concurrent.STM.TChan
@@ -12,7 +11,7 @@
 import Control.Distributed.Process.Closure (remotable, mkStaticClosure)
 import Control.Distributed.Process.Node
 import Control.Distributed.Process.Extras hiding (__remoteTable)
-import qualified Control.Distributed.Process.Extras.SystemLog as Log (Logger, error)
+import qualified Control.Distributed.Process.Extras.SystemLog as Log (Logger)
 import Control.Distributed.Process.Extras.SystemLog hiding (Logger, error)
 import Control.Distributed.Process.SysTest.Utils
 import Control.Distributed.Process.Extras.Time
@@ -31,7 +30,6 @@
 import Text.ParserCombinators.ReadP as P
 import Text.ParserCombinators.ReadPrec
 
-import qualified Network.Transport as NT
 
 logLevelFormatter :: Message -> Process (Maybe String)
 logLevelFormatter m = handleMessage m showLevel
diff --git a/tests/TestPrimitives.hs b/tests/TestPrimitives.hs
--- a/tests/TestPrimitives.hs
+++ b/tests/TestPrimitives.hs
@@ -16,11 +16,9 @@
 import Control.Distributed.Process.Extras.Monitoring
 import Control.Distributed.Process.Extras.Time
 import Control.Monad (void)
-import Control.Rematch hiding (match)
-import qualified Network.Transport as NT (Transport)
 import Network.Transport.TCP()
 
-import Test.HUnit (Assertion)
+import Test.HUnit (Assertion, assertEqual, assertBool)
 import Test.Framework (Test, testGroup, defaultMain)
 import Test.Framework.Providers.HUnit (testCase)
 import Network.Transport.TCP
@@ -113,8 +111,9 @@
     mn1 <- liftIO $ takeMVar nid2
     mn2 <- liftIO $ takeMVar nid3
 
-    [mn1, mn2] `shouldContain` n1
-    [mn1, mn2] `shouldContain` n2
+    liftIO $ do
+      assertBool mempty $ n1 `elem` [mn1, mn2]
+      assertBool mempty $ n2 `elem` [mn1, mn2]
 
     nid4 <- liftIO $ newEmptyMVar
     node4 <- liftIO $ newLocalNode transport initRemoteTable
@@ -125,7 +124,7 @@
 
     mn3 <- liftIO $ takeMVar nid4
     NodeUp n3 <- expect
-    mn3 `shouldBe` (equalTo n3)
+    liftIO $ assertEqual mempty n3 mn3
 
     liftIO $ closeLocalNode node4
     stash result ()
diff --git a/tests/TestQueues.hs b/tests/TestQueues.hs
--- a/tests/TestQueues.hs
+++ b/tests/TestQueues.hs
@@ -1,26 +1,20 @@
 {-# LANGUAGE PatternGuards  #-}
+{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-}
 module Main where
 
 import qualified Control.Distributed.Process.Extras.Internal.Queue.SeqQ as FIFO
 import Control.Distributed.Process.Extras.Internal.Queue.SeqQ ( SeqQ )
 import qualified Control.Distributed.Process.Extras.Internal.Queue.PriorityQ as PQ
 
-import Control.Rematch hiding (on)
-import Control.Rematch.Run
 import Data.Function (on)
-import Data.List
+import Data.List ( sortBy )
 import Test.Framework as TF (defaultMain, testGroup, Test)
 import Test.Framework.Providers.HUnit
 import Test.Framework.Providers.QuickCheck2 (testProperty)
-import Test.HUnit (Assertion, assertFailure)
+import Test.HUnit (assertBool, assertEqual)
 
 import Prelude
 
-expectThat :: a -> Matcher a -> Assertion
-expectThat a matcher = case res of
-  MatchSuccess -> return ()
-  (MatchFailure msg) -> assertFailure msg
-  where res = runMatch matcher a
 
 -- NB: these tests/properties are not meant to be complete, but rather
 -- they exercise the small number of behaviours that we actually use!
@@ -72,13 +66,11 @@
      ],
      testGroup "FIFO Queue Tests" [
         testCase "New Queue Should Be Empty"
-          (expectThat (FIFO.isEmpty $ FIFO.empty) $ equalTo True),
+          (assertBool mempty (FIFO.isEmpty $ FIFO.empty)),
         testCase "Singleton Queue Should Contain One Element"
-          (expectThat (FIFO.dequeue $ FIFO.singleton "hello") $
-             equalTo $ Just ("hello", FIFO.empty)),
+          (assertEqual mempty (FIFO.dequeue $ FIFO.singleton "hello") $ Just ("hello", FIFO.empty)),
         testCase "Dequeue Empty Queue Should Be Nothing"
-          (expectThat (FIFO.dequeue $ (FIFO.empty :: SeqQ ())) $
-            is (Nothing :: Maybe ((), SeqQ ()))),
+          (assertEqual mempty  (FIFO.dequeue $ (FIFO.empty :: SeqQ ())) $ (Nothing :: Maybe ((), SeqQ ()))),
         testProperty "Enqueue/Dequeue should respect FIFO order"
             prop_fifo_enqueue,
         testProperty "Enqueue/Dequeue should respect isEmpty"
diff --git a/tests/TestTimer.hs b/tests/TestTimer.hs
--- a/tests/TestTimer.hs
+++ b/tests/TestTimer.hs
@@ -9,7 +9,6 @@
   , takeMVar
   , withMVar
   )
-import qualified Network.Transport as NT (Transport)
 import Network.Transport.TCP()
 import Control.DeepSeq (NFData)
 import Control.Distributed.Process
