use tap instead of returning