     (let [{{doc-obj :obj} :doc} this
           {:keys [^DocPrintJob job attrs]} this
           attr-set (make-set attrs :request)]
-      (.. job (print @doc-obj attr-set))))
+      (.. job (print @doc-obj attr-set)))) ;; Still 
   (add-listener! [this listener-fn]
     (let [{:keys [^DocPrintJob job listener-fn]} this
           listener (listener-fn)]
       (doto job (.addPrintJobListener listener)))))
+
+;; TODO: Nobody wants to hand type this, create a convencience fn
+;; that takes arguments in order and retuns a JobSpec
 
 ;;  A JobSpec might look something like this:
 ;; {:doc {:source "/path/to/doc.pdf"

;;       (letfn [(add-doc [doc-map]
;;                 (assoc-in doc-map [:obj] (delay (make-doc doc-map))))
;;               (add-docs [spec]
;;                 (update-in spec [:docs] (fn [doc-list] (map add-doc  doc-list))))
;;               (add-jobs [spec]
;;                 (assoc-in spec [:jobs] (for [doc docs] (.. printer createPrintJob))))]
;;         (-> spec add-docs add-jobs map->MultiJobSpec)))))

  "Returns the printer with the specified name from PrintServiceLookup.
   With no arguments, returns the system default printer."
  {:since "0.0.1"}
  ([] (printer :default))
  ([name]
     (cond
      (= :default name) (PrintServiceLookup/lookupDefaultPrintService)
      (string? name) (let [pname-obj (PrinterName. name nil)
                       attrs  (make-set #{pname-obj} :attr)] 
                   (some (fn [^PrintService p]
                           (when (= name (.. p getName)) p))
