receiver: refactor