merged with upstream