Lots of code resturctuing and some big API changes to make things a lot cleaner.