optimise update method