Thanks for your observation! Effectively, introducing an InputStreamReader in ProcessDefinition.parseXmlInputStream() prevents the parser from selecting the adequate encoding based on the xml declaration. However, the solution you propose involves two parses and is not really the best approach. The bottomline of the problem is that the JpdlXmlReader uses a Reader as its input source. Changing it to InputStream does not help either, as we have a method ProcessDefinition.parseXmlString() and there is no way to create an InputStream from a String. I think that replacing the Reader in JpdlXmlReader with a SAX InputSource covers both cases. I'll work this out and get back to you when I come up with something.