added listener management and change tracking