diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.5.0.0
+
+* Add helpers on `WorkQueue` and `PoolboySettings` in `Data.Poolboy`
+* Rename `isStopedWorkQueue` to `isStoppedWorkQueue` in `Data.Poolboy`
+
 ## 0.4.1.0
 
 * Add helpers in `Data.Poolboy.Tactics`
diff --git a/poolboy.cabal b/poolboy.cabal
--- a/poolboy.cabal
+++ b/poolboy.cabal
@@ -1,6 +1,6 @@
 cabal-version:       3.0
 name:                poolboy
-version:             0.4.1.0
+version:             0.5.0.0
 author:              Gautier DI FOLCO
 maintainer:          foss@difolco.dev
 category:            Data
@@ -10,7 +10,7 @@
 synopsis:            Simple work queue for bounded concurrency
 description:         In-memory work queue helping with load management.
 Homepage:            https://github.com/blackheaven/poolboy
-tested-with:         GHC==9.8.4
+tested-with:         GHC==9.10.3
 
 extra-source-files:
     CHANGELOG.md
diff --git a/src/Data/Poolboy.hs b/src/Data/Poolboy.hs
--- a/src/Data/Poolboy.hs
+++ b/src/Data/Poolboy.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE StrictData #-}
 {-# LANGUAGE TupleSections #-}
 
 --- |
@@ -26,11 +27,13 @@
     poolboySettingsWith,
     poolboySettingsName,
     poolboySettingsLog,
+    hoistPoolboySettings,
 
     -- * Running
     WorkQueue,
     withPoolboy,
     newPoolboy,
+    hoistWorkQueue,
 
     -- * Driving
     changeDesiredWorkersCount,
@@ -38,7 +41,7 @@
 
     -- * Stopping
     stopWorkQueue,
-    isStopedWorkQueue,
+    isStoppedWorkQueue,
     WaitingStopStrategy,
     waitingStopTimeout,
     waitingStopFinishWorkers,
@@ -74,6 +77,10 @@
     logger :: PoolboyCommand -> m ()
   }
 
+-- | Change 'PoolboySettings' monad
+hoistPoolboySettings :: (forall a. m a -> n a) -> PoolboySettings m -> PoolboySettings n
+hoistPoolboySettings hoist PoolboySettings {..} = PoolboySettings {logger = hoist . logger, ..}
+
 -- | Initial number of threads
 data WorkersCountSettings
   = -- | 'getNumCapabilities' based number
@@ -174,16 +181,16 @@
             refWorkers - n
 
 -- | Request stopping wokers
-stopWorkQueue :: (MonadUnliftIO m) => WorkQueue m -> m ()
+stopWorkQueue :: (MonadIO m) => WorkQueue m -> m ()
 stopWorkQueue wq = do
-  stopped <- isStopedWorkQueue wq
+  stopped <- isStoppedWorkQueue wq
   unless stopped $ do
     wq.onCommand SetStoppedWorkQueue
     void $ tryPutMVar wq.stopped ()
 
 -- | Non-blocking check of the work queue's running status
-isStopedWorkQueue :: (MonadUnliftIO m) => WorkQueue m -> m Bool
-isStopedWorkQueue wq = not <$> isEmptyMVar wq.stopped
+isStoppedWorkQueue :: (MonadIO m) => WorkQueue m -> m Bool
+isStoppedWorkQueue wq = not <$> isEmptyMVar wq.stopped
 
 type WaitingStopStrategy m = WorkQueue m -> m ()
 
@@ -264,12 +271,16 @@
     inflightWorkers :: IORef (HM.HashMap ThreadId (Maybe (Async ())))
   }
 
+-- | Change 'WorkQueue' monad
+hoistWorkQueue :: (forall a. m a -> n a) -> WorkQueue m -> WorkQueue n
+hoistWorkQueue hoist WorkQueue {..} = WorkQueue {onCommand = hoist . onCommand, ..}
+
 -- | Ensure the queue is stopped
 --
 -- Throws 'WorkQueueStoppedException' if not
 ensureRunning :: (MonadUnliftIO m) => WorkQueue m -> m ()
 ensureRunning wq = do
-  stopped <- isStopedWorkQueue wq
+  stopped <- isStoppedWorkQueue wq
   threadId <- myThreadId
   workers <- readIORef wq.inflightWorkers
   let isRunning = not stopped || HM.member threadId workers
diff --git a/src/Data/Poolboy/Tactics.hs b/src/Data/Poolboy/Tactics.hs
--- a/src/Data/Poolboy/Tactics.hs
+++ b/src/Data/Poolboy/Tactics.hs
@@ -151,10 +151,10 @@
   PoolboySettings m ->
   m (Maybe (m a)) ->
   m [a]
-concurrentM settings actions = do
+concurrentM settings fetchNextAction = do
   accumulator <- newIORef mempty
   let accumulate action = do
         result <- action
         atomicModifyIORef' accumulator $ \acc -> (result : acc, ())
-  concurrentM_ settings $ fmap accumulate <$> actions
+  concurrentM_ settings $ fmap accumulate <$> fetchNextAction
   readIORef accumulator
