replaced changeListener