This is the first steps to having a completely object-oriented receiver.  I've split much of the objects up, fully tested.  This is an intermediary diff however, so, some things may be broken.