refactoring to use another design
refactoring to use another design