restructure the entirety of the API