better support for add/removeEventListener