merge upstream changes from master
consolidate upstream changes