diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
index 1c5390db620a1ba544f752e075d0a0bed0a7f09d..1e98fb0c9e05c6aaabd59ceae9b477c004483c99 100644
--- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -410,8 +410,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     }
   }
 
-  @Override
-  public void outANewTerm(ANewTerm node)
+  private void generateNewTerm(Node node, AProdName prodName, List<PTerm> params)
   {
     String type_name;
     if(simpleTermTransformMap.get(node) != null)
@@ -423,7 +422,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
       type_name = CG.getAltTransformElemTypes().get(node);
     }
     int position = CG.getTermNumbers().get(node);
-    String newAltName = name((AProdName)node.getProdName());
+    String newAltName = name(prodName);
 
     try
     {
@@ -437,11 +436,11 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
       }
       macros.apply(file, "ParserNewBodyNew", new String[] {type_name, ""+position, newAltName});
 
-      if(node.getParams().size() > 0)
+      if(!params.isEmpty())
       {
         String isNotTheFirstParam = "";
 
-        for(PTerm term : node.getParams())
+        for(PTerm term : params)
         {
           if(simpleTermTransformMap.get(term) != null)
           {
@@ -484,75 +483,15 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   }
 
   @Override
-  public void outANewListTerm(ANewListTerm node)
+  public void outANewTerm(ANewTerm node)
   {
-    String type_name;
-    if(simpleTermTransformMap.get(node) != null)
-    {
-      type_name = simpleTermTransformMap.get(node);
-    }
-    else
-    {
-      type_name = CG.getAltTransformElemTypes().get(node);
-    }
-    int position = CG.getTermNumbers().get(node);
-    String newAltName = name((AProdName)node.getProdName());
-    try
-    {
-      if(type_name.startsWith("L"))
-      {
-        type_name = "list";
-      }
-      else
-      {
-        type_name = type_name.toLowerCase();
-      }
-      macros.apply(file, "ParserNewBodyNew", new String[] {type_name, ""+position, newAltName});
-
-      if(node.getParams().size() > 0)
-      {
-        String isNotTheFirstParam = "";
-
-        for(PTerm term : node.getParams())
-        {
-          if(simpleTermTransformMap.get(term) != null)
-          {
-            type_name = simpleTermTransformMap.get(term);
-          }
-          else
-          {
-            type_name = CG.getAltTransformElemTypes().get(term);
-          }
-          position = CG.getTermNumbers().get(term);
-
-          if(type_name.equals("null"))
-          {
-            macros.apply(file, "ParserNew&ListBodyParamsNull", new String[] {isNotTheFirstParam+"null"});
-          }
-          else
-          {
-            if(type_name.startsWith("L"))
-            {
-              type_name = "list";
-            }
-            else
-            {
-              type_name = type_name.toLowerCase();
-            }
-            macros.apply(file, "ParserNew&ListBodyParams", new String[] {isNotTheFirstParam+type_name, ""+position});
-          }
+    generateNewTerm(node, (AProdName)node.getProdName(), node.getParams());
+  }
 
-          isNotTheFirstParam = ", ";
-        }
-      }
-      macros.apply(file, "ParserNewBodyNewTail");
-      macros.apply(file, "ParserBraceClosing");
-    }
-    catch(IOException e)
-    {
-      throw new RuntimeException("An error occured while writing to " +
-                                 new File(pkgDir, "TokenIndex.java").getAbsolutePath(), e);
-    }
+  @Override
+  public void outANewListTerm(ANewListTerm node)
+  {
+    generateNewTerm(node, (AProdName)node.getProdName(), node.getParams());
   }
 
   public String name(AProdName node)