even more refactor before unification