diff --git a/src/Quasar/Async.hs b/src/Quasar/Async.hs
index adfc85f37467ceb8f29308514a38203c59cd568a..1457f4d21dca3cb356a22179bcb76c9225ce0ea9 100644
--- a/src/Quasar/Async.hs
+++ b/src/Quasar/Async.hs
@@ -21,7 +21,7 @@ import Quasar.Disposable
 import Quasar.Prelude
 
 
-class (MonadAwait m, MonadResourceManager m) => MonadAsync m where
+class MonadResourceManager m => MonadAsync m where
   async :: m r -> m (Awaitable r)
   async action = asyncWithUnmask ($ action)
 
diff --git a/src/Quasar/Observable.hs b/src/Quasar/Observable.hs
index cdf49ab5f651c6102d09ba1bf3dd3beb11c13f47..7cbb126990fd6d8b6fe2a818993d7709c2fa40d0 100644
--- a/src/Quasar/Observable.hs
+++ b/src/Quasar/Observable.hs
@@ -74,7 +74,7 @@ toObservableUpdate (ObservableNotAvailable ex) = throwM ex
 
 
 class IsRetrievable v a | a -> v where
-  retrieve :: (MonadResourceManager m, MonadAwait m) => a -> m (Awaitable v)
+  retrieve :: MonadResourceManager m => a -> m (Awaitable v)
 
 retrieveIO :: IsRetrievable v a => a -> IO v
 retrieveIO x = withOnResourceManager $ await =<< retrieve x
@@ -436,7 +436,7 @@ mergeObservable :: (IsObservable v0 o0, IsObservable v1 o1) => (v0 -> v1 -> r) -
 mergeObservable merge x y = Observable $ MergedObservable merge x y
 
 data FnObservable v = FnObservable {
-  retrieveFn :: forall m. (MonadResourceManager m, MonadAwait m) => m (Awaitable v),
+  retrieveFn :: forall m. MonadResourceManager m => m (Awaitable v),
   observeFn :: (ObservableMessage v -> IO ()) -> IO Disposable
 }
 instance IsRetrievable v (FnObservable v) where
@@ -451,7 +451,7 @@ instance IsObservable v (FnObservable v) where
 -- | Implement an Observable by directly providing functions for `retrieve` and `subscribe`.
 fnObservable
   :: ((ObservableMessage v -> IO ()) -> IO Disposable)
-  -> (forall m. (MonadResourceManager m, MonadAwait m) => m (Awaitable v))
+  -> (forall m. MonadResourceManager m => m (Awaitable v))
   -> Observable v
 fnObservable observeFn retrieveFn = toObservable FnObservable{observeFn, retrieveFn}