Is there any problem I've missed that prevents us from spitting out plain XML and using transforms to convert it to XHTML? :) :: Reader-parser-[optional transformer]-writer Transformers take a DPS tree and spit out another DPS tree, right? Is the intent something along the lines of the following? :: Writer.write(Transformer.transform(Parser.parse(Reader())))