I don't think you need to create a new exception object for every message; rather, a class should be for a class of problems and the code could be a subclass of that problem (or a specific instance of that). However, let's leave the NLS aside for now so that we can get this going.