client and bufferedclient implement the same interface