diff --git a/HaXml.cabal b/HaXml.cabal
--- a/HaXml.cabal
+++ b/HaXml.cabal
@@ -1,5 +1,5 @@
 name:		HaXml
-version:	1.20.1
+version:	1.20.2
 license:	LGPL
 license-file:	COPYRIGHT
 author:		Malcolm Wallace <Malcolm.Wallace@cs.york.ac.uk>
@@ -62,47 +62,54 @@
   else
     build-depends: base < 2 || >= 3, bytestring
   extensions: CPP, ExistentialQuantification
-  cpp-options: -DVERSION=1.20.1
+  cpp-options: -DMYVERSION="1.20.2"
   nhc98-options: -K10M
 
 Executable Canonicalise
   GHC-Options: -Wall
   Extensions:  CPP
   Hs-Source-Dirs: src/tools, src
+  cpp-options: -DMYVERSION="1.20.2"
   Main-Is: Canonicalise.hs
 
 Executable CanonicaliseLazy
   GHC-Options: -Wall
   Extensions:  CPP
   Hs-Source-Dirs: src/tools, src
+  cpp-options: -DMYVERSION="1.20.2"
   Main-Is: CanonicaliseLazy.hs
 
 Executable Xtract
   GHC-Options: -Wall
   Extensions:  CPP
   Hs-Source-Dirs: src/tools, src
+  cpp-options: -DMYVERSION="1.20.2"
   Main-Is: Xtract.hs
 
 Executable XtractLazy
   GHC-Options: -Wall
   Extensions:  CPP
   Hs-Source-Dirs: src/tools, src
+  cpp-options: -DMYVERSION="1.20.2"
   Main-Is: XtractLazy.hs
 
 Executable Validate
   GHC-Options: -Wall
   Extensions:  CPP
   Hs-Source-Dirs: src/tools, src
+  cpp-options: -DMYVERSION="1.20.2"
   Main-Is: Validate.hs
 
 Executable MkOneOf
   GHC-Options: -Wall
   Extensions:  CPP
   Hs-Source-Dirs: src/tools, src
+  cpp-options: -DMYVERSION="1.20.2"
   Main-Is: MkOneOf.hs
 
 Executable DtdToHaskell
   GHC-Options: -Wall
   Extensions:  CPP
   Hs-Source-Dirs: src/tools, src
+  cpp-options: -DMYVERSION="1.20.2"
   Main-Is: DtdToHaskell.hs
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 SOFTWARE = HaXml
-VERSION  = 1.20.1
+VERSION  = 1.20.2
 
 #CPP      = cpp -traditional
 CPP     = cpphs --text --noline	# useful e.g. on MacOS X
@@ -90,7 +90,7 @@
 		do mkdir -p docs/HaXml/src/$$dir; \
 		done
 	for file in $(SRCS); \
-		do $(CPP) -D__NHC__=120 $$file >$$file.uncpp.hs; \
+		do $(CPP) -D__NHC__=120 -DMYVERSION="\"$(VERSION)\"" $$file >$$file.uncpp.hs; \
 		   HsColour -anchor -html $$file >docs/HaXml/`dirname $$file`/`basename $$file .hs`.html; \
 		done
 	haddock --html --title=HaXml --odir=docs/HaXml \
diff --git a/configure b/configure
--- a/configure
+++ b/configure
@@ -2,7 +2,7 @@
 #       configure -- prepare to compile/install the HaXml package
 #       author:   Malcolm.Wallace@cs.york.ac.uk, August 2002
 
-VERSION="1.20.1"
+VERSION="1.20.2"
 
 if [ -f obj/prefix ]
 then INSTALLDIR=`cat obj/prefix`
diff --git a/docs/HaXml/src/Text/XML/HaXml.html b/docs/HaXml/src/Text/XML/HaXml.html
--- a/docs/HaXml/src/Text/XML/HaXml.html
+++ b/docs/HaXml/src/Text/XML/HaXml.html
@@ -1,40 +1,41 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="line-1"></a><font color=Magenta><em>#</em></font>define dummy	<font color=Blue>-- just to ensure cpp gets called on this file</font>
-<a name="line-2"></a><font color=Blue>-- | This is just a convenient way of bunching the XML combinators</font>
-<a name="line-3"></a><font color=Blue>--   together with some other things you are likely to want at the</font>
-<a name="line-4"></a><font color=Blue>--   same time.</font>
-<a name="line-5"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml
-<a name="line-6"></a>  <font color=Cyan>(</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
-<a name="line-7"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators
-<a name="line-8"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse
-<a name="line-9"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty
-<a name="line-10"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Generate
-<a name="line-11"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Parse
-<a name="line-12"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Validate
-<a name="line-13"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Wrappers
-<a name="line-14"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim
-<a name="line-15"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Escape
-<a name="line-16"></a>  <font color=Cyan>,</font> render
-<a name="line-17"></a>  <font color=Cyan>,</font> version
-<a name="line-18"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="line-19"></a>
-<a name="line-20"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
-<a name="line-21"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators
-<a name="line-22"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse       <font color=Cyan>(</font>xmlParse<font color=Cyan>,</font>dtdParse<font color=Cyan>)</font>
-<a name="line-23"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty      <font color=Cyan>(</font>element<font color=Cyan>)</font>
-<a name="line-24"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Generate
-<a name="line-25"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Parse  <font color=Cyan>(</font>htmlParse<font color=Cyan>)</font>
-<a name="line-26"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Validate    <font color=Cyan>(</font>validate<font color=Cyan>)</font>
-<a name="line-27"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Wrappers    <font color=Cyan>(</font>fix2Args<font color=Cyan>,</font>processXmlWith<font color=Cyan>)</font>
-<a name="line-28"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim
-<a name="line-29"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Escape
-<a name="line-30"></a>
-<a name="line-31"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ  <font color=Cyan>(</font>render<font color=Cyan>)</font>
-<a name="line-32"></a>
-<a name="line-33"></a><a name="version"></a><font color=Blue>-- | The version of the library.</font>
-<a name="line-34"></a><font color=Blue>version</font> <font color=Red>::</font> String
-<a name="line-35"></a><font color=Blue>version</font>  <font color=Red>=</font> <font color=Magenta>"VERSION"</font>
-<a name="line-36"></a>		<font color=Blue>-- expect cpp to fill in value</font>
+<pre><a name="line-1"></a><font color=Blue>{-# LANGUAGE CPP #-}</font>
+<a name="line-2"></a><font color=Magenta><em>#define dummy	-- just to ensure cpp gets called on this file</em></font>
+<a name="line-3"></a><font color=Blue>-- | This is just a convenient way of bunching the XML combinators</font>
+<a name="line-4"></a><font color=Blue>--   together with some other things you are likely to want at the</font>
+<a name="line-5"></a><font color=Blue>--   same time.</font>
+<a name="line-6"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml
+<a name="line-7"></a>  <font color=Cyan>(</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
+<a name="line-8"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators
+<a name="line-9"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse
+<a name="line-10"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty
+<a name="line-11"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Generate
+<a name="line-12"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Parse
+<a name="line-13"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Validate
+<a name="line-14"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Wrappers
+<a name="line-15"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim
+<a name="line-16"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Escape
+<a name="line-17"></a>  <font color=Cyan>,</font> render
+<a name="line-18"></a>  <font color=Cyan>,</font> version
+<a name="line-19"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-20"></a>
+<a name="line-21"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
+<a name="line-22"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators
+<a name="line-23"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse       <font color=Cyan>(</font>xmlParse<font color=Cyan>,</font>dtdParse<font color=Cyan>)</font>
+<a name="line-24"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty      <font color=Cyan>(</font>element<font color=Cyan>)</font>
+<a name="line-25"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Generate
+<a name="line-26"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Parse  <font color=Cyan>(</font>htmlParse<font color=Cyan>)</font>
+<a name="line-27"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Validate    <font color=Cyan>(</font>validate<font color=Cyan>)</font>
+<a name="line-28"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Wrappers    <font color=Cyan>(</font>fix2Args<font color=Cyan>,</font>processXmlWith<font color=Cyan>)</font>
+<a name="line-29"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim
+<a name="line-30"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Escape
+<a name="line-31"></a>
+<a name="line-32"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ  <font color=Cyan>(</font>render<font color=Cyan>)</font>
+<a name="line-33"></a>
+<a name="line-34"></a><a name="version"></a><font color=Blue>-- | The version of the library.</font>
+<a name="line-35"></a><font color=Blue>version</font> <font color=Red>::</font> String
+<a name="line-36"></a><font color=Blue>version</font>  <font color=Red>=</font> MYVERSION
+<a name="line-37"></a>		<font color=Blue>-- expect cpp to fill in value</font>
 </pre>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Wrappers.html b/docs/HaXml/src/Text/XML/HaXml/Wrappers.html
--- a/docs/HaXml/src/Text/XML/HaXml/Wrappers.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Wrappers.html
@@ -1,76 +1,85 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="line-1"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Wrappers
-<a name="line-2"></a>  <font color=Cyan>(</font> fix2Args
-<a name="line-3"></a>  <font color=Cyan>,</font> processXmlWith
-<a name="line-4"></a>  <font color=Cyan>,</font> onContent
-<a name="line-5"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="line-6"></a>
-<a name="line-7"></a><font color=Blue>-- imports required for processXmlWith and fix2Args</font>
-<a name="line-8"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>filter<font color=Cyan>)</font>
-<a name="line-9"></a><font color=Green><u>import</u></font> System
-<a name="line-10"></a><font color=Green><u>import</u></font> IO
-<a name="line-11"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>isSuffixOf<font color=Cyan>)</font>
-<a name="line-12"></a>
-<a name="line-13"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types       <font color=Cyan>(</font>Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font><font color=Cyan>,</font>Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="line-14"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators <font color=Cyan>(</font>CFilter<font color=Cyan>)</font>
-<a name="line-15"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn        <font color=Cyan>(</font>Posn<font color=Cyan>,</font>posInNewCxt<font color=Cyan>)</font>
-<a name="line-16"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse       <font color=Cyan>(</font>xmlParse<font color=Cyan>)</font>
-<a name="line-17"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Parse  <font color=Cyan>(</font>htmlParse<font color=Cyan>)</font>
-<a name="line-18"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty <font color=Green><u>as</u></font> PP<font color=Cyan>(</font>document<font color=Cyan>)</font>
-<a name="line-19"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ  <font color=Cyan>(</font>render<font color=Cyan>)</font>
-<a name="line-20"></a>
-<a name="line-21"></a>
-<a name="line-22"></a><a name="fix2Args"></a><font color=Blue>-- | This useful auxiliary checks the commandline arguments for two</font>
-<a name="line-23"></a><font color=Blue>--   filenames, the input and output file respectively.  If either</font>
-<a name="line-24"></a><font color=Blue>--   is missing, it is replaced by '-', which can be interpreted by the</font>
-<a name="line-25"></a><font color=Blue>--   caller as stdin and\/or stdout.</font>
-<a name="line-26"></a><font color=Blue>fix2Args</font> <font color=Red>::</font> IO <font color=Cyan>(</font>String<font color=Cyan>,</font>String<font color=Cyan>)</font>
-<a name="line-27"></a><font color=Blue>fix2Args</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="line-28"></a>  args <font color=Red>&lt;-</font> getArgs
-<a name="line-29"></a>  <font color=Green><u>case</u></font> length args <font color=Green><u>of</u></font>
-<a name="line-30"></a>    <font color=Magenta>0</font> <font color=Red>-&gt;</font> return <font color=Cyan>(</font><font color=Magenta>"-"</font><font color=Cyan>,</font>     <font color=Magenta>"-"</font><font color=Cyan>)</font>
-<a name="line-31"></a>    <font color=Magenta>1</font> <font color=Red>-&gt;</font> return <font color=Cyan>(</font>args<font color=Cyan>!!</font><font color=Magenta>0</font><font color=Cyan>,</font> <font color=Magenta>"-"</font><font color=Cyan>)</font>
-<a name="line-32"></a>    <font color=Magenta>2</font> <font color=Red>-&gt;</font> return <font color=Cyan>(</font>args<font color=Cyan>!!</font><font color=Magenta>0</font><font color=Cyan>,</font> args<font color=Cyan>!!</font><font color=Magenta>1</font><font color=Cyan>)</font>
-<a name="line-33"></a>    <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Green><u>do</u></font> prog <font color=Red>&lt;-</font> getProgName
-<a name="line-34"></a>            putStrLn <font color=Cyan>(</font><font color=Magenta>"Usage: "</font><font color=Cyan>++</font>prog<font color=Cyan>++</font><font color=Magenta>" [infile] [outfile]"</font><font color=Cyan>)</font>
-<a name="line-35"></a>            exitFailure
-<a name="line-36"></a>
-<a name="line-37"></a>
-<a name="line-38"></a><a name="processXmlWith"></a><font color=Blue>-- | The wrapper @processXmlWith@ returns an IO () computation</font>
-<a name="line-39"></a><font color=Blue>--   that collects the filenames (or stdin\/stdout) to use when</font>
-<a name="line-40"></a><font color=Blue>--   reading\/writing XML documents.  Its CFilter argument</font>
-<a name="line-41"></a><font color=Blue>--   is applied to transform the XML document from the input and</font>
-<a name="line-42"></a><font color=Blue>--   write it to the output.  No DTD is attached to the output.</font>
-<a name="line-43"></a><font color=Blue>--</font>
-<a name="line-44"></a><font color=Blue>--   If the input filename ends with .html or .htm, it is parsed using</font>
-<a name="line-45"></a><font color=Blue>--   the error-correcting HTML parser rather than the strict XML parser.</font>
-<a name="line-46"></a><font color=Blue>processXmlWith</font> <font color=Red>::</font> CFilter Posn <font color=Red>-&gt;</font> IO ()
-<a name="line-47"></a><font color=Blue>processXmlWith</font> f <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="line-48"></a>  <font color=Cyan>(</font>inf<font color=Cyan>,</font>outf<font color=Cyan>)</font> <font color=Red>&lt;-</font> fix2Args
-<a name="line-49"></a>  input      <font color=Red>&lt;-</font> <font color=Green><u>if</u></font> inf<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> getContents <font color=Green><u>else</u></font> readFile inf
-<a name="line-50"></a>  o          <font color=Red>&lt;-</font> <font color=Green><u>if</u></font> outf<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout <font color=Green><u>else</u></font> openFile outf WriteMode
-<a name="line-51"></a>  parse      <font color=Red>&lt;-</font> <font color=Green><u>if</u></font> <font color=Magenta>".html"</font> <font color=Cyan>`isSuffixOf`</font> inf <font color=Cyan>||</font> <font color=Magenta>".htm"</font> <font color=Cyan>`isSuffixOf`</font> inf
-<a name="line-52"></a>                <font color=Green><u>then</u></font> return <font color=Cyan>(</font>htmlParse inf<font color=Cyan>)</font>
-<a name="line-53"></a>                <font color=Green><u>else</u></font> return <font color=Cyan>(</font>xmlParse inf<font color=Cyan>)</font>
-<a name="line-54"></a>  <font color=Cyan>(</font> hPutStrLn o <font color=Cyan>.</font> render <font color=Cyan>.</font> PP<font color=Cyan>.</font>document <font color=Cyan>.</font> onContent inf f <font color=Cyan>.</font> parse <font color=Cyan>)</font> input
-<a name="line-55"></a>  hFlush o
-<a name="line-56"></a>
-<a name="line-57"></a>  <font color=Green><u>where</u></font>
-<a name="line-58"></a>    onContent <font color=Red>::</font> FilePath <font color=Red>-&gt;</font> <font color=Cyan>(</font>CFilter Posn<font color=Cyan>)</font> <font color=Red>-&gt;</font> Document Posn <font color=Red>-&gt;</font> Document Posn
-<a name="line-59"></a>    onContent file filter <font color=Cyan>(</font>Document p s e m<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="line-60"></a>        <font color=Green><u>case</u></font> filter <font color=Cyan>(</font>CElem e <font color=Cyan>(</font>posInNewCxt file Nothing<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Green><u>of</u></font>
-<a name="line-61"></a>            <font color=Red>[</font>CElem e' <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> Document p s e' m
-<a name="line-62"></a>            []           <font color=Red>-&gt;</font> error <font color=Magenta>"produced no output"</font>
-<a name="line-63"></a>            <font color=Green><u>_</u></font>            <font color=Red>-&gt;</font> error <font color=Magenta>"produced more than one output"</font>
-<a name="line-64"></a>
-<a name="line-65"></a><a name="onContent"></a><font color=Blue>-- | The wrapper @onContent@ simply applies a given content filter to a</font>
-<a name="line-66"></a><font color=Blue>--   document.  Ambiguous or empty results raise an error exception.</font>
-<a name="line-67"></a><font color=Blue>onContent</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> Document i <font color=Red>-&gt;</font> Document i
-<a name="line-68"></a><font color=Blue>onContent</font> filter <font color=Cyan>(</font>Document p s e m<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="line-69"></a>    <font color=Green><u>case</u></font> filter <font color=Cyan>(</font>CElem e undefined<font color=Cyan>)</font> <font color=Green><u>of</u></font>
-<a name="line-70"></a>      <font color=Red>[</font>CElem e' <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> Document p s e' m
-<a name="line-71"></a>      []           <font color=Red>-&gt;</font> error <font color=Magenta>"onContent: produced no output"</font>
-<a name="line-72"></a>      <font color=Green><u>_</u></font>            <font color=Red>-&gt;</font> error <font color=Magenta>"onContent: produced more than one output"</font>
+<pre><a name="line-1"></a><font color=Blue>{-# LANGUAGE CPP #-}</font>
+<a name="line-2"></a><font color=Magenta><em>#define dummy		-- just to ensure that cpp gets called on this file</em></font>
+<a name="line-3"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Wrappers
+<a name="line-4"></a>  <font color=Cyan>(</font> fix2Args
+<a name="line-5"></a>  <font color=Cyan>,</font> processXmlWith
+<a name="line-6"></a>  <font color=Cyan>,</font> onContent
+<a name="line-7"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-8"></a>
+<a name="line-9"></a><font color=Blue>-- imports required for processXmlWith and fix2Args</font>
+<a name="line-10"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>filter<font color=Cyan>)</font>
+<a name="line-11"></a><font color=Green><u>import</u></font> System
+<a name="line-12"></a><font color=Green><u>import</u></font> IO
+<a name="line-13"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>isSuffixOf<font color=Cyan>)</font>
+<a name="line-14"></a><font color=Green><u>import</u></font> Control<font color=Cyan>.</font>Monad <font color=Cyan>(</font>when<font color=Cyan>)</font>
+<a name="line-15"></a>
+<a name="line-16"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types       <font color=Cyan>(</font>Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font><font color=Cyan>,</font>Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-17"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators <font color=Cyan>(</font>CFilter<font color=Cyan>)</font>
+<a name="line-18"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn        <font color=Cyan>(</font>Posn<font color=Cyan>,</font>posInNewCxt<font color=Cyan>)</font>
+<a name="line-19"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse       <font color=Cyan>(</font>xmlParse<font color=Cyan>)</font>
+<a name="line-20"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Parse  <font color=Cyan>(</font>htmlParse<font color=Cyan>)</font>
+<a name="line-21"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty <font color=Green><u>as</u></font> PP<font color=Cyan>(</font>document<font color=Cyan>)</font>
+<a name="line-22"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ  <font color=Cyan>(</font>render<font color=Cyan>)</font>
+<a name="line-23"></a>
+<a name="line-24"></a>
+<a name="line-25"></a><a name="fix2Args"></a><font color=Blue>-- | This useful auxiliary checks the commandline arguments for two</font>
+<a name="line-26"></a><font color=Blue>--   filenames, the input and output file respectively.  If either</font>
+<a name="line-27"></a><font color=Blue>--   is missing, it is replaced by '-', which can be interpreted by the</font>
+<a name="line-28"></a><font color=Blue>--   caller as stdin and\/or stdout.</font>
+<a name="line-29"></a><font color=Blue>fix2Args</font> <font color=Red>::</font> IO <font color=Cyan>(</font>String<font color=Cyan>,</font>String<font color=Cyan>)</font>
+<a name="line-30"></a><font color=Blue>fix2Args</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-31"></a>  args <font color=Red>&lt;-</font> getArgs
+<a name="line-32"></a>  when <font color=Cyan>(</font><font color=Magenta>"--version"</font> <font color=Cyan>`elem`</font> args<font color=Cyan>)</font> <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-33"></a>      putStrLn <font color=Cyan>$</font> <font color=Magenta>"part of HaXml-"</font><font color=Cyan>++</font>MYVERSION
+<a name="line-34"></a>      exitWith ExitSuccess
+<a name="line-35"></a>  when <font color=Cyan>(</font><font color=Magenta>"--help"</font> <font color=Cyan>`elem`</font> args<font color=Cyan>)</font> <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-36"></a>      putStrLn <font color=Cyan>$</font> <font color=Magenta>"See http://haskell.org/HaXml"</font>
+<a name="line-37"></a>      exitWith ExitSuccess
+<a name="line-38"></a>  <font color=Green><u>case</u></font> length args <font color=Green><u>of</u></font>
+<a name="line-39"></a>    <font color=Magenta>0</font> <font color=Red>-&gt;</font> return <font color=Cyan>(</font><font color=Magenta>"-"</font><font color=Cyan>,</font>     <font color=Magenta>"-"</font><font color=Cyan>)</font>
+<a name="line-40"></a>    <font color=Magenta>1</font> <font color=Red>-&gt;</font> return <font color=Cyan>(</font>args<font color=Cyan>!!</font><font color=Magenta>0</font><font color=Cyan>,</font> <font color=Magenta>"-"</font><font color=Cyan>)</font>
+<a name="line-41"></a>    <font color=Magenta>2</font> <font color=Red>-&gt;</font> return <font color=Cyan>(</font>args<font color=Cyan>!!</font><font color=Magenta>0</font><font color=Cyan>,</font> args<font color=Cyan>!!</font><font color=Magenta>1</font><font color=Cyan>)</font>
+<a name="line-42"></a>    <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Green><u>do</u></font> prog <font color=Red>&lt;-</font> getProgName
+<a name="line-43"></a>            putStrLn <font color=Cyan>(</font><font color=Magenta>"Usage: "</font><font color=Cyan>++</font>prog<font color=Cyan>++</font><font color=Magenta>" [infile] [outfile]"</font><font color=Cyan>)</font>
+<a name="line-44"></a>            exitFailure
+<a name="line-45"></a>
+<a name="line-46"></a>
+<a name="line-47"></a><a name="processXmlWith"></a><font color=Blue>-- | The wrapper @processXmlWith@ returns an IO () computation</font>
+<a name="line-48"></a><font color=Blue>--   that collects the filenames (or stdin\/stdout) to use when</font>
+<a name="line-49"></a><font color=Blue>--   reading\/writing XML documents.  Its CFilter argument</font>
+<a name="line-50"></a><font color=Blue>--   is applied to transform the XML document from the input and</font>
+<a name="line-51"></a><font color=Blue>--   write it to the output.  No DTD is attached to the output.</font>
+<a name="line-52"></a><font color=Blue>--</font>
+<a name="line-53"></a><font color=Blue>--   If the input filename ends with .html or .htm, it is parsed using</font>
+<a name="line-54"></a><font color=Blue>--   the error-correcting HTML parser rather than the strict XML parser.</font>
+<a name="line-55"></a><font color=Blue>processXmlWith</font> <font color=Red>::</font> CFilter Posn <font color=Red>-&gt;</font> IO ()
+<a name="line-56"></a><font color=Blue>processXmlWith</font> f <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-57"></a>  <font color=Cyan>(</font>inf<font color=Cyan>,</font>outf<font color=Cyan>)</font> <font color=Red>&lt;-</font> fix2Args
+<a name="line-58"></a>  input      <font color=Red>&lt;-</font> <font color=Green><u>if</u></font> inf<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> getContents <font color=Green><u>else</u></font> readFile inf
+<a name="line-59"></a>  o          <font color=Red>&lt;-</font> <font color=Green><u>if</u></font> outf<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout <font color=Green><u>else</u></font> openFile outf WriteMode
+<a name="line-60"></a>  parse      <font color=Red>&lt;-</font> <font color=Green><u>if</u></font> <font color=Magenta>".html"</font> <font color=Cyan>`isSuffixOf`</font> inf <font color=Cyan>||</font> <font color=Magenta>".htm"</font> <font color=Cyan>`isSuffixOf`</font> inf
+<a name="line-61"></a>                <font color=Green><u>then</u></font> return <font color=Cyan>(</font>htmlParse inf<font color=Cyan>)</font>
+<a name="line-62"></a>                <font color=Green><u>else</u></font> return <font color=Cyan>(</font>xmlParse inf<font color=Cyan>)</font>
+<a name="line-63"></a>  <font color=Cyan>(</font> hPutStrLn o <font color=Cyan>.</font> render <font color=Cyan>.</font> PP<font color=Cyan>.</font>document <font color=Cyan>.</font> onContent inf f <font color=Cyan>.</font> parse <font color=Cyan>)</font> input
+<a name="line-64"></a>  hFlush o
+<a name="line-65"></a>
+<a name="line-66"></a>  <font color=Green><u>where</u></font>
+<a name="line-67"></a>    onContent <font color=Red>::</font> FilePath <font color=Red>-&gt;</font> <font color=Cyan>(</font>CFilter Posn<font color=Cyan>)</font> <font color=Red>-&gt;</font> Document Posn <font color=Red>-&gt;</font> Document Posn
+<a name="line-68"></a>    onContent file filter <font color=Cyan>(</font>Document p s e m<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-69"></a>        <font color=Green><u>case</u></font> filter <font color=Cyan>(</font>CElem e <font color=Cyan>(</font>posInNewCxt file Nothing<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Green><u>of</u></font>
+<a name="line-70"></a>            <font color=Red>[</font>CElem e' <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> Document p s e' m
+<a name="line-71"></a>            []           <font color=Red>-&gt;</font> error <font color=Magenta>"produced no output"</font>
+<a name="line-72"></a>            <font color=Green><u>_</u></font>            <font color=Red>-&gt;</font> error <font color=Magenta>"produced more than one output"</font>
+<a name="line-73"></a>
+<a name="line-74"></a><a name="onContent"></a><font color=Blue>-- | The wrapper @onContent@ simply applies a given content filter to a</font>
+<a name="line-75"></a><font color=Blue>--   document.  Ambiguous or empty results raise an error exception.</font>
+<a name="line-76"></a><font color=Blue>onContent</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> Document i <font color=Red>-&gt;</font> Document i
+<a name="line-77"></a><font color=Blue>onContent</font> filter <font color=Cyan>(</font>Document p s e m<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-78"></a>    <font color=Green><u>case</u></font> filter <font color=Cyan>(</font>CElem e undefined<font color=Cyan>)</font> <font color=Green><u>of</u></font>
+<a name="line-79"></a>      <font color=Red>[</font>CElem e' <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> Document p s e' m
+<a name="line-80"></a>      []           <font color=Red>-&gt;</font> error <font color=Magenta>"onContent: produced no output"</font>
+<a name="line-81"></a>      <font color=Green><u>_</u></font>            <font color=Red>-&gt;</font> error <font color=Magenta>"onContent: produced more than one output"</font>
 </pre>
 </html>
diff --git a/docs/changelog.html b/docs/changelog.html
--- a/docs/changelog.html
+++ b/docs/changelog.html
@@ -13,12 +13,6 @@
 </center>
 <hr>
 
-<h3>Changes in 1.20.1</h3>
-<p>
-<ul>
-<li> Fixes a stack-overflow in code generated by DtdToHaskell.
-</ul>
-
 <h3>Changes in 1.20</h3>
 <p>
 <ul>
@@ -26,6 +20,8 @@
 <li> Fixes a runtime-crash bug in Xtract.
 <li> Fiddles with the pretty-printing to make it more correct on mixed
      text and references (e.g. character escapes).
+<li> 1.20.1 fixes a stack-overflow in code generated by DtdToHaskell.
+<li> 1.20.2 adds a --version and --help argument to all executables.
 </ul>
 
 <h3>Changes in 1.19</h3>
diff --git a/docs/index.html b/docs/index.html
--- a/docs/index.html
+++ b/docs/index.html
@@ -131,11 +131,11 @@
 <center><h3><a name="download">Downloads</a></h3></center>
 <p>
 <b>Latest version:</b><br>
-HaXml-1.20.1, release date 2010.01.13<br>
+HaXml-1.20.2, release date 2010.01.14<br>
 From <a href="http://hackage.haskell.org/package/HaXml">Hackage</a><br>
 By HTTP:
-<a href="HaXml-1.20.1.tar.gz">.tar.gz</a>,
-<a href="HaXml-1.20.1.zip">.zip</a>.
+<a href="HaXml-1.20.2.tar.gz">.tar.gz</a>,
+<a href="HaXml-1.20.2.zip">.zip</a>.
 <br>
 By FTP: 
 <a href="ftp://ftp.cs.york.ac.uk/pub/haskell/HaXml/">
@@ -158,10 +158,14 @@
 Then, for more recent compilers,
 use the standard Cabal method of installation:
 <pre>
-    cabal install HaXml-1.20.1
+    cabal install HaXml
 </pre>
 or
 <pre>
+    cabal install HaXml-1.20.2
+</pre>
+or
+<pre>
     runhaskell Setup.hs configure [--prefix=...] [--buildwith=...]
     runhaskell Setup.hs build
     runhaskell Setup.hs install
@@ -192,6 +196,7 @@
 <center><h3><a name="news">Recent news</a></h3></center>
 
 <p>
+Version 1.20.2 adds --version and --help arguments to all executables.<br>
 Version 1.20.1 fixes a small bug in DtdToHaskell.<br>
 Version 1.20 is the new stable version.<br>
 
diff --git a/src/Makefile b/src/Makefile
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,5 +1,5 @@
 SOFTWARE = HaXml
-VERSION = 1.20.1
+VERSION = 1.20.2
 
 LIBSRCS = \
 	Text/XML/HaXml.hs Text/XML/HaXml/Combinators.hs Text/XML/HaXml/Lex.hs \
diff --git a/src/Text/XML/HaXml.hs b/src/Text/XML/HaXml.hs
--- a/src/Text/XML/HaXml.hs
+++ b/src/Text/XML/HaXml.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #define dummy	-- just to ensure cpp gets called on this file
 -- | This is just a convenient way of bunching the XML combinators
 --   together with some other things you are likely to want at the
@@ -32,5 +33,5 @@
 
 -- | The version of the library.
 version :: String
-version  = "VERSION"
+version  = MYVERSION
 		-- expect cpp to fill in value
diff --git a/src/Text/XML/HaXml/Wrappers.hs b/src/Text/XML/HaXml/Wrappers.hs
--- a/src/Text/XML/HaXml/Wrappers.hs
+++ b/src/Text/XML/HaXml/Wrappers.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+#define dummy		-- just to ensure that cpp gets called on this file
 module Text.XML.HaXml.Wrappers
   ( fix2Args
   , processXmlWith
@@ -9,6 +11,7 @@
 import System
 import IO
 import List (isSuffixOf)
+import Control.Monad (when)
 
 import Text.XML.HaXml.Types       (Document(..),Content(..))
 import Text.XML.HaXml.Combinators (CFilter)
@@ -26,6 +29,12 @@
 fix2Args :: IO (String,String)
 fix2Args = do
   args <- getArgs
+  when ("--version" `elem` args) $ do
+      putStrLn $ "part of HaXml-"++MYVERSION
+      exitWith ExitSuccess
+  when ("--help" `elem` args) $ do
+      putStrLn $ "See http://haskell.org/HaXml"
+      exitWith ExitSuccess
   case length args of
     0 -> return ("-",     "-")
     1 -> return (args!!0, "-")
diff --git a/src/tools/DtdToHaskell.hs b/src/tools/DtdToHaskell.hs
--- a/src/tools/DtdToHaskell.hs
+++ b/src/tools/DtdToHaskell.hs
@@ -9,8 +9,10 @@
 import System
 import IO
 import List (nub,takeWhile,dropWhile)
+import Control.Monad
 
 --import Text.XML.HaXml.Wrappers   (fix2Args)
+import Text.XML.HaXml            (version)
 import Text.XML.HaXml.Types      (DocTypeDecl(..))
 import Text.XML.HaXml.Parse      (dtdParse)
 import Text.XML.HaXml.DtdToHaskell.TypeDef  (TypeDef,ppTypeDef,mangle)
@@ -22,6 +24,12 @@
 fix2Args :: IO (String,String)
 fix2Args = do
   args <- getArgs
+  when ("--version" `elem` args) $ do
+      putStrLn $ "part of HaXml-"++version
+      exitWith ExitSuccess
+  when ("--help" `elem` args) $ do
+      putStrLn $ "See http://haskell.org/HaXml"
+      exitWith ExitSuccess
   case length args of
     0 -> return ("-",     "-")
     1 -> return (args!!0, "-")
diff --git a/src/tools/MkOneOf.hs b/src/tools/MkOneOf.hs
--- a/src/tools/MkOneOf.hs
+++ b/src/tools/MkOneOf.hs
@@ -1,13 +1,21 @@
 module Main where
 
 import Prelude hiding (max)
-import System (getArgs)
+import System (getArgs,exitWith,ExitCode(..))
 import Char   (isDigit)
 import IO     (hFlush,stdout)
+import Control.Monad  (when)
+import Text.XML.HaXml (version)
 
 main  :: IO ()
 main = do
     args <- getArgs
+    when ("--version" `elem` args) $ do
+        putStrLn $ "part of HaXml-"++version
+        exitWith ExitSuccess
+    when ("--help" `elem` args) $ do
+        putStrLn $ "See http://haskell.org/HaXml"
+        exitWith ExitSuccess
     case length args of
       1 -> do n <- saferead (head args)
               putStrLn ("module Text.XML.HaXml."++constructor 1 n++" where\n")
diff --git a/src/tools/Xtract.hs b/src/tools/Xtract.hs
--- a/src/tools/Xtract.hs
+++ b/src/tools/Xtract.hs
@@ -6,7 +6,9 @@
 import IO
 import Char         (toLower)
 import List         (isSuffixOf)
+import Control.Monad(when)
 
+import Text.XML.HaXml               (version)
 import Text.XML.HaXml.Types
 import Text.XML.HaXml.Posn          (posInNewCxt)
 import Text.XML.HaXml.Parse         (xmlParse)
@@ -22,13 +24,18 @@
 escape = xmlEscapeContent stdXmlEscaper
 
 main :: IO ()
-main =
-  getArgs >>= \args->
-  if length args < 1 then
-    putStrLn "Usage: Xtract [-n] <pattern> [xmlfile ...]" >>
-    exitWith (ExitFailure 1)
-  else
-    let (pattern,files,esc) =
+main = do
+  args <- getArgs
+  when ("--version" `elem` args) $ do
+      putStrLn $ "part of HaXml-"++version
+      exitWith ExitSuccess
+  when ("--help" `elem` args) $ do
+      putStrLn $ "See http://haskell.org/HaXml"
+      exitWith ExitSuccess
+  when (length args < 1) $ do
+      putStrLn "Usage: Xtract [-n] <pattern> [xmlfile ...]"
+      exitWith (ExitFailure 1)
+  let (pattern,files,esc) =
           case args of ("-n":pat:files) -> (pat,files, (:[]))
                        (pat:"-n":files) -> (pat,files, (:[]))
                        (pat:files)      -> (pat,files, escape.(:[]))
@@ -38,11 +45,10 @@
 --                           return ((if isHTML x
 --                                    then htmlParse x else xmlParse x) c))
 --                  files
-    in
 --  findcontents >>= \cs->
 --  ( hPutStrLn stdout . render . vcat
 --  . map (vcat . map content . selection . docContent)) cs
-    mapM_ (\x-> do c <- (if x=="-" then getContents else readFile x)
+  mapM_ (\x->   do c <- (if x=="-" then getContents else readFile x)
                    ( if isHTML x then
                           hPutStrLn stdout . render . htmlprint
                           . xtract (map toLower) pattern
diff --git a/src/tools/XtractLazy.hs b/src/tools/XtractLazy.hs
--- a/src/tools/XtractLazy.hs
+++ b/src/tools/XtractLazy.hs
@@ -6,7 +6,9 @@
 import IO
 import Char         (toLower)
 import List         (isSuffixOf)
+import Control.Monad(when)
 
+import Text.XML.HaXml               (version)
 import Text.XML.HaXml.Types
 import Text.XML.HaXml.Posn          (posInNewCxt,Posn)
 import Text.XML.HaXml.ParseLazy     (xmlParse)
@@ -21,13 +23,20 @@
 escape = xmlEscapeContent stdXmlEscaper
 
 main :: IO ()
-main =
-  getArgs >>= \args->
-  if length args < 1 then
-    putStrLn "Usage: Xtract [-n] <pattern> [xmlfile ...]" >>
-    exitWith (ExitFailure 1)
-  else
-    let (pattern,files,esc) =
+main = do
+  args <- getArgs
+  when ("--version" `elem` args) $ do
+      putStrLn $ "part of HaXml-"++version
+      exitWith ExitSuccess
+  when ("--help" `elem` args) $ do
+      putStrLn $ "See http://haskell.org/HaXml"
+      exitWith ExitSuccess
+
+  when (length args < 1) $ do
+      putStrLn "Usage: Xtract [-n] <pattern> [xmlfile ...]"
+      exitWith (ExitFailure 1)
+
+  let (pattern,files,esc) =
           case args of ("-n":pat:files) -> (pat,files, (:[]))
                        (pat:"-n":files) -> (pat,files, (:[]))
                        (pat:files)      -> (pat,files, escape.(:[]))
@@ -37,11 +46,10 @@
 --                           return ((if isHTML x
 --                                    then htmlParse x else xmlParse x) c))
 --                  files
-    in
 --  findcontents >>= \cs->
 --  ( hPutStrLn stdout . render . vcat
 --  . map (vcat . map content . selection . getElem)) cs
-    mapM_ (\x-> do c <- (if x=="-" then getContents else readFile x)
+  mapM_ (\x->   do c <- (if x=="-" then getContents else readFile x)
                    ( if isHTML x then
                           hPutStrLn stdout . render . htmlprint
                           . xtract (map toLower) pattern
