Major documentation re-write