diff --git a/README.md b/README.md
index 20abcf2..b0305b9 100644
--- a/README.md
+++ b/README.md
@@ -35,18 +35,17 @@
 Debian/Ubuntu:
 ```
 sudo apt-get install make git autoconf automake libtool bison
-sudo apt-get install texinfo texlive texlive-extra-utils
-sudo apt-get install help2man gtk-doc-tools valgrind abigail-tools
+sudo apt-get install texinfo help2man gtk-doc-tools valgrind abigail-tools
 ```
 
-Debian <= stretch:
+PDF manual - Debian <= stretch:
 ```
-sudo apt-get install texlive-generic-recommended
+sudo apt-get install texlive-generic-recommended texlive texlive-extra-utils
 ```
 
-Debian >= buster:
+PDF manual - Debian >= buster:
 ```
-sudo apt-get install texlive-plain-generic
+sudo apt-get install texlive-plain-generic texlive texlive-extra-utils
 ```
 
 The next step is to run autoreconf, ./configure, etc:
diff --git a/configure.ac b/configure.ac
index 5389656..4df249c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -30,7 +30,7 @@
 
 AC_SUBST([MAJOR_VERSION], [`echo $PACKAGE_VERSION|cut -d'.' -f1`])
 AC_SUBST([MINOR_VERSION], [`echo $PACKAGE_VERSION|cut -d'.' -f2`])
-AC_SUBST([PATCH_VERSION], [`echo $PACKAGE_VERSION|cut -d'.' -f3`])
+AC_SUBST([PATCH_VERSION], [`echo $PACKAGE_VERSION.0|cut -d. -f3|cut -d- -f1`])
 AC_SUBST([NUMBER_VERSION], [`printf '0x%02x%02x%02x' $MAJOR_VERSION $MINOR_VERSION $PATCH_VERSION`])
 
 AC_MSG_NOTICE([$PACKAGE_NAME $PACKAGE_VERSION $PACKAGE_TARNAME $MAJOR_VERSION.$MINOR_VERSION.$PATCH_VERSION $NUMBER_VERSION $LT_CURRENT:$LT_REVISION:$LT_AGE $DLL_VERSION])
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 2032420..a0171a5 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -20,34 +20,45 @@
 SUBDIRS = reference
 endif
 
-EXTRA_DIST = gdoc TODO libtasn1.html libtasn1.ps libtasn1.pdf stamp_docs \
-	COPYING COPYING.LESSER
+EXTRA_DIST = gdoc TODO stamp_docs COPYING COPYING.LESSER
 
 info_TEXINFOS = libtasn1.texi
-libtasn1_TEXINFOS = fdl-1.3.texi texinfo.css $(gdoc_TEXINFOS)
+libtasn1_TEXINFOS = fdl-1.3.texi $(gdoc_TEXINFOS)
+libtasn1_TEXINFOS += asn1Coding-help.texi asn1Decoding-help.texi asn1Parser-help.texi
 
-AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) \
-	--no-split --number-sections --css-include=texinfo.css
+AM_MAKEINFOHTMLFLAGS = --no-split $(AM_MAKEINFOFLAGS)
 
 dist_man_MANS = $(gdoc_MANS) asn1Parser.1 asn1Coding.1 asn1Decoding.1
 
 HELP2MAN_OPTS = --info-page libtasn1
 
-asn1Parser.1: $(top_srcdir)/src/asn1Parser.c $(top_srcdir)/configure.ac
-	$(HELP2MAN) $(HELP2MAN_OPTS) \
-		--name="ASN.1 syntax tree generator for libtasn1" \
-		--output=$@ $(top_builddir)/src/asn1Parser$(EXEEXT)
-
-asn1Coding.1: $(top_srcdir)/src/asn1Coding.c $(top_srcdir)/configure.ac
-	$(HELP2MAN) $(HELP2MAN_OPTS) \
+asn1Coding.1: $(top_srcdir)/src/asn1Coding.c $(top_srcdir)/.version
+	$(AM_V_GEN)$(HELP2MAN) $(HELP2MAN_OPTS) \
 		--name="ASN.1 DER encoder" \
 		--output=$@ $(top_builddir)/src/asn1Coding$(EXEEXT)
 
-asn1Decoding.1: $(top_srcdir)/src/asn1Decoding.c $(top_srcdir)/configure.ac
-	$(HELP2MAN) $(HELP2MAN_OPTS) \
+asn1Decoding.1: $(top_srcdir)/src/asn1Decoding.c $(top_srcdir)/.version
+	$(AM_V_GEN)$(HELP2MAN) $(HELP2MAN_OPTS) \
 		--name="ASN.1 DER decoder" \
 		--output=$@ $(top_builddir)/src/asn1Decoding$(EXEEXT)
 
+asn1Parser.1: $(top_srcdir)/src/asn1Parser.c $(top_srcdir)/.version
+	$(AM_V_GEN)$(HELP2MAN) $(HELP2MAN_OPTS) \
+		--name="ASN.1 syntax tree generator for libtasn1" \
+		--output=$@ $(top_builddir)/src/asn1Parser$(EXEEXT)
+
+asn1Coding-help.texi: $(top_srcdir)/src/asn1Coding.c
+	$(AM_V_GEN)$(top_builddir)/src/asn1Coding$(EXEEXT) --help > tmp-$@ && \
+		mv tmp-$@ asn1Coding-help.texi
+
+asn1Decoding-help.texi: $(top_srcdir)/src/asn1Decoding.c
+	$(AM_V_GEN)$(top_builddir)/src/asn1Decoding$(EXEEXT) --help > tmp-$@ && \
+		mv tmp-$@ asn1Decoding-help.texi
+
+asn1Parser-help.texi: $(top_srcdir)/src/asn1Parser.c
+	$(AM_V_GEN)$(top_builddir)/src/asn1Parser$(EXEEXT) --help > tmp-$@ && \
+		mv tmp-$@ asn1Parser-help.texi
+
 gdoc_MANS =
 gdoc_MANS += man/asn1_get_length_der.3
 gdoc_MANS += man/asn1_get_tag_der.3
@@ -172,7 +183,7 @@
 clean-local:
 	-rm -f stamp_docs
 
-stamp_docs:
+stamp_docs: $(top_srcdir)/.version
 	$(mkdir_p) man texi; \
 	for i in `$(srcdir)/gdoc -listfunc $(GDOC_SRC)`; do \
 		echo -n "Creating documentation for $$i... " && \
diff --git a/doc/gdoc b/doc/gdoc
index e3db762..d109399 100755
--- a/doc/gdoc
+++ b/doc/gdoc
@@ -1,8 +1,8 @@
-eval '(exit $?0)' && eval 'exec perl "$0" ${1+"$@"}'
-  & eval 'exec perl "$0" $argv:q'
+eval '(exit $?0)' && eval 'exec perl -S "$0" ${1+"$@"}'
+    & eval 'exec perl -S "$0" $argv:q'
     if 0;
 
-## Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Simon Josefsson
+## Copyright (c) 2002-2021 Simon Josefsson
 ##                    added -texinfo, -listfunc, -pkg-name
 ##                    man page revamp
 ##                    various improvements
@@ -104,14 +104,14 @@
 #  * my_function - does my stuff
 #  * @my_arg: its mine damnit
 #  *
-#  * Does my stuff explained. 
+#  * Does my stuff explained.
 #  */
 #
 #  or, could also use:
 # /**
 #  * my_function - does my stuff
 #  * @my_arg: its mine damnit
-#  * Description: Does my stuff explained. 
+#  * Description: Does my stuff explained.
 #  */
 # etc.
 #
@@ -303,7 +303,7 @@
 #  parameters => %parameter descriptions
 #  sectionlist => @list of sections
 #  sections => %descriont descriptions
-#  
+#
 
 sub just_highlight {
     my $contents = join "\n", @_;
@@ -1062,7 +1062,7 @@
 
 		$state = 0;
 	    }
-    
+
 	}
     }
 
diff --git a/doc/libtasn1.texi b/doc/libtasn1.texi
index 2879d28..c6dbfa4 100644
--- a/doc/libtasn1.texi
+++ b/doc/libtasn1.texi
@@ -313,16 +313,7 @@
 generates a
 file with an array to use with libtasn1 functions.
 
-@verbatim
-Usage:  asn1Parser [options] file
-
-Options:
- -h : shows the help message.
- -v : shows version information and exit.
- -c : checks the syntax only.
- -o file : output file.
- -n name : array name.
-@end verbatim
+@verbatiminclude asn1Parser-help.texi
 
 @node Invoking asn1Coding
 @section Invoking asn1Coding
@@ -349,16 +340,7 @@
 
 The output file is a binary file with the DER encoding.
 
-@verbatim
-Usage:  asn1Coding [options] file1 file2
- file1 : file with ASN1 definitions.
- file2 : file with assignments.
-Options:
- -h : shows the help message.
- -v : shows version information and exit.
- -c : checks the syntax only.
- -o file : output file.
-@end verbatim
+@verbatiminclude asn1Coding-help.texi
 
 For example, consider an ASN.1 definitions file as follows:
 
@@ -423,16 +405,7 @@
 ASN.1
 definitions and a binary file with a DER encoding.
 
-@verbatim
-Usage:  asn1Decoding [options] file1 file2 type
- file1 : file with ASN1 definitions.
- file2 : binary file with a DER encoding.
- type : ASN1 definition name.
-Options:
- -h : shows the help message.
- -v : shows version information and exit.
- -o file : output file.
-@end verbatim
+@verbatiminclude asn1Decoding-help.texi
 
 For example, after generating the @file{assign.out} file from the
 example section of the @command{asn1Coding} command above, the
diff --git a/tests/reproducers.c b/tests/reproducers.c
index daac910..cac6296 100644
--- a/tests/reproducers.c
+++ b/tests/reproducers.c
@@ -34,8 +34,8 @@
  * The following translates into a single node with all pointers
  * (right,left,down) set to NULL. */
 const asn1_static_node endless_asn1_tab[] = {
-  { "TEST_TREE", 536875024, NULL },
-  { NULL, 0, NULL }
+  {"TEST_TREE", 536875024, NULL},
+  {NULL, 0, NULL}
 };
 
 /* produces memory leak (fixed by f16d1ff9):
@@ -46,10 +46,10 @@
  *    by 0x10923B: main (single_node.c:67)
  */
 const asn1_static_node tab[] = {
-{ "a", CONST_DOWN, "" },
-{ "b", 0, "" },
-{ "c", 0, "" },
-{ NULL, 0, NULL }
+  {"a", CONST_DOWN, ""},
+  {"b", 0, ""},
+  {"c", 0, ""},
+  {NULL, 0, NULL}
 };
 
 int
@@ -58,6 +58,62 @@
   int result, verbose = 0;
   asn1_node definitions = NULL;
   char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+  char *out = errorDescription;
+  int i;
+
+  printf ("Header version %s library version %s\n",
+	  ASN1_VERSION, asn1_check_version (NULL));
+
+  if (!asn1_check_version (ASN1_VERSION))
+    {
+      printf ("asn1_check_version failure\n");
+      exit (EXIT_FAILURE);
+    }
+
+  if (!asn1_check_version ("4.17.0"))
+    {
+      printf ("asn1_check_version(4.17.0) failure\n");
+      exit (EXIT_FAILURE);
+    }
+
+  if (!asn1_check_version ("4.17"))
+    {
+      printf ("asn1_check_version(4.17) failure\n");
+      exit (EXIT_FAILURE);
+    }
+
+  if (strcmp (ASN1_VERSION, asn1_check_version (NULL)) != 0)
+    {
+      printf ("header version mismatch library version\n");
+      exit (EXIT_FAILURE);
+    }
+
+  i = ASN1_VERSION_MAJOR * 256 * 256 +
+    ASN1_VERSION_MINOR * 256 + ASN1_VERSION_PATCH;
+
+  snprintf (out, ASN1_MAX_ERROR_DESCRIPTION_SIZE - 1, "%d.%d.%d",
+	    ASN1_VERSION_MAJOR, ASN1_VERSION_MINOR, ASN1_VERSION_PATCH);
+
+  printf ("Header version %s number %x derived %x\n", out,
+	  (unsigned) ASN1_VERSION_NUMBER, (unsigned) i);
+
+  if (ASN1_VERSION_NUMBER != i)
+    {
+      printf ("header version number mismatch\n");
+      exit (EXIT_FAILURE);
+    }
+
+  if (!asn1_check_version (out))
+    {
+      printf ("asn1_check_version(%s) failure\n", out);
+      exit (EXIT_FAILURE);
+    }
+
+  if (strncmp (ASN1_VERSION, out, strlen (out)) != 0)
+    {
+      printf ("header version numbers mismatch library version\n");
+      exit (EXIT_FAILURE);
+    }
 
   if (argc > 1)
     verbose = 1;
