use yield block instead of manually propagating events