Hi,

I'm looking through this code and it's painful especially with the names chosen for the interface,
and the implementations.  I'm going to start reworking it a bit so it can be better understood at
first glance.

Alex