Client: wrap with lock