#7 refactoring final