Move public methods to abstract class
Closes #2, closes #3, closes #4; Styleing
Merge pull request #5 from jalet/feature/issue-2,3,4

Feature/issue 2,3,4