better error reporting, efficiency/correctness tradeoff