done with client thread