         ;; another new term type; keep requesting until
         ;;  we know them all
         (swap! cli update :term-types conj (:opt pkt))
-        (send! cli {:telnet :term-type :opt [:send]}))
+        (telnet! cli {:telnet :term-type :opt [:send]}))
       ;; we've got 'em all (TODO preprocess for color?)
       (log "* Client term types: " (:term-types @cli)))
     ;; else, let the provided callback handle

    ;; TODO we could be more generic about this
    ;; (include a set of things we'll ":do" in
    ;; the server opts)
    (send! client {:telnet :do
                   :opt :term-type})))

;;
;; Server control

(defn telnet!
  "Send a telnet map (like thsoe received in :on-telnet)
  or a vector of raw bytes as a telnet instruction. Telnet
  maps can also be sent using (send!) for convenience;
  note, however, that send! appends an '\\r\\n' sequence
  to whatever is passed, so if you ONLY want to send a
  telnet sequence, this is the way to go."
  [cli telnet]
  (when-let [s (:stream @cli)]
    (cond
