more efficent update