Re-wrote, most of it works, some of it's untested, as I finished writing
it while I was rebuilding my local Satellite.