Interim commit (not quite done yet).  Needs some touching up.