support empty tags as distinct from non-existent; use new GetTag to signal existence; split out determineMethods; add tests