diff --git a/src/Quasar/Network/Runtime/Observable.hs b/src/Quasar/Network/Runtime/Observable.hs
index eb4e7ec781b3f88ebd9baa1e67cd54af66475543..5a32a5e34602d17053acc563a05d3938529ffdeb 100644
--- a/src/Quasar/Network/Runtime/Observable.hs
+++ b/src/Quasar/Network/Runtime/Observable.hs
@@ -49,6 +49,8 @@ newObservableStub startRetrieveRequest startObserveRequest = pure uncachedObserv
     retrieveFn = toTask <$> startRetrieveRequest
 
 observeToStream :: (Binary v, MonadAsync m) => Observable v -> Stream (PackedObservableMessage v) Void -> m ()
-observeToStream observable stream =
-  asyncObserve_ observable \msg ->
+observeToStream observable stream = do
+  disposable <- asyncObserve observable \msg ->
     streamSend stream $ packObservableMessage msg
+
+  attachDisposable (getResourceManager stream) disposable