implemented selfupdate