Complete rethink first round. Fixes will be needed.
Modified newer methods to be more clear. Tests not in sync at the moment.