back to first implementation to fix event leak