preUpdate callback