diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
index 190c343a82cc3fbc5b015c1df1fbb070b1b91b51..eb6de911ccf217873f06d349b749e3a83db9a667 100644
--- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -181,23 +181,6 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     }
   }
 
-  private void generateNewTermDeclarations(List<PTerm> params)
-  {
-    try
-    {
-      macros.apply(file, "ParserBraceOpening");
-      for(PTerm term : params)
-      {
-        generateVariableDeclaration(term);
-      }
-    }
-    catch(IOException e)
-    {
-      throw new RuntimeException("An error occured while writing to " +
-                                 new File(pkgDir, "Parser.java").getAbsolutePath(), e);
-    }
-  }
-
   private void generateSimpleTerm(Node node, TId id, TId simpleTermTail)
   {
     try
@@ -267,19 +250,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   }
 
   @Override
-  public void inANewTerm(ANewTerm node)
-  {
-    generateNewTermDeclarations(node.getParams());
-  }
-
-  @Override
-  public void inANewListTerm(ANewListTerm node)
-  {
-    generateNewTermDeclarations(node.getParams());
-  }
-
-  @Override
-  public void inAListTerm(AListTerm node)
+  public void caseAListTerm(AListTerm node)
   {
     try
     {
@@ -288,19 +259,12 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
       {
         generateVariableDeclaration(term);
       }
-    }
-    catch(IOException e)
-    {
-      throw new RuntimeException("An error occured while writing to " +
-                                 new File(pkgDir, "Parser.java").getAbsolutePath(), e);
-    }
-  }
 
-  @Override
-  public void outAListTerm(AListTerm node)
-  {
-    try
-    {
+      for(PListTerm listTerm : node.getListTerms())
+      {
+        listTerm.apply(this);
+      }
+
       for(PListTerm listTerm : node.getListTerms())
       {
         String type_name = lookupInternalTypeName(listTerm);
@@ -332,6 +296,17 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
 
     try
     {
+      macros.apply(file, "ParserBraceOpening");
+      for(PTerm term : params)
+      {
+        generateVariableDeclaration(term);
+      }
+      
+      for(PTerm param : params)
+      {
+        param.apply(this);
+      }
+
       macros.apply(file, "ParserNewBodyNew", new String[] {getVariableName(node), newAltName});
 
       if(!params.isEmpty())
@@ -356,13 +331,13 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   }
 
   @Override
-  public void outANewTerm(ANewTerm node)
+  public void caseANewTerm(ANewTerm node)
   {
     generateNewTerm(node, (AProdName)node.getProdName(), node.getParams());
   }
 
   @Override
-  public void outANewListTerm(ANewListTerm node)
+  public void caseANewListTerm(ANewListTerm node)
   {
     generateNewTerm(node, (AProdName)node.getProdName(), node.getParams());
   }