yield instead of block.call