refactoring
3th iteration