diff --git a/src/lib/Qd/Observable.hs b/src/lib/Qd/Observable.hs
index b0829c61af09ab02c9a36e47ff4d60cd47871e94..166d91729f7d522914580f033fe4e0100fc3618d 100644
--- a/src/lib/Qd/Observable.hs
+++ b/src/lib/Qd/Observable.hs
@@ -142,7 +142,7 @@ instance forall o i v. (Observable i o, Observable v i) => Observable v (JoinedO
   subscribe (JoinedObservable outer) callback = do
     innerSubscriptionMVar <- newMVar dummySubscription
     outerSubscription <- subscribe outer (outerCallback innerSubscriptionMVar)
-    return $ SubscriptionHandle{unsubscribe = unsubscribe outerSubscription}
+    return $ SubscriptionHandle{unsubscribe = unsubscribe outerSubscription >> readMVar innerSubscriptionMVar >>= dispose}
       where
         dummySubscription = SubscriptionHandle { unsubscribe = return () }
         outerCallback innerSubscriptionMVar = outerSubscription'
@@ -168,7 +168,7 @@ instance forall o i v. (Observable (Maybe i) o, Observable v i) => Observable (M
   subscribe (JoinedObservableMaybe outer) callback = do
     innerSubscriptionMVar <- newMVar dummySubscription
     outerSubscription <- subscribe outer (outerHandler innerSubscriptionMVar)
-    return $ SubscriptionHandle{unsubscribe = unsubscribe outerSubscription}
+    return $ SubscriptionHandle{unsubscribe = unsubscribe outerSubscription >> readMVar innerSubscriptionMVar >>= dispose}
       where
         dummySubscription = SubscriptionHandle { unsubscribe = return () }
         outerHandler innerSubscriptionMVar = outerSubscription'
@@ -201,7 +201,7 @@ instance forall e o i v. (Observable (Either e i) o, Observable v i) => Observab
   subscribe (JoinedObservableEither outer) callback = do
     innerSubscriptionMVar <- newMVar dummySubscription
     outerSubscription <- subscribe outer (outerHandler innerSubscriptionMVar)
-    return $ SubscriptionHandle{unsubscribe = unsubscribe outerSubscription}
+    return $ SubscriptionHandle{unsubscribe = unsubscribe outerSubscription >> readMVar innerSubscriptionMVar >>= dispose}
       where
         dummySubscription = SubscriptionHandle { unsubscribe = return () }
         outerHandler innerSubscriptionMVar = outerSubscription'