Deserialize message fields better

I also snuck in some changes to the way error reporting is done.