reimplement Sub using Iter