better update mechanism