with some design, finish first iteration