Moving responsibility out of abstract
More abstract methods and renaming