(cherry picked from commit 52755b38a96fd59d90da4929c5d4a3ee4798477f)
(cherry picked from commit 5494756a6609d3698e259f2ab896b519eabf46ee)
(cherry picked from commit 1b6c9b2e2939a853e59843d5b9f321652bb38da8)