diff --git a/src/Quasar/Observable.hs b/src/Quasar/Observable.hs
index aeda1d4dc597a4db111e28a8bfc5e952af70ddac..7b9c6369c1439f8bd18f6bc5b602e75f66ed86b4 100644
--- a/src/Quasar/Observable.hs
+++ b/src/Quasar/Observable.hs
@@ -8,6 +8,7 @@ module Quasar.Observable (
   IsObservable(..),
   Observable(..),
   ObservableMessage(..),
+  toObservableUpdate,
   asyncObserve,
   asyncObserve_,
 
@@ -68,6 +69,12 @@ instance Applicative ObservableMessage where
   liftA2 fn (ObservableUpdate x) (ObservableUpdate y) = ObservableUpdate (fn x y)
 
 
+toObservableUpdate :: MonadThrow m => ObservableMessage a -> m (Maybe a)
+toObservableUpdate (ObservableUpdate value) = pure $ Just value
+toObservableUpdate ObservableLoading = pure Nothing
+toObservableUpdate (ObservableNotAvailable ex) = throwM ex
+
+
 class IsRetrievable v a | a -> v where
   retrieve :: MonadAsync m => a -> m (Task v)