diff --git a/bearriver.cabal b/bearriver.cabal
--- a/bearriver.cabal
+++ b/bearriver.cabal
@@ -1,5 +1,5 @@
 name:                bearriver
-version:             0.10.4.4
+version:             0.10.4.5
 synopsis:            A replacement of Yampa based on Monadic Stream Functions.
 description:         A Yampa replacement built using Dunai.
 homepage:            keera.co.uk
@@ -23,7 +23,7 @@
                        FRP.Yampa.AffineSpace,
                        FRP.BearRiver
 
-  build-depends:       base >=4.6 && <5, transformers >=0.3, mtl, dunai >= 0.5 && < 0.6, MonadRandom
+  build-depends:       base >=4.6 && <5, transformers >=0.3, mtl, dunai >= 0.5.2 && < 0.6, MonadRandom
   hs-source-dirs:      src/
   default-language:    Haskell2010
 
diff --git a/src/FRP/BearRiver.hs b/src/FRP/BearRiver.hs
--- a/src/FRP/BearRiver.hs
+++ b/src/FRP/BearRiver.hs
@@ -19,6 +19,7 @@
 import           Control.Monad.Trans.Maybe
 import           Control.Monad.Trans.MSF                        hiding (switch)
 import           Control.Monad.Trans.MSF.Except                 as MSF hiding (switch)
+import           Control.Monad.Trans.MSF.List                   (widthFirst, sequenceS)
 import           Control.Monad.Trans.MSF.Random
 import           Data.Functor.Identity
 import           Data.Maybe
@@ -49,8 +50,11 @@
 -- * Continuous time
 
 time :: Monad m => SF m () Time
-time = integral <<< constant 1
+time = localTime
 
+localTime :: Monad m => SF m () Time
+localTime = constant 1.0 >>> integral
+
 integral :: (Monad m, VectorSpace a s) => SF m a a
 integral = integralFrom zeroVector
 
@@ -71,7 +75,7 @@
 -- * Events
 
 data Event a = Event a | NoEvent
- deriving Show
+ deriving (Eq, Show)
 
 instance Functor Event where
   fmap f NoEvent   = NoEvent
@@ -106,9 +110,15 @@
 mergeBy _       NoEvent      re@(Event _) = re
 mergeBy resolve (Event l)    (Event r)    = Event (resolve l r)
 
+-- | Left-biased event merge (always prefer left event, if present).
 lMerge :: Event a -> Event a -> Event a
 lMerge = mergeBy (\e1 _ -> e1)
 
+-- | Right-biased event merge (always prefer right event, if present).
+rMerge :: Event a -> Event a -> Event a
+rMerge = flip lMerge
+
+
 -- ** Relation to other types
 
 eventToMaybe = event Nothing Just
@@ -216,6 +226,9 @@
 accumHoldBy f b = feedback b $ arr $ \(a, b') ->
   let b'' = event b' (f b') a
   in (b'', b'')
+
+parB :: (Monad m) => [SF m a b] -> SF m a [b]
+parB = widthFirst . sequenceS
 
 dpSwitchB :: (Monad m , Traversable col)
           => col (SF m a b) -> SF m (a, col b) (Event c) -> (col (SF m a b) -> c -> SF m a (col b))
