implement self update