validation first, no intermediate representation needed