Refactoring the code to hide implementations; Resolve Chris's comments