#4 refactoring