         spec (unifyc spec (get-in bolt path))
         immediate-parent (get-in bolt (butlast path))
         start-time (current-time)
-        cached (if cache
-                 (get-lex immediate-parent :comp cache spec)
-                 (do (log/warn (str "no cache: will go through entire lexicon to find candidate complements."))
-                     (reduce concat (vals lexicon))))
         complement-candidate-lexemes (if (not (= true
                                                  (get-in bolt (concat path [:phrasal]))))
-                                       (if cached cached (flatten (vals lexicon))))
+                                       (let [cached (if cache
+                                                      (lazy-seq (get-lex immediate-parent :comp cache spec))
+                                                      (do (log/warn (str "no cache: will go through entire lexicon to find candidate complements."))
+                                                          nil))]
+                                         (if cached cached (flatten (vals lexicon)))))
         complement-pre-check (fn [child parent path-to-child]
                                (let [child-in-bolt (get-in bolt path-to-child)
                                      result (not (fail?

                                                (get-in spec [:synsem :modified] :top)))))
                     (unifyc spec rule)
                     :fail))
                 (shuffle rules))))

(defn lightning-bolt [grammar lexicon spec depth index morph total-depth]
  "Returns a lazy-sequence of all possible trees given a spec, where

        debug (log/debug
               (if (not (empty? filtered-lexical-complements))
                 (str "add-complement: " (show-bolt bolt path morph) ":candidate first complement-lexemes:'"
                      (morph (first filtered-lexical-complements)) "'")))]
    (filter (fn [complement]
              (if (fail? complement)
                (do
