update, add __exit__