diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for eventuo11y
 
+## 0.3.2.0 -- 2022-10-04
+
+Add hoistEvent
+
 ## 0.3.1.0 -- 2022-10-04
 
 Add causedEventBackend
diff --git a/eventuo11y.cabal b/eventuo11y.cabal
--- a/eventuo11y.cabal
+++ b/eventuo11y.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               eventuo11y
-version:            0.3.1.0
+version:            0.3.2.0
 synopsis:           An event-oriented observability library
 description:
   Instrument your Haskell codebase with wide, semantically meaningful events.
@@ -26,7 +26,7 @@
   See "Observe.Event.Backend" for documentation on writing an
   @EventBackend@.
 
-  See [Example.hs](https://github.com/shlevy/eventuo11y/tree/v0.3.1.0/Example.hs) for an example.
+  See [Example.hs](https://github.com/shlevy/eventuo11y/tree/v0.3.2.0/Example.hs) for an example.
 
   See [eventuo11y-batteries](https://hackage.haskell.org/package/eventuo11y-batteries) for miscellaneous
   framework-specific helpers.
diff --git a/src/Observe/Event.hs b/src/Observe/Event.hs
--- a/src/Observe/Event.hs
+++ b/src/Observe/Event.hs
@@ -40,6 +40,7 @@
 --  t'Observe.Event.Render.JSON.RenderFieldJSON' to use JSON rendering 'EventBackend's.
 module Observe.Event
   ( Event,
+    hoistEvent,
 
     -- * Event manipulation #eventmanip#
     reference,
@@ -104,6 +105,15 @@
     -- | A 'OnceFlag' to ensure we only finish ('finalize' or 'failEvent') once.
     finishFlag :: !(OnceFlag m)
   }
+
+-- | Hoist an 'Event' along a given natural transformation into a new monad.
+hoistEvent :: (Functor m, Functor n) => (forall x. m x -> n x) -> Event m r s f -> Event n r s f
+hoistEvent nt Event {..} =
+  Event
+    { backend = hoistEventBackend nt backend,
+      impl = hoistEventImpl nt impl,
+      finishFlag = hoistOnceFlag nt finishFlag
+    }
 
 -- | Obtain a reference to an 'Event'.
 --
diff --git a/src/Observe/Event/Backend.hs b/src/Observe/Event/Backend.hs
--- a/src/Observe/Event/Backend.hs
+++ b/src/Observe/Event/Backend.hs
@@ -18,6 +18,7 @@
     unitEventBackend,
     pairEventBackend,
     hoistEventBackend,
+    hoistEventImpl,
     narrowEventBackend,
     narrowEventBackend',
 
@@ -154,19 +155,21 @@
   EventBackend n r s
 hoistEventBackend nt backend =
   EventBackend
-    { newEventImpl = nt . fmap hoistEventImpl . newEventImpl backend,
+    { newEventImpl = nt . fmap (hoistEventImpl nt) . newEventImpl backend,
       newOnceFlag = hoistOnceFlag nt <$> (nt $ newOnceFlag backend)
     }
-  where
-    hoistEventImpl (EventImpl {..}) =
-      EventImpl
-        { referenceImpl,
-          addFieldImpl = nt . addFieldImpl,
-          addParentImpl = nt . addParentImpl,
-          addProximateImpl = nt . addProximateImpl,
-          finalizeImpl = nt $ finalizeImpl,
-          failImpl = nt . failImpl
-        }
+
+-- | Hoist an 'EventImpl' along a given natural transformation into a new monad.
+hoistEventImpl :: (forall x. m x -> n x) -> EventImpl m r f -> EventImpl n r f
+hoistEventImpl nt (EventImpl {..}) =
+  EventImpl
+    { referenceImpl,
+      addFieldImpl = nt . addFieldImpl,
+      addParentImpl = nt . addParentImpl,
+      addProximateImpl = nt . addProximateImpl,
+      finalizeImpl = nt finalizeImpl,
+      failImpl = nt . failImpl
+    }
 
 -- | Narrow an 'EventBackend' to a new selector type via a given injection function.
 --
