Finished up my redo implementation

Things are looking good, new API is really OOP friendly, might rebase on this branch in future.