Tons of changes / refactors. Currently not working until implementation is complete