added iterator and strategy pattern