Add Single Responsibility principle
Add Iterator Pattern