diff --git a/crdt.cabal b/crdt.cabal
--- a/crdt.cabal
+++ b/crdt.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 35a8e5d951dbc5cec14577596c73f14d73ebf453af76b242e01beea8cf404d5c
+-- hash: 119c02ebf0320abefdddcca20148e0f5af6faf20dd40832108eb06a9f330705e
 
 name:           crdt
-version:        5.0
+version:        5.1
 synopsis:       Conflict-free replicated data types
 description:    Definitions of CmRDT and CvRDT. Implementations for some classic CRDTs.
 category:       Distributed Systems
diff --git a/lib/CRDT/LamportClock.hs b/lib/CRDT/LamportClock.hs
--- a/lib/CRDT/LamportClock.hs
+++ b/lib/CRDT/LamportClock.hs
@@ -5,14 +5,16 @@
     -- * Lamport timestamp (for a single process)
     , Clock (..)
     , LamportTime (..)
-    -- * Lamport clock (for a whole multi-process system)
-    , LamportClockSim (..)
-    , runLamportClockSim
-    -- * Process
+    , LocalTime
     , Process (..)
-    -- * ProcessSim
+    -- * Lamport clock simulation
+    , LamportClockSim (..)
     , ProcessSim (..)
+    , runLamportClockSim
     , runProcessSim
+    -- * Real Lamport clock
+    , LamportClock
+    , runLamportClock
     ) where
 
 import           Control.Concurrent.STM (TVar, atomically, modifyTVar',
@@ -107,6 +109,9 @@
 -- TODO(cblp, 2018-01-06) benchmark and compare with 'atomicModifyIORef'
 newtype LamportClock a = LamportClock (ReaderT (TVar LocalTime) IO a)
     deriving (Applicative, Functor, Monad, MonadIO)
+
+runLamportClock :: TVar LocalTime -> LamportClock a -> IO a
+runLamportClock var (LamportClock action) = runReaderT action var
 
 instance Process LamportClock where
     getPid = liftIO getPidByMac
