Refactor

Updating this as it's been lying dormant for a while. Working on adding in all the methods that were missed.