add simple on and removeListener implementations