lots of new stuff, I think I messed up the last commit.