diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -12,12 +12,12 @@
 | ![GitHub top language][GHL] | [![GA-CI][GA-B]][GA-L] | [![Coveralls][Co-B]][Co-L] | [![Gitter][Gi-B]][Gi-L]
 
 [GHL]: https://img.shields.io/github/languages/top/lehins/massiv.svg
-[GA-B]: https://github.com/lehins/massiv/workflows/massiv-CI/badge.svg?branch=master
-[GA-L]: https://github.com/lehins/massiv/actions
+[GA-B]: https://github.com/lehins/massiv/actions/workflows/haskell.yml/badge.svg?branch=master
+[GA-L]: https://github.com/lehins/massiv/actions/workflows/haskell.yml
 [Co-B]: https://coveralls.io/repos/github/lehins/massiv/badge.svg?branch=master
 [Co-L]: https://coveralls.io/github/lehins/massiv?branch=master
 [Gi-B]: https://badges.gitter.im/haskell-massiv/Lobby.svg
-[Gi-L]: https://gitter.im/haskell-massiv/Lobby
+[Gi-L]: https://app.gitter.im/#/room/#haskell-massiv_Lobby:gitter.im
 
 |      Package       | Hackage | Nightly | LTS |
 |:-------------------|:-------:|:-------:|:---:|
diff --git a/massiv.cabal b/massiv.cabal
--- a/massiv.cabal
+++ b/massiv.cabal
@@ -1,5 +1,5 @@
 name:                massiv
-version:             1.0.4.0
+version:             1.0.4.1
 synopsis:            Massiv (Массив) is an Array Library.
 description:         Multi-dimensional Arrays with fusion, stencils and parallel computation.
 homepage:            https://github.com/lehins/massiv
@@ -20,9 +20,12 @@
                    , GHC == 8.8.4
                    , GHC == 8.10.7
                    , GHC == 9.0.2
-                   , GHC == 9.2.7
-                   , GHC == 9.4.4
-                   , GHC == 9.6.1
+                   , GHC == 9.2.8
+                   , GHC == 9.4.8
+                   , GHC == 9.6.6
+                   , GHC == 9.8.4
+                   , GHC == 9.10.1
+                   , GHC == 9.12.1
 
 flag unsafe-checks
   description: Enable all the bounds checks for unsafe functions at the cost of
@@ -116,7 +119,7 @@
   type:             exitcode-stdio-1.0
   hs-source-dirs:   tests
   main-is:          doctests.hs
-  build-depends: base
+  build-depends: base >= 4.9 && < 5
                , doctest >=0.15
   if impl(ghc >= 8.2) && impl(ghc < 8.10)
     build-depends: QuickCheck
diff --git a/src/Data/Massiv/Array/Ops/Construct.hs b/src/Data/Massiv/Array/Ops/Construct.hs
--- a/src/Data/Massiv/Array/Ops/Construct.hs
+++ b/src/Data/Massiv/Array/Ops/Construct.hs
@@ -317,7 +317,7 @@
   -> Sz ix
   -- ^ Resulting size of the array.
   -> Array DL ix e
-randomArray gen splitGen nextRandom comp sz = unsafeMakeLoadArray comp sz Nothing load
+randomArray gen splitGen' nextRandom comp sz = unsafeMakeLoadArray comp sz Nothing load
   where
     !totalLength = totalElem sz
     load :: forall s. Scheduler s () -> Ix1 -> (Ix1 -> e -> ST s ()) -> ST s ()
@@ -332,7 +332,7 @@
             let (genI0, genI1) =
                   if numWorkers scheduler == 1
                     then (genI, genI)
-                    else splitGen genI
+                    else splitGen' genI
             scheduleWork_ scheduler $
               void $
                 loopM start (< start + chunkLength) (+ 1) genI0 writeRandom
diff --git a/src/Data/Massiv/Array/Ops/Sort.hs b/src/Data/Massiv/Array/Ops/Sort.hs
--- a/src/Data/Massiv/Array/Ops/Sort.hs
+++ b/src/Data/Massiv/Array/Ops/Sort.hs
@@ -199,7 +199,7 @@
   | otherwise = qsortPar depthPar 0 (k - 1)
   where
     -- How deep into the search tree should we continue scheduling jobs. Constants below
-    -- were discovered imperically:
+    -- were discovered empirically:
     depthPar = min (logNumWorkers + 4) (logSize - 10)
     k = unSz (sizeOfMArray marr)
     -- We must use log becuase decinding into a tree creates an exponential number of jobs
diff --git a/src/Data/Massiv/Core/Index/Internal.hs b/src/Data/Massiv/Core/Index/Internal.hs
--- a/src/Data/Massiv/Core/Index/Internal.hs
+++ b/src/Data/Massiv/Core/Index/Internal.hs
@@ -143,6 +143,9 @@
 instance UniformRange ix => UniformRange (Sz ix) where
   uniformRM (SafeSz l, SafeSz u) g = SafeSz <$> uniformRM (l, u) g
   {-# INLINE uniformRM #-}
+#if MIN_VERSION_random(1,3,0)
+  isInRange (SafeSz l, SafeSz u) (SafeSz k) = isInRange (l, u) k
+#endif
 
 instance (UniformRange ix, Index ix) => Random (Sz ix)
 
@@ -365,6 +368,9 @@
 
 instance UniformRange Dim where
   uniformRM r g = Dim <$> uniformRM (coerce r) g
+#if MIN_VERSION_random(1,3,0)
+  isInRange = isInRangeOrd
+#endif
 
 instance Random Dim
 
@@ -736,7 +742,7 @@
   -- @since 1.0.2
   iterF :: ix -> ix -> ix -> (Int -> Int -> Bool) -> f a -> (ix -> f a -> f a) -> f a
   default iterF
-    :: (Index (Lower ix))
+    :: Index (Lower ix)
     => ix
     -> ix
     -> ix
@@ -758,7 +764,7 @@
   -- @since 0.1.0
   stepNextMF :: ix -> ix -> ix -> (Int -> Int -> Bool) -> (Maybe ix -> f a) -> f a
   default stepNextMF
-    :: (Index (Lower ix))
+    :: Index (Lower ix)
     => ix
     -> ix
     -> ix
diff --git a/src/Data/Massiv/Core/Index/Ix.hs b/src/Data/Massiv/Core/Index/Ix.hs
--- a/src/Data/Massiv/Core/Index/Ix.hs
+++ b/src/Data/Massiv/Core/Index/Ix.hs
@@ -172,6 +172,10 @@
 instance UniformRange Ix2 where
   uniformRM (l1 :. l2, u1 :. u2) g = (:.) <$> uniformRM (l1, u1) g <*> uniformRM (l2, u2) g
   {-# INLINE uniformRM #-}
+#if MIN_VERSION_random(1,3,0)
+  isInRange (l1 :. l2, u1 :. u2) (i1 :. i2) =
+    isInRangeOrd (l1, u1) i1 && isInRangeOrd (l2, u2) i2
+#endif
 
 instance Random Ix2
 
@@ -182,6 +186,10 @@
 instance UniformRange (Ix (n - 1)) => UniformRange (IxN n) where
   uniformRM (l1 :> l2, u1 :> u2) g = (:>) <$> uniformRM (l1, u1) g <*> uniformRM (l2, u2) g
   {-# INLINE uniformRM #-}
+#if MIN_VERSION_random(1,3,0)
+  isInRange (l1 :> l2, u1 :> u2) (i1 :> i2) =
+    isInRangeOrd (l1, u1) i1 && isInRange (l2, u2) i2
+#endif
 
 instance Random (Ix (n - 1)) => Random (IxN n) where
   random g =
diff --git a/src/Data/Massiv/Core/Index/Stride.hs b/src/Data/Massiv/Core/Index/Stride.hs
--- a/src/Data/Massiv/Core/Index/Stride.hs
+++ b/src/Data/Massiv/Core/Index/Stride.hs
@@ -72,6 +72,9 @@
 instance UniformRange ix => UniformRange (Stride ix) where
   uniformRM (SafeStride l, SafeStride u) g = SafeStride <$> uniformRM (l, u) g
   {-# INLINE uniformRM #-}
+#if MIN_VERSION_random(1,3,0)
+  isInRange (SafeStride l, SafeStride u) (SafeStride k) = isInRange (l, u) k
+#endif
 
 instance (UniformRange ix, Index ix) => Random (Stride ix)
 
