(cherry picked from commit 6849a8836c1120b4a11cd2511126271b1e815cfe)
(cherry picked from commit 77acea0b187ec7f29658ca420dfde14aa2b4135a)
(cherry picked from commit 41a09289cda3137f96c69c69c924af34f0e64865)