use the abstract client