normalization should happen at top-level query time