These do similar jobs but with largely disjoint code. Will want to evolve them separately going forward.