    3. A basic PrintJobListener that prints any events that occur
    on the DocPrintJob."
   {:since "0.0.1"}
-  (fn [spec] (apply (some-fn #{:doc} #{:docs}) (keys spec))))
+  (fn [spec] (some spec [:doc :docs])))
 
 (defmethod make-job :doc [spec]
   (let [{:keys [^PrintService printer ^PrintJobListener listener doc attrs]} spec
         {doc-attrs :attrs} doc]
-    (if (and (valid-attrs? doc-attrs :doc)
+    (when (and (valid-attrs? doc-attrs :doc)
              (valid-attrs? attrs :job))
       (letfn [(add-doc [spec]
                 (assoc-in spec [:doc :obj] (delay (make-doc doc))))
               (add-job [spec]
                 (assoc-in spec [:job] (.. printer createPrintJob)))]
-        (-> spec add-doc add-job map->JobSpec)))))
+        (-> spec
+            (add-doc)
+            (add-job)
+            (map->JobSpec))))))
 
 (defmethod make-job :docs [spec]
   (let [{docs :docs} spec]
     (for [doc docs]
-      (-> spec (dissoc :docs) (assoc :doc doc) make-job))))
+      (-> spec
+          (dissoc :docs)
+          (assoc :doc doc)
+          (make-job)))))
 
 ;; Old method of encapsulating a 'MultiJobSpec', most
 ;; values in a JobSpec will be singleton instances

;;       (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)))))

     :request,
     :service"
  {:since "0.0.1"}
  [attrs t]
  (if (seq attrs)
    (let [mappings {:doc DocAttribute
                    :job PrintJobAttribute
                    :request PrintRequestAttribute
                    :service PrintServiceAttribute}
          is-attr (fn [attr] (instance? (t mappings) attr))]
      (every? is-attr attrs))))

(defn- make-doc
  "Returns a javax.print.Doc object for the print data in this
   job map. SimpleDoc will throw an IllegalArgumentException if
   the DocFlavor is not representative of the data pointed to
   by doc-source."
  {:since "0.0.1"}
  [doc-spec]
