merge upstream changes

merge upstream changes