(cherry picked from commit 079827d)
(cherry picked from commit 5985115)
(cherry picked from commit 2b6d991)
(cherry picked from commit e12e095)