Rewrote the abstract service layer, added a specialization