          ;; TODO: This seems like a pretty important detail
          [:chsk/uidport-close _] (log/error "Remote port closed: need to clean up its resources")
          [:chsk/ws-ping _] (ping this ev-msg)
+         [:cljs/load-ns _] (request-ns-load! this ?data ?reply-fn)
          [:frereth/blank-slate _] (initiate-auth! this ev-msg)
-         [:frereth/load-ns _] (request-ns-load! this ev-msg)
          [:frereth/pong _] (forward this ev-msg)
          [:frereth/response _] (log/info "Response from renderer:\n"
                                          (util/pretty ?data))


(s/defn request-ns-load!
  [this :- WebSockHandler
   {:keys [module-name macro? path world] :as data}]
  ;; Q: Does it make sense to spawn the thread here? Or in the caller?
  ;; A: It depends on whether these handlers should always run in their
  ;; own thread, of course.
  ;; For that matter, it might make the most sense to just pass a
  ;; parameter to rpc to decide whether to spawn a new thread or not
  (async/thread
    (let [mgr (-> this :frereth-server :connection-manager)
          response
              (manage
           (con-man/rpc-sync world
                        :frereth/load-ns
                        (select-keys [module-name macro? path]))
           ;; For now, just insert handlers directly into the code
           ;; to be compiled
           ;; TODO: Come up w/ a better strategy
           ;; If nothing else, this sort of thing seems like it would be
           ;; more appropriate in the client.
           ;; Except that, as far as the client is concerned, there's
           ;; no real hint about what we're doing.
           ;; So maybe this should be a wrapper in there around rpc
           ;; Get it working first, then worry about getting it to work
           ;; correctly.
           (on :timeout []
               {:script '(raise :timeout)}))]
      (reply this
             data
             :frereth/loaded-ns
             response))))

(s/defn initialize-connection!
  [this :- WebSockHandler


(s/defn event-handler
  [this :- WebSockHandler
   {:keys [id ?data event ?reply-fn] :as ev-msg}]
  (when-not (= event [:chsk/ws-ping])
    ;; The ws-ping happens every 20 seconds.
    ;; And every 2...I may be setting up multiple event loops on the client
