added support for change listeners