updated with a bunch of stuff