diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag
index 595314fe34f653f8aae91efad72adfb5df1cb924..c7ea26f1cf6f138532beba6d600a5f2c0b5761b1 100644
--- a/CompilerGeneration.jrag
+++ b/CompilerGeneration.jrag
@@ -109,11 +109,11 @@ aspect GenJavaCC {
         pStream.println("void Specification() #Specification : {}");
         pStream.println("{");
         pStream.println("  XmlHeader()");
-        pStream.println("//  [DocType()]");
+//         pStream.println("  [DocType()]");
         pStream.println("  ElementList()");
         pStream.println("}");
         pStream.println();
-        pStream.println("void DocType() : {String s;}");
+        pStream.println("void DocType() #Opt : {String s;}");
         pStream.println("{");
         pStream.println("  <LTBANG>");
         pStream.println("  {");
@@ -174,7 +174,7 @@ aspect GenJavaCC {
         pStream.println();
         pStream.println("void Element()  : {}");
         pStream.println("{");
-        pStream.println("  \"<\"");
+        pStream.println("  <LT> (");
         Iterator iter = elementTypes().values().iterator();
         if (iter.hasNext()) {
             pStream.println("  "+fixName(((XsElement) iter.next()).name())+"()");
@@ -182,7 +182,7 @@ aspect GenJavaCC {
         while (iter.hasNext()) {
             pStream.println("  | "+fixName(((XsElement) iter.next()).name())+"()");
         }
-        pStream.println("  ");
+        pStream.println(" ) ");
         pStream.println("}");
         pStream.println();
         pStream.println("void Attribute()  : {}");
@@ -214,10 +214,12 @@ aspect GenJavaCC {
             pStream.println("void "+name+"() #"+name+" : {}");
             pStream.println("{");
 
-            pStream.println("   <"+name+"> AttributeList() \">\"");
+            pStream.println("   <"+name+"> AttributeList()");
+//             pStream.println("   <"+name+"> AttributeList() \">\"");
 //             pStream.println("  \"<\" <"+name+"> AttributeList() \">\"");
-            pStream.println("  ElementList()");
-            pStream.println("  \"</\" <"+name+">  \">\"");
+//             pStream.println("  ElementList()");
+            pStream.print("  ( <GT> ElementList()");
+            pStream.println("  \"</\" <"+name+">  \">\" | ElementList() \"/>\" )");
 //             pStream.println("  \"<\" <"+name.toUpperCase()+"> AttributeList() \">\"");
 //             pStream.println("  ElementList()");
 //             pStream.println("  \"</\" <"+name.toUpperCase()+">  \">\"");
@@ -360,9 +362,9 @@ aspect GenPrettyPrinter {
 		pStream.println();
 		pStream.println("aspect PrettyPrinter {");
 		pStream.println("  public void ASTNode.prettyPrint(String indent, PrintStream pStream) {");
-		pStream.println("    pStream.print(getNumChild());");
+// 		pStream.println("    pStream.print(getNumChild());");
 		pStream.println("    for (int i=0; i<getNumChild(); i++) {");
-		pStream.println("      pStream.print(getChild(i).getClass());");
+// 		pStream.println("      pStream.print(getChild(i).getClass());");
 		pStream.println("      getChild(i).prettyPrint(indent,pStream);");
 		pStream.println("    }");
 		pStream.println("  }\n");
@@ -411,12 +413,21 @@ aspect GenPrettyPrinter {
 
     public void XsElement.genPrettyPrinter(PrintStream pStream) {
         String name = fixName(name());
-		pStream.println("  public void "+name+".prettyPrint(String indent, PrintStream pStream) {");
-		pStream.println("    pStream.print(\"<"+name+" \");");
+		pStream.println("  public void "+name+".prettyPrint(String ind, PrintStream pStream) {");
+		pStream.println("    pStream.print(ind+\"<"+name+" \");");
 		pStream.println("    for (int i=0; i<getNumAttribute(); i++) {");
-		pStream.println("      getAttribute(i).prettyPrint(indent,pStream);");
+		pStream.println("      getAttribute(i).prettyPrint(ind,pStream);");
 		pStream.println("    }");
-		pStream.println("    pStream.println(\"> \");");
+        pStream.println("    if (getNumElement() == 0) {");
+        pStream.println("       pStream.println(\"/> \");");
+        pStream.println("    } else {");
+        pStream.println("       pStream.println(\"> \");");
+        pStream.println("       String newInd = ind+\"  \";");
+        pStream.println("       for (int i=0; i<getNumElement(); i++) {");
+        pStream.println("          getElement(i).prettyPrint(newInd,pStream);");
+        pStream.println("       }");
+		pStream.println("       pStream.println(ind+\"</"+name+"> \");");
+        pStream.println("    }");
 		pStream.println("  }\n");        
     }
 }
@@ -655,6 +666,7 @@ aspect ParserGen {
 		pStream.println();
         pStream.println("                // Dump the AST");
         pStream.println("                ast.prettyPrint(\"  \", System.out);");
+//         pStream.println("                ast.dumpTree(\"  \", System.out);");
         pStream.println("        }");
         pStream.println("}");
 
diff --git a/JavaCCChunks.jrag b/JavaCCChunks.jrag
index 04b94037bf82128c6488b66215473058d4a46977..0a1ffdba740df62557a6ee1bbb8f38800b18854c 100644
--- a/JavaCCChunks.jrag
+++ b/JavaCCChunks.jrag
@@ -94,16 +94,17 @@ aspect JavaCCChunks {
 		pStream.println("    |");
 		pStream.println("    < STRING_LITERAL:");
 		pStream.println("        \"\\\"\"");
-		pStream.println("        (   (~[\"\\\"\",\"\\\\\",\"\\n\",\"\\r\"])");
-		pStream.println("            |");
-		pStream.println("            (\"\\\\\"");
-		pStream.println("                (    [\"n\",\"t\",\"b\",\"r\",\"f\",\"\\\\\",\"'\",\"\\\"\"]");
-		pStream.println("                     |");
-		pStream.println("                     [\"0\"-\"7\"] ( [\"0\"-\"7\"] )?");
-		pStream.println("                     |");
-		pStream.println("                     [\"0\"-\"3\"] [\"0\"-\"7\"] [\"0\"-\"7\"]");
-		pStream.println("                )");
-		pStream.println("            )");
+		pStream.println("        (   (~[\"\\\"\",\"\\n\",\"\\r\"])");
+// 		pStream.println("        (   (~[\"\\\"\",\"\\\\\",\"\\n\",\"\\r\"])");
+// 		pStream.println("            |");
+// 		pStream.println("            (\"\\\\\"");
+// 		pStream.println("                (    [\"n\",\"t\",\"b\",\"r\",\"f\",\"\\\\\",\"'\",\"\\\"\"]");
+// 		pStream.println("                     |");
+// 		pStream.println("                     [\"0\"-\"7\"] ( [\"0\"-\"7\"] )?");
+// 		pStream.println("                     |");
+// 		pStream.println("                     [\"0\"-\"3\"] [\"0\"-\"7\"] [\"0\"-\"7\"]");
+// 		pStream.println("                )");
+// 		pStream.println("            )");
 		pStream.println("        )*");
 		pStream.println("        \"\\\"\"");
 		pStream.println("    >");
diff --git a/x3d/test.x3d b/x3d/test.x3d
index 096d72542343d196a7a6dc6dc27e3ef4810b8db3..a0e3349b919ef9069468b9f2b12a2a7b67aede67 100644
--- a/x3d/test.x3d
+++ b/x3d/test.x3d
@@ -1,5 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN"   "http://www.web3d.org/specifications/x3d-3.0.dtd">
 <X3D profile="Full">
   <head>
     <meta name="filename" content="..\Sample Parts\Head&plate.x3d"/>