add support for removing listeners