client-side updates