implements the remainder of the API