iteration 2

without redundance
merged with iteration 2