refactored with yeoman