improved:add self update