client implementations