               result (:result result-map)
               args (:args result-map)]
           (cond
-            (instance? Throwable result) (failure property result so-far size args)
+            (instance? Throwable result) (failure property (:function result-map) result so-far size args)
             result (do
                      (ct/report-trial property so-far num-tests)
                      (recur (inc so-far) rest-size-seq))
-            :default (failure property result so-far size args)))))))
+            :default (failure property (:function result-map) result so-far size args)))))))
 
 (defmacro forall [bindings expr]
   `(let [~@bindings]

           depth 0
           can-set-new-best? true]
      ; TODO why does this cause failures? (or (empty? nodes) (>= total-nodes-visited 10000))
      (if (empty? nodes) 
        (smallest-shrink total-nodes-visited depth f)
        (let [[head & tail] nodes]
          (if (safe-apply-props prop head)

      [non-nil-seed (gen/random non-nil-seed)])))

(defn- complete
  [property num-trials seed]
  (ct/report-trial property num-trials num-trials)
  {:result true :num-tests num-trials :seed seed})

(defn quick-check
