implement more client protocol