addListener function