Big refactor, API and usage is safer and cleaner overall