   (let [done (atom [])]
     (->> states
          (sort-by (comp :order meta) order)
-         (map #(fun % (meta %) done))
-         doall)
+         (run! #(fun % (meta %) done)))
     @done))
 
 (defn- merge-lifecycles

    (start)))

(defn start-with [with]
  (doall
    (for [[from to] with]
      (substitute! from to)))
  (start))

(defn start-without [& states]


(defn stop [& states]
  (let [states (or states (find-all-states))
        _ (run! unsub states)     ;; unmark substitutions marked by "start-with"
        stopped (bring states down >)]
    (run! rollback! states)       ;; restore to origin from "start-with"
    {:stopped stopped}))

(defn stop-except [& states]
  (let [all (set (find-all-states))
        states (remove (set states) all)
        _ (run! unsub states)     ;; unmark substitutions marked by "start-with"
        stopped (bring states down >)]
    (run! rollback! states)       ;; restore to origin from "start-with"
    {:stopped stopped}))

(defn start-with-args [xs & states]
