 (defn conjugate [word]
   (cond
     (and
-     (= (get-in word '(:infl)) :future)
-     (map? (get-in word '(:future))))
-    (irregular-future word)
+     (= (get-in word [:infl]) :future)
+     (map? (get-in word [:future])))
+    (or (irregular word (get-in word [:future]))
+        (regular-future word))
     
     (= (get-in word [:infl]) :future)
     (regular-future word)
     
     (= (get-in word [:infl]) :conditional)
     (regular-conditional word)
-    
+
     (and
-     (= (get-in word '(:infl)) :imperfect)
-     (map? (get-in word '(:imperfect))))
-    (irregular-imperfect word)
-    
+     (= (get-in word [:infl]) :imperfect)
+     (map? (get-in word [:imperfect])))
+    (or (irregular word (get-in word [:imperfect]))
+        (regular-imperfect word))
+
     (= (get-in word [:infl]) :imperfect)
     (regular-imperfect word)
     

    (irregular-passato? word)
    (irregular-passato word)
    
    (irregular-passato? word)
    (irregular-passato word)
    
    (= :past (get-in word '(:infl)))
    (regular-passato word)
    
    (and
     (= (get-in word '(:infl)) :present)
     (map? (get-in word '(:present)))
     (not (nil? (irregular-present word))))
    (irregular-present word)
    
    (= (get-in word '(:infl)) :present)
    (regular-present word)
    
    (irregular-gerund? word)

                  :agr {:number :plur
                        :person :3rd}}})}])

(defn irregular [word exception-map]
  (let [person (get-in word [:agr :person])
        number (get-in word [:agr :number])]
    (cond
      (and (= person :1st) (= number :sing)
           (get-in exception-map [:1sing]))
