It'd be good to clean away some of the design debt while we're touching this code.

I could try to beat the class structure/naming into shape if you don't have the time/energy to look at it..