Massive design + implementation update - see CHANGES