Refactor to use @protocol and Delegate Design Pattern