improve update mechanism