bunch of stuff. too much to explain, but it'll break on github