diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag
index 314eefb600d24ff32c7541f2cfc3b3c5ef7ede64..301db3260de3f2c35af91344e34e1c9bdd36dee3 100644
--- a/CompilerGeneration.jrag
+++ b/CompilerGeneration.jrag
@@ -100,6 +100,10 @@ aspect GenJavaCC {
         pStream.println();
         pStream.println("void Element()  : {}");
         pStream.println("{");
+        ListIterator<Element> iter = elementTypes().listIterator();
+        while (iter.hasNext) {
+            pStream.println("  "+iter.next().name()+"()");
+        }
         pStream.println("  ");
         pStream.println("}");
         pStream.println();
@@ -107,6 +111,7 @@ aspect GenJavaCC {
         pStream.println("{");
         pStream.println("  ");
         pStream.println("}");
+        super.genJavaCC(pStream);
 	}
 
     void XsElement.genJavaCC(PrintStream pStream) {
@@ -121,6 +126,13 @@ aspect GenJavaCC {
 
 }
 
+aspect Types {
+    syn LinkedList<XsElement> Element.elementTypes() {
+        return l;
+    }
+    
+}
+
 // aspect GenAspects {
 // 	public void Start.genAspects(PrintStream pStream) {
 // 		pStream.println();