Improved NSError generation & handling