tbh, i should really split this up into different methods.

feel free to commit changes directly to the branch :)