Large update

Just look through the commits.