A huge work in progress, don't use the commits until I tag them as usable.