all the error prone GetFirstFoo(), GetNextFoo() methods should be replaced by the iterator design pattern one day