This latest version is a lot more functional now.
(cherry picked from commit 9294dd2f) (cherry picked from commit 7f7b2dc3) (cherry picked from commit 85f3131d) (cherry picked from commit a5bde638) (cherry picked from commit dd769ab6)