Manually cherry-picked 31e78c82880b38c31794ac51593849bf8f31890e because ...

...the files are too different.