diff --git a/examples/tests/unit-tests.hs b/examples/tests/unit-tests.hs
--- a/examples/tests/unit-tests.hs
+++ b/examples/tests/unit-tests.hs
@@ -124,7 +124,7 @@
     assertEqual "beh3" ["init", "second"] =<< readIORef outRef
 
 -- | This demonstrates the fact that if there are multiple updates to a behaviour
--- in a given transaction, the last one prevails.
+-- in a given transaction, the last one prevails in the result of 'value beh'.
 beh4 = TestCase $ do
     outRef <- newIORef []
     (push, unlisten) <- sync $ do
@@ -138,7 +138,21 @@
     unlisten
     assertEqual "beh4" ["other", "second"] =<< readIORef outRef
 
+-- | This demonstrates the fact that if there are multiple updates to a behaviour
+-- in a given transaction, the last one prevails in the result of 'updates beh'.
 beh5 = TestCase $ do
+    outRef <- newIORef []
+    (push, unlisten) <- sync $ do
+        (beh, push) <- newBehavior "init"
+        unlisten <- listen (updates beh) $ \a -> modifyIORef outRef (++ [a])
+        return (push, unlisten)
+    sync $ do
+        push "first"
+        push "second"
+    unlisten
+    assertEqual "beh4" ["second"] =<< readIORef outRef
+
+beh6 = TestCase $ do
     (ea, push) <- sync newEvent
     outRef <- newIORef []
     unlisten <- sync $ do
diff --git a/sodium.cabal b/sodium.cabal
--- a/sodium.cabal
+++ b/sodium.cabal
@@ -1,7 +1,7 @@
 name:                sodium
-version:             0.11.0.2
+version:             0.11.0.3
 synopsis:            Sodium Reactive Programming (FRP) System
-description:         
+description:
   A general purpose Reactive Programming (FRP) system. This is part of a project to
   implement reactive libraries with similar interfaces across a range of programming
   languages at <http://reactiveprogramming.org/>
@@ -166,7 +166,7 @@
                        FRP.Sodium.Context,
                        FRP.Sodium.IO
   other-modules:       FRP.Sodium.Plain
-  build-depends:       base >= 4.3.0.0 && < 4.8.0.0,
+  build-depends:       base >= 4.3.0.0 && < 4.9.0.0,
                        containers >= 0.4.0.0 && < 0.6.0.0,
                        mtl >= 2.0.0.0 && < 2.3.0.0
   ghc-options:         -O2
diff --git a/src/FRP/Sodium.hs b/src/FRP/Sodium.hs
--- a/src/FRP/Sodium.hs
+++ b/src/FRP/Sodium.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving, ScopedTypeVariables, DoRec, GADTs,
+{-# LANGUAGE GeneralizedNewtypeDeriving, ScopedTypeVariables, RecursiveDo, GADTs,
     TypeFamilies, EmptyDataDecls, FlexibleInstances #-}
 {-# OPTIONS_GHC -fno-cse -fno-full-laziness #-}
 -- | Sodium Reactive Programming (FRP) system.
diff --git a/src/FRP/Sodium/Context.hs b/src/FRP/Sodium/Context.hs
--- a/src/FRP/Sodium/Context.hs
+++ b/src/FRP/Sodium/Context.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, DoRec, FlexibleContexts, ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies, RecursiveDo, FlexibleContexts, ScopedTypeVariables #-}
 -- | Generalization of the Sodium API to allow for parallel processing.
 module FRP.Sodium.Context where
 
@@ -80,7 +80,7 @@
     -- ideally be commutative.
     coalesce      :: (a -> a -> a) -> Event r a -> Event r a
     -- | Throw away all event occurrences except for the first one.
-    once          :: Context r => Event r a -> Event r a
+    once          :: Event r a -> Event r a
     -- | Take each list item and put it into a new transaction of its own.
     --
     -- An example use case of this might be a situation where we are splitting
diff --git a/src/FRP/Sodium/Internal.hs b/src/FRP/Sodium/Internal.hs
--- a/src/FRP/Sodium/Internal.hs
+++ b/src/FRP/Sodium/Internal.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving, ScopedTypeVariables, DoRec #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving, ScopedTypeVariables, RecursiveDo #-}
 {-# OPTIONS_GHC -fno-cse -fno-full-laziness #-}
 module FRP.Sodium.Internal (
         C.Event(..),
diff --git a/src/FRP/Sodium/Plain.hs b/src/FRP/Sodium/Plain.hs
--- a/src/FRP/Sodium/Plain.hs
+++ b/src/FRP/Sodium/Plain.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving, ScopedTypeVariables, DoRec, GADTs,
+{-# LANGUAGE GeneralizedNewtypeDeriving, ScopedTypeVariables, RecursiveDo, GADTs,
     TypeFamilies, EmptyDataDecls, FlexibleInstances #-}
 {-# OPTIONS_GHC -fno-cse -fno-full-laziness #-}
 module FRP.Sodium.Plain where
@@ -129,9 +129,10 @@
     split = split
 
 -- | An event that gives the updates for the behavior. If the behavior was created
--- with 'hold', then 'updates' gives you an event equivalent to the one that was held.
+-- with 'hold', then 'updates' gives you an event like to the one that was held
+-- but with only the last firing in any single transaction included.
 updates :: Behavior a -> Event a
-updates = updates_
+updates = coalesce (flip const) . updates_
 
 -- | Execute the specified 'Reactive' within a new transaction, blocking the caller
 -- until all resulting processing is complete and all callbacks have been called.
