     (vec (map (fn [[k v]] (assoc v :id (name k))) builds))
     builds))
 
-(defn narrow-to-one-build* 
+(defn narrow-builds* 
+  "Filters builds to the chosen build-ids or if no build-ids specified returns the first
+   build with optimizations set to none."
+  [builds build-ids]
+  (let [builds (map-to-vec-builds builds)
+        ;; ensure string ids
+        builds (map #(update-in % [:id] name) builds)
+        build-ids (set build-ids)]
+    (vec
+     (keep identity
+           (if-not (empty? build-ids)
+             (filter #(get build-ids (:id %)) builds)
+             [(first (filter optimizations-none? builds))])))))
+
+;; we are only going to work on one build
+;; still need to narrow this to optimizations none
+(defn narrow-builds
   "Filters builds to the chosen build-id or if no build id specified returns the first
    build with optimizations set to none."
-  [ builds build-id]
-  (let [builds (map-to-vec-builds builds)]
-    (vector
-     (if build-id
-       (some #(and (= (:id %) build-id) %) builds)
-       (first (filter optimizations-none? builds))))))
-
-;; we are only going to work on one build
-;; still need to narrow this to optimizations none
-(defn narrow-to-one-build
-  "Filters builds to the chosen build-id or if no build id specified returns the first
-   build with optimizations set to none."
-  [project build-id]
-  (update-in project [:cljsbuild :builds] narrow-to-one-build* build-id))
+  [project build-ids]
+  (update-in project [:cljsbuild :builds] narrow-builds* build-ids))
 
 (defn check-for-valid-options
   "Check for various configuration anomalies."
-  [{:keys [builds]} {:keys [http-server-root] :as opts}]
-  (let [build (first builds)
-        opts? (and (not (nil? build)) (optimizations-none? build))
-        out-dir? (output-dir-in-resources-root? opts)]
-    (if (nil? build)
-      (list
-       (str "Figwheel: "
-            "No cljsbuild specified. You may have mistyped the build "
-            "id on the command line or failed to specify a build in "
-            "the :cljsbuild section of your project.clj. You need to have "
-            "at least one build with :optimizations set to :none."))
-      (map
-       #(str "Figwheel Config Error (in project.clj) - " %)
-       (filter identity
-               (list
-                (when-not opts?
-                  "you have build :optimizations set to something other than :none")
-                (when-not out-dir?
-                  (str
-                   (if (:output-dir build)
-                     "your build :output-dir is not in a resources directory."
-                     "you have not configured an :output-dir in your build")
-                   (str "\nIt should match this pattern: " (make-serve-from-display opts))))))))))
+  [{:keys [http-server-root] :as opts} build']
+  (let [build-options (:compiler build')
+        opts? (and (not (nil? build-options)) (optimizations-none? build'))
+        out-dir? (output-dir-in-resources-root? build-options opts)]
+    (map
+     #(str "Figwheel Config Error (in project.clj) - " %)
+     (filter identity
+             (list
+              (when-not opts?
+                "you have build :optimizations set to something other than :none")
+              (when-not out-dir?
+                (str
+                 (if (:output-dir build-options)
+                   "your build :output-dir is not in a resources directory."
+                   "you have not configured an :output-dir in your build")
+                 (str "\nIt should match this pattern: " (make-serve-from-display opts)))))))))
+
+(defn check-config [figwheel-options builds]
+  (if (empty? builds)
+    (list
+     (str "Figwheel: "
+          "No cljsbuild specified. You may have mistyped the build "
+          "id on the command line or failed to specify a build in "
+          "the :cljsbuild section of your project.clj. You need to have "
+          "at least one build with :optimizations set to :none."))
+    (mapcat (partial check-for-valid-options figwheel-options) builds)))
 
 (defn normalize-dir
   "If directory ends with '/' then truncate the trailing forward slash."

           (System/exit 1))))
     requires)))

;; All I can say is I'm sorry about this but, it seems to be the best
;; way for me to reuse cljsbuild.

;; this is really deviating from cljsbuild at this point.
;; need to dig in and probably rewrite this

;; need to get rid of crossovers soon

(defn run-compiler [project {:keys [crossover-path crossovers builds]} live-reload-options]
  (println "Compiling ClojureScript.")
  ; If crossover-path does not exist before eval-in-project is called,
  ; the files it contains won't be classloadable, for some reason.

    (println "\033[31mWARNING: lein-cljsbuild crossovers are deprecated, and will be removed in future versions.\n
See https://github.com/emezeske/lein-cljsbuild/blob/master/doc/CROSSOVERS.md for details.\033[0m")
    (fs/mkdirs crossover-path))
  (let [parsed-builds (map config/parse-notify-command builds)]
    (run-local-project project crossover-path parsed-builds
     '(require 'cljsbuild.crossover 'cljsbuild.util 'clj-stacktrace.repl 'figwheel-sidecar.auto-builder)
     `(do
