read preference refactor