From 9b9d7a8f305d6511343b440622df2a6c8dab9b15 Mon Sep 17 00:00:00 2001
From: Fotis Xenakis <foxen@windowslive.com>
Date: Tue, 9 Apr 2019 17:27:33 +0300
Subject: [PATCH 1/7] Fixed very minor typos in testing code

---
 src/test/java/org/umlgraph/test/BasicTest.java  | 2 +-
 src/test/java/org/umlgraph/test/UmlDocTest.java | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/test/java/org/umlgraph/test/BasicTest.java b/src/test/java/org/umlgraph/test/BasicTest.java
index 28f1cadf..1dceb13f 100644
--- a/src/test/java/org/umlgraph/test/BasicTest.java
+++ b/src/test/java/org/umlgraph/test/BasicTest.java
@@ -98,7 +98,7 @@ private static void performViewTests(List<String> differences, File outFolder)
     private static List<String> getViewList(File viewFolder) {
 	if (!viewFolder.exists())
 	    throw new RuntimeException("The folder " + viewFolder.getAbsolutePath()
-		    + " does not exists.");
+		    + " does not exist.");
 	else if (!viewFolder.isDirectory())
 	    throw new RuntimeException(viewFolder.getAbsolutePath() + " is not a folder!.");
 	else if (!viewFolder.canRead())
diff --git a/src/test/java/org/umlgraph/test/UmlDocTest.java b/src/test/java/org/umlgraph/test/UmlDocTest.java
index d470b4f5..42008781 100644
--- a/src/test/java/org/umlgraph/test/UmlDocTest.java
+++ b/src/test/java/org/umlgraph/test/UmlDocTest.java
@@ -92,10 +92,10 @@ private static void compareDocletOutputs(List<String> differences, File refFolde
 	    return;
 	
 	if (!refFolder.exists() || !refFolder.isDirectory())
-	    throw new IllegalArgumentException("Reference does not exists or is not a folder: "
+	    throw new IllegalArgumentException("Reference does not exist or is not a folder: "
 		    + refFolder.getAbsolutePath());
 	if (!outFolder.exists() || !outFolder.isDirectory())
-	    throw new IllegalArgumentException("Output does not exists or is not a folder: "
+	    throw new IllegalArgumentException("Output does not exist or is not a folder: "
 		    + outFolder.getAbsolutePath());
 
 	// get elements and sort

From 552db976fd2c84238b0ec7616ca26b501f76b507 Mon Sep 17 00:00:00 2001
From: Fotis Xenakis <foxen@windowslive.com>
Date: Tue, 9 Apr 2019 18:33:04 +0300
Subject: [PATCH 2/7] Remove CVS-specific code

---
 src/test/java/org/umlgraph/test/TestUtils.java  | 7 +++----
 src/test/java/org/umlgraph/test/UmlDocTest.java | 3 ---
 2 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/src/test/java/org/umlgraph/test/TestUtils.java b/src/test/java/org/umlgraph/test/TestUtils.java
index 9b1341f2..3259d910 100644
--- a/src/test/java/org/umlgraph/test/TestUtils.java
+++ b/src/test/java/org/umlgraph/test/TestUtils.java
@@ -123,18 +123,17 @@ public static void printList(PrintWriter pw, String message, List<?> extraOut) {
     }
 
     /**
-         * Deletes the content of the folder, eventually in a recursive way (but
-         * avoids deleting eventual .cvsignore files and CVS folders)
+         * Deletes the content of the folder, eventually in a recursive way
          */
     public static void cleanFolder(File folder, boolean recurse) {
 	for (File f : folder.listFiles()) {
-	    if (f.isDirectory() && !f.getName().equals("CVS")) {
+	    if (f.isDirectory()) {
 		if (recurse) {
 		    cleanFolder(f, true);
 		    if (f.list().length == 0)
 			f.delete();
 		}
-	    } else if (!f.getName().equals(".cvsignore")) {
+	    } else {
 		f.delete();
 	    }
 
diff --git a/src/test/java/org/umlgraph/test/UmlDocTest.java b/src/test/java/org/umlgraph/test/UmlDocTest.java
index 42008781..9afbb33c 100644
--- a/src/test/java/org/umlgraph/test/UmlDocTest.java
+++ b/src/test/java/org/umlgraph/test/UmlDocTest.java
@@ -88,9 +88,6 @@ private static void runTest(List<String> differences) throws IOException {
          */
     private static void compareDocletOutputs(List<String> differences, File refFolder,
 	    File outFolder) throws IOException {
-	if(refFolder.getName().equals("CVS"))
-	    return;
-	
 	if (!refFolder.exists() || !refFolder.isDirectory())
 	    throw new IllegalArgumentException("Reference does not exist or is not a folder: "
 		    + refFolder.getAbsolutePath());

From 0a71dbfc82dc7cfcfd888c0e46025bbcd69c6b27 Mon Sep 17 00:00:00 2001
From: Fotis Xenakis <foxen@windowslive.com>
Date: Tue, 9 Apr 2019 18:37:35 +0300
Subject: [PATCH 3/7] Tiny rework of exiting in tests. This unmasks failing
 tests in UmlDocTest.

---
 src/test/java/org/umlgraph/test/BasicTest.java  | 2 +-
 src/test/java/org/umlgraph/test/UmlDocTest.java | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/test/java/org/umlgraph/test/BasicTest.java b/src/test/java/org/umlgraph/test/BasicTest.java
index 1dceb13f..5eef6e3b 100644
--- a/src/test/java/org/umlgraph/test/BasicTest.java
+++ b/src/test/java/org/umlgraph/test/BasicTest.java
@@ -58,13 +58,13 @@ public static void main(String[] args) throws IOException {
 	    for (String className : differences) {
 		pw.println(className);
 	    }
+            System.exit(1);
 	} else {
 	    pw.println("GOOD, all files are structurally equal");
 	}
 	pw.println();
 	pw.println();
 	pw.flush();
-	System.exit(differences.size() > 0 ? 1 : 0);
     }
 
     private static void performViewTests(List<String> differences, File outFolder)
diff --git a/src/test/java/org/umlgraph/test/UmlDocTest.java b/src/test/java/org/umlgraph/test/UmlDocTest.java
index 9afbb33c..971224bf 100644
--- a/src/test/java/org/umlgraph/test/UmlDocTest.java
+++ b/src/test/java/org/umlgraph/test/UmlDocTest.java
@@ -145,11 +145,10 @@ private static void compareDocletOutputs(List<String> differences, File refFolde
     private static void runDoclet(String[] options) {
 	pw.print("Run javadoc -doclet " + doclet);
 	for (String o : options)
-	    pw.print(" " + o);
+	    pw.print(o + " ");
 	pw.println();
 	com.sun.tools.javadoc.Main.execute("UMLDoc test", pw, pw, pw,
 		doclet, options);
-	System.exit(0);
     }
 
 }

From 742ee6f73ed9ce8915e2365acc2c31de60ce640d Mon Sep 17 00:00:00 2001
From: Fotis Xenakis <foxen@windowslive.com>
Date: Tue, 9 Apr 2019 19:07:53 +0300
Subject: [PATCH 4/7] Remove unnecessary super() call (extends Object)

---
 src/main/java/org/umlgraph/doclet/PackageMatcher.java | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/main/java/org/umlgraph/doclet/PackageMatcher.java b/src/main/java/org/umlgraph/doclet/PackageMatcher.java
index 99bd7ff3..aae6e3e3 100644
--- a/src/main/java/org/umlgraph/doclet/PackageMatcher.java
+++ b/src/main/java/org/umlgraph/doclet/PackageMatcher.java
@@ -7,7 +7,6 @@ public class PackageMatcher implements ClassMatcher {
     protected PackageDoc packageDoc;
 
     public PackageMatcher(PackageDoc packageDoc) {
-	super();
 	this.packageDoc = packageDoc;
     }
 

From 78ab2dc006e787457cbfbf21a1707debd0eb2d30 Mon Sep 17 00:00:00 2001
From: Fotis Xenakis <foxen@windowslive.com>
Date: Tue, 9 Apr 2019 19:29:14 +0300
Subject: [PATCH 5/7] Replace StringBuffer with StringBuilder (plus tiny
 simplification)

---
 src/main/java/org/umlgraph/doclet/ClassGraph.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/umlgraph/doclet/ClassGraph.java b/src/main/java/org/umlgraph/doclet/ClassGraph.java
index fe2e21e8..0157d534 100644
--- a/src/main/java/org/umlgraph/doclet/ClassGraph.java
+++ b/src/main/java/org/umlgraph/doclet/ClassGraph.java
@@ -200,7 +200,7 @@ private String type(Options opt, Type t, boolean generics) {
     private String typeParameters(Options opt, ParameterizedType t) {
 	if (t == null)
 	    return "";
-	StringBuffer tp = new StringBuffer(1000).append("&lt;");
+	StringBuilder tp = new StringBuilder(1000).append("&lt;");
 	Type args[] = t.typeArguments();
 	for (int i = 0; i < args.length; i++) {
 	    tp.append(type(opt, args[i], true));
@@ -439,7 +439,7 @@ else if (opt.postfixPackage && idx > 0 && idx < (qualifiedName.length() - 1)) {
 		if (ecs.length == 0) {
 		    tableLine(Align.LEFT, "");
 		} else {
-		    for (FieldDoc fd : c.enumConstants()) {
+		    for (FieldDoc fd : ecs) {
 			tableLine(Align.LEFT, fd.name());
 		    }
 		}

From 2814117c20ab6f1954bf7c03936b257aced3f604 Mon Sep 17 00:00:00 2001
From: Fotis Xenakis <foxen@windowslive.com>
Date: Tue, 9 Apr 2019 20:53:30 +0300
Subject: [PATCH 6/7] Code formatting fixes

---
 .../java/org/umlgraph/doclet/ClassGraph.java  | 11 +++++----
 .../java/org/umlgraph/doclet/ClassInfo.java   |  2 --
 .../org/umlgraph/doclet/ContextMatcher.java   |  1 -
 .../java/org/umlgraph/doclet/ContextView.java |  1 -
 .../org/umlgraph/doclet/InterfaceMatcher.java |  1 -
 .../java/org/umlgraph/doclet/Options.java     |  3 +--
 .../org/umlgraph/doclet/PackageMatcher.java   |  1 -
 .../java/org/umlgraph/doclet/PackageView.java |  1 -
 .../org/umlgraph/doclet/PatternMatcher.java   |  2 +-
 .../umlgraph/doclet/RelationDirection.java    |  3 +--
 .../org/umlgraph/doclet/RelationPattern.java  |  1 -
 .../org/umlgraph/doclet/SubclassMatcher.java  |  1 -
 .../java/org/umlgraph/doclet/UmlGraphDoc.java |  4 ++--
 src/main/java/org/umlgraph/doclet/View.java   |  2 +-
 .../java/org/umlgraph/doclet/Visibility.java  |  1 +
 .../java/org/umlgraph/test/BasicTest.java     |  1 -
 src/test/java/org/umlgraph/test/DotDiff.java  |  1 -
 src/test/java/org/umlgraph/test/RunDoc.java   |  1 -
 src/test/java/org/umlgraph/test/RunOne.java   |  2 --
 .../org/umlgraph/test/SimpleFileFilter.java   |  3 ++-
 .../java/org/umlgraph/test/TestUtils.java     | 14 +++++------
 .../java/org/umlgraph/test/UmlDocTest.java    | 24 +++++++++----------
 22 files changed, 34 insertions(+), 47 deletions(-)

diff --git a/src/main/java/org/umlgraph/doclet/ClassGraph.java b/src/main/java/org/umlgraph/doclet/ClassGraph.java
index 0157d534..249a9239 100644
--- a/src/main/java/org/umlgraph/doclet/ClassGraph.java
+++ b/src/main/java/org/umlgraph/doclet/ClassGraph.java
@@ -82,7 +82,7 @@ private Align() {
 
     protected Map<String, ClassInfo> classnames = new HashMap<String, ClassInfo>();
     protected Set<String> rootClasses;
-	protected Map<String, ClassDoc> rootClassdocs = new HashMap<String, ClassDoc>();
+    protected Map<String, ClassDoc> rootClassdocs = new HashMap<String, ClassDoc>();
     protected OptionProvider optionProvider;
     protected PrintWriter w;
     protected ClassDoc collectionClassDoc;
@@ -673,7 +673,8 @@ public void printInferredRelations(ClassDoc c) {
 	}
     }
 
-    /** Returns an array representing the imported classes of c.
+    /**
+     * Returns an array representing the imported classes of c.
      * Disables the deprecation warning, which is output, because the
      * imported classed are an implementation detail.
      */
@@ -848,8 +849,10 @@ public String classToUrl(String className) {
 		.append(".html").toString();
     }
 
-    /** Dot prologue 
-     * @throws IOException */
+    /**
+     * Dot prologue 
+     * @throws IOException
+     */
     public void prologue() throws IOException {
 	Options opt = optionProvider.getGlobalOptions();
 	OutputStream os;
diff --git a/src/main/java/org/umlgraph/doclet/ClassInfo.java b/src/main/java/org/umlgraph/doclet/ClassInfo.java
index f4982103..34480c5c 100644
--- a/src/main/java/org/umlgraph/doclet/ClassInfo.java
+++ b/src/main/java/org/umlgraph/doclet/ClassInfo.java
@@ -66,7 +66,5 @@ public RelationPattern getRelation(String dest) {
     public static void reset() {
 	classNumber = 0;
     }
-
-    
 }
 
diff --git a/src/main/java/org/umlgraph/doclet/ContextMatcher.java b/src/main/java/org/umlgraph/doclet/ContextMatcher.java
index cc59d002..cfa4ed3a 100644
--- a/src/main/java/org/umlgraph/doclet/ContextMatcher.java
+++ b/src/main/java/org/umlgraph/doclet/ContextMatcher.java
@@ -192,5 +192,4 @@ public void close() throws IOException {
 	}
 
     }
-
 }
diff --git a/src/main/java/org/umlgraph/doclet/ContextView.java b/src/main/java/org/umlgraph/doclet/ContextView.java
index 040725eb..9adb5fc8 100755
--- a/src/main/java/org/umlgraph/doclet/ContextView.java
+++ b/src/main/java/org/umlgraph/doclet/ContextView.java
@@ -116,5 +116,4 @@ public void overrideForClass(Options opt, String className) {
 	if (!(matcher.matches(className) || opt.matchesIncludeExpression(className)))
 	    opt.setOption(HIDE_OPTIONS);
     }
-
 }
diff --git a/src/main/java/org/umlgraph/doclet/InterfaceMatcher.java b/src/main/java/org/umlgraph/doclet/InterfaceMatcher.java
index 6c63b98e..2f87370d 100644
--- a/src/main/java/org/umlgraph/doclet/InterfaceMatcher.java
+++ b/src/main/java/org/umlgraph/doclet/InterfaceMatcher.java
@@ -38,5 +38,4 @@ public boolean matches(String name) {
 	ClassDoc cd = root.classNamed(name);
 	return cd == null ? false : matches(cd);
     }
-
 }
diff --git a/src/main/java/org/umlgraph/doclet/Options.java b/src/main/java/org/umlgraph/doclet/Options.java
index 90b75428..836432e0 100644
--- a/src/main/java/org/umlgraph/doclet/Options.java
+++ b/src/main/java/org/umlgraph/doclet/Options.java
@@ -130,7 +130,7 @@ public class Options implements Cloneable, OptionProvider {
     }
 
     @Override
-	public Object clone() {
+    public Object clone() {
 	Options clone = null;
 	try {
 	     clone = (Options) super.clone();
@@ -680,5 +680,4 @@ public String toString() {
 	}
 	return sb.toString();
     }
-
 }
diff --git a/src/main/java/org/umlgraph/doclet/PackageMatcher.java b/src/main/java/org/umlgraph/doclet/PackageMatcher.java
index aae6e3e3..be1183fa 100644
--- a/src/main/java/org/umlgraph/doclet/PackageMatcher.java
+++ b/src/main/java/org/umlgraph/doclet/PackageMatcher.java
@@ -20,5 +20,4 @@ public boolean matches(String name) {
 		return true;
 	return false;
     }
-
 }
diff --git a/src/main/java/org/umlgraph/doclet/PackageView.java b/src/main/java/org/umlgraph/doclet/PackageView.java
index c66bf6d7..1547ebb5 100755
--- a/src/main/java/org/umlgraph/doclet/PackageView.java
+++ b/src/main/java/org/umlgraph/doclet/PackageView.java
@@ -77,5 +77,4 @@ public void overrideForClass(Options opt, String className) {
 	if (!included || this.opt.matchesHideExpression(className))
 	    opt.setOption(HIDE);
     }
-
 }
diff --git a/src/main/java/org/umlgraph/doclet/PatternMatcher.java b/src/main/java/org/umlgraph/doclet/PatternMatcher.java
index 78a91358..59c2d47e 100644
--- a/src/main/java/org/umlgraph/doclet/PatternMatcher.java
+++ b/src/main/java/org/umlgraph/doclet/PatternMatcher.java
@@ -14,6 +14,7 @@
  *
  *
  */
+
 package org.umlgraph.doclet;
 
 import java.util.regex.Pattern;
@@ -39,5 +40,4 @@ public boolean matches(ClassDoc cd) {
     public boolean matches(String name) {
 	return pattern.matcher(name).matches();
     }
-
 }
diff --git a/src/main/java/org/umlgraph/doclet/RelationDirection.java b/src/main/java/org/umlgraph/doclet/RelationDirection.java
index 4d3595ce..39dab313 100644
--- a/src/main/java/org/umlgraph/doclet/RelationDirection.java
+++ b/src/main/java/org/umlgraph/doclet/RelationDirection.java
@@ -36,5 +36,4 @@ public boolean contains(RelationDirection d) {
     public RelationDirection inverse() {
 	return this == IN ? OUT : this == OUT ? IN : this;
     }
-
-};
+}
diff --git a/src/main/java/org/umlgraph/doclet/RelationPattern.java b/src/main/java/org/umlgraph/doclet/RelationPattern.java
index 4fa994e1..0de04909 100644
--- a/src/main/java/org/umlgraph/doclet/RelationPattern.java
+++ b/src/main/java/org/umlgraph/doclet/RelationPattern.java
@@ -46,5 +46,4 @@ public boolean matchesOne(RelationPattern relationPattern) {
 	}
 	return false;
     }
-
 }
diff --git a/src/main/java/org/umlgraph/doclet/SubclassMatcher.java b/src/main/java/org/umlgraph/doclet/SubclassMatcher.java
index 999b823d..c96a500e 100644
--- a/src/main/java/org/umlgraph/doclet/SubclassMatcher.java
+++ b/src/main/java/org/umlgraph/doclet/SubclassMatcher.java
@@ -32,5 +32,4 @@ public boolean matches(String name) {
 	ClassDoc cd = root.classNamed(name);
 	return cd == null ? false : matches(cd);
     }
-
 }
diff --git a/src/main/java/org/umlgraph/doclet/UmlGraphDoc.java b/src/main/java/org/umlgraph/doclet/UmlGraphDoc.java
index dca406f6..46d0d220 100644
--- a/src/main/java/org/umlgraph/doclet/UmlGraphDoc.java
+++ b/src/main/java/org/umlgraph/doclet/UmlGraphDoc.java
@@ -138,12 +138,12 @@ private static void runGraphviz(String dotExecutable, String outputFolder, Strin
       dotExecutable = "dot";
     }
 	File dotFile = new File(outputFolder, packageName.replace(".", "/") + "/" + name + ".dot");
-  File svgFile = new File(outputFolder, packageName.replace(".", "/") + "/" + name + ".svg");
+	File svgFile = new File(outputFolder, packageName.replace(".", "/") + "/" + name + ".svg");
 
 	try {
 	    Process p = Runtime.getRuntime().exec(new String [] {
 		dotExecutable,
-    "-Tsvg",
+		"-Tsvg",
 		"-o",
 		svgFile.getAbsolutePath(),
 		dotFile.getAbsolutePath()
diff --git a/src/main/java/org/umlgraph/doclet/View.java b/src/main/java/org/umlgraph/doclet/View.java
index 8659a1c4..da087cc4 100644
--- a/src/main/java/org/umlgraph/doclet/View.java
+++ b/src/main/java/org/umlgraph/doclet/View.java
@@ -14,6 +14,7 @@
  *
  *
  */
+
 package org.umlgraph.doclet;
 
 import java.util.ArrayList;
@@ -169,5 +170,4 @@ public void overrideForClass(Options opt, String className) {
     public String getDisplayName() {
 	return "view " + viewDoc.name();
     }
-
 }
diff --git a/src/main/java/org/umlgraph/doclet/Visibility.java b/src/main/java/org/umlgraph/doclet/Visibility.java
index 408a551c..87c4134e 100644
--- a/src/main/java/org/umlgraph/doclet/Visibility.java
+++ b/src/main/java/org/umlgraph/doclet/Visibility.java
@@ -16,6 +16,7 @@
  *
  *
  */
+
 package org.umlgraph.doclet;
 
 import com.sun.javadoc.ProgramElementDoc;
diff --git a/src/test/java/org/umlgraph/test/BasicTest.java b/src/test/java/org/umlgraph/test/BasicTest.java
index 5eef6e3b..b989a6d3 100644
--- a/src/test/java/org/umlgraph/test/BasicTest.java
+++ b/src/test/java/org/umlgraph/test/BasicTest.java
@@ -145,5 +145,4 @@ private static void compare(List<String> differences, File dotFile, File refFile
 	    differences.add(dotFile.getName() + " is different from the reference");
 	}
     }
-
 }
diff --git a/src/test/java/org/umlgraph/test/DotDiff.java b/src/test/java/org/umlgraph/test/DotDiff.java
index 266981a8..420c32a8 100644
--- a/src/test/java/org/umlgraph/test/DotDiff.java
+++ b/src/test/java/org/umlgraph/test/DotDiff.java
@@ -304,5 +304,4 @@ public String toString() {
             return "Arc: " + from.label + " -> " + to.label + "; " + line;
         }
     }
-
 }
diff --git a/src/test/java/org/umlgraph/test/RunDoc.java b/src/test/java/org/umlgraph/test/RunDoc.java
index 3a7f525e..6261d9c9 100644
--- a/src/test/java/org/umlgraph/test/RunDoc.java
+++ b/src/test/java/org/umlgraph/test/RunDoc.java
@@ -43,5 +43,4 @@ private static void runDoclet(String[] options) {
 	com.sun.tools.javadoc.Main.execute("UMLGraph test", pw, pw, pw,
 		"org.umlgraph.doclet.UmlGraphDoc", options);
     }
-
 }
diff --git a/src/test/java/org/umlgraph/test/RunOne.java b/src/test/java/org/umlgraph/test/RunOne.java
index e2f7b8ce..0fb55dac 100644
--- a/src/test/java/org/umlgraph/test/RunOne.java
+++ b/src/test/java/org/umlgraph/test/RunOne.java
@@ -55,6 +55,4 @@ public static void runSingleClass(String className) {
     private static void runDoclet(String[] options) {
 	com.sun.tools.javadoc.Main.execute("UMLGraph test", pw, pw, pw, "org.umlgraph.doclet.UmlGraph", options);
     }
-
-    
 }
diff --git a/src/test/java/org/umlgraph/test/SimpleFileFilter.java b/src/test/java/org/umlgraph/test/SimpleFileFilter.java
index 9c3b1230..c45db533 100644
--- a/src/test/java/org/umlgraph/test/SimpleFileFilter.java
+++ b/src/test/java/org/umlgraph/test/SimpleFileFilter.java
@@ -16,6 +16,7 @@
  *
  *
  */
+
 package org.umlgraph.test;
 
 import java.io.File;
@@ -31,4 +32,4 @@ public SimpleFileFilter(String ext) {
     public boolean accept(File dir, String name) {
         return name.endsWith(extension);
     }
-}
\ No newline at end of file
+}
diff --git a/src/test/java/org/umlgraph/test/TestUtils.java b/src/test/java/org/umlgraph/test/TestUtils.java
index 3259d910..b59ce72d 100644
--- a/src/test/java/org/umlgraph/test/TestUtils.java
+++ b/src/test/java/org/umlgraph/test/TestUtils.java
@@ -34,10 +34,10 @@
 public class TestUtils {
 
     /**
-         * Simple text file diffing: will tell you if two text files are line by
-         * line equals, and will stop at the first difference found.
-         * @throws IOException
-         */
+    * Simple text file diffing: will tell you if two text files are line by
+    * line equals, and will stop at the first difference found.
+    * @throws IOException
+    */
     public static boolean textFilesEquals(PrintWriter pw, File refTextFile, File outTextFile)
 	    throws IOException {
 	BufferedReader refReader = null, outReader = null;
@@ -123,8 +123,8 @@ public static void printList(PrintWriter pw, String message, List<?> extraOut) {
     }
 
     /**
-         * Deletes the content of the folder, eventually in a recursive way
-         */
+    * Deletes the content of the folder, eventually in a recursive way
+    */
     public static void cleanFolder(File folder, boolean recurse) {
 	for (File f : folder.listFiles()) {
 	    if (f.isDirectory()) {
@@ -138,7 +138,5 @@ public static void cleanFolder(File folder, boolean recurse) {
 	    }
 
 	}
-
     }
-
 }
diff --git a/src/test/java/org/umlgraph/test/UmlDocTest.java b/src/test/java/org/umlgraph/test/UmlDocTest.java
index 971224bf..ac6ab12e 100644
--- a/src/test/java/org/umlgraph/test/UmlDocTest.java
+++ b/src/test/java/org/umlgraph/test/UmlDocTest.java
@@ -16,6 +16,7 @@
  *
  *
  */
+
 package org.umlgraph.test;
 
 import java.io.File;
@@ -78,14 +79,14 @@ private static void runTest(List<String> differences) throws IOException {
     }
 
     /**
-         * Ensures that reference and output have the same contents in terms of:
-         * <ul>
-         * <li> html files </li>
-         * <li> dot files </li>
-         * <li> folders </li>
-         * </ul>
-         * @throws IOException
-         */
+    * Ensures that reference and output have the same contents in terms of:
+    * <ul>
+    * <li> html files </li>
+    * <li> dot files </li>
+    * <li> folders </li>
+    * </ul>
+    * @throws IOException
+    */
     private static void compareDocletOutputs(List<String> differences, File refFolder,
 	    File outFolder) throws IOException {
 	if (!refFolder.exists() || !refFolder.isDirectory())
@@ -139,9 +140,9 @@ private static void compareDocletOutputs(List<String> differences, File refFolde
     }
 
     /**
-         * Runs the UmlGraphDoc doclet
-         * @param options
-         */
+    * Runs the UmlGraphDoc doclet
+    * @param options
+    */
     private static void runDoclet(String[] options) {
 	pw.print("Run javadoc -doclet " + doclet);
 	for (String o : options)
@@ -150,5 +151,4 @@ private static void runDoclet(String[] options) {
 	com.sun.tools.javadoc.Main.execute("UMLDoc test", pw, pw, pw,
 		doclet, options);
     }
-
 }

From aece4fee22f31ed2a7cfce5bbe86cb159e015b13 Mon Sep 17 00:00:00 2001
From: Fotis Xenakis <foxen@windowslive.com>
Date: Wed, 10 Apr 2019 14:07:09 +0300
Subject: [PATCH 7/7] Update test reference files

---
 .../java/org/umlgraph/doclet/Version.java     |   2 +-
 testdata/dot-ref/Abstr.dot                    |  30 +-
 testdata/dot-ref/Inference.dot                |  82 +--
 testdata/dot-ref/Irp.dot                      |  28 +-
 testdata/dot-ref/MultiAssoc.dot               |  22 +-
 testdata/dot-ref/MyVector.dot                 |  38 +-
 testdata/dot-ref/Root.dot                     |  70 +-
 testdata/dot-ref/RunnableRef.dot              |  22 +-
 testdata/dot-ref/Style.dot                    |  10 +-
 testdata/dot-ref/TestHideOp.dot               |  14 +-
 testdata/dot-ref/ViewAll.dot                  |  46 +-
 testdata/dot-ref/ViewAllDetailed.dot          |  46 +-
 testdata/dot-ref/ViewAtt.dot                  |  46 +-
 testdata/dot-ref/ViewChildEmpty.dot           |  22 +-
 testdata/dot-ref/ViewChildOverride.dot        |  22 +-
 testdata/dot-ref/ViewColors.dot               |  54 +-
 testdata/dot-ref/ViewContext.dot              |  32 +-
 testdata/dot-ref/ViewInterfaces.dot           |  38 +-
 testdata/dot-ref/ViewProduct.dot              |  22 +-
 testdata/dot-ref/ViewSubclasses.dot           |  20 +-
 testdata/dot-ref/active.dot                   |   4 +-
 testdata/dot-ref/advrel.dot                   |  48 +-
 testdata/dot-ref/assoc.dot                    |  32 +-
 testdata/dot-ref/car.dot                      |  38 +-
 testdata/dot-ref/catalina.dot                 |  74 +-
 testdata/dot-ref/class-eg.dot                 |  26 +-
 testdata/dot-ref/classadd.dot                 |  14 +-
 testdata/dot-ref/color.dot                    |  16 +-
 testdata/dot-ref/ctor.dot                     |  14 +-
 testdata/dot-ref/disable.dot                  |  22 +-
 testdata/dot-ref/extends.dot                  |  18 +-
 testdata/dot-ref/foo.dot                      |  34 +-
 testdata/dot-ref/general.dot                  |  70 +-
 testdata/dot-ref/java5.dot                    |  18 +-
 testdata/dot-ref/schema.dot                   |  58 +-
 testdata/dot-ref/strip.dot                    |  18 +-
 testdata/dot-ref/vis.dot                      |  14 +-
 testdata/umldoc-ref/allclasses-frame.html     |  46 +-
 testdata/umldoc-ref/allclasses-noframe.html   |  46 +-
 testdata/umldoc-ref/constant-values.html      | 244 +++---
 testdata/umldoc-ref/deprecated-list.html      | 244 +++---
 .../gr/spinellis/invoice/Customer.dot         |  33 +-
 .../gr/spinellis/invoice/Customer.html        | 546 +++++++-------
 .../gr/spinellis/invoice/Invoice.dot          |  53 +-
 .../gr/spinellis/invoice/Invoice.html         | 696 +++++++++---------
 .../gr/spinellis/invoice/InvoiceItem.dot      |  37 +-
 .../gr/spinellis/invoice/InvoiceItem.html     | 572 +++++++-------
 .../invoice/gr.spinellis.invoice.dot          |  33 +-
 .../gr/spinellis/invoice/package-frame.html   |  44 +-
 .../gr/spinellis/invoice/package-summary.html | 300 ++++----
 .../gr/spinellis/invoice/package-tree.html    | 274 +++----
 .../gr/spinellis/product/Category.dot         |  37 +-
 .../gr/spinellis/product/Category.html        | 572 +++++++-------
 .../gr/spinellis/product/Product.dot          |  57 +-
 .../gr/spinellis/product/Product.html         | 624 ++++++++--------
 .../product/gr.spinellis.product.dot          |  25 +-
 .../gr/spinellis/product/package-frame.html   |  42 +-
 .../gr/spinellis/product/package-summary.html | 292 ++++----
 .../gr/spinellis/product/package-tree.html    | 272 +++----
 testdata/umldoc-ref/help-doc.html             | 446 +++++------
 testdata/umldoc-ref/index-all.html            | 450 +++++------
 testdata/umldoc-ref/index.html                | 150 ++--
 testdata/umldoc-ref/overview-frame.html       |  44 +-
 testdata/umldoc-ref/overview-summary.html     | 274 +++----
 testdata/umldoc-ref/overview-tree.html        | 280 +++----
 testdata/umldoc-ref/package-list              |   4 +-
 66 files changed, 3964 insertions(+), 3957 deletions(-)

diff --git a/src/main/java/org/umlgraph/doclet/Version.java b/src/main/java/org/umlgraph/doclet/Version.java
index 03f857d8..4508ec75 100644
--- a/src/main/java/org/umlgraph/doclet/Version.java
+++ b/src/main/java/org/umlgraph/doclet/Version.java
@@ -1,4 +1,4 @@
 /* Automatically generated file */
 package org.umlgraph.doclet;
-class Version { public static String VERSION = "R5_7_2-60-g0e99a6";}
+class Version { public static String VERSION = "281411";}
 	
\ No newline at end of file
diff --git a/testdata/dot-ref/Abstr.dot b/testdata/dot-ref/Abstr.dot
index 15282419..1b33e08f 100644
--- a/testdata/dot-ref/Abstr.dot
+++ b/testdata/dot-ref/Abstr.dot
@@ -1,26 +1,26 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// test.AbstractNode
-c1 [label=<<table title="test.AbstractNode" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><i> AbstractNode </i></td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><i>  abstractMethod() </i></td></tr><tr><td align="left" balign="left">  concreteMethod() </td></tr></table></td></tr></table>>];
-// test.InnerNode
-c2 [label=<<table title="test.InnerNode" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InnerNode </td></tr></table></td></tr></table>>];
-// test.Leaf
-c3 [label=<<table title="test.Leaf" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Leaf </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// test.AbstractNode
+c106 [label=<<table title="test.AbstractNode" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> <i>AbstractNode</i> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> <i> abstractMethod()</i> </td></tr><tr><td align="left" balign="left">  concreteMethod() </td></tr></table></td></tr></table>>];
+// test.InnerNode
+c107 [label=<<table title="test.InnerNode" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InnerNode </td></tr></table></td></tr></table>>];
+// test.Leaf
+c108 [label=<<table title="test.Leaf" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Leaf </td></tr></table></td></tr></table>>];
 // test.InnerNode extends test.AbstractNode
-c1 -> c2 [arrowtail=empty,dir=back,weight=10];
-// test.InnerNode composed test.AbstractNode
-c2 -> c1 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", label="has", headlabel="*"];
+c106 -> c107 [arrowtail=empty,dir=back,weight=10];
+// test.InnerNode composed test.AbstractNode
+c107 -> c106 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1",label="has",headlabel="*"];
 // test.Leaf extends test.AbstractNode
-c1 -> c3 [arrowtail=empty,dir=back,weight=10];
+c106 -> c108 [arrowtail=empty,dir=back,weight=10];
 }
-
+
diff --git a/testdata/dot-ref/Inference.dot b/testdata/dot-ref/Inference.dot
index 64737cf0..97b9e49d 100644
--- a/testdata/dot-ref/Inference.dot
+++ b/testdata/dot-ref/Inference.dot
@@ -1,50 +1,50 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-10-g442559 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// A
-c66 [label=<<table title="A" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> A </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  first : B </td></tr><tr><td align="left" balign="left">  second : B </td></tr><tr><td align="left" balign="left">  third : C </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
-// B
-c67 [label=<<table title="B" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> B </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  doSomething(b : B, c : C) : A </td></tr></table></td></tr></table>>];
-// C
-c68 [label=<<table title="C" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> C </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  collectionOfA : List&lt;A&gt; </td></tr><tr><td align="left" balign="left">  collectionOfB : ArrayList&lt;B&gt; </td></tr><tr><td align="left" balign="left">  mapOfD : Map&lt;String, D&gt; </td></tr><tr><td align="left" balign="left">  childs : C[] </td></tr><tr><td align="left" balign="left">  anOpaqueList : List&lt;&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
-// MyFunnyList<T, V>
-c69 [label=<<table title="MyFunnyList" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> MyFunnyList&lt;T, V&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  myField : V </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
-// MyList
-c70 [label=<<table title="MyList" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> MyList </td></tr></table></td></tr></table>>];
-// D
-c71 [label=<<table title="D" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> D </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  anotherListOfA : MyList </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
-// MyFunnyList<T, V> extends java.util.ArrayList<T>
-c72 -> c69 [arrowtail=empty,dir=back,weight=10];
-// MyList extends MyFunnyList<A, B>
-c69 -> c70 [arrowtail=empty,dir=back,weight=10];
-// A has B
-c66 -> c67 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4];
-// A has C
-c66 -> c68 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4];
-// C navassoc B
-c68 -> c67 [arrowhead=open,weight=1,headlabel="*"];
-// C navassoc D
-c68 -> c71 [arrowhead=open,weight=1,headlabel="*"];
-// C navassoc C
-c68 -> c68 [arrowhead=open,weight=1,headlabel="*"];
-// C navassoc java.util.List<E>
-c68 -> c73 [arrowhead=open,weight=1];
-// D navassoc MyList
-c71 -> c70 [arrowhead=open,weight=1];
-// B depend A
-c67 -> c66 [arrowhead=open,style=dashed,weight=0];
-// java.util.List<E>
-c73 [label=<<table title="java.util.List" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> List&lt;E&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><i>  size() : int </i></td></tr><tr><td align="left" balign="left"><i>  isEmpty() : boolean </i></td></tr><tr><td align="left" balign="left"><i>  contains(arg0 : Object) : boolean </i></td></tr><tr><td align="left" balign="left"><i>  iterator() : Iterator&lt;E&gt; </i></td></tr><tr><td align="left" balign="left"><i>  toArray() : Object[] </i></td></tr><tr><td align="left" balign="left"><i>  toArray(arg0 : T[]) : T[] </i></td></tr><tr><td align="left" balign="left"><i>  add(arg0 : E) : boolean </i></td></tr><tr><td align="left" balign="left"><i>  remove(arg0 : Object) : boolean </i></td></tr><tr><td align="left" balign="left"><i>  containsAll(arg0 : Collection&lt;?&gt;) : boolean </i></td></tr><tr><td align="left" balign="left"><i>  addAll(arg0 : Collection&lt;?&gt;) : boolean </i></td></tr><tr><td align="left" balign="left"><i>  addAll(arg0 : int, arg1 : Collection&lt;?&gt;) : boolean </i></td></tr><tr><td align="left" balign="left"><i>  removeAll(arg0 : Collection&lt;?&gt;) : boolean </i></td></tr><tr><td align="left" balign="left"><i>  retainAll(arg0 : Collection&lt;?&gt;) : boolean </i></td></tr><tr><td align="left" balign="left">  replaceAll(arg0 : UnaryOperator&lt;E&gt;) </td></tr><tr><td align="left" balign="left">  sort(arg0 : Comparator&lt;?&gt;) </td></tr><tr><td align="left" balign="left"><i>  clear() </i></td></tr><tr><td align="left" balign="left"><i>  equals(arg0 : Object) : boolean </i></td></tr><tr><td align="left" balign="left"><i>  hashCode() : int </i></td></tr><tr><td align="left" balign="left"><i>  get(arg0 : int) : E </i></td></tr><tr><td align="left" balign="left"><i>  set(arg0 : int, arg1 : E) : E </i></td></tr><tr><td align="left" balign="left"><i>  add(arg0 : int, arg1 : E) </i></td></tr><tr><td align="left" balign="left"><i>  remove(arg0 : int) : E </i></td></tr><tr><td align="left" balign="left"><i>  indexOf(arg0 : Object) : int </i></td></tr><tr><td align="left" balign="left"><i>  lastIndexOf(arg0 : Object) : int </i></td></tr><tr><td align="left" balign="left"><i>  listIterator() : ListIterator&lt;E&gt; </i></td></tr><tr><td align="left" balign="left"><i>  listIterator(arg0 : int) : ListIterator&lt;E&gt; </i></td></tr><tr><td align="left" balign="left"><i>  subList(arg0 : int, arg1 : int) : List&lt;E&gt; </i></td></tr><tr><td align="left" balign="left">  spliterator() : Spliterator&lt;E&gt; </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html"];
-// java.util.ArrayList<E>
-c72 [label=<<table title="java.util.ArrayList" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ArrayList&lt;E&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  serialVersionUID : long </td></tr><tr><td align="left" balign="left">  DEFAULT_CAPACITY : int </td></tr><tr><td align="left" balign="left">  EMPTY_ELEMENTDATA : Object[] </td></tr><tr><td align="left" balign="left">  DEFAULTCAPACITY_EMPTY_ELEMENTDATA : Object[] </td></tr><tr><td align="left" balign="left">  elementData : Object[] </td></tr><tr><td align="left" balign="left">  size : int </td></tr><tr><td align="left" balign="left">  MAX_ARRAY_SIZE : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  trimToSize() </td></tr><tr><td align="left" balign="left">  ensureCapacity(arg0 : int) </td></tr><tr><td align="left" balign="left">  ensureCapacityInternal(arg0 : int) </td></tr><tr><td align="left" balign="left">  ensureExplicitCapacity(arg0 : int) </td></tr><tr><td align="left" balign="left">  grow(arg0 : int) </td></tr><tr><td align="left" balign="left">  hugeCapacity(arg0 : int) : int </td></tr><tr><td align="left" balign="left">  size() : int </td></tr><tr><td align="left" balign="left">  isEmpty() : boolean </td></tr><tr><td align="left" balign="left">  contains(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left">  indexOf(arg0 : Object) : int </td></tr><tr><td align="left" balign="left">  lastIndexOf(arg0 : Object) : int </td></tr><tr><td align="left" balign="left">  clone() : Object </td></tr><tr><td align="left" balign="left">  toArray() : Object[] </td></tr><tr><td align="left" balign="left">  toArray(arg0 : T[]) : T[] </td></tr><tr><td align="left" balign="left">  elementData(arg0 : int) : E </td></tr><tr><td align="left" balign="left">  get(arg0 : int) : E </td></tr><tr><td align="left" balign="left">  set(arg0 : int, arg1 : E) : E </td></tr><tr><td align="left" balign="left">  add(arg0 : E) : boolean </td></tr><tr><td align="left" balign="left">  add(arg0 : int, arg1 : E) </td></tr><tr><td align="left" balign="left">  remove(arg0 : int) : E </td></tr><tr><td align="left" balign="left">  remove(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left">  fastRemove(arg0 : int) </td></tr><tr><td align="left" balign="left">  clear() </td></tr><tr><td align="left" balign="left">  addAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left">  addAll(arg0 : int, arg1 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left">  removeRange(arg0 : int, arg1 : int) </td></tr><tr><td align="left" balign="left">  rangeCheck(arg0 : int) </td></tr><tr><td align="left" balign="left">  rangeCheckForAdd(arg0 : int) </td></tr><tr><td align="left" balign="left">  outOfBoundsMsg(arg0 : int) : String </td></tr><tr><td align="left" balign="left">  removeAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left">  retainAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left">  batchRemove(arg0 : Collection&lt;?&gt;, arg1 : boolean) : boolean </td></tr><tr><td align="left" balign="left">  writeObject(arg0 : ObjectOutputStream) </td></tr><tr><td align="left" balign="left">  readObject(arg0 : ObjectInputStream) </td></tr><tr><td align="left" balign="left">  listIterator(arg0 : int) : ListIterator&lt;E&gt; </td></tr><tr><td align="left" balign="left">  listIterator() : ListIterator&lt;E&gt; </td></tr><tr><td align="left" balign="left">  iterator() : Iterator&lt;E&gt; </td></tr><tr><td align="left" balign="left">  subList(arg0 : int, arg1 : int) : List&lt;E&gt; </td></tr><tr><td align="left" balign="left">  subListRangeCheck(arg0 : int, arg1 : int, arg2 : int) </td></tr><tr><td align="left" balign="left">  forEach(arg0 : Consumer&lt;?&gt;) </td></tr><tr><td align="left" balign="left">  spliterator() : Spliterator&lt;E&gt; </td></tr><tr><td align="left" balign="left">  removeIf(arg0 : Predicate&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left">  replaceAll(arg0 : UnaryOperator&lt;E&gt;) </td></tr><tr><td align="left" balign="left">  sort(arg0 : Comparator&lt;?&gt;) </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// A
+c97 [label=<<table title="A" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> A </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  first : B </td></tr><tr><td align="left" balign="left">  second : B </td></tr><tr><td align="left" balign="left">  third : C </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
+// B
+c98 [label=<<table title="B" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> B </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  doSomething(b : B, c : C) : A </td></tr></table></td></tr></table>>];
+// C
+c99 [label=<<table title="C" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> C </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  collectionOfA : List&lt;A&gt; </td></tr><tr><td align="left" balign="left">  collectionOfB : ArrayList&lt;B&gt; </td></tr><tr><td align="left" balign="left">  mapOfD : Map&lt;String, D&gt; </td></tr><tr><td align="left" balign="left">  childs : C[] </td></tr><tr><td align="left" balign="left">  anOpaqueList : List&lt;&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
+// MyFunnyList<T, V>
+c100 [label=<<table title="MyFunnyList" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> MyFunnyList&lt;T, V&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  myField : V </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
+// MyList
+c101 [label=<<table title="MyList" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> MyList </td></tr></table></td></tr></table>>];
+// D
+c102 [label=<<table title="D" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> D </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  anotherListOfA : MyList </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
+// MyFunnyList<T, V> extends java.util.ArrayList<E>
+c103 -> c100 [arrowtail=empty,dir=back,weight=10];
+// MyList extends MyFunnyList<T, V>
+c100 -> c101 [arrowtail=empty,dir=back,weight=10];
+// A has B
+c97 -> c98 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4];
+// A has C
+c97 -> c99 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4];
+// C navassoc B
+c99 -> c98 [arrowhead=open,weight=1,headlabel="*"];
+// C navassoc D
+c99 -> c102 [arrowhead=open,weight=1,headlabel="*"];
+// C navassoc C
+c99 -> c99 [arrowhead=open,weight=1,headlabel="*"];
+// C navassoc java.util.List<E>
+c99 -> c104 [arrowhead=open,weight=1];
+// D navassoc MyList
+c102 -> c101 [arrowhead=open,weight=1];
+// B depend A
+c98 -> c97 [arrowhead=open,style=dashed,weight=0];
+// java.util.List<E>
+c104 [label=<<table title="java.util.List" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> List&lt;E&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> <i> size() : int</i> </td></tr><tr><td align="left" balign="left"> <i> isEmpty() : boolean</i> </td></tr><tr><td align="left" balign="left"> <i> contains(arg0 : Object) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i> iterator() : Iterator&lt;E&gt;</i> </td></tr><tr><td align="left" balign="left"> <i> toArray() : Object[]</i> </td></tr><tr><td align="left" balign="left"> <i> toArray(arg0 : T[]) : T[]</i> </td></tr><tr><td align="left" balign="left"> <i> add(arg0 : E) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i> remove(arg0 : Object) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i> containsAll(arg0 : Collection&lt;?&gt;) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i> addAll(arg0 : Collection&lt;?&gt;) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i> addAll(arg0 : int, arg1 : Collection&lt;?&gt;) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i> removeAll(arg0 : Collection&lt;?&gt;) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i> retainAll(arg0 : Collection&lt;?&gt;) : boolean</i> </td></tr><tr><td align="left" balign="left">  replaceAll(arg0 : UnaryOperator&lt;E&gt;) </td></tr><tr><td align="left" balign="left">  sort(arg0 : Comparator&lt;?&gt;) </td></tr><tr><td align="left" balign="left"> <i> clear()</i> </td></tr><tr><td align="left" balign="left"> <i> equals(arg0 : Object) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i> hashCode() : int</i> </td></tr><tr><td align="left" balign="left"> <i> get(arg0 : int) : E</i> </td></tr><tr><td align="left" balign="left"> <i> set(arg0 : int, arg1 : E) : E</i> </td></tr><tr><td align="left" balign="left"> <i> add(arg0 : int, arg1 : E)</i> </td></tr><tr><td align="left" balign="left"> <i> remove(arg0 : int) : E</i> </td></tr><tr><td align="left" balign="left"> <i> indexOf(arg0 : Object) : int</i> </td></tr><tr><td align="left" balign="left"> <i> lastIndexOf(arg0 : Object) : int</i> </td></tr><tr><td align="left" balign="left"> <i> listIterator() : ListIterator&lt;E&gt;</i> </td></tr><tr><td align="left" balign="left"> <i> listIterator(arg0 : int) : ListIterator&lt;E&gt;</i> </td></tr><tr><td align="left" balign="left"> <i> subList(arg0 : int, arg1 : int) : List&lt;E&gt;</i> </td></tr><tr><td align="left" balign="left">  spliterator() : Spliterator&lt;E&gt; </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html"];
+// java.util.ArrayList<E>
+c103 [label=<<table title="java.util.ArrayList" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ArrayList&lt;E&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  serialVersionUID : long </td></tr><tr><td align="left" balign="left">  DEFAULT_CAPACITY : int </td></tr><tr><td align="left" balign="left">  EMPTY_ELEMENTDATA : Object[] </td></tr><tr><td align="left" balign="left">  DEFAULTCAPACITY_EMPTY_ELEMENTDATA : Object[] </td></tr><tr><td align="left" balign="left">  elementData : Object[] </td></tr><tr><td align="left" balign="left">  size : int </td></tr><tr><td align="left" balign="left">  MAX_ARRAY_SIZE : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  trimToSize() </td></tr><tr><td align="left" balign="left">  ensureCapacity(arg0 : int) </td></tr><tr><td align="left" balign="left">  calculateCapacity(arg0 : Object[], arg1 : int) : int </td></tr><tr><td align="left" balign="left">  ensureCapacityInternal(arg0 : int) </td></tr><tr><td align="left" balign="left">  ensureExplicitCapacity(arg0 : int) </td></tr><tr><td align="left" balign="left">  grow(arg0 : int) </td></tr><tr><td align="left" balign="left">  hugeCapacity(arg0 : int) : int </td></tr><tr><td align="left" balign="left">  size() : int </td></tr><tr><td align="left" balign="left">  isEmpty() : boolean </td></tr><tr><td align="left" balign="left">  contains(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left">  indexOf(arg0 : Object) : int </td></tr><tr><td align="left" balign="left">  lastIndexOf(arg0 : Object) : int </td></tr><tr><td align="left" balign="left">  clone() : Object </td></tr><tr><td align="left" balign="left">  toArray() : Object[] </td></tr><tr><td align="left" balign="left">  toArray(arg0 : T[]) : T[] </td></tr><tr><td align="left" balign="left">  elementData(arg0 : int) : E </td></tr><tr><td align="left" balign="left">  get(arg0 : int) : E </td></tr><tr><td align="left" balign="left">  set(arg0 : int, arg1 : E) : E </td></tr><tr><td align="left" balign="left">  add(arg0 : E) : boolean </td></tr><tr><td align="left" balign="left">  add(arg0 : int, arg1 : E) </td></tr><tr><td align="left" balign="left">  remove(arg0 : int) : E </td></tr><tr><td align="left" balign="left">  remove(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left">  fastRemove(arg0 : int) </td></tr><tr><td align="left" balign="left">  clear() </td></tr><tr><td align="left" balign="left">  addAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left">  addAll(arg0 : int, arg1 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left">  removeRange(arg0 : int, arg1 : int) </td></tr><tr><td align="left" balign="left">  rangeCheck(arg0 : int) </td></tr><tr><td align="left" balign="left">  rangeCheckForAdd(arg0 : int) </td></tr><tr><td align="left" balign="left">  outOfBoundsMsg(arg0 : int) : String </td></tr><tr><td align="left" balign="left">  removeAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left">  retainAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left">  batchRemove(arg0 : Collection&lt;?&gt;, arg1 : boolean) : boolean </td></tr><tr><td align="left" balign="left">  writeObject(arg0 : ObjectOutputStream) </td></tr><tr><td align="left" balign="left">  readObject(arg0 : ObjectInputStream) </td></tr><tr><td align="left" balign="left">  listIterator(arg0 : int) : ListIterator&lt;E&gt; </td></tr><tr><td align="left" balign="left">  listIterator() : ListIterator&lt;E&gt; </td></tr><tr><td align="left" balign="left">  iterator() : Iterator&lt;E&gt; </td></tr><tr><td align="left" balign="left">  subList(arg0 : int, arg1 : int) : List&lt;E&gt; </td></tr><tr><td align="left" balign="left">  subListRangeCheck(arg0 : int, arg1 : int, arg2 : int) </td></tr><tr><td align="left" balign="left">  forEach(arg0 : Consumer&lt;?&gt;) </td></tr><tr><td align="left" balign="left">  spliterator() : Spliterator&lt;E&gt; </td></tr><tr><td align="left" balign="left">  removeIf(arg0 : Predicate&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left">  replaceAll(arg0 : UnaryOperator&lt;E&gt;) </td></tr><tr><td align="left" balign="left">  sort(arg0 : Comparator&lt;?&gt;) </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html"];
 }
-
+
diff --git a/testdata/dot-ref/Irp.dot b/testdata/dot-ref/Irp.dot
index 58bd3d13..61bbece0 100644
--- a/testdata/dot-ref/Irp.dot
+++ b/testdata/dot-ref/Irp.dot
@@ -1,24 +1,24 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// Application
-c74 [label=<<table title="Application" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Application </td></tr></table></td></tr></table>>];
-// IrpApplication
-c75 [label=<<table title="IrpApplication" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> IrpApplication </td></tr></table></td></tr></table>>];
-// Main
-c76 [label=<<table title="Main" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Main </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// Application
+c116 [label=<<table title="Application" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Application </td></tr></table></td></tr></table>>];
+// IrpApplication
+c117 [label=<<table title="IrpApplication" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> IrpApplication </td></tr></table></td></tr></table>>];
+// Main
+c118 [label=<<table title="Main" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Main </td></tr></table></td></tr></table>>];
 // IrpApplication extends Application
-c74 -> c75 [arrowtail=empty,dir=back,weight=10];
-// Main depend IrpApplication
-c76 -> c75 [arrowhead=open,style=dashed,weight=0,label="&#171;friend&#187;"];
+c116 -> c117 [arrowtail=empty,dir=back,weight=10];
+// Main depend IrpApplication
+c118 -> c117 [arrowhead=open,style=dashed,weight=0,label="&#171;friend&#187;"];
 }
-
+
diff --git a/testdata/dot-ref/MultiAssoc.dot b/testdata/dot-ref/MultiAssoc.dot
index a2841c03..62d04632 100644
--- a/testdata/dot-ref/MultiAssoc.dot
+++ b/testdata/dot-ref/MultiAssoc.dot
@@ -1,20 +1,20 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// A
-c81 [label=<<table title="A" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> A </td></tr></table></td></tr></table>>];
-// C
-c83 [label=<<table title="C" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> C </td></tr></table></td></tr></table>>];
-// A depend C
-c81 -> c83 [arrowhead=open,style=dashed,weight=0];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// A
+c26 [label=<<table title="A" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> A </td></tr></table></td></tr></table>>];
+// C
+c28 [label=<<table title="C" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> C </td></tr></table></td></tr></table>>];
+// A depend C
+c26 -> c28 [arrowhead=open,style=dashed,weight=0];
 }
-
+
diff --git a/testdata/dot-ref/MyVector.dot b/testdata/dot-ref/MyVector.dot
index 47aaf559..47381a42 100644
--- a/testdata/dot-ref/MyVector.dot
+++ b/testdata/dot-ref/MyVector.dot
@@ -1,32 +1,32 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-10-g442559 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// MyVector<E, P>
-c85 [label=<<table title="MyVector" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> MyVector&lt;E, P&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ addAll(index : int, c : Collection&lt;E&gt;) : boolean </td></tr><tr><td align="left" balign="left"> ~ foo(x : MyVector&lt;P, MyVector&lt;E, E&gt;&gt;) : MyVector&lt;E, P&gt; </td></tr><tr><td align="left" balign="left"> ~ removeAll(c : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> ~ set(index : int, element : E) : E </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// MyVector<E, P>
+c42 [label=<<table title="MyVector" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> MyVector&lt;E, P&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ addAll(index : int, c : Collection&lt;E&gt;) : boolean </td></tr><tr><td align="left" balign="left"> ~ foo(x : MyVector&lt;P, MyVector&lt;E, E&gt;&gt;) : MyVector&lt;E, P&gt; </td></tr><tr><td align="left" balign="left"> ~ removeAll(c : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> ~ set(index : int, element : E) : E </td></tr></table></td></tr></table>>];
 // MyVector<E, P> extends java.util.Vector<E>
-c86 -> c85 [arrowtail=empty,dir=back,weight=10];
+c43 -> c42 [arrowtail=empty,dir=back,weight=10];
 // MyVector<E, P> implements java.util.List<E>
-c87 -> c85 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c44 -> c42 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // MyVector<E, P> implements java.util.RandomAccess
-c88 -> c85 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c45 -> c42 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // MyVector<E, P> implements java.lang.Cloneable
-c89 -> c85 [arrowtail=empty,style=dashed,dir=back,weight=9];
-// java.util.RandomAccess
-c88 [label=<<table title="java.util.RandomAccess" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/RandomAccess.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> RandomAccess </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/RandomAccess.html"];
-// java.util.List<E>
-c87 [label=<<table title="java.util.List" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> List&lt;E&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><i> + size() : int </i></td></tr><tr><td align="left" balign="left"><i> + isEmpty() : boolean </i></td></tr><tr><td align="left" balign="left"><i> + contains(arg0 : Object) : boolean </i></td></tr><tr><td align="left" balign="left"><i> + iterator() : Iterator&lt;E&gt; </i></td></tr><tr><td align="left" balign="left"><i> + toArray() : Object[] </i></td></tr><tr><td align="left" balign="left"><i> + toArray(arg0 : T[]) : T[] </i></td></tr><tr><td align="left" balign="left"><i> + add(arg0 : E) : boolean </i></td></tr><tr><td align="left" balign="left"><i> + remove(arg0 : Object) : boolean </i></td></tr><tr><td align="left" balign="left"><i> + containsAll(arg0 : Collection&lt;?&gt;) : boolean </i></td></tr><tr><td align="left" balign="left"><i> + addAll(arg0 : Collection&lt;?&gt;) : boolean </i></td></tr><tr><td align="left" balign="left"><i> + addAll(arg0 : int, arg1 : Collection&lt;?&gt;) : boolean </i></td></tr><tr><td align="left" balign="left"><i> + removeAll(arg0 : Collection&lt;?&gt;) : boolean </i></td></tr><tr><td align="left" balign="left"><i> + retainAll(arg0 : Collection&lt;?&gt;) : boolean </i></td></tr><tr><td align="left" balign="left"> + replaceAll(arg0 : UnaryOperator&lt;E&gt;) </td></tr><tr><td align="left" balign="left"> + sort(arg0 : Comparator&lt;?&gt;) </td></tr><tr><td align="left" balign="left"><i> + clear() </i></td></tr><tr><td align="left" balign="left"><i> + equals(arg0 : Object) : boolean </i></td></tr><tr><td align="left" balign="left"><i> + hashCode() : int </i></td></tr><tr><td align="left" balign="left"><i> + get(arg0 : int) : E </i></td></tr><tr><td align="left" balign="left"><i> + set(arg0 : int, arg1 : E) : E </i></td></tr><tr><td align="left" balign="left"><i> + add(arg0 : int, arg1 : E) </i></td></tr><tr><td align="left" balign="left"><i> + remove(arg0 : int) : E </i></td></tr><tr><td align="left" balign="left"><i> + indexOf(arg0 : Object) : int </i></td></tr><tr><td align="left" balign="left"><i> + lastIndexOf(arg0 : Object) : int </i></td></tr><tr><td align="left" balign="left"><i> + listIterator() : ListIterator&lt;E&gt; </i></td></tr><tr><td align="left" balign="left"><i> + listIterator(arg0 : int) : ListIterator&lt;E&gt; </i></td></tr><tr><td align="left" balign="left"><i> + subList(arg0 : int, arg1 : int) : List&lt;E&gt; </i></td></tr><tr><td align="left" balign="left"> + spliterator() : Spliterator&lt;E&gt; </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html"];
-// java.lang.Cloneable
-c89 [label=<<table title="java.lang.Cloneable" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> Cloneable </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html"];
-// java.util.Vector<E>
-c86 [label=<<table title="java.util.Vector" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Vector&lt;E&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> # elementData : Object[] </td></tr><tr><td align="left" balign="left"> # elementCount : int </td></tr><tr><td align="left" balign="left"> # capacityIncrement : int </td></tr><tr><td align="left" balign="left"> - serialVersionUID : long </td></tr><tr><td align="left" balign="left"> - MAX_ARRAY_SIZE : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + copyInto(arg0 : Object[]) </td></tr><tr><td align="left" balign="left"> + trimToSize() </td></tr><tr><td align="left" balign="left"> + ensureCapacity(arg0 : int) </td></tr><tr><td align="left" balign="left"> - ensureCapacityHelper(arg0 : int) </td></tr><tr><td align="left" balign="left"> - grow(arg0 : int) </td></tr><tr><td align="left" balign="left"> - hugeCapacity(arg0 : int) : int </td></tr><tr><td align="left" balign="left"> + setSize(arg0 : int) </td></tr><tr><td align="left" balign="left"> + capacity() : int </td></tr><tr><td align="left" balign="left"> + size() : int </td></tr><tr><td align="left" balign="left"> + isEmpty() : boolean </td></tr><tr><td align="left" balign="left"> + elements() : Enumeration&lt;E&gt; </td></tr><tr><td align="left" balign="left"> + contains(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left"> + indexOf(arg0 : Object) : int </td></tr><tr><td align="left" balign="left"> + indexOf(arg0 : Object, arg1 : int) : int </td></tr><tr><td align="left" balign="left"> + lastIndexOf(arg0 : Object) : int </td></tr><tr><td align="left" balign="left"> + lastIndexOf(arg0 : Object, arg1 : int) : int </td></tr><tr><td align="left" balign="left"> + elementAt(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> + firstElement() : E </td></tr><tr><td align="left" balign="left"> + lastElement() : E </td></tr><tr><td align="left" balign="left"> + setElementAt(arg0 : E, arg1 : int) </td></tr><tr><td align="left" balign="left"> + removeElementAt(arg0 : int) </td></tr><tr><td align="left" balign="left"> + insertElementAt(arg0 : E, arg1 : int) </td></tr><tr><td align="left" balign="left"> + addElement(arg0 : E) </td></tr><tr><td align="left" balign="left"> + removeElement(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left"> + removeAllElements() </td></tr><tr><td align="left" balign="left"> + clone() : Object </td></tr><tr><td align="left" balign="left"> + toArray() : Object[] </td></tr><tr><td align="left" balign="left"> + toArray(arg0 : T[]) : T[] </td></tr><tr><td align="left" balign="left"> ~ elementData(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> + get(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> + set(arg0 : int, arg1 : E) : E </td></tr><tr><td align="left" balign="left"> + add(arg0 : E) : boolean </td></tr><tr><td align="left" balign="left"> + remove(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left"> + add(arg0 : int, arg1 : E) </td></tr><tr><td align="left" balign="left"> + remove(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> + clear() </td></tr><tr><td align="left" balign="left"> + containsAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> + addAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> + removeAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> + retainAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> + addAll(arg0 : int, arg1 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> + equals(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left"> + hashCode() : int </td></tr><tr><td align="left" balign="left"> + toString() : String </td></tr><tr><td align="left" balign="left"> + subList(arg0 : int, arg1 : int) : List&lt;E&gt; </td></tr><tr><td align="left" balign="left"> # removeRange(arg0 : int, arg1 : int) </td></tr><tr><td align="left" balign="left"> - writeObject(arg0 : ObjectOutputStream) </td></tr><tr><td align="left" balign="left"> + listIterator(arg0 : int) : ListIterator&lt;E&gt; </td></tr><tr><td align="left" balign="left"> + listIterator() : ListIterator&lt;E&gt; </td></tr><tr><td align="left" balign="left"> + iterator() : Iterator&lt;E&gt; </td></tr><tr><td align="left" balign="left"> + forEach(arg0 : Consumer&lt;?&gt;) </td></tr><tr><td align="left" balign="left"> + removeIf(arg0 : Predicate&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> + replaceAll(arg0 : UnaryOperator&lt;E&gt;) </td></tr><tr><td align="left" balign="left"> + sort(arg0 : Comparator&lt;?&gt;) </td></tr><tr><td align="left" balign="left"> + spliterator() : Spliterator&lt;E&gt; </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html"];
+c46 -> c42 [arrowtail=empty,style=dashed,dir=back,weight=9];
+// java.util.RandomAccess
+c45 [label=<<table title="java.util.RandomAccess" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/RandomAccess.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> RandomAccess </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/RandomAccess.html"];
+// java.util.List<E>
+c44 [label=<<table title="java.util.List" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> List&lt;E&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> <i>+ size() : int</i> </td></tr><tr><td align="left" balign="left"> <i>+ isEmpty() : boolean</i> </td></tr><tr><td align="left" balign="left"> <i>+ contains(arg0 : Object) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i>+ iterator() : Iterator&lt;E&gt;</i> </td></tr><tr><td align="left" balign="left"> <i>+ toArray() : Object[]</i> </td></tr><tr><td align="left" balign="left"> <i>+ toArray(arg0 : T[]) : T[]</i> </td></tr><tr><td align="left" balign="left"> <i>+ add(arg0 : E) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i>+ remove(arg0 : Object) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i>+ containsAll(arg0 : Collection&lt;?&gt;) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i>+ addAll(arg0 : Collection&lt;?&gt;) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i>+ addAll(arg0 : int, arg1 : Collection&lt;?&gt;) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i>+ removeAll(arg0 : Collection&lt;?&gt;) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i>+ retainAll(arg0 : Collection&lt;?&gt;) : boolean</i> </td></tr><tr><td align="left" balign="left"> + replaceAll(arg0 : UnaryOperator&lt;E&gt;) </td></tr><tr><td align="left" balign="left"> + sort(arg0 : Comparator&lt;?&gt;) </td></tr><tr><td align="left" balign="left"> <i>+ clear()</i> </td></tr><tr><td align="left" balign="left"> <i>+ equals(arg0 : Object) : boolean</i> </td></tr><tr><td align="left" balign="left"> <i>+ hashCode() : int</i> </td></tr><tr><td align="left" balign="left"> <i>+ get(arg0 : int) : E</i> </td></tr><tr><td align="left" balign="left"> <i>+ set(arg0 : int, arg1 : E) : E</i> </td></tr><tr><td align="left" balign="left"> <i>+ add(arg0 : int, arg1 : E)</i> </td></tr><tr><td align="left" balign="left"> <i>+ remove(arg0 : int) : E</i> </td></tr><tr><td align="left" balign="left"> <i>+ indexOf(arg0 : Object) : int</i> </td></tr><tr><td align="left" balign="left"> <i>+ lastIndexOf(arg0 : Object) : int</i> </td></tr><tr><td align="left" balign="left"> <i>+ listIterator() : ListIterator&lt;E&gt;</i> </td></tr><tr><td align="left" balign="left"> <i>+ listIterator(arg0 : int) : ListIterator&lt;E&gt;</i> </td></tr><tr><td align="left" balign="left"> <i>+ subList(arg0 : int, arg1 : int) : List&lt;E&gt;</i> </td></tr><tr><td align="left" balign="left"> + spliterator() : Spliterator&lt;E&gt; </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html"];
+// java.lang.Cloneable
+c46 [label=<<table title="java.lang.Cloneable" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> Cloneable </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html"];
+// java.util.Vector<E>
+c43 [label=<<table title="java.util.Vector" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Vector&lt;E&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> # elementData : Object[] </td></tr><tr><td align="left" balign="left"> # elementCount : int </td></tr><tr><td align="left" balign="left"> # capacityIncrement : int </td></tr><tr><td align="left" balign="left"> - serialVersionUID : long </td></tr><tr><td align="left" balign="left"> - MAX_ARRAY_SIZE : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + copyInto(arg0 : Object[]) </td></tr><tr><td align="left" balign="left"> + trimToSize() </td></tr><tr><td align="left" balign="left"> + ensureCapacity(arg0 : int) </td></tr><tr><td align="left" balign="left"> - ensureCapacityHelper(arg0 : int) </td></tr><tr><td align="left" balign="left"> - grow(arg0 : int) </td></tr><tr><td align="left" balign="left"> - hugeCapacity(arg0 : int) : int </td></tr><tr><td align="left" balign="left"> + setSize(arg0 : int) </td></tr><tr><td align="left" balign="left"> + capacity() : int </td></tr><tr><td align="left" balign="left"> + size() : int </td></tr><tr><td align="left" balign="left"> + isEmpty() : boolean </td></tr><tr><td align="left" balign="left"> + elements() : Enumeration&lt;E&gt; </td></tr><tr><td align="left" balign="left"> + contains(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left"> + indexOf(arg0 : Object) : int </td></tr><tr><td align="left" balign="left"> + indexOf(arg0 : Object, arg1 : int) : int </td></tr><tr><td align="left" balign="left"> + lastIndexOf(arg0 : Object) : int </td></tr><tr><td align="left" balign="left"> + lastIndexOf(arg0 : Object, arg1 : int) : int </td></tr><tr><td align="left" balign="left"> + elementAt(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> + firstElement() : E </td></tr><tr><td align="left" balign="left"> + lastElement() : E </td></tr><tr><td align="left" balign="left"> + setElementAt(arg0 : E, arg1 : int) </td></tr><tr><td align="left" balign="left"> + removeElementAt(arg0 : int) </td></tr><tr><td align="left" balign="left"> + insertElementAt(arg0 : E, arg1 : int) </td></tr><tr><td align="left" balign="left"> + addElement(arg0 : E) </td></tr><tr><td align="left" balign="left"> + removeElement(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left"> + removeAllElements() </td></tr><tr><td align="left" balign="left"> + clone() : Object </td></tr><tr><td align="left" balign="left"> + toArray() : Object[] </td></tr><tr><td align="left" balign="left"> + toArray(arg0 : T[]) : T[] </td></tr><tr><td align="left" balign="left"> ~ elementData(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> + get(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> + set(arg0 : int, arg1 : E) : E </td></tr><tr><td align="left" balign="left"> + add(arg0 : E) : boolean </td></tr><tr><td align="left" balign="left"> + remove(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left"> + add(arg0 : int, arg1 : E) </td></tr><tr><td align="left" balign="left"> + remove(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> + clear() </td></tr><tr><td align="left" balign="left"> + containsAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> + addAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> + removeAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> + retainAll(arg0 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> + addAll(arg0 : int, arg1 : Collection&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> + equals(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left"> + hashCode() : int </td></tr><tr><td align="left" balign="left"> + toString() : String </td></tr><tr><td align="left" balign="left"> + subList(arg0 : int, arg1 : int) : List&lt;E&gt; </td></tr><tr><td align="left" balign="left"> # removeRange(arg0 : int, arg1 : int) </td></tr><tr><td align="left" balign="left"> - readObject(arg0 : ObjectInputStream) </td></tr><tr><td align="left" balign="left"> - writeObject(arg0 : ObjectOutputStream) </td></tr><tr><td align="left" balign="left"> + listIterator(arg0 : int) : ListIterator&lt;E&gt; </td></tr><tr><td align="left" balign="left"> + listIterator() : ListIterator&lt;E&gt; </td></tr><tr><td align="left" balign="left"> + iterator() : Iterator&lt;E&gt; </td></tr><tr><td align="left" balign="left"> + forEach(arg0 : Consumer&lt;?&gt;) </td></tr><tr><td align="left" balign="left"> + removeIf(arg0 : Predicate&lt;?&gt;) : boolean </td></tr><tr><td align="left" balign="left"> + replaceAll(arg0 : UnaryOperator&lt;E&gt;) </td></tr><tr><td align="left" balign="left"> + sort(arg0 : Comparator&lt;?&gt;) </td></tr><tr><td align="left" balign="left"> + spliterator() : Spliterator&lt;E&gt; </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html"];
 }
-
+
diff --git a/testdata/dot-ref/Root.dot b/testdata/dot-ref/Root.dot
index 8379501f..c2e3c2cd 100644
--- a/testdata/dot-ref/Root.dot
+++ b/testdata/dot-ref/Root.dot
@@ -1,48 +1,48 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// Root
-c90 [label=<<table title="Root" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Root </td></tr></table></td></tr></table>>];
-// Adapter
-c91 [label=<<table title="Adapter" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Adapter </td></tr></table></td></tr></table>>];
-// Element
-c92 [label=<<table title="Element" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><i> Element </i></td></tr></table></td></tr></table>>];
-// ObjectType
-c93 [label=<<table title="ObjectType" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ObjectType </td></tr></table></td></tr></table>>];
-// ObjectMap
-c94 [label=<<table title="ObjectMap" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ObjectMap </td></tr></table></td></tr></table>>];
-// Table
-c95 [label=<<table title="Table" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Table </td></tr></table></td></tr></table>>];
-// DataOperation
-c96 [label=<<table title="DataOperation" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> DataOperation </td></tr></table></td></tr></table>>];
-// Root assoc Adapter
-c90 -> c91 [arrowhead=none,weight=2,taillabel="1..1", headlabel="0..n"];
-// Root assoc ObjectType
-c90 -> c93 [arrowhead=none,weight=2,headlabel="0..n"];
-// Root assoc ObjectMap
-c90 -> c94 [arrowhead=none,weight=2,headlabel="0..n"];
-// Root assoc Table
-c90 -> c95 [arrowhead=none,weight=2,headlabel="0..n"];
-// Root assoc DataOperation
-c90 -> c96 [arrowhead=none,weight=2,headlabel="0..n"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// Root
+c89 [label=<<table title="Root" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Root </td></tr></table></td></tr></table>>];
+// Adapter
+c90 [label=<<table title="Adapter" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Adapter </td></tr></table></td></tr></table>>];
+// Element
+c91 [label=<<table title="Element" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> <i>Element</i> </td></tr></table></td></tr></table>>];
+// ObjectType
+c92 [label=<<table title="ObjectType" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ObjectType </td></tr></table></td></tr></table>>];
+// ObjectMap
+c93 [label=<<table title="ObjectMap" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ObjectMap </td></tr></table></td></tr></table>>];
+// Table
+c94 [label=<<table title="Table" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Table </td></tr></table></td></tr></table>>];
+// DataOperation
+c95 [label=<<table title="DataOperation" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> DataOperation </td></tr></table></td></tr></table>>];
+// Root assoc Adapter
+c89 -> c90 [arrowhead=none,weight=2,taillabel="1..1",headlabel="0..n"];
+// Root assoc ObjectType
+c89 -> c92 [arrowhead=none,weight=2,headlabel="0..n"];
+// Root assoc ObjectMap
+c89 -> c93 [arrowhead=none,weight=2,headlabel="0..n"];
+// Root assoc Table
+c89 -> c94 [arrowhead=none,weight=2,headlabel="0..n"];
+// Root assoc DataOperation
+c89 -> c95 [arrowhead=none,weight=2,headlabel="0..n"];
 // ObjectType extends Element
-c92 -> c93 [arrowtail=empty,dir=back,weight=10];
+c91 -> c92 [arrowtail=empty,dir=back,weight=10];
 // ObjectMap extends Element
-c92 -> c94 [arrowtail=empty,dir=back,weight=10];
-// ObjectMap has ObjectType
-c94 -> c93 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4,taillabel="1..1", headlabel="1..1"];
+c91 -> c93 [arrowtail=empty,dir=back,weight=10];
+// ObjectMap has ObjectType
+c93 -> c92 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4,taillabel="1..1",headlabel="1..1"];
 // Table extends Element
-c92 -> c95 [arrowtail=empty,dir=back,weight=10];
+c91 -> c94 [arrowtail=empty,dir=back,weight=10];
 // DataOperation extends Element
-c92 -> c96 [arrowtail=empty,dir=back,weight=10];
+c91 -> c95 [arrowtail=empty,dir=back,weight=10];
 }
-
+
diff --git a/testdata/dot-ref/RunnableRef.dot b/testdata/dot-ref/RunnableRef.dot
index f347d8f8..bc948a28 100644
--- a/testdata/dot-ref/RunnableRef.dot
+++ b/testdata/dot-ref/RunnableRef.dot
@@ -1,20 +1,20 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-10-g442559 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// test.RunnableRef
-c98 [label=<<table title="test.RunnableRef" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> RunnableRef </td></tr></table></td></tr></table>>];
-// test.RunnableRef depend java.lang.Runnable
-c98 -> c99 [arrowhead=open,style=dashed,weight=0];
-// java.lang.Runnable
-c99 [label=<<table title="java.lang.Runnable" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> Runnable </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// test.RunnableRef
+c1 [label=<<table title="test.RunnableRef" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> RunnableRef </td></tr></table></td></tr></table>>];
+// test.RunnableRef depend java.lang.Runnable
+c1 -> c2 [arrowhead=open,style=dashed,weight=0];
+// java.lang.Runnable
+c2 [label=<<table title="java.lang.Runnable" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> Runnable </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html"];
 }
-
+
diff --git a/testdata/dot-ref/Style.dot b/testdata/dot-ref/Style.dot
index 09ab5f44..30194dbb 100644
--- a/testdata/dot-ref/Style.dot
+++ b/testdata/dot-ref/Style.dot
@@ -1,7 +1,7 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-10-g442559 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
@@ -11,11 +11,11 @@ node [fontname="arial",fontcolor="black",fontsize=9,shape=plaintext,margin=0,wid
 nodesep=0.25;
 ranksep=0.5;
 // net.sf.whatever.test.AbstractBase
-c112 [label=<<table title="net.sf.whatever.test.AbstractBase" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;base&#187; </td></tr><tr><td align="center" balign="center"><font face="arial"> AbstractBase </font></td></tr><tr><td align="center" balign="center"><font point-size="8.0"> net.sf.whatever.test </font></td></tr><tr><td align="right" balign="right"><font face="arial" point-size="6.0"> {since = 1.0} </font></td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  field : int </td></tr><tr><td align="right" balign="right"><font face="arial" point-size="6.0"> {since = 1.5} </font></td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><i>  abstractMethod() </i></td></tr><tr><td align="left" balign="left">  concreteMethod() : int </td></tr></table></td></tr></table>>];
+c112 [label=<<table title="net.sf.whatever.test.AbstractBase" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;base&#187; </td></tr><tr><td align="center" balign="center"> <font face="arial"><i>AbstractBase</i></font> </td></tr><tr><td align="center" balign="center"> <font point-size="8.0">net.sf.whatever.test</font> </td></tr><tr><td align="right" balign="right"> <font face="arial" point-size="6.0">{since = 1.0}</font> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  field : int </td></tr><tr><td align="right" balign="right"> <font face="arial" point-size="6.0">{since = 1.5}</font> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> <i> abstractMethod()</i> </td></tr><tr><td align="left" balign="left">  concreteMethod() : int </td></tr></table></td></tr></table>>];
 // net.sf.whatever.test.Composite
-c113 [label=<<table title="net.sf.whatever.test.Composite" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="arial"> Composite </font></td></tr><tr><td align="center" balign="center"><font point-size="8.0"> net.sf.whatever.test </font></td></tr></table></td></tr></table>>];
+c113 [label=<<table title="net.sf.whatever.test.Composite" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> <font face="arial">Composite</font> </td></tr><tr><td align="center" balign="center"> <font point-size="8.0">net.sf.whatever.test</font> </td></tr></table></td></tr></table>>];
 // net.sf.whatever.test.Style
-c114 [label=<<table title="net.sf.whatever.test.Style" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="arial"> Style </font></td></tr><tr><td align="center" balign="center"><font point-size="8.0"> net.sf.whatever.test </font></td></tr></table></td></tr></table>>];
+c114 [label=<<table title="net.sf.whatever.test.Style" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> <font face="arial">Style</font> </td></tr><tr><td align="center" balign="center"> <font point-size="8.0">net.sf.whatever.test</font> </td></tr></table></td></tr></table>>];
 // net.sf.whatever.test.Composite extends net.sf.whatever.test.AbstractBase
 c112 -> c113 [arrowtail=empty,dir=back,weight=10];
 // net.sf.whatever.test.Composite composed from.Outer.Space.AlienClass
@@ -23,6 +23,6 @@ c113 -> c115 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1",l
 // net.sf.whatever.test.Style extends net.sf.whatever.test.AbstractBase
 c112 -> c114 [arrowtail=empty,dir=back,weight=10];
 // from.Outer.Space.AlienClass
-c115[label=<<table title="from.Outer.Space.AlienClass" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/from/Outer.Space.AlienClass.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="arial"> AlienClass </font></td></tr><tr><td align="center" balign="center"><font point-size="8.0"> from.Outer.Space </font></td></tr></table></td></tr></table>>];
+c115[label=<<table title="from.Outer.Space.AlienClass" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/from/Outer.Space.AlienClass.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> <font face="arial">AlienClass</font> </td></tr><tr><td align="center" balign="center"> <font point-size="8.0">from.Outer.Space</font> </td></tr></table></td></tr></table>>];
 }
 
diff --git a/testdata/dot-ref/TestHideOp.dot b/testdata/dot-ref/TestHideOp.dot
index 793bf784..e133414e 100644
--- a/testdata/dot-ref/TestHideOp.dot
+++ b/testdata/dot-ref/TestHideOp.dot
@@ -1,16 +1,16 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// test.TestHideOp
-c117 [label=<<table title="test.TestHideOp" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> TestHideOp </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// test.TestHideOp
+c110 [label=<<table title="test.TestHideOp" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> TestHideOp </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
 }
-
+
diff --git a/testdata/dot-ref/ViewAll.dot b/testdata/dot-ref/ViewAll.dot
index 84cf6609..697bad8d 100644
--- a/testdata/dot-ref/ViewAll.dot
+++ b/testdata/dot-ref/ViewAll.dot
@@ -1,32 +1,32 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// gr.spinellis.basic.invoice.InvoiceItem
-c355 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.invoice.Invoice
-c356 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.invoice.Customer
-c357 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.product.Product
-c358 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.product.Category
-c359 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product
-c355 -> c358 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
-// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer
-c356 -> c357 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
-// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem
-c356 -> c355 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="*"];
-// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
-c358 -> c359 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.basic.invoice.Customer
+c174 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.invoice.InvoiceItem
+c175 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.invoice.Invoice
+c176 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Product
+c177 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Category
+c178 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product
+c175 -> c177 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
+// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem
+c176 -> c175 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1",headlabel="*"];
+// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer
+c176 -> c174 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
+// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
+c177 -> c178 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
 }
-
+
diff --git a/testdata/dot-ref/ViewAllDetailed.dot b/testdata/dot-ref/ViewAllDetailed.dot
index 78339536..e33b0f25 100644
--- a/testdata/dot-ref/ViewAllDetailed.dot
+++ b/testdata/dot-ref/ViewAllDetailed.dot
@@ -1,32 +1,32 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// gr.spinellis.basic.invoice.InvoiceItem
-c317 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  product : Product </td></tr><tr><td align="left" balign="left">  quantity : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.invoice.Invoice
-c318 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  total : double </td></tr><tr><td align="left" balign="left">  items : InvoiceItem[] </td></tr><tr><td align="left" balign="left">  customer : Customer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  addItem(p : Product, quantity : int) </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.invoice.Customer
-c319 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : String </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.product.Product
-c320 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : String </td></tr><tr><td align="left" balign="left">  stock : int </td></tr><tr><td align="left" balign="left">  price : double </td></tr><tr><td align="left" balign="left">  category : Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.product.Category
-c321 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : String </td></tr><tr><td align="left" balign="left">  products : List&lt;&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product
-c317 -> c320 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
-// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer
-c318 -> c319 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
-// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem
-c318 -> c317 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="*"];
-// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
-c320 -> c321 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.basic.invoice.Customer
+c403 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : String </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.invoice.InvoiceItem
+c404 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  product : Product </td></tr><tr><td align="left" balign="left">  quantity : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.invoice.Invoice
+c405 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  total : double </td></tr><tr><td align="left" balign="left">  items : InvoiceItem[] </td></tr><tr><td align="left" balign="left">  customer : Customer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  addItem(p : Product, quantity : int) </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Product
+c406 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : String </td></tr><tr><td align="left" balign="left">  stock : int </td></tr><tr><td align="left" balign="left">  price : double </td></tr><tr><td align="left" balign="left">  category : Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Category
+c407 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : String </td></tr><tr><td align="left" balign="left">  products : List&lt;&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product
+c404 -> c406 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
+// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem
+c405 -> c404 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1",headlabel="*"];
+// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer
+c405 -> c403 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
+// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
+c406 -> c407 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
 }
-
+
diff --git a/testdata/dot-ref/ViewAtt.dot b/testdata/dot-ref/ViewAtt.dot
index f7ea8866..e34745e0 100644
--- a/testdata/dot-ref/ViewAtt.dot
+++ b/testdata/dot-ref/ViewAtt.dot
@@ -1,32 +1,32 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// gr.spinellis.basic.invoice.InvoiceItem
-c279 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  product </td></tr><tr><td align="left" balign="left">  quantity </td></tr></table></td></tr></table>>, fontname="Helvetica", fontcolor="black", fontsize=16.0];
-// gr.spinellis.basic.invoice.Invoice
-c280 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  total </td></tr><tr><td align="left" balign="left">  items </td></tr><tr><td align="left" balign="left">  customer </td></tr></table></td></tr></table>>, fontname="Helvetica", fontcolor="black", fontsize=16.0];
-// gr.spinellis.basic.invoice.Customer
-c281 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name </td></tr></table></td></tr></table>>, fontname="Helvetica", fontcolor="black", fontsize=16.0];
-// gr.spinellis.basic.product.Product
-c282 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name </td></tr><tr><td align="left" balign="left">  stock </td></tr><tr><td align="left" balign="left">  price </td></tr><tr><td align="left" balign="left">  category </td></tr></table></td></tr></table>>, fontname="Helvetica", fontcolor="black", fontsize=16.0];
-// gr.spinellis.basic.product.Category
-c283 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name </td></tr><tr><td align="left" balign="left">  products </td></tr></table></td></tr></table>>, fontname="Helvetica", fontcolor="black", fontsize=16.0];
-// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product
-c279 -> c282 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
-// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer
-c280 -> c281 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
-// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem
-c280 -> c279 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="*"];
-// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
-c282 -> c283 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.basic.invoice.Customer
+c250 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.invoice.InvoiceItem
+c251 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  product </td></tr><tr><td align="left" balign="left">  quantity </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.invoice.Invoice
+c252 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  total </td></tr><tr><td align="left" balign="left">  items </td></tr><tr><td align="left" balign="left">  customer </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Product
+c253 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name </td></tr><tr><td align="left" balign="left">  stock </td></tr><tr><td align="left" balign="left">  price </td></tr><tr><td align="left" balign="left">  category </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Category
+c254 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name </td></tr><tr><td align="left" balign="left">  products </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product
+c251 -> c253 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
+// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem
+c252 -> c251 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1",headlabel="*"];
+// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer
+c252 -> c250 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
+// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
+c253 -> c254 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
 }
-
+
diff --git a/testdata/dot-ref/ViewChildEmpty.dot b/testdata/dot-ref/ViewChildEmpty.dot
index ab25f237..6ed4cf9f 100644
--- a/testdata/dot-ref/ViewChildEmpty.dot
+++ b/testdata/dot-ref/ViewChildEmpty.dot
@@ -1,20 +1,20 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// gr.spinellis.basic.product.Product
-c244 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="LemonChiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.product.Category
-c245 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="LemonChiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
-c244 -> c245 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.basic.product.Product
+c215 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="LemonChiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Category
+c216 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="LemonChiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
+c215 -> c216 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
 }
-
+
diff --git a/testdata/dot-ref/ViewChildOverride.dot b/testdata/dot-ref/ViewChildOverride.dot
index 4297729e..07836b1c 100644
--- a/testdata/dot-ref/ViewChildOverride.dot
+++ b/testdata/dot-ref/ViewChildOverride.dot
@@ -1,20 +1,20 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// gr.spinellis.basic.product.Product
-c206 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="LemonChiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name </td></tr><tr><td align="left" balign="left">  stock </td></tr><tr><td align="left" balign="left">  price </td></tr><tr><td align="left" balign="left">  category </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.product.Category
-c207 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="brown"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
-c206 -> c207 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.basic.product.Product
+c368 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="LemonChiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name </td></tr><tr><td align="left" balign="left">  stock </td></tr><tr><td align="left" balign="left">  price </td></tr><tr><td align="left" balign="left">  category </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Category
+c369 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="brown"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
+c368 -> c369 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
 }
-
+
diff --git a/testdata/dot-ref/ViewColors.dot b/testdata/dot-ref/ViewColors.dot
index 59e9cec1..b132851c 100644
--- a/testdata/dot-ref/ViewColors.dot
+++ b/testdata/dot-ref/ViewColors.dot
@@ -1,36 +1,36 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-10-g442559 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// gr.spinellis.basic.invoice.InvoiceItem
-c164 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.invoice.Invoice
-c165 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.invoice.Customer
-c166 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.product.Product
-c167 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.product.Category
-c168 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product
-c164 -> c167 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
-// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer
-c165 -> c166 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
-// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem
-c165 -> c164 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="*"];
-// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
-c167 -> c168 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
-// gr.spinellis.basic.product.Category depend java.util.List<E>
-c168 -> c202 [arrowhead=open,style=dashed,weight=0];
-// java.util.List<E>
-c202 [label=<<table title="java.util.List" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="gray" href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> List&lt;E&gt; </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.basic.invoice.Customer
+c326 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.invoice.InvoiceItem
+c327 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.invoice.Invoice
+c328 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Product
+c329 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Category
+c330 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product
+c327 -> c329 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
+// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem
+c328 -> c327 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1",headlabel="*"];
+// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer
+c328 -> c326 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
+// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
+c329 -> c330 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
+// gr.spinellis.basic.product.Category depend java.util.List<E>
+c330 -> c356 [arrowhead=open,style=dashed,weight=0];
+// java.util.List<E>
+c356 [label=<<table title="java.util.List" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="gray" href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> List&lt;E&gt; </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html"];
 }
-
+
diff --git a/testdata/dot-ref/ViewContext.dot b/testdata/dot-ref/ViewContext.dot
index a20006b8..ff968197 100644
--- a/testdata/dot-ref/ViewContext.dot
+++ b/testdata/dot-ref/ViewContext.dot
@@ -1,7 +1,7 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-10-g442559 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
@@ -11,34 +11,34 @@ node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=
 nodesep=0.25;
 ranksep=0.5;
 // gr.spinellis.context.classes.AClient
-c424 [label=<<table title="gr.spinellis.context.classes.AClient" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> AClient </td></tr></table></td></tr></table>>];
+c523 [label=<<table title="gr.spinellis.context.classes.AClient" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> AClient </td></tr></table></td></tr></table>>];
 // gr.spinellis.context.classes.ASubclass
-c426 [label=<<table title="gr.spinellis.context.classes.ASubclass" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ASubclass </td></tr></table></td></tr></table>>];
+c525 [label=<<table title="gr.spinellis.context.classes.ASubclass" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ASubclass </td></tr></table></td></tr></table>>];
 // gr.spinellis.context.classes.E
-c427 [label=<<table title="gr.spinellis.context.classes.E" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> E </td></tr></table></td></tr></table>>];
+c526 [label=<<table title="gr.spinellis.context.classes.E" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> E </td></tr></table></td></tr></table>>];
 // gr.spinellis.context.classes.D
-c429 [label=<<table title="gr.spinellis.context.classes.D" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> D </td></tr></table></td></tr></table>>];
+c528 [label=<<table title="gr.spinellis.context.classes.D" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> D </td></tr></table></td></tr></table>>];
 // gr.spinellis.context.classes.B
-c432 [label=<<table title="gr.spinellis.context.classes.B" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> B </td></tr></table></td></tr></table>>];
+c531 [label=<<table title="gr.spinellis.context.classes.B" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> B </td></tr></table></td></tr></table>>];
 // gr.spinellis.context.classes.ABaseClass
-c433 [label=<<table title="gr.spinellis.context.classes.ABaseClass" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ABaseClass </td></tr></table></td></tr></table>>];
+c532 [label=<<table title="gr.spinellis.context.classes.ABaseClass" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ABaseClass </td></tr></table></td></tr></table>>];
 // gr.spinellis.context.classes.A
-c434 [label=<<table title="gr.spinellis.context.classes.A" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonchiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> A </td></tr></table></td></tr></table>>];
+c533 [label=<<table title="gr.spinellis.context.classes.A" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonchiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> A </td></tr></table></td></tr></table>>];
 // gr.spinellis.context.classes.ASubclass extends gr.spinellis.context.classes.A
-c434 -> c426 [arrowtail=empty,dir=back,weight=10];
+c533 -> c525 [arrowtail=empty,dir=back,weight=10];
 // gr.spinellis.context.classes.A extends gr.spinellis.context.classes.ABaseClass
-c433 -> c434 [arrowtail=empty,dir=back,weight=10];
+c532 -> c533 [arrowtail=empty,dir=back,weight=10];
 // gr.spinellis.context.classes.D navassoc gr.spinellis.context.classes.A
-c429 -> c434 [arrowhead=open,weight=1];
+c528 -> c533 [arrowhead=open,weight=1];
 // gr.spinellis.context.classes.A navassoc gr.spinellis.context.classes.B
-c434 -> c432 [arrowhead=open,weight=1];
+c533 -> c531 [arrowhead=open,weight=1];
 // gr.spinellis.context.classes.A navassoc javax.swing.JComponent
-c434 -> c509 [arrowhead=open,weight=1];
+c533 -> c587 [arrowhead=open,weight=1];
 // gr.spinellis.context.classes.AClient depend gr.spinellis.context.classes.A
-c424 -> c434 [arrowhead=open,style=dashed,weight=0];
+c523 -> c533 [arrowhead=open,style=dashed,weight=0];
 // gr.spinellis.context.classes.A depend gr.spinellis.context.classes.E
-c434 -> c427 [arrowhead=open,style=dashed,weight=0];
+c533 -> c526 [arrowhead=open,style=dashed,weight=0];
 // javax.swing.JComponent
-c509 [label=<<table title="javax.swing.JComponent" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><i> JComponent </i></td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html"];
+c587 [label=<<table title="javax.swing.JComponent" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> <i>JComponent</i> </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html"];
 }
 
diff --git a/testdata/dot-ref/ViewInterfaces.dot b/testdata/dot-ref/ViewInterfaces.dot
index 7e1938ea..fe9e6805 100644
--- a/testdata/dot-ref/ViewInterfaces.dot
+++ b/testdata/dot-ref/ViewInterfaces.dot
@@ -1,32 +1,32 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-20-g09fab1 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// gr.spinellis.iface.classes.FarImplementor
-c534 [label=<<table title="gr.spinellis.iface.classes.FarImplementor" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> FarImplementor </td></tr></table></td></tr></table>>];
-// gr.spinellis.iface.classes.DirectImplementor
-c535 [label=<<table title="gr.spinellis.iface.classes.DirectImplementor" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> DirectImplementor </td></tr></table></td></tr></table>>];
-// gr.spinellis.iface.classes.SubSubFace
-c537 [label=<<table title="gr.spinellis.iface.classes.SubSubFace" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> SubSubFace </td></tr></table></td></tr></table>>];
-// gr.spinellis.iface.classes.SubFace
-c538 [label=<<table title="gr.spinellis.iface.classes.SubFace" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> SubFace </td></tr></table></td></tr></table>>];
-// gr.spinellis.iface.classes.Face
-c539 [label=<<table title="gr.spinellis.iface.classes.Face" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonchiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> Face </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.iface.classes.FarImplementor
+c129 [label=<<table title="gr.spinellis.iface.classes.FarImplementor" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> FarImplementor </td></tr></table></td></tr></table>>];
+// gr.spinellis.iface.classes.DirectImplementor
+c130 [label=<<table title="gr.spinellis.iface.classes.DirectImplementor" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> DirectImplementor </td></tr></table></td></tr></table>>];
+// gr.spinellis.iface.classes.SubSubFace
+c132 [label=<<table title="gr.spinellis.iface.classes.SubSubFace" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> SubSubFace </td></tr></table></td></tr></table>>];
+// gr.spinellis.iface.classes.SubFace
+c133 [label=<<table title="gr.spinellis.iface.classes.SubFace" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> SubFace </td></tr></table></td></tr></table>>];
+// gr.spinellis.iface.classes.Face
+c134 [label=<<table title="gr.spinellis.iface.classes.Face" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonchiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> Face </td></tr></table></td></tr></table>>];
 // gr.spinellis.iface.classes.FarImplementor implements gr.spinellis.iface.classes.SubSubFace
-c537 -> c534 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c132 -> c129 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // gr.spinellis.iface.classes.DirectImplementor implements gr.spinellis.iface.classes.Face
-c539 -> c535 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c134 -> c130 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // gr.spinellis.iface.classes.SubSubFace implements gr.spinellis.iface.classes.SubFace
-c538 -> c537 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c133 -> c132 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // gr.spinellis.iface.classes.SubFace implements gr.spinellis.iface.classes.Face
-c539 -> c538 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c134 -> c133 [arrowtail=empty,style=dashed,dir=back,weight=9];
 }
-
+
diff --git a/testdata/dot-ref/ViewProduct.dot b/testdata/dot-ref/ViewProduct.dot
index 8f2192a7..246a3820 100644
--- a/testdata/dot-ref/ViewProduct.dot
+++ b/testdata/dot-ref/ViewProduct.dot
@@ -1,20 +1,20 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// gr.spinellis.basic.product.Product
-c129 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name </td></tr><tr><td align="left" balign="left">  stock </td></tr><tr><td align="left" balign="left">  price </td></tr><tr><td align="left" balign="left">  category </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.product.Category
-c130 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name </td></tr><tr><td align="left" balign="left">  products </td></tr></table></td></tr></table>>];
-// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
-c129 -> c130 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.basic.product.Product
+c291 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name </td></tr><tr><td align="left" balign="left">  stock </td></tr><tr><td align="left" balign="left">  price </td></tr><tr><td align="left" balign="left">  category </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Category
+c292 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name </td></tr><tr><td align="left" balign="left">  products </td></tr></table></td></tr></table>>];
+// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
+c291 -> c292 [arrowhead=none,weight=2,taillabel="*",headlabel="1"];
 }
-
+
diff --git a/testdata/dot-ref/ViewSubclasses.dot b/testdata/dot-ref/ViewSubclasses.dot
index 0dc6c7f8..d7e85be1 100644
--- a/testdata/dot-ref/ViewSubclasses.dot
+++ b/testdata/dot-ref/ViewSubclasses.dot
@@ -1,7 +1,7 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-20-g09fab1 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
@@ -11,22 +11,22 @@ node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=
 nodesep=0.25;
 ranksep=0.5;
 // gr.spinellis.subclass.classes.SubOneTwo
-c580 [label=<<table title="gr.spinellis.subclass.classes.SubOneTwo" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubOneTwo </td></tr></table></td></tr></table>>];
+c455 [label=<<table title="gr.spinellis.subclass.classes.SubOneTwo" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubOneTwo </td></tr></table></td></tr></table>>];
 // gr.spinellis.subclass.classes.SubOneOne
-c581 [label=<<table title="gr.spinellis.subclass.classes.SubOneOne" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubOneOne </td></tr></table></td></tr></table>>];
+c456 [label=<<table title="gr.spinellis.subclass.classes.SubOneOne" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubOneOne </td></tr></table></td></tr></table>>];
 // gr.spinellis.subclass.classes.SubTwo
-c582 [label=<<table title="gr.spinellis.subclass.classes.SubTwo" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubTwo </td></tr></table></td></tr></table>>];
+c457 [label=<<table title="gr.spinellis.subclass.classes.SubTwo" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubTwo </td></tr></table></td></tr></table>>];
 // gr.spinellis.subclass.classes.SubOne
-c583 [label=<<table title="gr.spinellis.subclass.classes.SubOne" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubOne </td></tr></table></td></tr></table>>];
+c458 [label=<<table title="gr.spinellis.subclass.classes.SubOne" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubOne </td></tr></table></td></tr></table>>];
 // gr.spinellis.subclass.classes.Super
-c584 [label=<<table title="gr.spinellis.subclass.classes.Super" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonchiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Super </td></tr></table></td></tr></table>>];
+c459 [label=<<table title="gr.spinellis.subclass.classes.Super" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonchiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Super </td></tr></table></td></tr></table>>];
 // gr.spinellis.subclass.classes.SubOneTwo extends gr.spinellis.subclass.classes.SubOne
-c583 -> c580 [arrowtail=empty,dir=back,weight=10];
+c458 -> c455 [arrowtail=empty,dir=back,weight=10];
 // gr.spinellis.subclass.classes.SubOneOne extends gr.spinellis.subclass.classes.SubOne
-c583 -> c581 [arrowtail=empty,dir=back,weight=10];
+c458 -> c456 [arrowtail=empty,dir=back,weight=10];
 // gr.spinellis.subclass.classes.SubTwo extends gr.spinellis.subclass.classes.Super
-c584 -> c582 [arrowtail=empty,dir=back,weight=10];
+c459 -> c457 [arrowtail=empty,dir=back,weight=10];
 // gr.spinellis.subclass.classes.SubOne extends gr.spinellis.subclass.classes.Super
-c584 -> c583 [arrowtail=empty,dir=back,weight=10];
+c459 -> c458 [arrowtail=empty,dir=back,weight=10];
 }
 
diff --git a/testdata/dot-ref/active.dot b/testdata/dot-ref/active.dot
index 02c5a4ef..23907082 100644
--- a/testdata/dot-ref/active.dot
+++ b/testdata/dot-ref/active.dot
@@ -1,7 +1,7 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-54-gbca0ce (http://www.spinellis.gr/umlgraph/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
@@ -11,6 +11,6 @@ node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=
 nodesep=0.25;
 ranksep=0.5;
 // Active
-c32 [label=<<table title="Active" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td rowspan="10"></td><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Active </td></tr></table></td><td rowspan="10"></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  run() </td></tr></table></td></tr></table>>];
+c69 [label=<<table title="Active" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td rowspan="10"></td><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Active </td></tr></table></td><td rowspan="10"></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  run() </td></tr></table></td></tr></table>>];
 }
 
diff --git a/testdata/dot-ref/advrel.dot b/testdata/dot-ref/advrel.dot
index 2b21798f..d962fa2c 100644
--- a/testdata/dot-ref/advrel.dot
+++ b/testdata/dot-ref/advrel.dot
@@ -1,36 +1,36 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_0-10-g786d98 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// Controller
-c5 [label=<<table title="Controller" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Controller </td></tr></table></td></tr></table>>];
-// EmbeddedAgent
-c6 [label=<<table title="EmbeddedAgent" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> EmbeddedAgent </td></tr></table></td></tr></table>>];
-// PowerManager
-c7 [label=<<table title="PowerManager" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> PowerManager </td></tr></table></td></tr></table>>];
-// SetTopController
-c8 [label=<<table title="SetTopController" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SetTopController </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  authorizationLevel </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  startUp() </td></tr><tr><td align="left" balign="left">  shutDown() </td></tr><tr><td align="left" balign="left">  connect() </td></tr></table></td></tr></table>>];
-// ChannelIterator
-c9 [label=<<table title="ChannelIterator" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ChannelIterator </td></tr></table></td></tr></table>>];
-// URLStreamHandler
-c10 [label=<<table title="URLStreamHandler" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> URLStreamHandler </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><i>  OpenConnection() </i></td></tr><tr><td align="left" balign="left"><i>  parseURL() </i></td></tr><tr><td align="left" balign="left"><i>  setURL() </i></td></tr><tr><td align="left" balign="left"><i>  toExternalForm() </i></td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// Controller
+c78 [label=<<table title="Controller" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Controller </td></tr></table></td></tr></table>>];
+// EmbeddedAgent
+c79 [label=<<table title="EmbeddedAgent" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> EmbeddedAgent </td></tr></table></td></tr></table>>];
+// PowerManager
+c80 [label=<<table title="PowerManager" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> PowerManager </td></tr></table></td></tr></table>>];
+// SetTopController
+c81 [label=<<table title="SetTopController" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SetTopController </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  authorizationLevel </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  startUp() </td></tr><tr><td align="left" balign="left">  shutDown() </td></tr><tr><td align="left" balign="left">  connect() </td></tr></table></td></tr></table>>];
+// ChannelIterator
+c82 [label=<<table title="ChannelIterator" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ChannelIterator </td></tr></table></td></tr></table>>];
+// URLStreamHandler
+c83 [label=<<table title="URLStreamHandler" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> URLStreamHandler </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> <i> OpenConnection()</i> </td></tr><tr><td align="left" balign="left"> <i> parseURL()</i> </td></tr><tr><td align="left" balign="left"> <i> setURL()</i> </td></tr><tr><td align="left" balign="left"> <i> toExternalForm()</i> </td></tr></table></td></tr></table>>];
 // SetTopController extends Controller
-c5 -> c8 [arrowtail=empty,dir=back,weight=10];
+c78 -> c81 [arrowtail=empty,dir=back,weight=10];
 // SetTopController extends EmbeddedAgent
-c6 -> c8 [arrowtail=empty,dir=back,weight=10];
+c79 -> c81 [arrowtail=empty,dir=back,weight=10];
 // SetTopController implements URLStreamHandler
-c10 -> c8 [arrowtail=empty,style=dashed,dir=back,weight=9];
-// SetTopController navassoc PowerManager
-c8 -> c7 [arrowhead=open,weight=1];
-// ChannelIterator depend SetTopController
-c9 -> c8 [arrowhead=open,style=dashed,weight=0,label="&#171;friend&#187;"];
+c83 -> c81 [arrowtail=empty,style=dashed,dir=back,weight=9];
+// SetTopController navassoc PowerManager
+c81 -> c80 [arrowhead=open,weight=1];
+// ChannelIterator depend SetTopController
+c82 -> c81 [arrowhead=open,style=dashed,weight=0,label="&#171;friend&#187;"];
 }
-
+
diff --git a/testdata/dot-ref/assoc.dot b/testdata/dot-ref/assoc.dot
index 29715e00..cfb5ec74 100644
--- a/testdata/dot-ref/assoc.dot
+++ b/testdata/dot-ref/assoc.dot
@@ -1,25 +1,25 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-rankdir=LR;
-// UserGroup
-c12 [label=<<table title="UserGroup" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> UserGroup </td></tr></table></td></tr></table>>];
-// User
-c13 [label=<<table title="User" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> User </td></tr></table></td></tr></table>>];
-// Password
-c14 [label=<<table title="Password" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Password </td></tr></table></td></tr></table>>];
-// UserGroup assoc User
-c12 -> c13 [arrowhead=none,weight=2,taillabel="*", headlabel="*\n\n+user "];
-// User navassoc Password
-c13 -> c14 [arrowhead=open,weight=1,taillabel="1\n\n+owner\r", headlabel="*\n\n+key"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+rankdir=LR;
+// UserGroup
+c14 [label=<<table title="UserGroup" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> UserGroup </td></tr></table></td></tr></table>>];
+// User
+c15 [label=<<table title="User" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> User </td></tr></table></td></tr></table>>];
+// Password
+c16 [label=<<table title="Password" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Password </td></tr></table></td></tr></table>>];
+// UserGroup assoc User
+c14 -> c15 [arrowhead=none,weight=2,taillabel="*",headlabel="*\n\n+user "];
+// User navassoc Password
+c15 -> c16 [arrowhead=open,weight=1,taillabel="1\n\n+owner\r",headlabel="*\n\n+key"];
 }
-
+
diff --git a/testdata/dot-ref/car.dot b/testdata/dot-ref/car.dot
index 1b3b5728..0362116d 100644
--- a/testdata/dot-ref/car.dot
+++ b/testdata/dot-ref/car.dot
@@ -1,28 +1,28 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// Tyre
-c15 [label=<<table title="Tyre" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Tyre </td></tr></table></td></tr></table>>];
-// Engine
-c16 [label=<<table title="Engine" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Engine </td></tr></table></td></tr></table>>];
-// Body
-c17 [label=<<table title="Body" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Body </td></tr></table></td></tr></table>>];
-// Car
-c18 [label=<<table title="Car" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Car </td></tr></table></td></tr></table>>];
-// Car composed Tyre
-c18 -> c15 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="4"];
-// Car composed Engine
-c18 -> c16 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="1"];
-// Car composed Body
-c18 -> c17 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="1"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// Tyre
+c53 [label=<<table title="Tyre" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Tyre </td></tr></table></td></tr></table>>];
+// Engine
+c54 [label=<<table title="Engine" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Engine </td></tr></table></td></tr></table>>];
+// Body
+c55 [label=<<table title="Body" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Body </td></tr></table></td></tr></table>>];
+// Car
+c56 [label=<<table title="Car" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Car </td></tr></table></td></tr></table>>];
+// Car composed Tyre
+c56 -> c53 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1",headlabel="4"];
+// Car composed Engine
+c56 -> c54 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1",headlabel="1"];
+// Car composed Body
+c56 -> c55 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1",headlabel="1"];
 }
-
+
diff --git a/testdata/dot-ref/catalina.dot b/testdata/dot-ref/catalina.dot
index b0b624a5..62968352 100644
--- a/testdata/dot-ref/catalina.dot
+++ b/testdata/dot-ref/catalina.dot
@@ -1,58 +1,58 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// HttpResponseBase
-c19 [label=<<table title="HttpResponseBase" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> HttpResponseBase </td></tr></table></td></tr></table>>];
-// HttpResponseWrapper
-c20 [label=<<table title="HttpResponseWrapper" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><i> HttpResponseWrapper </i></td></tr></table></td></tr></table>>];
-// HttpResponseFacade
-c21 [label=<<table title="HttpResponseFacade" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> HttpResponseFacade </td></tr></table></td></tr></table>>];
-// ResponseWrapper
-c22 [label=<<table title="ResponseWrapper" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><i> ResponseWrapper </i></td></tr></table></td></tr></table>>];
-// HttpResponse
-c23 [label=<<table title="HttpResponse" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> HttpResponse </td></tr></table></td></tr></table>>];
-// ResponseBase
-c24 [label=<<table title="ResponseBase" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><i> ResponseBase </i></td></tr></table></td></tr></table>>];
-// HttpServletResponse
-c25 [label=<<table title="HttpServletResponse" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> HttpServletResponse </td></tr></table></td></tr></table>>];
-// ResponseFacade
-c26 [label=<<table title="ResponseFacade" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ResponseFacade </td></tr></table></td></tr></table>>];
-// ServletResponse
-c27 [label=<<table title="ServletResponse" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> ServletResponse </td></tr></table></td></tr></table>>];
-// Response
-c28 [label=<<table title="Response" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> Response </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// HttpResponseBase
+c3 [label=<<table title="HttpResponseBase" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> HttpResponseBase </td></tr></table></td></tr></table>>];
+// HttpResponseWrapper
+c4 [label=<<table title="HttpResponseWrapper" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> <i>HttpResponseWrapper</i> </td></tr></table></td></tr></table>>];
+// HttpResponseFacade
+c5 [label=<<table title="HttpResponseFacade" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> HttpResponseFacade </td></tr></table></td></tr></table>>];
+// ResponseWrapper
+c6 [label=<<table title="ResponseWrapper" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> <i>ResponseWrapper</i> </td></tr></table></td></tr></table>>];
+// HttpResponse
+c7 [label=<<table title="HttpResponse" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> HttpResponse </td></tr></table></td></tr></table>>];
+// ResponseBase
+c8 [label=<<table title="ResponseBase" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> <i>ResponseBase</i> </td></tr></table></td></tr></table>>];
+// HttpServletResponse
+c9 [label=<<table title="HttpServletResponse" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> HttpServletResponse </td></tr></table></td></tr></table>>];
+// ResponseFacade
+c10 [label=<<table title="ResponseFacade" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ResponseFacade </td></tr></table></td></tr></table>>];
+// ServletResponse
+c11 [label=<<table title="ServletResponse" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> ServletResponse </td></tr></table></td></tr></table>>];
+// Response
+c12 [label=<<table title="Response" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;interface&#187; </td></tr><tr><td align="center" balign="center"> Response </td></tr></table></td></tr></table>>];
 // HttpResponseBase extends ResponseBase
-c24 -> c19 [arrowtail=empty,dir=back,weight=10];
+c8 -> c3 [arrowtail=empty,dir=back,weight=10];
 // HttpResponseBase implements HttpResponse
-c23 -> c19 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c7 -> c3 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // HttpResponseBase implements HttpServletResponse
-c25 -> c19 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c9 -> c3 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // HttpResponseWrapper extends ResponseWrapper
-c22 -> c20 [arrowtail=empty,dir=back,weight=10];
+c6 -> c4 [arrowtail=empty,dir=back,weight=10];
 // HttpResponseWrapper implements HttpResponse
-c23 -> c20 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c7 -> c4 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // HttpResponseFacade extends ResponseFacade
-c26 -> c21 [arrowtail=empty,dir=back,weight=10];
+c10 -> c5 [arrowtail=empty,dir=back,weight=10];
 // HttpResponseFacade implements HttpServletResponse
-c25 -> c21 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c9 -> c5 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // ResponseWrapper implements Response
-c28 -> c22 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c12 -> c6 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // HttpResponse implements Response
-c28 -> c23 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c12 -> c7 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // ResponseBase implements Response
-c28 -> c24 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c12 -> c8 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // ResponseBase implements ServletResponse
-c27 -> c24 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c11 -> c8 [arrowtail=empty,style=dashed,dir=back,weight=9];
 // ResponseFacade implements ServletResponse
-c27 -> c26 [arrowtail=empty,style=dashed,dir=back,weight=9];
+c11 -> c10 [arrowtail=empty,style=dashed,dir=back,weight=9];
 }
-
+
diff --git a/testdata/dot-ref/class-eg.dot b/testdata/dot-ref/class-eg.dot
index 3ac8d11d..14e2a3c8 100644
--- a/testdata/dot-ref/class-eg.dot
+++ b/testdata/dot-ref/class-eg.dot
@@ -1,24 +1,24 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// Person
-c30 [label=<<table title="Person" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor=".13 .9 1"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person </td></tr></table></td></tr></table>>];
-// Employee
-c31 [label=<<table title="Employee" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor=".13 .9 1"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Employee </td></tr></table></td></tr></table>>];
-// Client
-c32 [label=<<table title="Client" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor=".13 .9 1"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Client </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// Person
+c120 [label=<<table title="Person" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor=".13 .9 1"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person </td></tr></table></td></tr></table>>];
+// Employee
+c121 [label=<<table title="Employee" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor=".13 .9 1"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Employee </td></tr></table></td></tr></table>>];
+// Client
+c122 [label=<<table title="Client" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor=".13 .9 1"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Client </td></tr></table></td></tr></table>>];
 // Employee extends Person
-c30 -> c31 [arrowtail=empty,dir=back,weight=10];
+c120 -> c121 [arrowtail=empty,dir=back,weight=10];
 // Client extends Person
-c30 -> c32 [arrowtail=empty,dir=back,weight=10];
+c120 -> c122 [arrowtail=empty,dir=back,weight=10];
 }
-
+
diff --git a/testdata/dot-ref/classadd.dot b/testdata/dot-ref/classadd.dot
index acc48178..04d9de41 100644
--- a/testdata/dot-ref/classadd.dot
+++ b/testdata/dot-ref/classadd.dot
@@ -1,16 +1,16 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// ActionQueue
-c35 [label=<<table title="ActionQueue" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;container&#187; </td></tr><tr><td align="center" balign="center"> ActionQueue </td></tr><tr><td align="right" balign="right"> {version = 3.2} </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  add(a : Action) </td></tr><tr><td align="left" balign="left">  add(a : Action, n : int) </td></tr><tr><td align="right" balign="right"> {version = 1.0} </td></tr><tr><td align="left" balign="left">  remove(n : int) </td></tr><tr><td align="left" balign="left"> &#171;query&#187; </td></tr><tr><td align="left" balign="left">  length() : int </td></tr><tr><td align="left" balign="left"> &#171;helper functions&#187; </td></tr><tr><td align="left" balign="left">  reorder() </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// ActionQueue
+c72 [label=<<table title="ActionQueue" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;container&#187; </td></tr><tr><td align="center" balign="center"> ActionQueue </td></tr><tr><td align="right" balign="right"> {version = 3.2} </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  add(a : Action) </td></tr><tr><td align="left" balign="left">  add(a : Action, n : int) </td></tr><tr><td align="right" balign="right"> {version = 1.0} </td></tr><tr><td align="left" balign="left">  remove(n : int) </td></tr><tr><td align="left" balign="left"> &#171;query&#187; </td></tr><tr><td align="left" balign="left">  length() : int </td></tr><tr><td align="left" balign="left"> &#171;helper functions&#187; </td></tr><tr><td align="left" balign="left">  reorder() </td></tr></table></td></tr></table>>];
 }
-
+
diff --git a/testdata/dot-ref/color.dot b/testdata/dot-ref/color.dot
index 32ccad60..706034dc 100644
--- a/testdata/dot-ref/color.dot
+++ b/testdata/dot-ref/color.dot
@@ -1,7 +1,7 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
@@ -13,18 +13,18 @@ ranksep=0.5;
 bgcolor=".7 .9 1";
 
 // Pixel
-c37 [label=<<table title="Pixel" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="#a0a0a0"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Pixel </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> - x : int </td></tr><tr><td align="left" balign="left"> - y : int </td></tr></table></td></tr></table>>];
+c48 [label=<<table title="Pixel" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="#a0a0a0"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Pixel </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> - x : int </td></tr><tr><td align="left" balign="left"> - y : int </td></tr></table></td></tr></table>>];
 // Red
-c38 [label=<<table title="Red" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="red"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Red </td></tr></table></td></tr></table>>];
+c49 [label=<<table title="Red" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="red"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Red </td></tr></table></td></tr></table>>];
 // Green
-c39 [label=<<table title="Green" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="green"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Green </td></tr></table></td></tr></table>>];
+c50 [label=<<table title="Green" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="green"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Green </td></tr></table></td></tr></table>>];
 // Blue
-c40 [label=<<table title="Blue" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="blue"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Blue </td></tr></table></td></tr></table>>];
+c51 [label=<<table title="Blue" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="blue"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Blue </td></tr></table></td></tr></table>>];
 // Pixel composed Red
-c37 -> c38 [arrowhead=none,arrowtail=diamond,dir=back,weight=6];
+c48 -> c49 [arrowhead=none,arrowtail=diamond,dir=back,weight=6];
 // Pixel composed Green
-c37 -> c39 [arrowhead=none,arrowtail=diamond,dir=back,weight=6];
+c48 -> c50 [arrowhead=none,arrowtail=diamond,dir=back,weight=6];
 // Pixel composed Blue
-c37 -> c40 [arrowhead=none,arrowtail=diamond,dir=back,weight=6];
+c48 -> c51 [arrowhead=none,arrowtail=diamond,dir=back,weight=6];
 }
 
diff --git a/testdata/dot-ref/ctor.dot b/testdata/dot-ref/ctor.dot
index b35fe057..ecb45bd8 100644
--- a/testdata/dot-ref/ctor.dot
+++ b/testdata/dot-ref/ctor.dot
@@ -1,16 +1,16 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// Junk
-c43 [label=<<table title="Junk" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Junk </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> - value : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + Junk(val : int) </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// Junk
+c88 [label=<<table title="Junk" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Junk </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> - value : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + Junk(val : int) </td></tr></table></td></tr></table>>];
 }
-
+
diff --git a/testdata/dot-ref/disable.dot b/testdata/dot-ref/disable.dot
index 7388fd12..45059012 100644
--- a/testdata/dot-ref/disable.dot
+++ b/testdata/dot-ref/disable.dot
@@ -1,20 +1,20 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// Person1
-c45 [label=<<table title="Person1" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person1 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ address : String </td></tr><tr><td align="left" balign="left"> ~ name : String </td></tr></table></td></tr></table>>];
-// Person2
-c46 [label=<<table title="Person2" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person2 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ displayName() : String </td></tr></table></td></tr></table>>];
-// Person3
-c47 [label=<<table title="Person3" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person3 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  address : Address </td></tr><tr><td align="left" balign="left">  name : String </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  displayName() : String </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// Person1
+c74 [label=<<table title="Person1" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person1 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ address : String </td></tr><tr><td align="left" balign="left"> ~ name : String </td></tr></table></td></tr></table>>];
+// Person2
+c75 [label=<<table title="Person2" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person2 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ displayName() : String </td></tr></table></td></tr></table>>];
+// Person3
+c76 [label=<<table title="Person3" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person3 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  address : Address </td></tr><tr><td align="left" balign="left">  name : String </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  displayName() : String </td></tr></table></td></tr></table>>];
 }
-
+
diff --git a/testdata/dot-ref/extends.dot b/testdata/dot-ref/extends.dot
index 63281834..440a3caa 100644
--- a/testdata/dot-ref/extends.dot
+++ b/testdata/dot-ref/extends.dot
@@ -1,18 +1,18 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// Base
-c48 [label=<<table title="Base" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Base </td></tr></table></td></tr></table>>];
-// Test2<B extends a.b.Base>
-c49 [label=<<table title="Test2" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Test2&lt;B extends Base&gt; </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// Base
+c39 [label=<<table title="Base" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Base </td></tr></table></td></tr></table>>];
+// Test2<B extends Base>
+c40 [label=<<table title="Test2" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Test2&lt;B extends Base&gt; </td></tr></table></td></tr></table>>];
 }
-
+
diff --git a/testdata/dot-ref/foo.dot b/testdata/dot-ref/foo.dot
index 21a85137..a49a397d 100644
--- a/testdata/dot-ref/foo.dot
+++ b/testdata/dot-ref/foo.dot
@@ -1,26 +1,26 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// a.b.c.UMLOptions
-c50 [label=<<table title="a.b.c.UMLOptions" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> UMLOptions </td></tr></table></td></tr></table>>];
-// a.b.c.UserGroup
-c51 [label=<<table title="a.b.c.UserGroup" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> UserGroup </td></tr></table></td></tr></table>>];
-// a.b.c.User
-c52 [label=<<table title="a.b.c.User" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> User </td></tr></table></td></tr></table>>];
-// a.b.c.Password
-c53 [label=<<table title="a.b.c.Password" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Password </td></tr></table></td></tr></table>>];
-// a.b.c.UserGroup assoc a.b.c.User
-c51 -> c52 [arrowhead=none,weight=2,taillabel="*", headlabel="*\n\n+user "];
-// a.b.c.User navassoc a.b.c.Password
-c52 -> c53 [arrowhead=open,weight=1,taillabel="1\n\n+owner\r", headlabel="*\n\n+key"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// a.b.c.UMLOptions
+c60 [label=<<table title="a.b.c.UMLOptions" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> UMLOptions </td></tr></table></td></tr></table>>];
+// a.b.c.UserGroup
+c61 [label=<<table title="a.b.c.UserGroup" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> UserGroup </td></tr></table></td></tr></table>>];
+// a.b.c.User
+c62 [label=<<table title="a.b.c.User" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> User </td></tr></table></td></tr></table>>];
+// a.b.c.Password
+c63 [label=<<table title="a.b.c.Password" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Password </td></tr></table></td></tr></table>>];
+// a.b.c.UserGroup assoc a.b.c.User
+c61 -> c62 [arrowhead=none,weight=2,taillabel="*",headlabel="*\n\n+user "];
+// a.b.c.User navassoc a.b.c.Password
+c62 -> c63 [arrowhead=open,weight=1,taillabel="1\n\n+owner\r",headlabel="*\n\n+key"];
 }
-
+
diff --git a/testdata/dot-ref/general.dot b/testdata/dot-ref/general.dot
index 85e9787b..a349af17 100644
--- a/testdata/dot-ref/general.dot
+++ b/testdata/dot-ref/general.dot
@@ -1,54 +1,54 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// Asset
-c55 [label=<<table title="Asset" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Asset </td></tr></table></td></tr></table>>];
-// InterestBearingItem
-c56 [label=<<table title="InterestBearingItem" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InterestBearingItem </td></tr></table></td></tr></table>>];
-// InsurableItem
-c57 [label=<<table title="InsurableItem" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InsurableItem </td></tr></table></td></tr></table>>];
-// BankAccount
-c58 [label=<<table title="BankAccount" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> BankAccount </td></tr></table></td></tr></table>>];
-// RealEstate
-c59 [label=<<table title="RealEstate" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> RealEstate </td></tr></table></td></tr></table>>];
-// Security
-c60 [label=<<table title="Security" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Security </td></tr></table></td></tr></table>>];
-// Stock
-c61 [label=<<table title="Stock" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Stock </td></tr></table></td></tr></table>>];
-// Bond
-c62 [label=<<table title="Bond" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Bond </td></tr></table></td></tr></table>>];
-// CheckingAccount
-c63 [label=<<table title="CheckingAccount" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> CheckingAccount </td></tr></table></td></tr></table>>];
-// SavingsAccount
-c64 [label=<<table title="SavingsAccount" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SavingsAccount </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// Asset
+c29 [label=<<table title="Asset" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Asset </td></tr></table></td></tr></table>>];
+// InterestBearingItem
+c30 [label=<<table title="InterestBearingItem" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InterestBearingItem </td></tr></table></td></tr></table>>];
+// InsurableItem
+c31 [label=<<table title="InsurableItem" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InsurableItem </td></tr></table></td></tr></table>>];
+// BankAccount
+c32 [label=<<table title="BankAccount" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> BankAccount </td></tr></table></td></tr></table>>];
+// RealEstate
+c33 [label=<<table title="RealEstate" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> RealEstate </td></tr></table></td></tr></table>>];
+// Security
+c34 [label=<<table title="Security" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Security </td></tr></table></td></tr></table>>];
+// Stock
+c35 [label=<<table title="Stock" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Stock </td></tr></table></td></tr></table>>];
+// Bond
+c36 [label=<<table title="Bond" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Bond </td></tr></table></td></tr></table>>];
+// CheckingAccount
+c37 [label=<<table title="CheckingAccount" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> CheckingAccount </td></tr></table></td></tr></table>>];
+// SavingsAccount
+c38 [label=<<table title="SavingsAccount" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SavingsAccount </td></tr></table></td></tr></table>>];
 // BankAccount extends Asset
-c55 -> c58 [arrowtail=empty,dir=back,weight=10];
+c29 -> c32 [arrowtail=empty,dir=back,weight=10];
 // BankAccount extends InsurableItem
-c57 -> c58 [arrowtail=empty,dir=back,weight=10];
+c31 -> c32 [arrowtail=empty,dir=back,weight=10];
 // BankAccount extends InterestBearingItem
-c56 -> c58 [arrowtail=empty,dir=back,weight=10];
+c30 -> c32 [arrowtail=empty,dir=back,weight=10];
 // RealEstate extends Asset
-c55 -> c59 [arrowtail=empty,dir=back,weight=10];
+c29 -> c33 [arrowtail=empty,dir=back,weight=10];
 // RealEstate extends InsurableItem
-c57 -> c59 [arrowtail=empty,dir=back,weight=10];
+c31 -> c33 [arrowtail=empty,dir=back,weight=10];
 // Security extends Asset
-c55 -> c60 [arrowtail=empty,dir=back,weight=10];
+c29 -> c34 [arrowtail=empty,dir=back,weight=10];
 // Stock extends Security
-c60 -> c61 [arrowtail=empty,dir=back,weight=10];
+c34 -> c35 [arrowtail=empty,dir=back,weight=10];
 // Bond extends Security
-c60 -> c62 [arrowtail=empty,dir=back,weight=10];
+c34 -> c36 [arrowtail=empty,dir=back,weight=10];
 // CheckingAccount extends BankAccount
-c58 -> c63 [arrowtail=empty,dir=back,weight=10];
+c32 -> c37 [arrowtail=empty,dir=back,weight=10];
 // SavingsAccount extends BankAccount
-c58 -> c64 [arrowtail=empty,dir=back,weight=10];
+c32 -> c38 [arrowtail=empty,dir=back,weight=10];
 }
-
+
diff --git a/testdata/dot-ref/java5.dot b/testdata/dot-ref/java5.dot
index 18c40e74..2ee9d899 100644
--- a/testdata/dot-ref/java5.dot
+++ b/testdata/dot-ref/java5.dot
@@ -1,18 +1,18 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// Java5
-c78 [label=<<table title="Java5" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Java5 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ state : Java5.States </td></tr><tr><td align="left" balign="left"> - specifiedPackages : Set&lt;String&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + printAll(args : String[]) </td></tr></table></td></tr></table>>];
-// Java5.States
-c79 [label=<<table title="Java5.States" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;enumeration&#187; </td></tr><tr><td align="center" balign="center"> States </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> start </td></tr><tr><td align="left" balign="left"> dash </td></tr><tr><td align="left" balign="left"> colon </td></tr><tr><td align="left" balign="left"> space </td></tr><tr><td align="left" balign="left"> open </td></tr><tr><td align="left" balign="left"> w </td></tr><tr><td align="left" balign="left"> close </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// Java5
+c58 [label=<<table title="Java5" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Java5 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ state : Java5.States </td></tr><tr><td align="left" balign="left"> - specifiedPackages : Set&lt;String&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + printAll(args : String[]) </td></tr></table></td></tr></table>>];
+// Java5.States
+c59 [label=<<table title="Java5.States" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;enumeration&#187; </td></tr><tr><td align="center" balign="center"> Java5.States </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> start </td></tr><tr><td align="left" balign="left"> dash </td></tr><tr><td align="left" balign="left"> colon </td></tr><tr><td align="left" balign="left"> space </td></tr><tr><td align="left" balign="left"> open </td></tr><tr><td align="left" balign="left"> w </td></tr><tr><td align="left" balign="left"> close </td></tr></table></td></tr></table>>];
 }
-
+
diff --git a/testdata/dot-ref/schema.dot b/testdata/dot-ref/schema.dot
index 6d971629..b7801947 100644
--- a/testdata/dot-ref/schema.dot
+++ b/testdata/dot-ref/schema.dot
@@ -1,38 +1,38 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// School
-c103 [label=<<table title="School" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> School </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : Name </td></tr><tr><td align="left" balign="left">  address : String </td></tr><tr><td align="left" balign="left">  phone : Number </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  addStudent() </td></tr><tr><td align="left" balign="left">  removeStudent() </td></tr><tr><td align="left" balign="left">  getStudent() </td></tr><tr><td align="left" balign="left">  getAllStudents() </td></tr><tr><td align="left" balign="left">  addDepartment() </td></tr><tr><td align="left" balign="left">  removeDepartment() </td></tr><tr><td align="left" balign="left">  getDepartment() </td></tr><tr><td align="left" balign="left">  getAllDepartments() </td></tr></table></td></tr></table>>];
-// Department
-c104 [label=<<table title="Department" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Department </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : Name </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  addInstructor() </td></tr><tr><td align="left" balign="left">  removeInstructor() </td></tr><tr><td align="left" balign="left">  getInstructor() </td></tr><tr><td align="left" balign="left">  getAllInstructors() </td></tr></table></td></tr></table>>];
-// Student
-c105 [label=<<table title="Student" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Student </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : Name </td></tr><tr><td align="left" balign="left">  studentID : Number </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
-// Course
-c106 [label=<<table title="Course" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Course </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : Name </td></tr><tr><td align="left" balign="left">  courseID : Number </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
-// Instructor
-c107 [label=<<table title="Instructor" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Instructor </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : Name </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
-// School has Student
-c103 -> c105 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4,taillabel="1..*", label="Member", headlabel="*"];
-// School composed Department
-c103 -> c104 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1..*", label="Has", headlabel="1..*"];
-// Department assoc Course
-c104 -> c106 [arrowhead=none,weight=2,taillabel="1..*", headlabel="1..*"];
-// Department assoc Instructor
-c104 -> c107 [arrowhead=none,weight=2,taillabel="0..*", headlabel="0..1 chairperson"];
-// Department has Instructor
-c104 -> c107 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4,taillabel="1..*", label="AssignedTo", headlabel="1..*"];
-// Student assoc Course
-c105 -> c106 [arrowhead=none,weight=2,taillabel="*", label="Attends", headlabel="*"];
-// Instructor assoc Course
-c107 -> c106 [arrowhead=none,weight=2,taillabel="1..*", label="Teaches", headlabel="*"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// School
+c20 [label=<<table title="School" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> School </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : Name </td></tr><tr><td align="left" balign="left">  address : String </td></tr><tr><td align="left" balign="left">  phone : Number </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  addStudent() </td></tr><tr><td align="left" balign="left">  removeStudent() </td></tr><tr><td align="left" balign="left">  getStudent() </td></tr><tr><td align="left" balign="left">  getAllStudents() </td></tr><tr><td align="left" balign="left">  addDepartment() </td></tr><tr><td align="left" balign="left">  removeDepartment() </td></tr><tr><td align="left" balign="left">  getDepartment() </td></tr><tr><td align="left" balign="left">  getAllDepartments() </td></tr></table></td></tr></table>>];
+// Department
+c21 [label=<<table title="Department" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Department </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : Name </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  addInstructor() </td></tr><tr><td align="left" balign="left">  removeInstructor() </td></tr><tr><td align="left" balign="left">  getInstructor() </td></tr><tr><td align="left" balign="left">  getAllInstructors() </td></tr></table></td></tr></table>>];
+// Student
+c22 [label=<<table title="Student" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Student </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : Name </td></tr><tr><td align="left" balign="left">  studentID : Number </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
+// Course
+c23 [label=<<table title="Course" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Course </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : Name </td></tr><tr><td align="left" balign="left">  courseID : Number </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
+// Instructor
+c24 [label=<<table title="Instructor" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Instructor </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  name : Name </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr></table>>];
+// School composed Department
+c20 -> c21 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1..*",label="Has",headlabel="1..*"];
+// School has Student
+c20 -> c22 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4,taillabel="1..*",label="Member",headlabel="*"];
+// Department has Instructor
+c21 -> c24 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4,taillabel="1..*",label="AssignedTo",headlabel="1..*"];
+// Department assoc Course
+c21 -> c23 [arrowhead=none,weight=2,taillabel="1..*",headlabel="1..*"];
+// Department assoc Instructor
+c21 -> c24 [arrowhead=none,weight=2,taillabel="0..*",headlabel="0..1 chairperson"];
+// Student assoc Course
+c22 -> c23 [arrowhead=none,weight=2,taillabel="*",label="Attends",headlabel="*"];
+// Instructor assoc Course
+c24 -> c23 [arrowhead=none,weight=2,taillabel="1..*",label="Teaches",headlabel="*"];
 }
-
+
diff --git a/testdata/dot-ref/strip.dot b/testdata/dot-ref/strip.dot
index a40df9c2..e6a11ad1 100644
--- a/testdata/dot-ref/strip.dot
+++ b/testdata/dot-ref/strip.dot
@@ -1,18 +1,18 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// Java5
-c109 [label=<<table title="Java5" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Java5 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ state : Java5.States </td></tr><tr><td align="left" balign="left"> + specifiedPackages : Set&lt;String&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + printAll(args : String[]) </td></tr></table></td></tr></table>>];
-// Java5.States
-c110 [label=<<table title="Java5.States" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;enumeration&#187; </td></tr><tr><td align="center" balign="center"> States </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> start </td></tr><tr><td align="left" balign="left"> dash </td></tr><tr><td align="left" balign="left"> colon </td></tr><tr><td align="left" balign="left"> space </td></tr><tr><td align="left" balign="left"> open </td></tr><tr><td align="left" balign="left"> w </td></tr><tr><td align="left" balign="left"> close </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// Java5
+c66 [label=<<table title="Java5" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Java5 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ state : Java5.States </td></tr><tr><td align="left" balign="left"> + specifiedPackages : Set&lt;String&gt; </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + printAll(args : String[]) </td></tr></table></td></tr></table>>];
+// Java5.States
+c67 [label=<<table title="Java5.States" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> &#171;enumeration&#187; </td></tr><tr><td align="center" balign="center"> Java5.States </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left">  </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> start </td></tr><tr><td align="left" balign="left"> dash </td></tr><tr><td align="left" balign="left"> colon </td></tr><tr><td align="left" balign="left"> space </td></tr><tr><td align="left" balign="left"> open </td></tr><tr><td align="left" balign="left"> w </td></tr><tr><td align="left" balign="left"> close </td></tr></table></td></tr></table>>];
 }
-
+
diff --git a/testdata/dot-ref/vis.dot b/testdata/dot-ref/vis.dot
index db7ad2b4..6559dd9f 100644
--- a/testdata/dot-ref/vis.dot
+++ b/testdata/dot-ref/vis.dot
@@ -1,16 +1,16 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_6-9-g37cd34 (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
 graph [fontnames="svg"]
 edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
-node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
-nodesep=0.25;
-ranksep=0.5;
-// Toolbar
-c120 [label=<<table title="Toolbar" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Toolbar </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> # currentSelection : Tool </td></tr><tr><td align="left" balign="left"> # toolCount : Integer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + pickItem(i : Integer) </td></tr><tr><td align="left" balign="left"> + addTool(t : Tool) </td></tr><tr><td align="left" balign="left"> + removeTool(i : Integer) </td></tr><tr><td align="left" balign="left"> + getTool() : Tool </td></tr><tr><td align="left" balign="left"> # checkOrphans() </td></tr><tr><td align="left" balign="left"> - compact() </td></tr></table></td></tr></table>>];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// Toolbar
+c86 [label=<<table title="Toolbar" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Toolbar </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> # currentSelection : Tool </td></tr><tr><td align="left" balign="left"> # toolCount : Integer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + pickItem(i : Integer) </td></tr><tr><td align="left" balign="left"> + addTool(t : Tool) </td></tr><tr><td align="left" balign="left"> + removeTool(i : Integer) </td></tr><tr><td align="left" balign="left"> + getTool() : Tool </td></tr><tr><td align="left" balign="left"> # checkOrphans() </td></tr><tr><td align="left" balign="left"> - compact() </td></tr></table></td></tr></table>>];
 }
-
+
diff --git a/testdata/umldoc-ref/allclasses-frame.html b/testdata/umldoc-ref/allclasses-frame.html
index c947c3d9..dafee065 100644
--- a/testdata/umldoc-ref/allclasses-frame.html
+++ b/testdata/umldoc-ref/allclasses-frame.html
@@ -1,23 +1,23 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>All Classes</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-<script type="text/javascript" src="script.js"></script>
-</head>
-<body>
-<h1 class="bar">All&nbsp;Classes</h1>
-<div class="indexContainer">
-<ul>
-<li><a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product" target="classFrame">Category</a></li>
-<li><a href="gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice" target="classFrame">Customer</a></li>
-<li><a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice" target="classFrame">Invoice</a></li>
-<li><a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice" target="classFrame">InvoiceItem</a></li>
-<li><a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product" target="classFrame">Product</a></li>
-</ul>
-</div>
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>All Classes</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<h1 class="bar">All&nbsp;Classes</h1>
+<div class="indexContainer">
+<ul>
+<li><a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product" target="classFrame">Category</a></li>
+<li><a href="gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice" target="classFrame">Customer</a></li>
+<li><a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice" target="classFrame">Invoice</a></li>
+<li><a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice" target="classFrame">InvoiceItem</a></li>
+<li><a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product" target="classFrame">Product</a></li>
+</ul>
+</div>
+</body>
+</html>
diff --git a/testdata/umldoc-ref/allclasses-noframe.html b/testdata/umldoc-ref/allclasses-noframe.html
index 4980e93e..221a8c09 100644
--- a/testdata/umldoc-ref/allclasses-noframe.html
+++ b/testdata/umldoc-ref/allclasses-noframe.html
@@ -1,23 +1,23 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>All Classes</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-<script type="text/javascript" src="script.js"></script>
-</head>
-<body>
-<h1 class="bar">All&nbsp;Classes</h1>
-<div class="indexContainer">
-<ul>
-<li><a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a></li>
-<li><a href="gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice">Customer</a></li>
-<li><a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></li>
-<li><a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a></li>
-<li><a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></li>
-</ul>
-</div>
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>All Classes</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<h1 class="bar">All&nbsp;Classes</h1>
+<div class="indexContainer">
+<ul>
+<li><a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a></li>
+<li><a href="gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice">Customer</a></li>
+<li><a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></li>
+<li><a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a></li>
+<li><a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></li>
+</ul>
+</div>
+</body>
+</html>
diff --git a/testdata/umldoc-ref/constant-values.html b/testdata/umldoc-ref/constant-values.html
index 2853bc5e..5a3a210e 100644
--- a/testdata/umldoc-ref/constant-values.html
+++ b/testdata/umldoc-ref/constant-values.html
@@ -1,122 +1,122 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>Constant Field Values</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-<script type="text/javascript" src="script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Constant Field Values";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li><a href="overview-tree.html">Tree</a></li>
-<li><a href="deprecated-list.html">Deprecated</a></li>
-<li><a href="index-all.html">Index</a></li>
-<li><a href="help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
-<li><a href="constant-values.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h1 title="Constant Field Values" class="title">Constant Field Values</h1>
-<h2 title="Contents">Contents</h2>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li><a href="overview-tree.html">Tree</a></li>
-<li><a href="deprecated-list.html">Deprecated</a></li>
-<li><a href="index-all.html">Index</a></li>
-<li><a href="help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
-<li><a href="constant-values.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>Constant Field Values</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Constant Field Values";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
+<li><a href="constant-values.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Constant Field Values" class="title">Constant Field Values</h1>
+<h2 title="Contents">Contents</h2>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
+<li><a href="constant-values.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/deprecated-list.html b/testdata/umldoc-ref/deprecated-list.html
index 566d2c47..eabc2291 100644
--- a/testdata/umldoc-ref/deprecated-list.html
+++ b/testdata/umldoc-ref/deprecated-list.html
@@ -1,122 +1,122 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>Deprecated List</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-<script type="text/javascript" src="script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Deprecated List";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li><a href="overview-tree.html">Tree</a></li>
-<li class="navBarCell1Rev">Deprecated</li>
-<li><a href="index-all.html">Index</a></li>
-<li><a href="help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
-<li><a href="deprecated-list.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h1 title="Deprecated API" class="title">Deprecated API</h1>
-<h2 title="Contents">Contents</h2>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li><a href="overview-tree.html">Tree</a></li>
-<li class="navBarCell1Rev">Deprecated</li>
-<li><a href="index-all.html">Index</a></li>
-<li><a href="help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
-<li><a href="deprecated-list.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>Deprecated List</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Deprecated List";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li class="navBarCell1Rev">Deprecated</li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
+<li><a href="deprecated-list.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Deprecated API" class="title">Deprecated API</h1>
+<h2 title="Contents">Contents</h2>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li class="navBarCell1Rev">Deprecated</li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
+<li><a href="deprecated-list.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/gr/spinellis/invoice/Customer.dot b/testdata/umldoc-ref/gr/spinellis/invoice/Customer.dot
index 995b9bb8..bdcee533 100644
--- a/testdata/umldoc-ref/gr/spinellis/invoice/Customer.dot
+++ b/testdata/umldoc-ref/gr/spinellis/invoice/Customer.dot
@@ -1,23 +1,24 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-11-g86574a (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
-	edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
-	node [fontname="Helvetica",fontsize=10,shape=plaintext];
-	nodesep=0.25;
-	ranksep=0.5;
-	// gr.spinellis.invoice.Invoice
-	c33 [label=<<table title="gr.spinellis.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="./Invoice.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>, URL="./Invoice.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.invoice.Customer
-	c34 [label=<<table title="gr.spinellis.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="lemonChiffon" href="./Customer.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>, URL="./Customer.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.invoice.Invoice NAVASSOC gr.spinellis.invoice.Customer
-	c33:p -> c34:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.invoice.Customer NAVASSOC java.lang.String
-	c34:p -> c44:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// java.lang.String
-	c44 [label=<<table title="java.lang.String" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> String </td></tr><tr><td align="center" balign="center"> java.lang </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
+graph [fontnames="svg"]
+edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.invoice.Customer
+c32 [label=<<table title="gr.spinellis.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonChiffon" href="Customer.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>, URL="Customer.html"];
+// gr.spinellis.invoice.Invoice
+c34 [label=<<table title="gr.spinellis.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="Invoice.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>, URL="Invoice.html"];
+// gr.spinellis.invoice.Customer navassoc java.lang.String
+c32 -> c37 [arrowhead=open,weight=1];
+// gr.spinellis.invoice.Invoice navassoc gr.spinellis.invoice.Customer
+c34 -> c32 [arrowhead=open,weight=1];
+// java.lang.String
+c37 [label=<<table title="java.lang.String" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> String </td></tr><tr><td align="center" balign="center"> java.lang </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html"];
 }
-
+
diff --git a/testdata/umldoc-ref/gr/spinellis/invoice/Customer.html b/testdata/umldoc-ref/gr/spinellis/invoice/Customer.html
index 959bfebb..7dd62b92 100644
--- a/testdata/umldoc-ref/gr/spinellis/invoice/Customer.html
+++ b/testdata/umldoc-ref/gr/spinellis/invoice/Customer.html
@@ -1,273 +1,273 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>Customer</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Customer";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev&nbsp;Class</li>
-<li><a href="../../../gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/invoice/Customer.html" target="_top">Frames</a></li>
-<li><a href="Customer.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li>Method</li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">gr.spinellis.invoice</div>
-<h2 title="Class Customer" class="title">Class Customer</h2>
-<!-- UML diagram added by UMLGraph version R5_7_2-25-gc0b796 (http://www.spinellis.gr/umlgraph/) -->
-<div align="center"><object type="image/svg+xml" data="Customer.svg" alt="Package class diagram package Customer" border=0></object></div>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li>java.lang.Object</li>
-<li>
-<ul class="inheritance">
-<li>gr.spinellis.invoice.Customer</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>public class <span class="typeNameLabel">Customer</span>
-extends java.lang.Object</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Customer.html#name">name</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Customer.html#Customer--">Customer</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="name">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>name</h4>
-<pre>java.lang.String name</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="Customer--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>Customer</h4>
-<pre>public&nbsp;Customer()</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev&nbsp;Class</li>
-<li><a href="../../../gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/invoice/Customer.html" target="_top">Frames</a></li>
-<li><a href="Customer.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li>Method</li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>Customer</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Customer";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev&nbsp;Class</li>
+<li><a href="../../../gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/invoice/Customer.html" target="_top">Frames</a></li>
+<li><a href="Customer.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">gr.spinellis.invoice</div>
+<h2 title="Class Customer" class="title">Class Customer</h2>
+<!-- UML diagram added by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/) -->
+<div align="center"><object type="image/svg+xml" data="Customer.svg" alt="Package class diagram package Customer" border=0></object></div>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>gr.spinellis.invoice.Customer</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="typeNameLabel">Customer</span>
+extends java.lang.Object</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Customer.html#name">name</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Customer.html#Customer--">Customer</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="name">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>name</h4>
+<pre>java.lang.String name</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="Customer--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Customer</h4>
+<pre>public&nbsp;Customer()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev&nbsp;Class</li>
+<li><a href="../../../gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/invoice/Customer.html" target="_top">Frames</a></li>
+<li><a href="Customer.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/gr/spinellis/invoice/Invoice.dot b/testdata/umldoc-ref/gr/spinellis/invoice/Invoice.dot
index 19d299be..b3ee00a6 100644
--- a/testdata/umldoc-ref/gr/spinellis/invoice/Invoice.dot
+++ b/testdata/umldoc-ref/gr/spinellis/invoice/Invoice.dot
@@ -1,33 +1,34 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-11-g86574a (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
-	edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
-	node [fontname="Helvetica",fontsize=10,shape=plaintext];
-	nodesep=0.25;
-	ranksep=0.5;
-	// gr.spinellis.invoice.InvoiceItem
-	c45 [label=<<table title="gr.spinellis.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="./InvoiceItem.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>, URL="./InvoiceItem.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.invoice.Invoice
-	c46 [label=<<table title="gr.spinellis.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="lemonChiffon" href="./Invoice.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>, URL="./Invoice.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.invoice.Customer
-	c47 [label=<<table title="gr.spinellis.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="./Customer.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>, URL="./Customer.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.product.Product
-	c48 [label=<<table title="gr.spinellis.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="../product/Product.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr><tr><td align="center" balign="center"> gr.spinellis.product </td></tr></table></td></tr></table>>, URL="../product/Product.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.invoice.InvoiceItem NAVASSOC gr.spinellis.product.Product
-	c45:p -> c48:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.invoice.Invoice NAVASSOC gr.spinellis.invoice.InvoiceItem
-	c46:p -> c45:p [taillabel="", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.invoice.Invoice NAVASSOC gr.spinellis.invoice.Customer
-	c46:p -> c47:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.invoice.Invoice NAVASSOC java.util.Date
-	c46:p -> c50:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.invoice.Invoice DEPEND gr.spinellis.product.Product
-	c46:p -> c48:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed];
-	// java.util.Date
-	c50 [label=<<table title="java.util.Date" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="http://docs.oracle.com/javase/7/docs/api/java/util/Date.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Date </td></tr><tr><td align="center" balign="center"> java.util </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/Date.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
+graph [fontnames="svg"]
+edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.invoice.Customer
+c45 [label=<<table title="gr.spinellis.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="Customer.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>, URL="Customer.html"];
+// gr.spinellis.invoice.InvoiceItem
+c46 [label=<<table title="gr.spinellis.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="InvoiceItem.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>, URL="InvoiceItem.html"];
+// gr.spinellis.invoice.Invoice
+c47 [label=<<table title="gr.spinellis.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonChiffon" href="Invoice.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>, URL="Invoice.html"];
+// gr.spinellis.product.Product
+c48 [label=<<table title="gr.spinellis.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="../product/Product.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr><tr><td align="center" balign="center"> gr.spinellis.product </td></tr></table></td></tr></table>>, URL="../product/Product.html"];
+// gr.spinellis.invoice.InvoiceItem navassoc gr.spinellis.product.Product
+c46 -> c48 [arrowhead=open,weight=1];
+// gr.spinellis.invoice.Invoice navassoc gr.spinellis.invoice.InvoiceItem
+c47 -> c46 [arrowhead=open,weight=1,headlabel="*"];
+// gr.spinellis.invoice.Invoice navassoc gr.spinellis.invoice.Customer
+c47 -> c45 [arrowhead=open,weight=1];
+// gr.spinellis.invoice.Invoice navassoc java.util.Date
+c47 -> c50 [arrowhead=open,weight=1];
+// gr.spinellis.invoice.Invoice depend gr.spinellis.product.Product
+c47 -> c48 [arrowhead=open,style=dashed,weight=0];
+// java.util.Date
+c50 [label=<<table title="java.util.Date" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/Date.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Date </td></tr><tr><td align="center" balign="center"> java.util </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/Date.html"];
 }
-
+
diff --git a/testdata/umldoc-ref/gr/spinellis/invoice/Invoice.html b/testdata/umldoc-ref/gr/spinellis/invoice/Invoice.html
index 1d6e8908..3a2c50e6 100644
--- a/testdata/umldoc-ref/gr/spinellis/invoice/Invoice.html
+++ b/testdata/umldoc-ref/gr/spinellis/invoice/Invoice.html
@@ -1,348 +1,348 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>Invoice</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Invoice";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/invoice/Invoice.html" target="_top">Frames</a></li>
-<li><a href="Invoice.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">gr.spinellis.invoice</div>
-<h2 title="Class Invoice" class="title">Class Invoice</h2>
-<!-- UML diagram added by UMLGraph version R5_7_2-25-gc0b796 (http://www.spinellis.gr/umlgraph/) -->
-<div align="center"><object type="image/svg+xml" data="Invoice.svg" alt="Package class diagram package Invoice" border=0></object></div>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li>java.lang.Object</li>
-<li>
-<ul class="inheritance">
-<li>gr.spinellis.invoice.Invoice</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>public class <span class="typeNameLabel">Invoice</span>
-extends java.lang.Object</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice">Customer</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Invoice.html#customer">customer</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>java.util.Date</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Invoice.html#invoiceDate">invoiceDate</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a>[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Invoice.html#items">items</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>double</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Invoice.html#total">total</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Invoice.html#Invoice--">Invoice</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Invoice.html#addItem-gr.spinellis.product.Product-int-">addItem</a></span>(<a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a>&nbsp;p,
-       int&nbsp;quantity)</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="total">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>total</h4>
-<pre>public&nbsp;double total</pre>
-</li>
-</ul>
-<a name="items">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>items</h4>
-<pre>public&nbsp;<a href="../../../gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a>[] items</pre>
-</li>
-</ul>
-<a name="customer">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>customer</h4>
-<pre>public&nbsp;<a href="../../../gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice">Customer</a> customer</pre>
-</li>
-</ul>
-<a name="invoiceDate">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>invoiceDate</h4>
-<pre>public&nbsp;java.util.Date invoiceDate</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="Invoice--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>Invoice</h4>
-<pre>public&nbsp;Invoice()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="addItem-gr.spinellis.product.Product-int-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>addItem</h4>
-<pre>public&nbsp;void&nbsp;addItem(<a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a>&nbsp;p,
-                    int&nbsp;quantity)</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/invoice/Invoice.html" target="_top">Frames</a></li>
-<li><a href="Invoice.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>Invoice</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Invoice";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/invoice/Invoice.html" target="_top">Frames</a></li>
+<li><a href="Invoice.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">gr.spinellis.invoice</div>
+<h2 title="Class Invoice" class="title">Class Invoice</h2>
+<!-- UML diagram added by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/) -->
+<div align="center"><object type="image/svg+xml" data="Invoice.svg" alt="Package class diagram package Invoice" border=0></object></div>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>gr.spinellis.invoice.Invoice</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="typeNameLabel">Invoice</span>
+extends java.lang.Object</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice">Customer</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Invoice.html#customer">customer</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>java.util.Date</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Invoice.html#invoiceDate">invoiceDate</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Invoice.html#items">items</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Invoice.html#total">total</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Invoice.html#Invoice--">Invoice</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/Invoice.html#addItem-gr.spinellis.product.Product-int-">addItem</a></span>(<a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a>&nbsp;p,
+       int&nbsp;quantity)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="total">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>total</h4>
+<pre>public&nbsp;double total</pre>
+</li>
+</ul>
+<a name="items">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>items</h4>
+<pre>public&nbsp;<a href="../../../gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a>[] items</pre>
+</li>
+</ul>
+<a name="customer">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>customer</h4>
+<pre>public&nbsp;<a href="../../../gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice">Customer</a> customer</pre>
+</li>
+</ul>
+<a name="invoiceDate">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>invoiceDate</h4>
+<pre>public&nbsp;java.util.Date invoiceDate</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="Invoice--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Invoice</h4>
+<pre>public&nbsp;Invoice()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="addItem-gr.spinellis.product.Product-int-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>addItem</h4>
+<pre>public&nbsp;void&nbsp;addItem(<a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a>&nbsp;p,
+                    int&nbsp;quantity)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/invoice/Invoice.html" target="_top">Frames</a></li>
+<li><a href="Invoice.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/gr/spinellis/invoice/InvoiceItem.dot b/testdata/umldoc-ref/gr/spinellis/invoice/InvoiceItem.dot
index e55613f4..03af3e84 100644
--- a/testdata/umldoc-ref/gr/spinellis/invoice/InvoiceItem.dot
+++ b/testdata/umldoc-ref/gr/spinellis/invoice/InvoiceItem.dot
@@ -1,25 +1,26 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-11-g86574a (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
-	edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
-	node [fontname="Helvetica",fontsize=10,shape=plaintext];
-	nodesep=0.25;
-	ranksep=0.5;
-	// gr.spinellis.invoice.InvoiceItem
-	c51 [label=<<table title="gr.spinellis.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="lemonChiffon" href="./InvoiceItem.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>, URL="./InvoiceItem.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.invoice.Invoice
-	c52 [label=<<table title="gr.spinellis.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="./Invoice.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>, URL="./Invoice.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.product.Product
-	c54 [label=<<table title="gr.spinellis.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="../product/Product.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr><tr><td align="center" balign="center"> gr.spinellis.product </td></tr></table></td></tr></table>>, URL="../product/Product.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.invoice.InvoiceItem NAVASSOC gr.spinellis.product.Product
-	c51:p -> c54:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.invoice.Invoice NAVASSOC gr.spinellis.invoice.InvoiceItem
-	c52:p -> c51:p [taillabel="", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.invoice.Invoice DEPEND gr.spinellis.product.Product
-	c52:p -> c54:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed];
+graph [fontnames="svg"]
+edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.invoice.InvoiceItem
+c52 [label=<<table title="gr.spinellis.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonChiffon" href="InvoiceItem.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>, URL="InvoiceItem.html"];
+// gr.spinellis.invoice.Invoice
+c53 [label=<<table title="gr.spinellis.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="Invoice.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>, URL="Invoice.html"];
+// gr.spinellis.product.Product
+c54 [label=<<table title="gr.spinellis.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="../product/Product.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr><tr><td align="center" balign="center"> gr.spinellis.product </td></tr></table></td></tr></table>>, URL="../product/Product.html"];
+// gr.spinellis.invoice.InvoiceItem navassoc gr.spinellis.product.Product
+c52 -> c54 [arrowhead=open,weight=1];
+// gr.spinellis.invoice.Invoice navassoc gr.spinellis.invoice.InvoiceItem
+c53 -> c52 [arrowhead=open,weight=1,headlabel="*"];
+// gr.spinellis.invoice.Invoice depend gr.spinellis.product.Product
+c53 -> c54 [arrowhead=open,style=dashed,weight=0];
 }
-
+
diff --git a/testdata/umldoc-ref/gr/spinellis/invoice/InvoiceItem.html b/testdata/umldoc-ref/gr/spinellis/invoice/InvoiceItem.html
index fe26859f..0058dda0 100644
--- a/testdata/umldoc-ref/gr/spinellis/invoice/InvoiceItem.html
+++ b/testdata/umldoc-ref/gr/spinellis/invoice/InvoiceItem.html
@@ -1,286 +1,286 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>InvoiceItem</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="InvoiceItem";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li>Next&nbsp;Class</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/invoice/InvoiceItem.html" target="_top">Frames</a></li>
-<li><a href="InvoiceItem.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li>Method</li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">gr.spinellis.invoice</div>
-<h2 title="Class InvoiceItem" class="title">Class InvoiceItem</h2>
-<!-- UML diagram added by UMLGraph version R5_7_2-25-gc0b796 (http://www.spinellis.gr/umlgraph/) -->
-<div align="center"><object type="image/svg+xml" data="InvoiceItem.svg" alt="Package class diagram package InvoiceItem" border=0></object></div>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li>java.lang.Object</li>
-<li>
-<ul class="inheritance">
-<li>gr.spinellis.invoice.InvoiceItem</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>public class <span class="typeNameLabel">InvoiceItem</span>
-extends java.lang.Object</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/InvoiceItem.html#product">product</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/InvoiceItem.html#quantity">quantity</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/InvoiceItem.html#InvoiceItem--">InvoiceItem</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="product">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>product</h4>
-<pre>public&nbsp;<a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a> product</pre>
-</li>
-</ul>
-<a name="quantity">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>quantity</h4>
-<pre>public&nbsp;int quantity</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="InvoiceItem--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>InvoiceItem</h4>
-<pre>public&nbsp;InvoiceItem()</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li>Next&nbsp;Class</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/invoice/InvoiceItem.html" target="_top">Frames</a></li>
-<li><a href="InvoiceItem.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li>Method</li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>InvoiceItem</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="InvoiceItem";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Next&nbsp;Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/invoice/InvoiceItem.html" target="_top">Frames</a></li>
+<li><a href="InvoiceItem.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">gr.spinellis.invoice</div>
+<h2 title="Class InvoiceItem" class="title">Class InvoiceItem</h2>
+<!-- UML diagram added by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/) -->
+<div align="center"><object type="image/svg+xml" data="InvoiceItem.svg" alt="Package class diagram package InvoiceItem" border=0></object></div>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>gr.spinellis.invoice.InvoiceItem</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="typeNameLabel">InvoiceItem</span>
+extends java.lang.Object</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/InvoiceItem.html#product">product</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/InvoiceItem.html#quantity">quantity</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../gr/spinellis/invoice/InvoiceItem.html#InvoiceItem--">InvoiceItem</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="product">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>product</h4>
+<pre>public&nbsp;<a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a> product</pre>
+</li>
+</ul>
+<a name="quantity">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>quantity</h4>
+<pre>public&nbsp;int quantity</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="InvoiceItem--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>InvoiceItem</h4>
+<pre>public&nbsp;InvoiceItem()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Next&nbsp;Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/invoice/InvoiceItem.html" target="_top">Frames</a></li>
+<li><a href="InvoiceItem.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/gr/spinellis/invoice/gr.spinellis.invoice.dot b/testdata/umldoc-ref/gr/spinellis/invoice/gr.spinellis.invoice.dot
index a2ad5de7..60057261 100644
--- a/testdata/umldoc-ref/gr/spinellis/invoice/gr.spinellis.invoice.dot
+++ b/testdata/umldoc-ref/gr/spinellis/invoice/gr.spinellis.invoice.dot
@@ -1,23 +1,24 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-11-g86574a (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
-	edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
-	node [fontname="Helvetica",fontsize=10,shape=plaintext];
-	nodesep=0.25;
-	ranksep=0.5;
-	// gr.spinellis.invoice.InvoiceItem
-	c0 [label=<<table title="gr.spinellis.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="./InvoiceItem.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>, URL="./InvoiceItem.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.invoice.Invoice
-	c1 [label=<<table title="gr.spinellis.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="./Invoice.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>, URL="./Invoice.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.invoice.Customer
-	c2 [label=<<table title="gr.spinellis.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="./Customer.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>, URL="./Customer.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.invoice.Invoice NAVASSOC gr.spinellis.invoice.InvoiceItem
-	c1:p -> c0:p [taillabel="", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.invoice.Invoice NAVASSOC gr.spinellis.invoice.Customer
-	c1:p -> c2:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
+graph [fontnames="svg"]
+edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.invoice.Customer
+c0 [label=<<table title="gr.spinellis.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="Customer.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>, URL="Customer.html"];
+// gr.spinellis.invoice.InvoiceItem
+c1 [label=<<table title="gr.spinellis.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="InvoiceItem.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>, URL="InvoiceItem.html"];
+// gr.spinellis.invoice.Invoice
+c2 [label=<<table title="gr.spinellis.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="Invoice.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>, URL="Invoice.html"];
+// gr.spinellis.invoice.Invoice navassoc gr.spinellis.invoice.InvoiceItem
+c2 -> c1 [arrowhead=open,weight=1,headlabel="*"];
+// gr.spinellis.invoice.Invoice navassoc gr.spinellis.invoice.Customer
+c2 -> c0 [arrowhead=open,weight=1];
 }
-
+
diff --git a/testdata/umldoc-ref/gr/spinellis/invoice/package-frame.html b/testdata/umldoc-ref/gr/spinellis/invoice/package-frame.html
index d5b4092f..aba2954c 100644
--- a/testdata/umldoc-ref/gr/spinellis/invoice/package-frame.html
+++ b/testdata/umldoc-ref/gr/spinellis/invoice/package-frame.html
@@ -1,22 +1,22 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>gr.spinellis.invoice</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<h1 class="bar"><a href="../../../gr/spinellis/invoice/package-summary.html" target="classFrame">gr.spinellis.invoice</a></h1>
-<div class="indexContainer">
-<h2 title="Classes">Classes</h2>
-<ul title="Classes">
-<li><a href="Customer.html" title="class in gr.spinellis.invoice" target="classFrame">Customer</a></li>
-<li><a href="Invoice.html" title="class in gr.spinellis.invoice" target="classFrame">Invoice</a></li>
-<li><a href="InvoiceItem.html" title="class in gr.spinellis.invoice" target="classFrame">InvoiceItem</a></li>
-</ul>
-</div>
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>gr.spinellis.invoice</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<h1 class="bar"><a href="../../../gr/spinellis/invoice/package-summary.html" target="classFrame">gr.spinellis.invoice</a></h1>
+<div class="indexContainer">
+<h2 title="Classes">Classes</h2>
+<ul title="Classes">
+<li><a href="Customer.html" title="class in gr.spinellis.invoice" target="classFrame">Customer</a></li>
+<li><a href="Invoice.html" title="class in gr.spinellis.invoice" target="classFrame">Invoice</a></li>
+<li><a href="InvoiceItem.html" title="class in gr.spinellis.invoice" target="classFrame">InvoiceItem</a></li>
+</ul>
+</div>
+</body>
+</html>
diff --git a/testdata/umldoc-ref/gr/spinellis/invoice/package-summary.html b/testdata/umldoc-ref/gr/spinellis/invoice/package-summary.html
index 2ee10ac3..0b23ed82 100644
--- a/testdata/umldoc-ref/gr/spinellis/invoice/package-summary.html
+++ b/testdata/umldoc-ref/gr/spinellis/invoice/package-summary.html
@@ -1,150 +1,150 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>gr.spinellis.invoice</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="gr.spinellis.invoice";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li class="navBarCell1Rev">Package</li>
-<li>Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev&nbsp;Package</li>
-<li><a href="../../../gr/spinellis/product/package-summary.html">Next&nbsp;Package</a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/invoice/package-summary.html" target="_top">Frames</a></li>
-<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h1 title="Package" class="title">Package&nbsp;gr.spinellis.invoice</h1>
-<!-- UML diagram added by UMLGraph version R5_7_2-25-gc0b796 (http://www.spinellis.gr/umlgraph/) -->
-<div align="center"><object type="image/svg+xml" data="gr.spinellis.invoice.svg" alt="Package class diagram package gr.spinellis.invoice" border=0></object></div>
-</div>
-<div class="contentContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
-<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Class</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="../../../gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice">Customer</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><a href="../../../gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><a href="../../../gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li class="navBarCell1Rev">Package</li>
-<li>Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev&nbsp;Package</li>
-<li><a href="../../../gr/spinellis/product/package-summary.html">Next&nbsp;Package</a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/invoice/package-summary.html" target="_top">Frames</a></li>
-<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>gr.spinellis.invoice</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="gr.spinellis.invoice";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li class="navBarCell1Rev">Package</li>
+<li>Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev&nbsp;Package</li>
+<li><a href="../../../gr/spinellis/product/package-summary.html">Next&nbsp;Package</a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/invoice/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Package" class="title">Package&nbsp;gr.spinellis.invoice</h1>
+<!-- UML diagram added by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/) -->
+<div align="center"><object type="image/svg+xml" data="gr.spinellis.invoice.svg" alt="Package class diagram package gr.spinellis.invoice" border=0></object></div>
+</div>
+<div class="contentContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
+<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Class</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice">Customer</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li class="navBarCell1Rev">Package</li>
+<li>Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev&nbsp;Package</li>
+<li><a href="../../../gr/spinellis/product/package-summary.html">Next&nbsp;Package</a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/invoice/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/gr/spinellis/invoice/package-tree.html b/testdata/umldoc-ref/gr/spinellis/invoice/package-tree.html
index cac2ec7f..fc66c1a2 100644
--- a/testdata/umldoc-ref/gr/spinellis/invoice/package-tree.html
+++ b/testdata/umldoc-ref/gr/spinellis/invoice/package-tree.html
@@ -1,137 +1,137 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>gr.spinellis.invoice Class Hierarchy</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="gr.spinellis.invoice Class Hierarchy";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li>Class</li>
-<li class="navBarCell1Rev">Tree</li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li><a href="../../../gr/spinellis/product/package-tree.html">Next</a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/invoice/package-tree.html" target="_top">Frames</a></li>
-<li><a href="package-tree.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h1 class="title">Hierarchy For Package gr.spinellis.invoice</h1>
-<span class="packageHierarchyLabel">Package Hierarchies:</span>
-<ul class="horizontal">
-<li><a href="../../../overview-tree.html">All Packages</a></li>
-</ul>
-</div>
-<div class="contentContainer">
-<h2 title="Class Hierarchy">Class Hierarchy</h2>
-<ul>
-<li type="circle">java.lang.Object
-<ul>
-<li type="circle">gr.spinellis.invoice.<a href="../../../gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Customer</span></a></li>
-<li type="circle">gr.spinellis.invoice.<a href="../../../gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Invoice</span></a></li>
-<li type="circle">gr.spinellis.invoice.<a href="../../../gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">InvoiceItem</span></a></li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li>Class</li>
-<li class="navBarCell1Rev">Tree</li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li><a href="../../../gr/spinellis/product/package-tree.html">Next</a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/invoice/package-tree.html" target="_top">Frames</a></li>
-<li><a href="package-tree.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>gr.spinellis.invoice Class Hierarchy</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="gr.spinellis.invoice Class Hierarchy";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li><a href="../../../gr/spinellis/product/package-tree.html">Next</a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/invoice/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">Hierarchy For Package gr.spinellis.invoice</h1>
+<span class="packageHierarchyLabel">Package Hierarchies:</span>
+<ul class="horizontal">
+<li><a href="../../../overview-tree.html">All Packages</a></li>
+</ul>
+</div>
+<div class="contentContainer">
+<h2 title="Class Hierarchy">Class Hierarchy</h2>
+<ul>
+<li type="circle">java.lang.Object
+<ul>
+<li type="circle">gr.spinellis.invoice.<a href="../../../gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Customer</span></a></li>
+<li type="circle">gr.spinellis.invoice.<a href="../../../gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Invoice</span></a></li>
+<li type="circle">gr.spinellis.invoice.<a href="../../../gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">InvoiceItem</span></a></li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li><a href="../../../gr/spinellis/product/package-tree.html">Next</a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/invoice/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/gr/spinellis/product/Category.dot b/testdata/umldoc-ref/gr/spinellis/product/Category.dot
index 94aa1d1f..59a1980b 100644
--- a/testdata/umldoc-ref/gr/spinellis/product/Category.dot
+++ b/testdata/umldoc-ref/gr/spinellis/product/Category.dot
@@ -1,25 +1,26 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-11-g86574a (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
-	edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
-	node [fontname="Helvetica",fontsize=10,shape=plaintext];
-	nodesep=0.25;
-	ranksep=0.5;
-	// gr.spinellis.product.Product
-	c20 [label=<<table title="gr.spinellis.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="./Product.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>, URL="./Product.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.product.Category
-	c21 [label=<<table title="gr.spinellis.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="lemonChiffon" href="./Category.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>, URL="./Category.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.product.Product NAVASSOC java.lang.String
-	c20:p -> c27:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.product.Product NAVASSOC gr.spinellis.product.Category
-	c20:p -> c21:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.product.Category NAVASSOC java.lang.String
-	c21:p -> c27:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// java.lang.String
-	c27 [label=<<table title="java.lang.String" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> String </td></tr><tr><td align="center" balign="center"> java.lang </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
+graph [fontnames="svg"]
+edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.product.Product
+c20 [label=<<table title="gr.spinellis.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="Product.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>, URL="Product.html"];
+// gr.spinellis.product.Category
+c21 [label=<<table title="gr.spinellis.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonChiffon" href="Category.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>, URL="Category.html"];
+// gr.spinellis.product.Product navassoc java.lang.String
+c20 -> c27 [arrowhead=open,weight=1];
+// gr.spinellis.product.Product navassoc gr.spinellis.product.Category
+c20 -> c21 [arrowhead=open,weight=1];
+// gr.spinellis.product.Category navassoc java.lang.String
+c21 -> c27 [arrowhead=open,weight=1];
+// java.lang.String
+c27 [label=<<table title="java.lang.String" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> String </td></tr><tr><td align="center" balign="center"> java.lang </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html"];
 }
-
+
diff --git a/testdata/umldoc-ref/gr/spinellis/product/Category.html b/testdata/umldoc-ref/gr/spinellis/product/Category.html
index 1e5c2274..de44e832 100644
--- a/testdata/umldoc-ref/gr/spinellis/product/Category.html
+++ b/testdata/umldoc-ref/gr/spinellis/product/Category.html
@@ -1,286 +1,286 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>Category</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Category";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev&nbsp;Class</li>
-<li><a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/product/Category.html" target="_top">Frames</a></li>
-<li><a href="Category.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li>Method</li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">gr.spinellis.product</div>
-<h2 title="Class Category" class="title">Class Category</h2>
-<!-- UML diagram added by UMLGraph version R5_7_2-25-gc0b796 (http://www.spinellis.gr/umlgraph/) -->
-<div align="center"><object type="image/svg+xml" data="Category.svg" alt="Package class diagram package Category" border=0></object></div>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li>java.lang.Object</li>
-<li>
-<ul class="inheritance">
-<li>gr.spinellis.product.Category</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>public class <span class="typeNameLabel">Category</span>
-extends java.lang.Object</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Category.html#name">name</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>(package private) java.util.List&lt;<a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Category.html#products">products</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Category.html#Category--">Category</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="name">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>name</h4>
-<pre>public&nbsp;java.lang.String name</pre>
-</li>
-</ul>
-<a name="products">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>products</h4>
-<pre>java.util.List&lt;<a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a>&gt; products</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="Category--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>Category</h4>
-<pre>public&nbsp;Category()</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev&nbsp;Class</li>
-<li><a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/product/Category.html" target="_top">Frames</a></li>
-<li><a href="Category.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li>Method</li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>Category</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Category";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev&nbsp;Class</li>
+<li><a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/product/Category.html" target="_top">Frames</a></li>
+<li><a href="Category.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">gr.spinellis.product</div>
+<h2 title="Class Category" class="title">Class Category</h2>
+<!-- UML diagram added by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/) -->
+<div align="center"><object type="image/svg+xml" data="Category.svg" alt="Package class diagram package Category" border=0></object></div>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>gr.spinellis.product.Category</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="typeNameLabel">Category</span>
+extends java.lang.Object</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Category.html#name">name</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) java.util.List&lt;<a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Category.html#products">products</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Category.html#Category--">Category</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="name">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>name</h4>
+<pre>public&nbsp;java.lang.String name</pre>
+</li>
+</ul>
+<a name="products">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>products</h4>
+<pre>java.util.List&lt;<a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a>&gt; products</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="Category--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Category</h4>
+<pre>public&nbsp;Category()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev&nbsp;Class</li>
+<li><a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/product/Category.html" target="_top">Frames</a></li>
+<li><a href="Category.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/gr/spinellis/product/Product.dot b/testdata/umldoc-ref/gr/spinellis/product/Product.dot
index e34b4d9e..e4e5d0f3 100644
--- a/testdata/umldoc-ref/gr/spinellis/product/Product.dot
+++ b/testdata/umldoc-ref/gr/spinellis/product/Product.dot
@@ -1,35 +1,36 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-11-g86574a (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
-	edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
-	node [fontname="Helvetica",fontsize=10,shape=plaintext];
-	nodesep=0.25;
-	ranksep=0.5;
-	// gr.spinellis.invoice.InvoiceItem
-	c56 [label=<<table title="gr.spinellis.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="../invoice/InvoiceItem.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr><tr><td align="center" balign="center"> gr.spinellis.invoice </td></tr></table></td></tr></table>>, URL="../invoice/InvoiceItem.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.invoice.Invoice
-	c57 [label=<<table title="gr.spinellis.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="../invoice/Invoice.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr><tr><td align="center" balign="center"> gr.spinellis.invoice </td></tr></table></td></tr></table>>, URL="../invoice/Invoice.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.product.Product
-	c59 [label=<<table title="gr.spinellis.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="lemonChiffon" href="./Product.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>, URL="./Product.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.product.Category
-	c60 [label=<<table title="gr.spinellis.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="./Category.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>, URL="./Category.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.invoice.InvoiceItem NAVASSOC gr.spinellis.product.Product
-	c56:p -> c59:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.invoice.Invoice NAVASSOC gr.spinellis.invoice.InvoiceItem
-	c57:p -> c56:p [taillabel="", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.product.Product NAVASSOC java.lang.String
-	c59:p -> c61:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.product.Product NAVASSOC gr.spinellis.product.Category
-	c59:p -> c60:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.product.Category NAVASSOC java.lang.String
-	c60:p -> c61:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
-	// gr.spinellis.invoice.Invoice DEPEND gr.spinellis.product.Product
-	c57:p -> c59:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed];
-	// java.lang.String
-	c61 [label=<<table title="java.lang.String" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> String </td></tr><tr><td align="center" balign="center"> java.lang </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
+graph [fontnames="svg"]
+edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.invoice.InvoiceItem
+c57 [label=<<table title="gr.spinellis.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="../invoice/InvoiceItem.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr><tr><td align="center" balign="center"> gr.spinellis.invoice </td></tr></table></td></tr></table>>, URL="../invoice/InvoiceItem.html"];
+// gr.spinellis.invoice.Invoice
+c58 [label=<<table title="gr.spinellis.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="../invoice/Invoice.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr><tr><td align="center" balign="center"> gr.spinellis.invoice </td></tr></table></td></tr></table>>, URL="../invoice/Invoice.html"];
+// gr.spinellis.product.Product
+c59 [label=<<table title="gr.spinellis.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonChiffon" href="Product.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>, URL="Product.html"];
+// gr.spinellis.product.Category
+c60 [label=<<table title="gr.spinellis.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="Category.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>, URL="Category.html"];
+// gr.spinellis.invoice.InvoiceItem navassoc gr.spinellis.product.Product
+c57 -> c59 [arrowhead=open,weight=1];
+// gr.spinellis.invoice.Invoice navassoc gr.spinellis.invoice.InvoiceItem
+c58 -> c57 [arrowhead=open,weight=1,headlabel="*"];
+// gr.spinellis.product.Product navassoc java.lang.String
+c59 -> c61 [arrowhead=open,weight=1];
+// gr.spinellis.product.Product navassoc gr.spinellis.product.Category
+c59 -> c60 [arrowhead=open,weight=1];
+// gr.spinellis.product.Category navassoc java.lang.String
+c60 -> c61 [arrowhead=open,weight=1];
+// gr.spinellis.invoice.Invoice depend gr.spinellis.product.Product
+c58 -> c59 [arrowhead=open,style=dashed,weight=0];
+// java.lang.String
+c61 [label=<<table title="java.lang.String" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> String </td></tr><tr><td align="center" balign="center"> java.lang </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html"];
 }
-
+
diff --git a/testdata/umldoc-ref/gr/spinellis/product/Product.html b/testdata/umldoc-ref/gr/spinellis/product/Product.html
index 47ffa0fb..7e021a0e 100644
--- a/testdata/umldoc-ref/gr/spinellis/product/Product.html
+++ b/testdata/umldoc-ref/gr/spinellis/product/Product.html
@@ -1,312 +1,312 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>Product</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Product";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../gr/spinellis/product/Category.html" title="class in gr.spinellis.product"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li>Next&nbsp;Class</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/product/Product.html" target="_top">Frames</a></li>
-<li><a href="Product.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li>Method</li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">gr.spinellis.product</div>
-<h2 title="Class Product" class="title">Class Product</h2>
-<!-- UML diagram added by UMLGraph version R5_7_2-25-gc0b796 (http://www.spinellis.gr/umlgraph/) -->
-<div align="center"><object type="image/svg+xml" data="Product.svg" alt="Package class diagram package Product" border=0></object></div>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li>java.lang.Object</li>
-<li>
-<ul class="inheritance">
-<li>gr.spinellis.product.Product</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>public class <span class="typeNameLabel">Product</span>
-extends java.lang.Object</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Product.html#category">category</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Product.html#name">name</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>double</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Product.html#price">price</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Product.html#stock">stock</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Product.html#Product--">Product</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="name">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>name</h4>
-<pre>public&nbsp;java.lang.String name</pre>
-</li>
-</ul>
-<a name="stock">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>stock</h4>
-<pre>public&nbsp;int stock</pre>
-</li>
-</ul>
-<a name="price">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>price</h4>
-<pre>public&nbsp;double price</pre>
-</li>
-</ul>
-<a name="category">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>category</h4>
-<pre>public&nbsp;<a href="../../../gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a> category</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="Product--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>Product</h4>
-<pre>public&nbsp;Product()</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../gr/spinellis/product/Category.html" title="class in gr.spinellis.product"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li>Next&nbsp;Class</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/product/Product.html" target="_top">Frames</a></li>
-<li><a href="Product.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li>Method</li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>Product</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Product";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../gr/spinellis/product/Category.html" title="class in gr.spinellis.product"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Next&nbsp;Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/product/Product.html" target="_top">Frames</a></li>
+<li><a href="Product.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">gr.spinellis.product</div>
+<h2 title="Class Product" class="title">Class Product</h2>
+<!-- UML diagram added by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/) -->
+<div align="center"><object type="image/svg+xml" data="Product.svg" alt="Package class diagram package Product" border=0></object></div>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>gr.spinellis.product.Product</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="typeNameLabel">Product</span>
+extends java.lang.Object</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Product.html#category">category</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Product.html#name">name</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Product.html#price">price</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Product.html#stock">stock</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../gr/spinellis/product/Product.html#Product--">Product</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="name">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>name</h4>
+<pre>public&nbsp;java.lang.String name</pre>
+</li>
+</ul>
+<a name="stock">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>stock</h4>
+<pre>public&nbsp;int stock</pre>
+</li>
+</ul>
+<a name="price">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>price</h4>
+<pre>public&nbsp;double price</pre>
+</li>
+</ul>
+<a name="category">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>category</h4>
+<pre>public&nbsp;<a href="../../../gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a> category</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="Product--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Product</h4>
+<pre>public&nbsp;Product()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../gr/spinellis/product/Category.html" title="class in gr.spinellis.product"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Next&nbsp;Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/product/Product.html" target="_top">Frames</a></li>
+<li><a href="Product.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/gr/spinellis/product/gr.spinellis.product.dot b/testdata/umldoc-ref/gr/spinellis/product/gr.spinellis.product.dot
index 04606aa0..d3cff7bc 100644
--- a/testdata/umldoc-ref/gr/spinellis/product/gr.spinellis.product.dot
+++ b/testdata/umldoc-ref/gr/spinellis/product/gr.spinellis.product.dot
@@ -1,19 +1,20 @@
 #!/usr/local/bin/dot
 #
 # Class diagram 
-# Generated by UMLGraph version R5_7_2-11-g86574a (http://www.umlgraph.org/)
+# Generated by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/)
 #
 
 digraph G {
-	edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
-	node [fontname="Helvetica",fontsize=10,shape=plaintext];
-	nodesep=0.25;
-	ranksep=0.5;
-	// gr.spinellis.product.Product
-	c8 [label=<<table title="gr.spinellis.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="./Product.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>, URL="./Product.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.product.Category
-	c9 [label=<<table title="gr.spinellis.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="./Category.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>, URL="./Category.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
-	// gr.spinellis.product.Product NAVASSOC gr.spinellis.product.Category
-	c8:p -> c9:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
+graph [fontnames="svg"]
+edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
+node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
+nodesep=0.25;
+ranksep=0.5;
+// gr.spinellis.product.Product
+c8 [label=<<table title="gr.spinellis.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="Product.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>, URL="Product.html"];
+// gr.spinellis.product.Category
+c9 [label=<<table title="gr.spinellis.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="Category.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>, URL="Category.html"];
+// gr.spinellis.product.Product navassoc gr.spinellis.product.Category
+c8 -> c9 [arrowhead=open,weight=1];
 }
-
+
diff --git a/testdata/umldoc-ref/gr/spinellis/product/package-frame.html b/testdata/umldoc-ref/gr/spinellis/product/package-frame.html
index 1704070c..941a8c4d 100644
--- a/testdata/umldoc-ref/gr/spinellis/product/package-frame.html
+++ b/testdata/umldoc-ref/gr/spinellis/product/package-frame.html
@@ -1,21 +1,21 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>gr.spinellis.product</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<h1 class="bar"><a href="../../../gr/spinellis/product/package-summary.html" target="classFrame">gr.spinellis.product</a></h1>
-<div class="indexContainer">
-<h2 title="Classes">Classes</h2>
-<ul title="Classes">
-<li><a href="Category.html" title="class in gr.spinellis.product" target="classFrame">Category</a></li>
-<li><a href="Product.html" title="class in gr.spinellis.product" target="classFrame">Product</a></li>
-</ul>
-</div>
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>gr.spinellis.product</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<h1 class="bar"><a href="../../../gr/spinellis/product/package-summary.html" target="classFrame">gr.spinellis.product</a></h1>
+<div class="indexContainer">
+<h2 title="Classes">Classes</h2>
+<ul title="Classes">
+<li><a href="Category.html" title="class in gr.spinellis.product" target="classFrame">Category</a></li>
+<li><a href="Product.html" title="class in gr.spinellis.product" target="classFrame">Product</a></li>
+</ul>
+</div>
+</body>
+</html>
diff --git a/testdata/umldoc-ref/gr/spinellis/product/package-summary.html b/testdata/umldoc-ref/gr/spinellis/product/package-summary.html
index 3c33e0c1..4ee8091c 100644
--- a/testdata/umldoc-ref/gr/spinellis/product/package-summary.html
+++ b/testdata/umldoc-ref/gr/spinellis/product/package-summary.html
@@ -1,146 +1,146 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>gr.spinellis.product</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="gr.spinellis.product";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li class="navBarCell1Rev">Package</li>
-<li>Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../gr/spinellis/invoice/package-summary.html">Prev&nbsp;Package</a></li>
-<li>Next&nbsp;Package</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/product/package-summary.html" target="_top">Frames</a></li>
-<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h1 title="Package" class="title">Package&nbsp;gr.spinellis.product</h1>
-<!-- UML diagram added by UMLGraph version R5_7_2-25-gc0b796 (http://www.spinellis.gr/umlgraph/) -->
-<div align="center"><object type="image/svg+xml" data="gr.spinellis.product.svg" alt="Package class diagram package gr.spinellis.product" border=0></object></div>
-</div>
-<div class="contentContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
-<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Class</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="../../../gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li class="navBarCell1Rev">Package</li>
-<li>Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../gr/spinellis/invoice/package-summary.html">Prev&nbsp;Package</a></li>
-<li>Next&nbsp;Package</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/product/package-summary.html" target="_top">Frames</a></li>
-<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>gr.spinellis.product</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="gr.spinellis.product";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li class="navBarCell1Rev">Package</li>
+<li>Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../gr/spinellis/invoice/package-summary.html">Prev&nbsp;Package</a></li>
+<li>Next&nbsp;Package</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/product/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Package" class="title">Package&nbsp;gr.spinellis.product</h1>
+<!-- UML diagram added by UMLGraph version 281411 (http://www.spinellis.gr/umlgraph/) -->
+<div align="center"><object type="image/svg+xml" data="gr.spinellis.product.svg" alt="Package class diagram package gr.spinellis.product" border=0></object></div>
+</div>
+<div class="contentContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
+<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Class</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li class="navBarCell1Rev">Package</li>
+<li>Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../gr/spinellis/invoice/package-summary.html">Prev&nbsp;Package</a></li>
+<li>Next&nbsp;Package</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/product/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/gr/spinellis/product/package-tree.html b/testdata/umldoc-ref/gr/spinellis/product/package-tree.html
index ac6f1594..311da777 100644
--- a/testdata/umldoc-ref/gr/spinellis/product/package-tree.html
+++ b/testdata/umldoc-ref/gr/spinellis/product/package-tree.html
@@ -1,136 +1,136 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>gr.spinellis.product Class Hierarchy</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="gr.spinellis.product Class Hierarchy";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li>Class</li>
-<li class="navBarCell1Rev">Tree</li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../gr/spinellis/invoice/package-tree.html">Prev</a></li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/product/package-tree.html" target="_top">Frames</a></li>
-<li><a href="package-tree.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h1 class="title">Hierarchy For Package gr.spinellis.product</h1>
-<span class="packageHierarchyLabel">Package Hierarchies:</span>
-<ul class="horizontal">
-<li><a href="../../../overview-tree.html">All Packages</a></li>
-</ul>
-</div>
-<div class="contentContainer">
-<h2 title="Class Hierarchy">Class Hierarchy</h2>
-<ul>
-<li type="circle">java.lang.Object
-<ul>
-<li type="circle">gr.spinellis.product.<a href="../../../gr/spinellis/product/Category.html" title="class in gr.spinellis.product"><span class="typeNameLink">Category</span></a></li>
-<li type="circle">gr.spinellis.product.<a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product"><span class="typeNameLink">Product</span></a></li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li>Class</li>
-<li class="navBarCell1Rev">Tree</li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../gr/spinellis/invoice/package-tree.html">Prev</a></li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?gr/spinellis/product/package-tree.html" target="_top">Frames</a></li>
-<li><a href="package-tree.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>gr.spinellis.product Class Hierarchy</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="gr.spinellis.product Class Hierarchy";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../gr/spinellis/invoice/package-tree.html">Prev</a></li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/product/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">Hierarchy For Package gr.spinellis.product</h1>
+<span class="packageHierarchyLabel">Package Hierarchies:</span>
+<ul class="horizontal">
+<li><a href="../../../overview-tree.html">All Packages</a></li>
+</ul>
+</div>
+<div class="contentContainer">
+<h2 title="Class Hierarchy">Class Hierarchy</h2>
+<ul>
+<li type="circle">java.lang.Object
+<ul>
+<li type="circle">gr.spinellis.product.<a href="../../../gr/spinellis/product/Category.html" title="class in gr.spinellis.product"><span class="typeNameLink">Category</span></a></li>
+<li type="circle">gr.spinellis.product.<a href="../../../gr/spinellis/product/Product.html" title="class in gr.spinellis.product"><span class="typeNameLink">Product</span></a></li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../gr/spinellis/invoice/package-tree.html">Prev</a></li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?gr/spinellis/product/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/help-doc.html b/testdata/umldoc-ref/help-doc.html
index 101fc14d..c6e0afcf 100644
--- a/testdata/umldoc-ref/help-doc.html
+++ b/testdata/umldoc-ref/help-doc.html
@@ -1,223 +1,223 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>API Help</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-<script type="text/javascript" src="script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="API Help";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li><a href="overview-tree.html">Tree</a></li>
-<li><a href="deprecated-list.html">Deprecated</a></li>
-<li><a href="index-all.html">Index</a></li>
-<li class="navBarCell1Rev">Help</li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
-<li><a href="help-doc.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h1 class="title">How This API Document Is Organized</h1>
-<div class="subTitle">This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.</div>
-</div>
-<div class="contentContainer">
-<ul class="blockList">
-<li class="blockList">
-<h2>Overview</h2>
-<p>The <a href="overview-summary.html">Overview</a> page is the front page of this API document and provides a list of all packages with a summary for each.  This page can also contain an overall description of the set of packages.</p>
-</li>
-<li class="blockList">
-<h2>Package</h2>
-<p>Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:</p>
-<ul>
-<li>Interfaces (italic)</li>
-<li>Classes</li>
-<li>Enums</li>
-<li>Exceptions</li>
-<li>Errors</li>
-<li>Annotation Types</li>
-</ul>
-</li>
-<li class="blockList">
-<h2>Class/Interface</h2>
-<p>Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:</p>
-<ul>
-<li>Class inheritance diagram</li>
-<li>Direct Subclasses</li>
-<li>All Known Subinterfaces</li>
-<li>All Known Implementing Classes</li>
-<li>Class/interface declaration</li>
-<li>Class/interface description</li>
-</ul>
-<ul>
-<li>Nested Class Summary</li>
-<li>Field Summary</li>
-<li>Constructor Summary</li>
-<li>Method Summary</li>
-</ul>
-<ul>
-<li>Field Detail</li>
-<li>Constructor Detail</li>
-<li>Method Detail</li>
-</ul>
-<p>Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</p>
-</li>
-<li class="blockList">
-<h2>Annotation Type</h2>
-<p>Each annotation type has its own separate page with the following sections:</p>
-<ul>
-<li>Annotation Type declaration</li>
-<li>Annotation Type description</li>
-<li>Required Element Summary</li>
-<li>Optional Element Summary</li>
-<li>Element Detail</li>
-</ul>
-</li>
-<li class="blockList">
-<h2>Enum</h2>
-<p>Each enum has its own separate page with the following sections:</p>
-<ul>
-<li>Enum declaration</li>
-<li>Enum description</li>
-<li>Enum Constant Summary</li>
-<li>Enum Constant Detail</li>
-</ul>
-</li>
-<li class="blockList">
-<h2>Tree (Class Hierarchy)</h2>
-<p>There is a <a href="overview-tree.html">Class Hierarchy</a> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.</p>
-<ul>
-<li>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.</li>
-<li>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</li>
-</ul>
-</li>
-<li class="blockList">
-<h2>Deprecated API</h2>
-<p>The <a href="deprecated-list.html">Deprecated API</a> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</p>
-</li>
-<li class="blockList">
-<h2>Index</h2>
-<p>The <a href="index-all.html">Index</a> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</p>
-</li>
-<li class="blockList">
-<h2>Prev/Next</h2>
-<p>These links take you to the next or previous class, interface, package, or related page.</p>
-</li>
-<li class="blockList">
-<h2>Frames/No Frames</h2>
-<p>These links show and hide the HTML frames.  All pages are available with or without frames.</p>
-</li>
-<li class="blockList">
-<h2>All Classes</h2>
-<p>The <a href="allclasses-noframe.html">All Classes</a> link shows all classes and interfaces except non-static nested types.</p>
-</li>
-<li class="blockList">
-<h2>Serialized Form</h2>
-<p>Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.</p>
-</li>
-<li class="blockList">
-<h2>Constant Field Values</h2>
-<p>The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.</p>
-</li>
-</ul>
-<span class="emphasizedPhrase">This help file applies to API documentation generated using the standard doclet.</span></div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li><a href="overview-tree.html">Tree</a></li>
-<li><a href="deprecated-list.html">Deprecated</a></li>
-<li><a href="index-all.html">Index</a></li>
-<li class="navBarCell1Rev">Help</li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
-<li><a href="help-doc.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>API Help</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="API Help";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li class="navBarCell1Rev">Help</li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
+<li><a href="help-doc.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">How This API Document Is Organized</h1>
+<div class="subTitle">This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.</div>
+</div>
+<div class="contentContainer">
+<ul class="blockList">
+<li class="blockList">
+<h2>Overview</h2>
+<p>The <a href="overview-summary.html">Overview</a> page is the front page of this API document and provides a list of all packages with a summary for each.  This page can also contain an overall description of the set of packages.</p>
+</li>
+<li class="blockList">
+<h2>Package</h2>
+<p>Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:</p>
+<ul>
+<li>Interfaces (italic)</li>
+<li>Classes</li>
+<li>Enums</li>
+<li>Exceptions</li>
+<li>Errors</li>
+<li>Annotation Types</li>
+</ul>
+</li>
+<li class="blockList">
+<h2>Class/Interface</h2>
+<p>Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:</p>
+<ul>
+<li>Class inheritance diagram</li>
+<li>Direct Subclasses</li>
+<li>All Known Subinterfaces</li>
+<li>All Known Implementing Classes</li>
+<li>Class/interface declaration</li>
+<li>Class/interface description</li>
+</ul>
+<ul>
+<li>Nested Class Summary</li>
+<li>Field Summary</li>
+<li>Constructor Summary</li>
+<li>Method Summary</li>
+</ul>
+<ul>
+<li>Field Detail</li>
+<li>Constructor Detail</li>
+<li>Method Detail</li>
+</ul>
+<p>Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</p>
+</li>
+<li class="blockList">
+<h2>Annotation Type</h2>
+<p>Each annotation type has its own separate page with the following sections:</p>
+<ul>
+<li>Annotation Type declaration</li>
+<li>Annotation Type description</li>
+<li>Required Element Summary</li>
+<li>Optional Element Summary</li>
+<li>Element Detail</li>
+</ul>
+</li>
+<li class="blockList">
+<h2>Enum</h2>
+<p>Each enum has its own separate page with the following sections:</p>
+<ul>
+<li>Enum declaration</li>
+<li>Enum description</li>
+<li>Enum Constant Summary</li>
+<li>Enum Constant Detail</li>
+</ul>
+</li>
+<li class="blockList">
+<h2>Tree (Class Hierarchy)</h2>
+<p>There is a <a href="overview-tree.html">Class Hierarchy</a> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.</p>
+<ul>
+<li>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.</li>
+<li>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</li>
+</ul>
+</li>
+<li class="blockList">
+<h2>Deprecated API</h2>
+<p>The <a href="deprecated-list.html">Deprecated API</a> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</p>
+</li>
+<li class="blockList">
+<h2>Index</h2>
+<p>The <a href="index-all.html">Index</a> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</p>
+</li>
+<li class="blockList">
+<h2>Prev/Next</h2>
+<p>These links take you to the next or previous class, interface, package, or related page.</p>
+</li>
+<li class="blockList">
+<h2>Frames/No Frames</h2>
+<p>These links show and hide the HTML frames.  All pages are available with or without frames.</p>
+</li>
+<li class="blockList">
+<h2>All Classes</h2>
+<p>The <a href="allclasses-noframe.html">All Classes</a> link shows all classes and interfaces except non-static nested types.</p>
+</li>
+<li class="blockList">
+<h2>Serialized Form</h2>
+<p>Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.</p>
+</li>
+<li class="blockList">
+<h2>Constant Field Values</h2>
+<p>The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.</p>
+</li>
+</ul>
+<span class="emphasizedPhrase">This help file applies to API documentation generated using the standard doclet.</span></div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li class="navBarCell1Rev">Help</li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
+<li><a href="help-doc.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/index-all.html b/testdata/umldoc-ref/index-all.html
index 09fed8e7..6019fcbf 100644
--- a/testdata/umldoc-ref/index-all.html
+++ b/testdata/umldoc-ref/index-all.html
@@ -1,225 +1,225 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>Index</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-<script type="text/javascript" src="script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Index";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li><a href="overview-tree.html">Tree</a></li>
-<li><a href="deprecated-list.html">Deprecated</a></li>
-<li class="navBarCell1Rev">Index</li>
-<li><a href="help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="index.html?index-all.html" target="_top">Frames</a></li>
-<li><a href="index-all.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="contentContainer"><a href="#I:A">A</a>&nbsp;<a href="#I:C">C</a>&nbsp;<a href="#I:G">G</a>&nbsp;<a href="#I:I">I</a>&nbsp;<a href="#I:N">N</a>&nbsp;<a href="#I:P">P</a>&nbsp;<a href="#I:Q">Q</a>&nbsp;<a href="#I:S">S</a>&nbsp;<a href="#I:T">T</a>&nbsp;<a name="I:A">
-<!--   -->
-</a>
-<h2 class="title">A</h2>
-<dl>
-<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Invoice.html#addItem-gr.spinellis.product.Product-int-">addItem(Product, int)</a></span> - Method in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></dt>
-<dd>&nbsp;</dd>
-</dl>
-<a name="I:C">
-<!--   -->
-</a>
-<h2 class="title">C</h2>
-<dl>
-<dt><a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product"><span class="typeNameLink">Category</span></a> - Class in <a href="gr/spinellis/product/package-summary.html">gr.spinellis.product</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/product/Category.html#Category--">Category()</a></span> - Constructor for class gr.spinellis.product.<a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/product/Product.html#category">category</a></span> - Variable in class gr.spinellis.product.<a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Customer</span></a> - Class in <a href="gr/spinellis/invoice/package-summary.html">gr.spinellis.invoice</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Customer.html#Customer--">Customer()</a></span> - Constructor for class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice">Customer</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Invoice.html#customer">customer</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></dt>
-<dd>&nbsp;</dd>
-</dl>
-<a name="I:G">
-<!--   -->
-</a>
-<h2 class="title">G</h2>
-<dl>
-<dt><a href="gr/spinellis/invoice/package-summary.html">gr.spinellis.invoice</a> - package gr.spinellis.invoice</dt>
-<dd>&nbsp;</dd>
-<dt><a href="gr/spinellis/product/package-summary.html">gr.spinellis.product</a> - package gr.spinellis.product</dt>
-<dd>&nbsp;</dd>
-</dl>
-<a name="I:I">
-<!--   -->
-</a>
-<h2 class="title">I</h2>
-<dl>
-<dt><a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Invoice</span></a> - Class in <a href="gr/spinellis/invoice/package-summary.html">gr.spinellis.invoice</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Invoice.html#Invoice--">Invoice()</a></span> - Constructor for class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Invoice.html#invoiceDate">invoiceDate</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">InvoiceItem</span></a> - Class in <a href="gr/spinellis/invoice/package-summary.html">gr.spinellis.invoice</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/InvoiceItem.html#InvoiceItem--">InvoiceItem()</a></span> - Constructor for class gr.spinellis.invoice.<a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Invoice.html#items">items</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></dt>
-<dd>&nbsp;</dd>
-</dl>
-<a name="I:N">
-<!--   -->
-</a>
-<h2 class="title">N</h2>
-<dl>
-<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Customer.html#name">name</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice">Customer</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/product/Category.html#name">name</a></span> - Variable in class gr.spinellis.product.<a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/product/Product.html#name">name</a></span> - Variable in class gr.spinellis.product.<a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></dt>
-<dd>&nbsp;</dd>
-</dl>
-<a name="I:P">
-<!--   -->
-</a>
-<h2 class="title">P</h2>
-<dl>
-<dt><span class="memberNameLink"><a href="gr/spinellis/product/Product.html#price">price</a></span> - Variable in class gr.spinellis.product.<a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/InvoiceItem.html#product">product</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product"><span class="typeNameLink">Product</span></a> - Class in <a href="gr/spinellis/product/package-summary.html">gr.spinellis.product</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/product/Product.html#Product--">Product()</a></span> - Constructor for class gr.spinellis.product.<a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="gr/spinellis/product/Category.html#products">products</a></span> - Variable in class gr.spinellis.product.<a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a></dt>
-<dd>&nbsp;</dd>
-</dl>
-<a name="I:Q">
-<!--   -->
-</a>
-<h2 class="title">Q</h2>
-<dl>
-<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/InvoiceItem.html#quantity">quantity</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a></dt>
-<dd>&nbsp;</dd>
-</dl>
-<a name="I:S">
-<!--   -->
-</a>
-<h2 class="title">S</h2>
-<dl>
-<dt><span class="memberNameLink"><a href="gr/spinellis/product/Product.html#stock">stock</a></span> - Variable in class gr.spinellis.product.<a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></dt>
-<dd>&nbsp;</dd>
-</dl>
-<a name="I:T">
-<!--   -->
-</a>
-<h2 class="title">T</h2>
-<dl>
-<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Invoice.html#total">total</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></dt>
-<dd>&nbsp;</dd>
-</dl>
-<a href="#I:A">A</a>&nbsp;<a href="#I:C">C</a>&nbsp;<a href="#I:G">G</a>&nbsp;<a href="#I:I">I</a>&nbsp;<a href="#I:N">N</a>&nbsp;<a href="#I:P">P</a>&nbsp;<a href="#I:Q">Q</a>&nbsp;<a href="#I:S">S</a>&nbsp;<a href="#I:T">T</a>&nbsp;</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li><a href="overview-tree.html">Tree</a></li>
-<li><a href="deprecated-list.html">Deprecated</a></li>
-<li class="navBarCell1Rev">Index</li>
-<li><a href="help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="index.html?index-all.html" target="_top">Frames</a></li>
-<li><a href="index-all.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>Index</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Index";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li class="navBarCell1Rev">Index</li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?index-all.html" target="_top">Frames</a></li>
+<li><a href="index-all.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="contentContainer"><a href="#I:A">A</a>&nbsp;<a href="#I:C">C</a>&nbsp;<a href="#I:G">G</a>&nbsp;<a href="#I:I">I</a>&nbsp;<a href="#I:N">N</a>&nbsp;<a href="#I:P">P</a>&nbsp;<a href="#I:Q">Q</a>&nbsp;<a href="#I:S">S</a>&nbsp;<a href="#I:T">T</a>&nbsp;<a name="I:A">
+<!--   -->
+</a>
+<h2 class="title">A</h2>
+<dl>
+<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Invoice.html#addItem-gr.spinellis.product.Product-int-">addItem(Product, int)</a></span> - Method in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="I:C">
+<!--   -->
+</a>
+<h2 class="title">C</h2>
+<dl>
+<dt><a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product"><span class="typeNameLink">Category</span></a> - Class in <a href="gr/spinellis/product/package-summary.html">gr.spinellis.product</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/product/Category.html#Category--">Category()</a></span> - Constructor for class gr.spinellis.product.<a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/product/Product.html#category">category</a></span> - Variable in class gr.spinellis.product.<a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Customer</span></a> - Class in <a href="gr/spinellis/invoice/package-summary.html">gr.spinellis.invoice</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Customer.html#Customer--">Customer()</a></span> - Constructor for class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice">Customer</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Invoice.html#customer">customer</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="I:G">
+<!--   -->
+</a>
+<h2 class="title">G</h2>
+<dl>
+<dt><a href="gr/spinellis/invoice/package-summary.html">gr.spinellis.invoice</a> - package gr.spinellis.invoice</dt>
+<dd>&nbsp;</dd>
+<dt><a href="gr/spinellis/product/package-summary.html">gr.spinellis.product</a> - package gr.spinellis.product</dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="I:I">
+<!--   -->
+</a>
+<h2 class="title">I</h2>
+<dl>
+<dt><a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Invoice</span></a> - Class in <a href="gr/spinellis/invoice/package-summary.html">gr.spinellis.invoice</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Invoice.html#Invoice--">Invoice()</a></span> - Constructor for class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Invoice.html#invoiceDate">invoiceDate</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">InvoiceItem</span></a> - Class in <a href="gr/spinellis/invoice/package-summary.html">gr.spinellis.invoice</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/InvoiceItem.html#InvoiceItem--">InvoiceItem()</a></span> - Constructor for class gr.spinellis.invoice.<a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Invoice.html#items">items</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="I:N">
+<!--   -->
+</a>
+<h2 class="title">N</h2>
+<dl>
+<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Customer.html#name">name</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice">Customer</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/product/Category.html#name">name</a></span> - Variable in class gr.spinellis.product.<a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/product/Product.html#name">name</a></span> - Variable in class gr.spinellis.product.<a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="I:P">
+<!--   -->
+</a>
+<h2 class="title">P</h2>
+<dl>
+<dt><span class="memberNameLink"><a href="gr/spinellis/product/Product.html#price">price</a></span> - Variable in class gr.spinellis.product.<a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/InvoiceItem.html#product">product</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product"><span class="typeNameLink">Product</span></a> - Class in <a href="gr/spinellis/product/package-summary.html">gr.spinellis.product</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/product/Product.html#Product--">Product()</a></span> - Constructor for class gr.spinellis.product.<a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="gr/spinellis/product/Category.html#products">products</a></span> - Variable in class gr.spinellis.product.<a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product">Category</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="I:Q">
+<!--   -->
+</a>
+<h2 class="title">Q</h2>
+<dl>
+<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/InvoiceItem.html#quantity">quantity</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice">InvoiceItem</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="I:S">
+<!--   -->
+</a>
+<h2 class="title">S</h2>
+<dl>
+<dt><span class="memberNameLink"><a href="gr/spinellis/product/Product.html#stock">stock</a></span> - Variable in class gr.spinellis.product.<a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product">Product</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="I:T">
+<!--   -->
+</a>
+<h2 class="title">T</h2>
+<dl>
+<dt><span class="memberNameLink"><a href="gr/spinellis/invoice/Invoice.html#total">total</a></span> - Variable in class gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice">Invoice</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a href="#I:A">A</a>&nbsp;<a href="#I:C">C</a>&nbsp;<a href="#I:G">G</a>&nbsp;<a href="#I:I">I</a>&nbsp;<a href="#I:N">N</a>&nbsp;<a href="#I:P">P</a>&nbsp;<a href="#I:Q">Q</a>&nbsp;<a href="#I:S">S</a>&nbsp;<a href="#I:T">T</a>&nbsp;</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li class="navBarCell1Rev">Index</li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?index-all.html" target="_top">Frames</a></li>
+<li><a href="index-all.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/index.html b/testdata/umldoc-ref/index.html
index fd41127d..074c89c8 100644
--- a/testdata/umldoc-ref/index.html
+++ b/testdata/umldoc-ref/index.html
@@ -1,75 +1,75 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:48:12 EET 2017 -->
-<title>Generated Documentation (Untitled)</title>
-<script type="text/javascript">
-    tmpTargetPage = "" + window.location.search;
-    if (tmpTargetPage != "" && tmpTargetPage != "undefined")
-        tmpTargetPage = tmpTargetPage.substring(1);
-    if (tmpTargetPage.indexOf(":") != -1 || (tmpTargetPage != "" && !validURL(tmpTargetPage)))
-        tmpTargetPage = "undefined";
-    targetPage = tmpTargetPage;
-    function validURL(url) {
-        try {
-            url = decodeURIComponent(url);
-        }
-        catch (error) {
-            return false;
-        }
-        var pos = url.indexOf(".html");
-        if (pos == -1 || pos != url.length - 5)
-            return false;
-        var allowNumber = false;
-        var allowSep = false;
-        var seenDot = false;
-        for (var i = 0; i < url.length - 5; i++) {
-            var ch = url.charAt(i);
-            if ('a' <= ch && ch <= 'z' ||
-                    'A' <= ch && ch <= 'Z' ||
-                    ch == '$' ||
-                    ch == '_' ||
-                    ch.charCodeAt(0) > 127) {
-                allowNumber = true;
-                allowSep = true;
-            } else if ('0' <= ch && ch <= '9'
-                    || ch == '-') {
-                if (!allowNumber)
-                     return false;
-            } else if (ch == '/' || ch == '.') {
-                if (!allowSep)
-                    return false;
-                allowNumber = false;
-                allowSep = false;
-                if (ch == '.')
-                     seenDot = true;
-                if (ch == '/' && seenDot)
-                     return false;
-            } else {
-                return false;
-            }
-        }
-        return true;
-    }
-    function loadFrames() {
-        if (targetPage != "" && targetPage != "undefined")
-             top.classFrame.location = top.targetPage;
-    }
-</script>
-</head>
-<frameset cols="20%,80%" title="Documentation frame" onload="top.loadFrames()">
-<frameset rows="30%,70%" title="Left frames" onload="top.loadFrames()">
-<frame src="overview-frame.html" name="packageListFrame" title="All Packages">
-<frame src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
-</frameset>
-<frame src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
-<noframes>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<h2>Frame Alert</h2>
-<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p>
-</noframes>
-</frameset>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>Generated Documentation (Untitled)</title>
+<script type="text/javascript">
+    tmpTargetPage = "" + window.location.search;
+    if (tmpTargetPage != "" && tmpTargetPage != "undefined")
+        tmpTargetPage = tmpTargetPage.substring(1);
+    if (tmpTargetPage.indexOf(":") != -1 || (tmpTargetPage != "" && !validURL(tmpTargetPage)))
+        tmpTargetPage = "undefined";
+    targetPage = tmpTargetPage;
+    function validURL(url) {
+        try {
+            url = decodeURIComponent(url);
+        }
+        catch (error) {
+            return false;
+        }
+        var pos = url.indexOf(".html");
+        if (pos == -1 || pos != url.length - 5)
+            return false;
+        var allowNumber = false;
+        var allowSep = false;
+        var seenDot = false;
+        for (var i = 0; i < url.length - 5; i++) {
+            var ch = url.charAt(i);
+            if ('a' <= ch && ch <= 'z' ||
+                    'A' <= ch && ch <= 'Z' ||
+                    ch == '$' ||
+                    ch == '_' ||
+                    ch.charCodeAt(0) > 127) {
+                allowNumber = true;
+                allowSep = true;
+            } else if ('0' <= ch && ch <= '9'
+                    || ch == '-') {
+                if (!allowNumber)
+                     return false;
+            } else if (ch == '/' || ch == '.') {
+                if (!allowSep)
+                    return false;
+                allowNumber = false;
+                allowSep = false;
+                if (ch == '.')
+                     seenDot = true;
+                if (ch == '/' && seenDot)
+                     return false;
+            } else {
+                return false;
+            }
+        }
+        return true;
+    }
+    function loadFrames() {
+        if (targetPage != "" && targetPage != "undefined")
+             top.classFrame.location = top.targetPage;
+    }
+</script>
+</head>
+<frameset cols="20%,80%" title="Documentation frame" onload="top.loadFrames()">
+<frameset rows="30%,70%" title="Left frames" onload="top.loadFrames()">
+<frame src="overview-frame.html" name="packageListFrame" title="All Packages">
+<frame src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
+</frameset>
+<frame src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
+<noframes>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<h2>Frame Alert</h2>
+<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p>
+</noframes>
+</frameset>
+</html>
diff --git a/testdata/umldoc-ref/overview-frame.html b/testdata/umldoc-ref/overview-frame.html
index 209a1394..0c35ca89 100644
--- a/testdata/umldoc-ref/overview-frame.html
+++ b/testdata/umldoc-ref/overview-frame.html
@@ -1,22 +1,22 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>Overview List</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-<script type="text/javascript" src="script.js"></script>
-</head>
-<body>
-<div class="indexHeader"><span><a href="allclasses-frame.html" target="packageFrame">All&nbsp;Classes</a></span></div>
-<div class="indexContainer">
-<h2 title="Packages">Packages</h2>
-<ul title="Packages">
-<li><a href="gr/spinellis/invoice/package-frame.html" target="packageFrame">gr.spinellis.invoice</a></li>
-<li><a href="gr/spinellis/product/package-frame.html" target="packageFrame">gr.spinellis.product</a></li>
-</ul>
-</div>
-<p>&nbsp;</p>
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>Overview List</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<div class="indexHeader"><span><a href="allclasses-frame.html" target="packageFrame">All&nbsp;Classes</a></span></div>
+<div class="indexContainer">
+<h2 title="Packages">Packages</h2>
+<ul title="Packages">
+<li><a href="gr/spinellis/invoice/package-frame.html" target="packageFrame">gr.spinellis.invoice</a></li>
+<li><a href="gr/spinellis/product/package-frame.html" target="packageFrame">gr.spinellis.product</a></li>
+</ul>
+</div>
+<p>&nbsp;</p>
+</body>
+</html>
diff --git a/testdata/umldoc-ref/overview-summary.html b/testdata/umldoc-ref/overview-summary.html
index 6128cded..10a14d4f 100644
--- a/testdata/umldoc-ref/overview-summary.html
+++ b/testdata/umldoc-ref/overview-summary.html
@@ -1,137 +1,137 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>Overview</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-<script type="text/javascript" src="script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Overview";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li class="navBarCell1Rev">Overview</li>
-<li>Package</li>
-<li>Class</li>
-<li><a href="overview-tree.html">Tree</a></li>
-<li><a href="deprecated-list.html">Deprecated</a></li>
-<li><a href="index-all.html">Index</a></li>
-<li><a href="help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
-<li><a href="overview-summary.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="contentContainer">
-<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Packages table, listing packages, and an explanation">
-<caption><span>Packages</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="gr/spinellis/invoice/package-summary.html">gr.spinellis.invoice</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><a href="gr/spinellis/product/package-summary.html">gr.spinellis.product</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li class="navBarCell1Rev">Overview</li>
-<li>Package</li>
-<li>Class</li>
-<li><a href="overview-tree.html">Tree</a></li>
-<li><a href="deprecated-list.html">Deprecated</a></li>
-<li><a href="index-all.html">Index</a></li>
-<li><a href="help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
-<li><a href="overview-summary.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>Overview</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Overview";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li class="navBarCell1Rev">Overview</li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
+<li><a href="overview-summary.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="contentContainer">
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Packages table, listing packages, and an explanation">
+<caption><span>Packages</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="gr/spinellis/invoice/package-summary.html">gr.spinellis.invoice</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="gr/spinellis/product/package-summary.html">gr.spinellis.product</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li class="navBarCell1Rev">Overview</li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
+<li><a href="overview-summary.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/overview-tree.html b/testdata/umldoc-ref/overview-tree.html
index d3a767ba..eaa0388c 100644
--- a/testdata/umldoc-ref/overview-tree.html
+++ b/testdata/umldoc-ref/overview-tree.html
@@ -1,140 +1,140 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc (1.8.0_121) on Tue Mar 21 19:49:58 EET 2017 -->
-<title>Class Hierarchy</title>
-<meta name="date" content="2017-03-21">
-<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
-<script type="text/javascript" src="script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Class Hierarchy";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li class="navBarCell1Rev">Tree</li>
-<li><a href="deprecated-list.html">Deprecated</a></li>
-<li><a href="index-all.html">Index</a></li>
-<li><a href="help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="index.html?overview-tree.html" target="_top">Frames</a></li>
-<li><a href="overview-tree.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h1 class="title">Hierarchy For All Packages</h1>
-<span class="packageHierarchyLabel">Package Hierarchies:</span>
-<ul class="horizontal">
-<li><a href="gr/spinellis/invoice/package-tree.html">gr.spinellis.invoice</a>, </li>
-<li><a href="gr/spinellis/product/package-tree.html">gr.spinellis.product</a></li>
-</ul>
-</div>
-<div class="contentContainer">
-<h2 title="Class Hierarchy">Class Hierarchy</h2>
-<ul>
-<li type="circle">java.lang.Object
-<ul>
-<li type="circle">gr.spinellis.product.<a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product"><span class="typeNameLink">Category</span></a></li>
-<li type="circle">gr.spinellis.invoice.<a href="gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Customer</span></a></li>
-<li type="circle">gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Invoice</span></a></li>
-<li type="circle">gr.spinellis.invoice.<a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">InvoiceItem</span></a></li>
-<li type="circle">gr.spinellis.product.<a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product"><span class="typeNameLink">Product</span></a></li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li class="navBarCell1Rev">Tree</li>
-<li><a href="deprecated-list.html">Deprecated</a></li>
-<li><a href="index-all.html">Index</a></li>
-<li><a href="help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="index.html?overview-tree.html" target="_top">Frames</a></li>
-<li><a href="overview-tree.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (1.8.0_212) on Wed Apr 10 14:04:52 EEST 2019 -->
+<title>Class Hierarchy</title>
+<meta name="date" content="2019-04-10">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Class Hierarchy";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?overview-tree.html" target="_top">Frames</a></li>
+<li><a href="overview-tree.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">Hierarchy For All Packages</h1>
+<span class="packageHierarchyLabel">Package Hierarchies:</span>
+<ul class="horizontal">
+<li><a href="gr/spinellis/invoice/package-tree.html">gr.spinellis.invoice</a>, </li>
+<li><a href="gr/spinellis/product/package-tree.html">gr.spinellis.product</a></li>
+</ul>
+</div>
+<div class="contentContainer">
+<h2 title="Class Hierarchy">Class Hierarchy</h2>
+<ul>
+<li type="circle">java.lang.Object
+<ul>
+<li type="circle">gr.spinellis.product.<a href="gr/spinellis/product/Category.html" title="class in gr.spinellis.product"><span class="typeNameLink">Category</span></a></li>
+<li type="circle">gr.spinellis.invoice.<a href="gr/spinellis/invoice/Customer.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Customer</span></a></li>
+<li type="circle">gr.spinellis.invoice.<a href="gr/spinellis/invoice/Invoice.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">Invoice</span></a></li>
+<li type="circle">gr.spinellis.invoice.<a href="gr/spinellis/invoice/InvoiceItem.html" title="class in gr.spinellis.invoice"><span class="typeNameLink">InvoiceItem</span></a></li>
+<li type="circle">gr.spinellis.product.<a href="gr/spinellis/product/Product.html" title="class in gr.spinellis.product"><span class="typeNameLink">Product</span></a></li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?overview-tree.html" target="_top">Frames</a></li>
+<li><a href="overview-tree.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/testdata/umldoc-ref/package-list b/testdata/umldoc-ref/package-list
index d4a35753..b1373f20 100644
--- a/testdata/umldoc-ref/package-list
+++ b/testdata/umldoc-ref/package-list
@@ -1,2 +1,2 @@
-gr.spinellis.invoice
-gr.spinellis.product
+gr.spinellis.invoice
+gr.spinellis.product