refactor recommender