         ;; total-depth, on the other hand, is the depth all the way to the top of the entire
         ;; expression, which might involve several parent lightning bolts.
         parents
-        (let [parents (lazy-seq (shuffle (candidate-parents grammar spec)))]
+        (let [parents (lazy-seq (shufflefn (candidate-parents grammar spec)))]
           (log/trace (str "lightning-bolts: candidate-parents:" (string/join "," (map :rule parents))))
           parents)]
     ;; TODO: use (defn get-lexemes) rather than this code which duplicates (get-lexemes)'s functionality.

                         true)]
         (if (empty? comp-paths)
           (do
             (log/debug (str "complete tree: " ((:morph-ps model) bolt)))
             [bolt]) ;; done: we've added all the comps to the bolt, so just return the bolt as a singleton vector.
           ;; else, more comp-paths to go.
           (flatten

                                  (log/trace (str "trying parent: " (:rule parent) " with lexical head:"
                                                  ((:morph language-model) %)))
                                  (over/overh parent %))
                               (lazy-seq (shufflefn subset)))]
                   (if (and (not (empty? subset)) (empty? result)
                            (> (count subset)
                               50))
