split into two receiver functions