use yield instead of block.call, yield is more performant and we don't need block.call for in our method