Further refactoring
Better refactoring
Keeping abstract methods together