Design changes and Refactor