refactoring, much better shape