This commit also includes the follow-on commit 827a84778a4e3b8f165806dfd2966f0951a5e575. (cherry-picked from f96a2df38d889f29314c57f4d94227b2e419a11f) (cherry-picked from d4492bdd9edec60c236aff85de50b963097e5a7f) (cherry-picked from 7b8f08f59e5c8906930ccc67b967b7cfcbd41768) (cherry picked from ec00431eaaa25eff5bb5e0cafb52de685187a159)