Large update with lots of improvements.