refactor the recommender as well