      (if (not is-fail?)
        (list result)))))
 
-(defn overhc [parent head comp & [morph]]
-  (overc (overh parent head morph) comp))
+(defn overhc [parent head comp]
+  (overc (overh parent head) comp))
 
 ;; TODO: distinguish between when:
 ;; 1) called with only a child1 (no child2),

   (or (set? head)
       (vector? head))
   (do (log/trace "head is a set: converting to a seq.")
       (overh parent (lazy-seq head) morph))

   (seq? head)
   (let [head-children head]
     (log/trace (str "head is a seq - actual type is " (type head)))
     (filter (fn [result]
               (not (fail? result)))
             (over-each-head-child parent head-children morph)))

   true
   ;; TODO: 'true' here assumes that both parent and head are maps: make this assumption explicit,
   ;; and save 'true' for errors.
   (let [result (moreover-head parent head sem-impl morph)
         is-fail? (fail? result)
         label (if (get-in parent [:rule]) (get-in parent [:rule]) (:comment parent))]
     (if (not is-fail?)


(defn overh
  "add given head as the head child of the phrase: parent."
  [parent head]
  (when (and (map? parent)
             (map? head))
    (do
