MAJOR update, refactored majority of the project.