I'm going to break this into several seperate pushes, just so there is at least some progress pushed up to the repo.