Hmm, it seems like my object-orientated design skills have atrophied to the point where a simple program requires 10 classes and 5 level of abstractions.