                   key
                   record-or-key-values
                   opts)]
-       (return
-        (s/stream->seq sm-s))))))
+       (s/reduce conj [] sm-s)))))
+
+(defn select-many-instances-buffered
+  "select-many records, unless the record-or-key-values were already
+  retrives from the db, in which case return them directly (but still
+  select any which were not already retrieved from the db)"
+  ([^ModelSession session ^Entity entity record-or-key-values]
+   (select-many-instances-buffered session entity (t/uber-key entity) record-or-key-values {}))
+
+  ([^ModelSession session ^Entity entity key record-or-key-values]
+   (select-many-instances-buffered session entity key record-or-key-values {}))
+
+  ([^ModelSession session ^Entity entity key record-or-key-values opts]
+   (with-context deferred-context
+     (->> record-or-key-values
+          (s/map (fn [record-or-key-value]
+                   (select-one-instance session entity key record-or-key-value opts)))
+          (s/realize-each)
+          return))))
 
 (defn select-many-instances
   "select-many records, unless the record-or-key-values were already

  ([^ModelSession session ^Entity entity key record-or-key-value opts]
   (with-context deferred-context
     (mlet [select-s (select-buffered session entity key record-or-key-value opts)]
       (return
        (s/stream->seq select-s))))))

(defn select-one
  "select a single record, using an index table if necessary"

                   key
                   record-or-key-values
                   opts)]
       (s/reduce conj [] smb-s)))))
