Pushed to upstream

cc/ @willnewbury @shuyangzhou