thanks @MitchesD for help
(cherry picked from commit df21162fe44d2ff29c201a9004586f560789c38b)
(cherry picked from commit 3a4f54197c05ce4209c7e659acfd382896607265)
(cherry picked from commit f50df728201849ee7185d33c5a061c91e781c8de)
(cherry picked from commit 95bae7143f0f4bb7d5975f8a61daa3c533f48225)
(cherry picked from commit 5406f82044e7bd6ceb024a67f33c1674400cdc1f)