(cherry picked from commit d3157ca45c1f88edd040d721c1e944b9d2c090aa)
(cherry picked from commit 4991f54a8d84a9a8df89a99dbfc09391195578f8)
(cherry picked from commit 453a982e6382cff06ea27abba225440b07068f50)