turns receive to a better api for chaining, the old receive is turned into a helper function