standalone pure client function