(cherry picked from commit ff6fb898ac11223e281cffac992246e3b6c31a97)
(cherry picked from commit ad8bc531cca4305798bf5371509f4feaa7b134c1)
(cherry picked from commit f1bbe0c2cacba75b96311ea0ffea8cd1222ed1ed)