diff --git a/src/Quasar/Disposable.hs b/src/Quasar/Disposable.hs
index 9cb1777d4a35c6c689efd056d241566286e133b9..a8b0e41951a40da908f5f3e4ce56074c71fac84d 100644
--- a/src/Quasar/Disposable.hs
+++ b/src/Quasar/Disposable.hs
@@ -13,6 +13,8 @@ module Quasar.Disposable (
   disposeEventually,
   withOnResourceManager,
   onResourceManager,
+  captureDisposable,
+  captureDisposable_,
 
   -- ** ResourceManager
   IsResourceManager(..),
@@ -266,6 +268,21 @@ onResourceManager :: (IsResourceManager a) => a -> ReaderT ResourceManager m r -
 onResourceManager target action = runReaderT action (toResourceManager target)
 
 
+captureDisposable :: MonadResourceManager m => m (Awaitable a) -> m (Task a)
+captureDisposable action = do
+  -- TODO improve performance by only creating a new resource manager when two or more disposables are attached
+  resourceManager <- newResourceManager
+  awaitable <- localResourceManager resourceManager $ action
+  pure $ Task (toDisposable resourceManager) awaitable
+
+captureDisposable_ :: MonadResourceManager m => m () -> m Disposable
+captureDisposable_ action = do
+  -- TODO improve performance by only creating a new resource manager when two or more disposables are attached
+  resourceManager <- newResourceManager
+  localResourceManager resourceManager action
+  pure $ toDisposable resourceManager
+
+
 
 data ResourceManager = ResourceManager {
   disposingVar :: TVar Bool,