working implementation.  need to fix serialization strategy for iterator impl