Major update, lots of work.