I'm going to restructure into a kinda API, will branch first