diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for extensible-effects-concurrent
 
+## 0.14.1
+
+- Add Server2 based observation handling with `handleObservations`
+
 ## 0.14.0
 
 - Fix/Improve Server2
diff --git a/extensible-effects-concurrent.cabal b/extensible-effects-concurrent.cabal
--- a/extensible-effects-concurrent.cabal
+++ b/extensible-effects-concurrent.cabal
@@ -1,5 +1,5 @@
 name:           extensible-effects-concurrent
-version:        0.14.0
+version:        0.14.1
 description:    Please see the README on GitHub at <https://github.com/sheyll/extensible-effects-concurrent#readme>
 synopsis:       Message passing concurrency as extensible-effect
 homepage:       https://github.com/sheyll/extensible-effects-concurrent#readme
diff --git a/src/Control/Eff/Concurrent.hs b/src/Control/Eff/Concurrent.hs
--- a/src/Control/Eff/Concurrent.hs
+++ b/src/Control/Eff/Concurrent.hs
@@ -176,6 +176,8 @@
                                                 , ToServerPids(..)
                                                 , InterruptCallback(..)
                                                 , stopServerOnInterrupt
+                                                , handleObservations
+                                                , Observing()
                                                 )
 
 import           Control.Eff.Concurrent.Api.Server
diff --git a/src/Control/Eff/Concurrent/Api/Server2.hs b/src/Control/Eff/Concurrent/Api/Server2.hs
--- a/src/Control/Eff/Concurrent/Api/Server2.hs
+++ b/src/Control/Eff/Concurrent/Api/Server2.hs
@@ -30,6 +30,9 @@
   -- ** Interrupt handler
   , InterruptCallback(..)
   , stopServerOnInterrupt
+  -- * Observers
+  , handleObservations
+  , Observing()
   )
 where
 
@@ -38,6 +41,7 @@
 import           Control.Eff.Log
 import           Control.Eff.State.Lazy
 import           Control.Eff.Concurrent.Api
+import           Control.Eff.Concurrent.Api.Observer
 import           Control.Eff.Concurrent.Api.Internal
 import           Control.Eff.Concurrent.Process
 import           Control.Monad                  ( (>=>) )
@@ -409,3 +413,27 @@
 -- @since 0.13.2
 stopServerOnInterrupt :: forall eff . HasCallStack => InterruptCallback eff
 stopServerOnInterrupt = InterruptCallback (pure . StopServer)
+
+-- | Apply a given callback function to incoming 'Observeration's.
+--
+-- @since 0.14.1
+handleObservations
+  :: Typeable o
+  => (Server o -> Observation o -> Eff e CallbackResult)
+  -> MessageCallback (Observing o) e
+handleObservations cb = handleCasts $ \(Observered s o) -> cb s o
+
+-- | An 'Api' type for generic 'Observer's, see 'handleObservations'.
+--
+-- @since 0.14.1
+data Observing o
+  deriving Typeable
+
+-- | An 'Api' instance for generic 'Observer's, see 'handleObservations'.
+--
+-- @since 0.14.1
+data instance Api (Observing o) 'Asynchronous where
+  Observered :: Server o -> Observation o -> Api (Observing o) 'Asynchronous
+
+instance (Typeable o, Observable o) => Observer (Observing o) o where
+  observationMessage = Observered
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -15,7 +15,7 @@
 # resolver:
 #  name: custom-snapshot
 #  location: "./custom-snapshot.yaml"
-resolver: lts-12.9
+resolver: lts-12.19
 
 # User packages to be built.
 # Various formats can be used as shown in the example below.
