properly handling observer change event