adds pretty massive chunks of code... probably should keep commits smaller than this :)