(cherry picked from commit 978b647e)
(cherry picked from commit 7cf88132)
(cherry picked from commit ba751ce6)
(cherry picked from commit 57f2abfe)
(cherry picked from commit 817395e6)