add listener function