   Note that `event` can be any data structure, there are no restrictions in this respect though for future compatibility,
   a map is recommended."
   [owner event]
-  (let [event-bus (:bubbling (om/get-state owner ::event-buses))]
-    (impl/trigger event-bus event))
-  nil)  ; Avoid the following React.js warning: "Returning `false` from an event handler is deprecated
-        ; and will be ignored in a future release. Instead, manually call e.stopPropagation() or e.preventDefault(),
-        ; as appropriate."
+  (trigger* owner ::bubbling event))
 
 (defn trickle
   [owner event]
-  (let [event-bus (:trickling (om/get-state owner ::event-buses))]
-    (impl/trigger event-bus event))
-  nil)  ; Avoid the following React.js warning: "Returning `false` from an event handler is deprecated
-        ; and will be ignored in a future release. Instead, manually call e.stopPropagation() or e.preventDefault(),
-        ; as appropriate."
+  (trigger* owner ::trickling event))
 
 (defn trigger
   [owner event]

  ([f value options]
    (root> f value options nil))
  ([f value options out-event-ch]
    (root* f value options out-event-ch {:bubbling (impl/event-bus (impl/bubbling-router))})))

(defn root<
  "Use `root>` instead of om.core/root to add support for sending events from parent components to child components only."
  ([f value options]
    (root* f value options nil {:trickling (impl/event-bus (impl/trickling-router))})))

; =============================================================================
;; ### Triggering events.

(defn bubble
  "This function sends an event from the component up through its parent components.

                                         (binding [*parent* this]
                                           (super)))})]
    (when out-event-ch
      (if-let [bubbling-bus (::bubbling event-buses)]
        (impl/tap bubbling-bus out-event-ch)
        (throw (js/Error. "Bubbling event bus not available. Make sure to use root> or root<>."))))
    (om/root f value
