                                              complement-candidate-lexemes)
         debug (log/debug
                (if (not (empty? filtered-lexical-complements))
-                 (str "add-complement: " (show-bolt bolt path morph) ":candidate first complement-lexemes:'"
+                 (str "add-complement: candidate first complement-lexemes:'"
                       (morph (first filtered-lexical-complements)) "'")))]
     (filter (fn [complement]
               (if (fail? complement)
                 (do
-                  (log/trace (str "add-complement(depth=" depth ",total-depth=" total-depth
+                  (log/debug (str "add-complement(depth=" depth ",total-depth=" total-depth
                                   ",path=" path ",bolt=(" (show-bolt bolt path morph) ") FAILED:"
-                                  "'" (morph complement) "'"))
+                                  "'" (morph-with-recovery morph complement) "'"))
                   
                   false)
                 (do
-                  (log/trace (str "add-complement(depth=" depth ",total-depth=" total-depth
+                  (log/debug (str "add-complement(depth=" depth ",total-depth=" total-depth
                                   ",path=" path ",bolt=(" (show-bolt bolt path morph) ")=>"
-                                  "'" (morph complement) "'"))
+                                  "'" (morph-with-recovery morph complement) "'"))
                   true)))
             (mapfn (fn [complement]
                     (unify (copy bolt)

                               lexicon
                               spec 0 index morph total-depth)
               ;; TODO: allow more than a fixed maximum depth of generation (here, 4 levels from top of tree).
               (add-complements-to-bolts [:head :head :head :comp] )
               (add-complements-to-bolts [:head :head :comp])
               (add-complements-to-bolts [:head :comp])
               (add-complements-to-bolts [:comp])))]

          (if (lexemes-before-phrases total-depth)
            (concat lexical phrasal)
            (concat phrasal lexical)))))))

(defn morph-with-recovery [morph-fn input]
  (if (nil? input)
    (exception (str "don't call morph-with-recovery with input=nil.")))
  (let [result (morph-fn input)
        result (if (or (nil? result)
                       (= "" result))
                 (get-in input [:english :english] "")
                 (str "r1: " result))
        result (if (or (nil? result)
                       (= "" result))
                 (get-in input [:english] "")
                 (str "r2: " result))
        result (if (or (nil? result)
                       (= "" result))
                 (get-in input [:rule] "")
                 (str "r3: " result))
        result (if (or (nil? result)
                       (= "" result))
                 (exception
                  (str "r5: " input "/" (nil? input)))
                 result)]
    result))

(defn add-complement [bolt path spec grammar lexicon cache morph depth total-depth]
  (log/debug (str "add-complement: " (show-bolt bolt path morph)))
