Refactored the abstract service