Major refactor, less code and easier to use.