A remove event should not be fired before the update is successful.
Also moves delete and action logic to a shared implementation