diff --git a/acme-timemachine.cabal b/acme-timemachine.cabal
--- a/acme-timemachine.cabal
+++ b/acme-timemachine.cabal
@@ -1,6 +1,6 @@
 name:                acme-timemachine
-version:             0.0.0.1
-synopsis:            An easy way to perform and unperform IO actions.
+version:             0.0.1.0
+synopsis:            An easy way to perform and unperform IO and other stateful actions.
 description:         When doing some computations with side effects, one might regret the decision to change the state of the universe. This package provides an 'undo' function for such cases, and universe suspension/resuming functions for finer control.
 license:             BSD3
 license-file:        LICENSE
diff --git a/src/Acme/TimeMachine.hs b/src/Acme/TimeMachine.hs
--- a/src/Acme/TimeMachine.hs
+++ b/src/Acme/TimeMachine.hs
@@ -7,7 +7,8 @@
 		undo,
 		suspend,
 		resume,
-        runTM
+        runTM,
+		event
     )
     where
 
@@ -21,7 +22,7 @@
 data Universe = Universe# (State# RealWorld)
 
 -- | Undo-able side-effectful computation monad.
--- Lets you perform and unperform side-effectful computations (with 'undo'), for example:
+-- Lets you perform and unperform (with 'undo') computations with side-effects, for example:
 --
 -- > main = runTM $ do
 -- >     liftIO $ putStrLn "Launching the missiles!"
diff --git a/src/Acme/TimeMachine/Undoable.hs b/src/Acme/TimeMachine/Undoable.hs
--- a/src/Acme/TimeMachine/Undoable.hs
+++ b/src/Acme/TimeMachine/Undoable.hs
@@ -2,10 +2,12 @@
 module Acme.TimeMachine.Undoable (
         Suspension,
         Undoable(..),
+		runUndoable,
         evalUndoable,
         execUndoable,
         suspend,
         resume,
+		event,
         undo
     )
     where
@@ -45,6 +47,11 @@
 -- | Load the history of a computation, saved by 'suspend'.
 resume :: Suspension s -> Undoable s ()
 resume l = Undoable $ \_ -> (l, ())
+
+-- | Treat the events occuring inside this block as a single event, that can be undone with a sinle 'undo' invocation.
+-- | This will always add exactly one item to the computation's history, even if the block doesn't add any, or even removes some.
+event :: Undoable s a -> Undoable s a
+event (Undoable f) = Undoable $ \l -> case f l of ~(Suspension s _, r) -> (Suspension s l, r)
 
 -- | Rollback the latest addition to the computation's history.
 undo :: Undoable s ()
