backport change from trunk