improve recur; use it everywhere.