converging on a sensible design, not quite there
better class name