Oh god, so much collision detection...