diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
index 435c54c6af4745314e8760a2ec05a832e0e76f57..af30d9371b8fc258190a1b2765f066db18ab7fba 100644
--- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -75,6 +75,38 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
       return CG.getAltTransformElemTypes().get(term);
     }
   }
+
+  private static String variablePrefixFromInternalType(String typeName)
+  {
+    if("null".equals(typeName))
+    {
+      throw new IllegalArgumentException("Null values have no variable name");
+    }
+    else if(typeName.startsWith("L"))
+    {
+      return "list";
+    }
+    else
+    {
+      return typeName.toLowerCase();
+    }
+  }
+
+  private static String variableTypeFromInternalType(String typeName)
+  {
+    if("null".equals(typeName))
+    {
+      throw new IllegalArgumentException("Null values have no variable type");
+    }
+    else if(typeName.startsWith("L"))
+    {
+      return "LinkedList";
+    }
+    else
+    {
+      return typeName;
+    }
+  }
   
   private void generateVariableDeclaration(Node term) throws IOException {
     String typeName = lookupInternalTypeName(term);
@@ -90,7 +122,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     }
     else
     {
-      macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {typeName, typeName.toLowerCase(), "" + position});
+      macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {typeName, variablePrefixFromInternalType(typeName), "" + position});
     }
   }
 
@@ -130,15 +162,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
         }
         else
         {
-          if(type_name.startsWith("L"))
-          {
-            type_name = "list";
-          }
-          else
-          {
-            type_name = type_name.toLowerCase();
-          }
-          macros.apply(file, "ParserNewBodyListAdd", new String[] {type_name, "" + position});
+          macros.apply(file, "ParserNewBodyListAdd", new String[] {variablePrefixFromInternalType(type_name), "" + position});
         }
 
       }
@@ -206,25 +230,15 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
         }
       }
 
-      String type;
-      if(type_name.startsWith("L"))
-      {
-        type_name = "list";
-        type = "LinkedList";
-      }
-      else if(type_name.equals("null"))
+      if(type_name.equals("null"))
       {
         throw new RuntimeException("Simple term has null type - this should never happen");
       }
-      else
-      {
-        type = type_name;
-      }
 
       macros.apply(file, "ParserSimpleTerm", new String[]
                    {
-                     type_name.toLowerCase(), ""+position,
-                     type, ""+elemPosition, ""+positionMap
+                     variablePrefixFromInternalType(type_name), ""+position,
+                     variableTypeFromInternalType(type_name), ""+elemPosition, ""+positionMap
                    }
                   );
     }
@@ -297,7 +311,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
           }
           else
           {
-            macros.apply(file, "ParserTypedLinkedListAdd", new String[] {"list", ""+listPosition, type_name.toLowerCase(), ""+ position});
+            macros.apply(file, "ParserTypedLinkedListAdd", new String[] {"list", ""+listPosition, variablePrefixFromInternalType(type_name), ""+ position});
           }
         }
       }
@@ -318,15 +332,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
 
     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});
+      macros.apply(file, "ParserNewBodyNew", new String[] {variablePrefixFromInternalType(type_name), ""+position, newAltName});
 
       if(!params.isEmpty())
       {
@@ -343,15 +349,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
           }
           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});
+            macros.apply(file, "ParserNew&ListBodyParams", new String[] {isNotTheFirstParam + variablePrefixFromInternalType(type_name), ""+position});
           }
 
           isNotTheFirstParam = ", ";