merges from upstream