 
 (defn create-component
   ""
-  []
-  (map->PubSubComponent {}))
+  ([]
+   (create-component {}))
+  ([subscribers]
+   (map->PubSubComponent (merge default-subscribers subscribers))))

;;;   Constants, Data, & Utility Functions   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(def subscribers
  {tag/generic [:default]
   tag/subscribers-added [:default]})


  (log/debug "Started pub-sub component.")
  (let [dataflow (pubsub/create-dataflow-pubsub
                  (config/event-system-type this))
        world (pubsub/create-dataflow-pubsub
               (config/event-system-type this))
        component (assoc this :dataflow dataflow
                              :world world)]
    (log/info "Adding subscribers ...")
    (subscribe-all component (:subscribers this))
    component))

(defn stop
  [this]
  (log/info "Stopping pub-sub component ...")
  (when-let [pubsub-dataflow (:dataflow this)]
    (pubsub/delete pubsub-dataflow))
  (when-let [pubsub-world (:world this)]
    (pubsub/delete pubsub-world))
  (let [component (assoc this :dataflow nil
                              :world nil)]
    (log/debug "Stopped pub-sub component.")
    component))

