merged from upstream master