             [cljs.closure :as closure]
             [cljs.compiler :as comp]
             [cljs.env :as env]
-            [cljs.repl :as repl]))
+            [cljs.repl :as repl])
+  (:import (com.sun.nio.file SensitivityWatchEventModifier)
+           (java.nio.file Files
+                          FileSystem
+                          FileSystems
+                          FileVisitResult
+                          LinkOption
+                          Path
+                          SimpleFileVisitor
+                          StandardWatchEventKinds
+                          WatchEvent
+                          WatchEvent$Kind
+                          WatchEvent$Modifier)
+           (java.io IOException)
+           (java.util.concurrent Executors
+                                 ExecutorService
+                                 ThreadFactory
+                                 TimeUnit)))
+
+(defonce ^ExecutorService watch-exec nil)
 
 (defprotocol IRefresh
   (-initialize [this opts])

                           :load-nss load})))
  (swap! tracker assoc ::track/load nil ::track/unload nil)
  (println :ok))

(defn maybe-quoted->symbol [symbol-or-list]
  (if (list? symbol-or-list)

      ;; Once we're here, no checks are needed.
      (closure/build (apply build/inputs source-dirs)
                     repl-opts
                     compiler-env))
    (when (or (seq unload) (seq load))
      (prn :requesting-reload load)
      (-refresh refresher {:repl-env repl-env
