way too much stuff for one commit, but eh