Apparently, I rewrote the whole class

Oops.  Well, I think it is more maintainable now, and I got to use all
those fun C# features :-P