wrap much more of the API