Radically changed the API. Closing the API so that it cant be broken,
WIP DOES NOT COMPILE
refactoring is complete