it bothers when signature doc overlaps actual code
- tidy up - shuffle code around - use same abstractions for all usecases