uses row() properly to report errors