refactor receiver