fix after review, add cache to service layer