(cherry picked from commit 538d1e0b6cc997e701a6c7cc22b6550ddf21cd42)
(cherry picked from commit 7a64eb51988973cb972f49b687ddcdd9b57f1bac)
(cherry picked from commit 61218ae71111acff6ba9697314c91963ece5b95f)