implemented pay it forward pattern, so perform yields a block