This mainly moves datamembers around and tries to avoid caching of results of calculations when the calculations are cheap.