Major refactoring to make things way easier to use