KVO and blocks done right