Revert "Revert 623d1c1..53b3283"

This reverts commit da6c2b76a1f46f3d142b3827336bdb711b778ecc.
Revert "Revert 623d1c1..53b3283"
and functions update
This reverts commit da6c2b76a1f46f3d142b3827336bdb711b778ecc.