much more precise parsing