added delegation and Iterator pattern