    (select-one session model key record-or-key-value {}))
 
   ([session ^Model model key record-or-key-value opts]
-   (d/chain (select session model key record-or-key-value opts)
-            first)))
+   (m/with-monad dm/either-deferred-monad
+     (m/mlet [records (select session model key record-or-key-value opts)]
+             (m/return (first records))))))

                               record-or-key-value
                               opts)

       (if-let [lookup-table (if-lookup-key-table model key)]

         (select-from-lookup-table session
                                   model

            t))
        (:secondary-tables model)))

(defn if-unique-key-table
  [^Model model key]
  (some (fn [t]
          (when (= (:key t) key)
            t))
        (:unique-key-tables model)))

(defn if-lookup-key-table
  [^Model model key]
  (some (fn [t]
          (when (= (:key t) key)
            t))
        (:lookup-key-tables model)))

(defn select-from-full-table
  "one fetch - straight from a table"
