interim commit, laptop getting hot
- structurally almost there
- lots of neat refactoring has taken place