A more correct parser