Perhaps the most OO-oriented program I have written.