a possibly good multi stage way - overridable receiver function (but this is a sensible default with the new constructor unification)