           (recur (rest stop) new-app-db))
         app-db))))
 
-(defn apply-start-or-wake-controllers [action app-db reporter controllers commands-chan get-running start-or-wake]
+(defn apply-start-or-wake-controllers
+  [action reporter-action app-db reporter controllers commands-chan get-running start-or-wake]
   (loop [start-or-wake start-or-wake
          app-db app-db]
       (if-let [s (first start-or-wake)]

                                :running (partial get-running topic))
              new-app-db (-> (action controller params app-db)
                             (assoc-in [:internal :running-controllers topic] controller))]
          (reporter :app :out :controller [topic :start-or-wake] params :info)
          (recur (rest start-or-wake) new-app-db))
        app-db)))

(def apply-start-controllers (partial apply-start-or-wake-controllers controller/start))
(def apply-wake-controllers (partial apply-start-or-wake-controllers controller/wake))

(defn call-handler-on-started-controllers [app-db-atom reporter start]
  (doseq [[topic _] start]

    (if controller
      (send-command-to reporter controller command-name command-args)
      (throw (ex-info "Trying to send command to a controller that is not running" {:controller controller-name :command command-name :args command-args})))))

(defn report-running-controllers [app-db-atom]
  (let [running-controllers (get-in @app-db-atom [:internal :running-controllers])]
    (reduce (fn [acc [k v]] (assoc acc k (:params v))) {} running-controllers)))

(defn route-change-execution-plan [route-params running-controllers controllers]
  (let [plan {:stop          {}
