merge with upstream changes