(cherry picked from commit 42a7aec0b51c4c9f0d2588972a3fddfd3bd2f981)
(cherry picked from commit 91c53e2e3f846f6c090be56a093c449cfaf94adc)
(cherry picked from commit 985d764f623e24402b1ba91562d2994b28d1aeec)