                                                            (fn [this super]
                                                              (init-event-bus! this)
                                                              (super))
+                                                           :componentWillUnmount
+                                                           (fn [this super]
+                                                             (shutdown-event-bus! this)
+                                                             (super))
                                                            :render
                                                            (fn [this super]
                                                              (binding [*parent* this]
                                                                (super)))})
-                             :instrument (make-instrument-fn event-bus)}))))
+                             :instrument (fn [f x m]
+                                           (let [parent-bus (or
+                                                              (and *parent* (om/get-state *parent* ::event-bus))
+                                                              event-bus)]
+                                             (om/build* f x (update-in m [:init-state] merge {::event-bus parent-bus}))))}))))
 
 (defn trigger
   "Sends an event from the component down through its parent components."


   Do not use the local state values directly; they are for internal use only."
  [this]
  (let [downstream (om/get-state this ::event-bus)
        c (om/children this)]
    (om/set-state! this ::trigger-fn #(async/put! downstream %))

  (got-event [_ ev]))

;; TODO: xform

;; =============================================================================
;; Event bus setup.

(defn- init-event-bus!
  "Adds support for triggering events and, if the component reified IGotEvent, support for handling events
