split up new higher order unification for managability