implement request/response handling