mostly done, just UI fixups needed