+ even more refactoring