manually re-merge from upstream/master