remove the layering, in favor of a "buffered connection" abstraction.
this makes the layering more obvious