           :handlers Handlers
           :should-stop Object ;; promise that when delivered means should stop
           :websocket-client Object
-          :websocket-connection Object}))
+          :websocket-connection Object ;; atom of a promise that will be a connection or true
+          }))
 
 ;; connection state checkers
 (s/defn ^:always-validate state :- (s/pred ws-state?)

        client (merge params {:identity (make-identity cert type)
                              :state (atom :connecting :validator ws-state?)
                              :websocket-client (make-websocket-client params)
                              :websocket-connection (atom (future "To be a connection later"))
                              :handlers handlers
                              :should-stop (promise)})
        {:keys [websocket-connection]} client]

  "Close the connection"
  [client :- Client]
  (let [{:keys [should-stop websocket-client websocket-connection]} client]
    ;; NOTE:  This true value is also the sentinel for make-connection
    (deliver should-stop true)
    (when (contains? #{:opening :open} (state client))
      (log/debug "Closing")
      (reset! (:state client) :closing)
      (.stop websocket-client))
    (if (and (realized? @websocket-connection) (not (= true @@websocket-connection)))
      (ws/close @@websocket-connection)))
  true)
