Yes, ditto. Thank you very much Nock! The idea of it being a contract finally caused the penny to drop and started me off on a whole new raft of new thoughts and ideas. One other thing to add to the discussion I have seen done, is that when an upgrade happens and the need to upgrade the back end, but maintain compatibility you can create a new interface to access it (Blah, Blah1, Blah2), and the underlying class can be altered to support both, while still permitting the use of the same name to the outside world... or something like that, I'm not explaining it very well.
Anyway, cool, thanks for posting.