added low level send and receive abstraction