sync with latest upstream changes