diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
index ee69c03467621bbd03f391e310962535b925e412..f4ee02adf340d902c999a329a5b32ac83df9b20c 100644
--- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -92,6 +92,11 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     }
   }
 
+  private String getVariableName(Node term)
+  {
+    return getVariableName(lookupInternalTypeName(term), CG.getTermNumbers().get(term));
+  }
+
   private static String variableTypeFromInternalType(String typeName)
   {
     if("null".equals(typeName))
@@ -110,11 +115,10 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   
   private void generateVariableDeclaration(Node term) throws IOException {
     String typeName = lookupInternalTypeName(term);
-    int position = CG.getTermNumbers().get(term);
     
     if(typeName.startsWith("L"))
     {
-      macros.apply(file, "ParserListVariableDeclaration", new String[] {getVariableName(typeName, position)});
+      macros.apply(file, "ParserListVariableDeclaration", new String[] {getVariableName(term)});
     }
     else if(typeName.equals("null"))
     {
@@ -122,7 +126,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     }
     else
     {
-      macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {typeName, getVariableName(typeName, position)});
+      macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {typeName, getVariableName(term)});
     }
   }
 
@@ -146,17 +150,11 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   @Override
   public void outAAltTransform(AAltTransform node)
   {
-    int position;
-
     try
     {
       for(PTerm term : node.getTerms())
       {
-        String type_name = lookupInternalTypeName(term);
-
-        position = CG.getTermNumbers().get(term);
-
-        macros.apply(file, "ParserNewBodyListAdd", new String[] {getVariableName(type_name, position)});
+        macros.apply(file, "ParserNewBodyListAdd", new String[] {getVariableName(term)});
       }
       if (popCount > 0) {
         // The nodeArrayList variables are numbered starting at 1, so the first popped variable has the number popCount and not popCount-1.
@@ -193,7 +191,6 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     try
     {
       String type_name = lookupInternalTypeName(node);
-      int position = CG.getTermNumbers().get(node).intValue();
       String termKey = currentAlt + "." + id.getText();
       int elemPosition = CTP.elems_position.get(termKey);
       int positionMap = 0;
@@ -229,7 +226,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
 
       macros.apply(file, "ParserSimpleTerm", new String[]
                    {
-                     getVariableName(type_name, position),
+                     getVariableName(node),
                      variableTypeFromInternalType(type_name), ""+elemPosition, ""+positionMap
                    }
                   );
@@ -288,23 +285,19 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   {
     try
     {
-      String listTypeName = lookupInternalTypeName(node);
-      int listPosition = CG.getTermNumbers().get(node);
-
       for(PListTerm listTerm : node.getListTerms())
       {
         String type_name = lookupInternalTypeName(listTerm);
-        int position = CG.getTermNumbers().get(listTerm);
 
         if(!type_name.equals("null"))
         {
           if(type_name.startsWith("L"))
           {
-            macros.apply(file, "ParserTypedLinkedListAddAll", new String[] {getVariableName(listTypeName, listPosition), getVariableName(type_name, position)});
+            macros.apply(file, "ParserTypedLinkedListAddAll", new String[] {getVariableName(node), getVariableName(listTerm)});
           }
           else
           {
-            macros.apply(file, "ParserTypedLinkedListAdd", new String[] {getVariableName(listTypeName, listPosition), getVariableName(type_name, position)});
+            macros.apply(file, "ParserTypedLinkedListAdd", new String[] {getVariableName(node), getVariableName(listTerm)});
           }
         }
       }
@@ -319,13 +312,11 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
 
   private void generateNewTerm(Node node, AProdName prodName, List<PTerm> params)
   {
-    String type_name = lookupInternalTypeName(node);
-    int position = CG.getTermNumbers().get(node);
     String newAltName = name(prodName);
 
     try
     {
-      macros.apply(file, "ParserNewBodyNew", new String[] {getVariableName(type_name, position), newAltName});
+      macros.apply(file, "ParserNewBodyNew", new String[] {getVariableName(node), newAltName});
 
       if(!params.isEmpty())
       {
@@ -333,10 +324,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
 
         for(PTerm term : params)
         {
-          type_name = lookupInternalTypeName(term);
-          position = CG.getTermNumbers().get(term);
-
-          macros.apply(file, "ParserNewBodyParam", new String[] {isNotTheFirstParam + getVariableName(type_name, position)});
+          macros.apply(file, "ParserNewBodyParam", new String[] {isNotTheFirstParam + getVariableName(term)});
 
           isNotTheFirstParam = ", ";
         }