Still a lot more to do but pushing WIP to not have it wasted if more commits come in from others. Also got rid of some global variables. (cherry picked from commit ff2d22d9)