don't need afterUpdate