diff --git a/src/Quasar/Async.hs b/src/Quasar/Async.hs
index b3efc4d078d4864fc0f098f51e3d3aed5e76b04b..3aa9c21557b7e2b3d9faec15f9d29e8759155638 100644
--- a/src/Quasar/Async.hs
+++ b/src/Quasar/Async.hs
@@ -25,7 +25,7 @@ import Quasar.Disposable
 import Quasar.Prelude
 
 
-class (MonadAwait m, MonadResourceManager m, MonadCatch m) => MonadAsync m where
+class (MonadAwait m, MonadResourceManager m, MonadMask m) => MonadAsync m where
   -- | TODO
   async :: m r -> m (Task r)
   async action = asyncWithUnmask ($ action)
diff --git a/src/Quasar/Awaitable.hs b/src/Quasar/Awaitable.hs
index 931a39b18fd4ce2742f79d867fef5b8cced2eef3..930fd6f07d78320358d5ff24d6b14e3f410e13c9 100644
--- a/src/Quasar/Awaitable.hs
+++ b/src/Quasar/Awaitable.hs
@@ -72,7 +72,7 @@ class IsAwaitable r a | a -> r where
 
 
 
-class Monad m => MonadAwait m where
+class (MonadCatch m, MonadPlus m) => MonadAwait m where
   await :: IsAwaitable r a => a -> m r
 
 instance MonadAwait IO where
diff --git a/src/Quasar/Disposable.hs b/src/Quasar/Disposable.hs
index 76e0f2858f2dd558e7567d5dba92d1504143f034..238c90ed2da8c9cd45099d668a8dc591110d3a93 100644
--- a/src/Quasar/Disposable.hs
+++ b/src/Quasar/Disposable.hs
@@ -210,10 +210,10 @@ class HasResourceManager a where
 instance HasResourceManager ResourceManager where
   getResourceManager = id
 
-class MonadIO m => MonadResourceManager m where
+class (MonadMask m, MonadIO m) => MonadResourceManager m where
   askResourceManager :: m ResourceManager
 
-instance MonadIO m => MonadResourceManager (ReaderT ResourceManager m) where
+instance (MonadMask m, MonadIO m) => MonadResourceManager (ReaderT ResourceManager m) where
   askResourceManager = ask