(cherry picked from commit 6ac38519b710e69a0c30eb0fe8fc5fa712168cb8)
(cherry picked from commit d07ec1990015f5d12b39da40ad0cb1ef0e798642)
(cherry picked from commit 6c8e116e8bbaecce2b77fd9e0db89f366b57f9b6)