added for of loop support