diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for monad-schedule
 
+## 0.2.0.1
+
+* Compatibility with GHC 9.10
+
 ## 0.2
 
 * Added FreeAsync
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/monad-schedule.cabal b/monad-schedule.cabal
--- a/monad-schedule.cabal
+++ b/monad-schedule.cabal
@@ -1,6 +1,6 @@
 cabal-version:   2.4
 name:            monad-schedule
-version:         0.2
+version:         0.2.0.1
 license:         MIT
 license-file:    LICENSE
 author:          Manuel Bärenz
@@ -22,6 +22,7 @@
   GHC == 9.4.5
   GHC == 9.6.2
   GHC == 9.8.1
+  GHC == 9.10.1
 
 source-repository head
   type:     git
@@ -29,7 +30,8 @@
 
 common deps
   build-depends:
-    , base          >=4.16.0 && <4.20.0
+    , base          >=4.16.0 && <4.21.0
+    , base-compat   ^>=0.13
     , free          >=5.1 && < 5.3
     , stm           ^>=2.5
     , time-domain   ^>=0.1
@@ -75,6 +77,8 @@
     , time                        >=1.9
 
   default-language: Haskell2010
+
+  ghc-options: -threaded
 
 flag dev
   description: Enable warnings as errors. Active on ci.
diff --git a/src/Control/Monad/Schedule/Class.hs b/src/Control/Monad/Schedule/Class.hs
--- a/src/Control/Monad/Schedule/Class.hs
+++ b/src/Control/Monad/Schedule/Class.hs
@@ -18,9 +18,11 @@
 import Data.Function
 import Data.Functor.Identity
 import Data.List.NonEmpty hiding (length)
-import qualified Data.List.NonEmpty as NonEmpty
 import Prelude hiding (map, zip)
 
+-- base-compat
+import Data.Functor.Compat (unzip)
+
 -- transformers
 import Control.Monad.Trans.Accum
 import Control.Monad.Trans.Class
@@ -191,7 +193,7 @@
         (NonEmpty (a, w), [m (a, w)]) ->
         ((NonEmpty a, [AccumT w m a]), w)
       collectWritesAndWrap (finished, running) =
-        let (as, logs) = NonEmpty.unzip finished
+        let (as, logs) = Data.Functor.Compat.unzip finished
          in ((as, AccumT . const <$> running), fold logs)
 
 {- | Schedule all actions according to @m@ and in case of exceptions
diff --git a/test/FreeAsync.hs b/test/FreeAsync.hs
--- a/test/FreeAsync.hs
+++ b/test/FreeAsync.hs
@@ -64,14 +64,15 @@
         runFreeAsync $ replicateM_ 100 $ freeAsync $ threadDelay 1000
         after <- getCurrentTime
         let diff = after `diffUTCTime` before
-        assert $ diff >= 0.1 && diff < 0.2
+        print diff
+        assert $ diff >= 0.1 && diff < 0.3
     , testCase "Scheduling does things in parallel" $ do
         before <- getCurrentTime
         runFreeAsync $ scheduleAndFinish $ fromList $ replicate 100 $ freeAsync $ threadDelay 1000
         after <- getCurrentTime
         let diff = after `diffUTCTime` before
         print diff
-        assert $ diff > 0.001 && diff <= 0.005 -- Assume overhead is at most 5x at ms durations
+        assert $ diff > 0.001 && diff <= 0.01 -- Assume overhead is at most 10x at ms durations
     , testGroup
         "ConcurrentlyT"
         [ testCase "Sequencing does things in parallel" $ do
@@ -80,7 +81,7 @@
             after <- getCurrentTime
             let diff = after `diffUTCTime` before
             print diff
-            assert $ diff > 0.001 && diff <= 0.005 -- Assume overhead is at most 5x at ms durations
+            assert $ diff > 0.001 && diff <= 0.01 -- Assume overhead is at most 10x at ms durations
         ]
     ]
 
