unified receiver function