defer the Done() call