diff --git a/src/main/java/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java b/src/main/java/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java
index 3c0d404456f46612798865334944a0ed069b5561..2cab3121dc8e5c1634e828419c22ddcdf5e499ae 100644
--- a/src/main/java/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java
+++ b/src/main/java/org/sablecc/sablecc/AddEventualEmptyTransformationToProductions.java
@@ -40,7 +40,7 @@ public class AddEventualEmptyTransformationToProductions extends DepthFirstAdapt
 
   public void inAProd(AProd node)
   {
-    currentProd = (String)ids.names.get(node);
+    currentProd = ids.names.get(node);
 
     /* If there is no transformation specified for the production
      * and there is no AST production which has the same name as the current
diff --git a/src/main/java/org/sablecc/sablecc/AltTransformAdapter.java b/src/main/java/org/sablecc/sablecc/AltTransformAdapter.java
index fc127320fd8f10e726f0aa7da85168fcf9327524..9019ab450b0276d916c63ebcfd403ff99351e500 100644
--- a/src/main/java/org/sablecc/sablecc/AltTransformAdapter.java
+++ b/src/main/java/org/sablecc/sablecc/AltTransformAdapter.java
@@ -20,14 +20,14 @@ public class AltTransformAdapter extends DepthFirstAdapter
   private Map isElementIsAlist;
 
   private LinkedList listSimpleTermTransform;
-  private Map simpleTermTransform;
-  private Map simpleTermOrsimpleListTermTypes;
+  private Map<Node, String> simpleTermTransform;
+  private Map<Node, String> simpleTermOrsimpleListTermTypes;
 
-  AltTransformAdapter(Map simpleTermTransform,
+  AltTransformAdapter(Map<Node, String> simpleTermTransform,
                       LinkedList listSimpleTermTransform,
                       String currentNewAltName,
                       ResolveAltIds altIds, Map isElementIsAlist,
-                      Map simpleTermOrsimpleListTermTypes)
+                      Map<Node, String> simpleTermOrsimpleListTermTypes)
   {
     this.currentNewAltName = currentNewAltName;
     this.altIds = altIds;
@@ -63,7 +63,7 @@ public class AltTransformAdapter extends DepthFirstAdapter
 
       if(simpleTermOrsimpleListTermTypes.get(node) != null)
       {
-        simpleTermOrsimpleListTermTypes.put(asimpleTerm, (String)simpleTermOrsimpleListTermTypes.get(node));
+        simpleTermOrsimpleListTermTypes.put(asimpleTerm, simpleTermOrsimpleListTermTypes.get(node));
       }
 
       node.replaceBy(asimpleTerm);
@@ -104,7 +104,7 @@ public class AltTransformAdapter extends DepthFirstAdapter
 
       if(simpleTermOrsimpleListTermTypes.get(node) != null)
       {
-        simpleTermOrsimpleListTermTypes.put(asimpleListTerm, (String)simpleTermOrsimpleListTermTypes.get(node));
+        simpleTermOrsimpleListTermTypes.put(asimpleListTerm, simpleTermOrsimpleListTermTypes.get(node));
       }
 
       node.replaceBy(asimpleListTerm);
@@ -123,7 +123,7 @@ public class AltTransformAdapter extends DepthFirstAdapter
 
       if(simpleTermTransform.get(temp[0]) != null)
       {
-        String firstTermType = (String)simpleTermTransform.get(temp[0]);
+        String firstTermType = simpleTermTransform.get(temp[0]);
 
         if(firstTermType != null)
         {
diff --git a/src/main/java/org/sablecc/sablecc/AlternativeElementTypes.java b/src/main/java/org/sablecc/sablecc/AlternativeElementTypes.java
index 1c74f44b336a7e6dcb0037faeaf9c0f40937eb28..34de7054783c61a952d93e096c2d36e68ff41cf2 100644
--- a/src/main/java/org/sablecc/sablecc/AlternativeElementTypes.java
+++ b/src/main/java/org/sablecc/sablecc/AlternativeElementTypes.java
@@ -14,8 +14,7 @@ import java.io.*;
 
 public class AlternativeElementTypes extends DepthFirstAdapter
 {
-  private Map altElemTypes = new TypedHashMap(StringCast.instance,
-                             StringCast.instance);
+  private Map<String, String> altElemTypes = new HashMap<>();
 
   private ResolveIds ids;
   private String currentAlt;
@@ -25,7 +24,7 @@ public class AlternativeElementTypes extends DepthFirstAdapter
     this.ids = ids;
   }
 
-  public Map getMapOfAltElemType()
+  public Map<String, String> getMapOfAltElemType()
   {
     return altElemTypes;
   }
@@ -44,7 +43,7 @@ public class AlternativeElementTypes extends DepthFirstAdapter
 
   public void caseAAlt(AAlt node)
   {
-    currentAlt = (String)ids.names.get(node);
+    currentAlt = ids.names.get(node);
     Object []temp = node.getElems().toArray();
     for(int i = 0; i<temp.length; i++)
     {
@@ -54,7 +53,7 @@ public class AlternativeElementTypes extends DepthFirstAdapter
 
   public void inAElem(AElem node)
   {
-    String elemType = (String)ids.elemTypes.get(node);
+    String elemType = ids.elemTypes.get(node);
 
     if(node.getElemName() != null)
     {
diff --git a/src/main/java/org/sablecc/sablecc/ComputeCGNomenclature.java b/src/main/java/org/sablecc/sablecc/ComputeCGNomenclature.java
index 4452150d22efa1aea70c86306dd92bc4c46d9190..bb8ebf191ef2c6f820a2ff86b0013f378856287c 100644
--- a/src/main/java/org/sablecc/sablecc/ComputeCGNomenclature.java
+++ b/src/main/java/org/sablecc/sablecc/ComputeCGNomenclature.java
@@ -31,14 +31,11 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
   private int counter;
   private ResolveIds ids;
   private ResolveProdTransformIds prodTransformIds;
-  private Map altElemTypes;
+  private Map<String, String> altElemTypes;
 
-  private final Map altTransformElemTypes = new TypedHashMap(
-        NodeCast.instance,
-        StringCast.instance);
+  private final Map<Node, String> altTransformElemTypes = new HashMap<>();
 
-  private final Map termNumbers = new TypedHashMap(NodeCast.instance,
-                                  IntegerCast.instance);
+  private final Map<Node, Integer> termNumbers = new HashMap<>();
 
   public ComputeCGNomenclature(ResolveIds ids, ResolveProdTransformIds prodTransformIds)
   {
@@ -46,17 +43,17 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
     this.prodTransformIds = prodTransformIds;
   }
 
-  public void setAltElemTypes(Map aMap)
+  public void setAltElemTypes(Map<String, String> aMap)
   {
     this.altElemTypes = aMap;
   }
 
-  public Map getAltTransformElemTypes()
+  public Map<Node, String> getAltTransformElemTypes()
   {
     return altTransformElemTypes;
   }
 
-  public Map getTermNumbers()
+  public Map<Node, Integer> getTermNumbers()
   {
     return termNumbers;
   }
@@ -94,7 +91,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
 
   public void inAElem(AElem node)
   {
-    String elemType = (String)ids.elemTypes.get(node);
+    String elemType = ids.elemTypes.get(node);
 
     if(node.getElemName() != null)
     {
@@ -108,7 +105,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
     String type = "P" + ids.name(aProdName.getId().getText());
 
     altTransformElemTypes.put(node, type);
-    termNumbers.put(node, new Integer(++counter));
+    termNumbers.put(node, ++counter);
   }
 
   public void inANewListTerm(ANewListTerm node)
@@ -117,7 +114,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
     String type = "P" + ids.name(aProdName.getId().getText());
 
     altTransformElemTypes.put(node, type);
-    termNumbers.put(node, new Integer(++counter));
+    termNumbers.put(node, ++counter);
   }
 
   public void outAListTerm(AListTerm node)
@@ -126,7 +123,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
     {
       Object[] temp = node.getListTerms().toArray();
 
-      String firstTermType = (String)altTransformElemTypes.get(temp[0]);
+      String firstTermType = altTransformElemTypes.get(temp[0]);
 
       if(firstTermType != null)
       {
@@ -144,13 +141,13 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
     {
       altTransformElemTypes.put(node, "Lnull");
     }
-    termNumbers.put(node, new Integer(++counter));
+    termNumbers.put(node, ++counter);
   }
 
   public void caseASimpleTerm(ASimpleTerm node)
   {
     String name;
-    String elemType = (String) this.altElemTypes.get( currentAlt+"."+node.getId().getText() );
+    String elemType = this.altElemTypes.get( currentAlt+"."+node.getId().getText() );
 
     if(node.getSimpleTermTail() == null)
     {
@@ -164,7 +161,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
     else
     {
       String termTail = node.getSimpleTermTail().getText();
-      name = (String)prodTransformIds.prodTransformElemTypesString.get(elemType+"."+termTail);
+      name = prodTransformIds.prodTransformElemTypesString.get(elemType+"."+termTail);
     }
 
     if(name.endsWith("?"))
@@ -173,7 +170,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
     }
 
     altTransformElemTypes.put(node, name);
-    termNumbers.put(node, new Integer(++counter));
+    termNumbers.put(node, ++counter);
   }
 
   /*
@@ -238,13 +235,13 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
   public void caseANullTerm(ANullTerm node)
   {
     altTransformElemTypes.put(node, "null");
-    termNumbers.put(node, new Integer(++counter));
+    termNumbers.put(node, ++counter);
   }
 
   public void caseASimpleListTerm(ASimpleListTerm node)
   {
     String name;
-    String elemType = (String)altElemTypes.get( currentAlt+"."+node.getId().getText() );
+    String elemType = altElemTypes.get( currentAlt+"."+node.getId().getText() );
 
     if(node.getSimpleTermTail() == null)
     {
@@ -258,7 +255,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
     else
     {
       String termTail = node.getSimpleTermTail().getText();
-      name = (String)prodTransformIds.prodTransformElemTypesString.get(elemType+"."+termTail);
+      name = prodTransformIds.prodTransformElemTypesString.get(elemType+"."+termTail);
     }
 
     if(name.endsWith("?"))
@@ -266,7 +263,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
       name = name.substring(0, name.length()-1);
     }
     altTransformElemTypes.put(node, name);
-    termNumbers.put(node, new Integer(++counter));
+    termNumbers.put(node, ++counter);
   }
   /*
   public void caseASimpleListTerm(ASimpleListTerm node)
diff --git a/src/main/java/org/sablecc/sablecc/ComputeSimpleTermPosition.java b/src/main/java/org/sablecc/sablecc/ComputeSimpleTermPosition.java
index 792f9c487372e60b3d4a58ffde0b591981e40b76..f6fe21ba3cc06f1b126eea0212731c6465da65bd 100644
--- a/src/main/java/org/sablecc/sablecc/ComputeSimpleTermPosition.java
+++ b/src/main/java/org/sablecc/sablecc/ComputeSimpleTermPosition.java
@@ -20,13 +20,9 @@ public class ComputeSimpleTermPosition extends DepthFirstAdapter
   private ResolveIds ids;
   private int counter;
 
-  public final Map positionsMap = new TypedHashMap(
-                                    StringCast.instance,
-                                    StringCast.instance);
+  public final Map<String, String> positionsMap = new HashMap<>();
 
-  public final Map elems_position = new TypedHashMap(
-                                      StringCast.instance,
-                                      IntegerCast.instance);
+  public final Map<String, Integer> elems_position = new HashMap<>();
 
   public ComputeSimpleTermPosition(ResolveIds ids)
   {
@@ -72,7 +68,7 @@ public class ComputeSimpleTermPosition extends DepthFirstAdapter
         currentElemName = currentAlt + "." + node.getId().getText();
       }
 
-      elems_position.put(currentElemName, new Integer(++counter));
+      elems_position.put(currentElemName, ++counter);
     }
 
     if(node.getSpecifier() != null &&
@@ -83,7 +79,7 @@ public class ComputeSimpleTermPosition extends DepthFirstAdapter
 
     String name = ids.name( node.getId().getText() );
 
-    String elemType = (String)ids.elemTypes.get(node);
+    String elemType = ids.elemTypes.get(node);
     if(processingParsedAlt && elemType.startsWith("P"))
     {
       String elemName;
diff --git a/src/main/java/org/sablecc/sablecc/ConstructNFA.java b/src/main/java/org/sablecc/sablecc/ConstructNFA.java
index 33c65ecd543bf08c5269c7ce93ddd97e920e9019..59fdf178098daaf0782983cb11133525f8435b92 100644
--- a/src/main/java/org/sablecc/sablecc/ConstructNFA.java
+++ b/src/main/java/org/sablecc/sablecc/ConstructNFA.java
@@ -92,7 +92,7 @@ public class ConstructNFA extends DepthFirstAdapter
       //System.out.print("*");
 
       NFA n1 = (o1 instanceof NFA) ? (NFA) o1 : new NFA((CharSet) o1);
-      String name = (String) ids.names.get(node);
+      String name = ids.names.get(node);
 
       n1.states[n1.states.length - 1].accept = name;
       setOut(node, n1);
diff --git a/src/main/java/org/sablecc/sablecc/ConstructParserGenerationDatas.java b/src/main/java/org/sablecc/sablecc/ConstructParserGenerationDatas.java
index c14f56ae44d6fa8a4e245f1c256d3bf61c995445..dac5ebdf2ca693b07ec0bc2ac9d35e42c769e888 100644
--- a/src/main/java/org/sablecc/sablecc/ConstructParserGenerationDatas.java
+++ b/src/main/java/org/sablecc/sablecc/ConstructParserGenerationDatas.java
@@ -18,9 +18,9 @@ public class ConstructParserGenerationDatas extends DepthFirstAdapter
   private boolean processingAst;
   private String currentProd;
 
-  private Map alts;
+  private Map<String, Node> alts;
 
-  public ConstructParserGenerationDatas(ResolveIds ids, Map alts)
+  public ConstructParserGenerationDatas(ResolveIds ids, Map<String, Node> alts)
   {
     this.ids = ids;
     this.alts = alts;
@@ -31,7 +31,7 @@ public class ConstructParserGenerationDatas extends DepthFirstAdapter
 
   public void caseAProd(AProd node)
   {
-    currentProd = (String) ids.names.get(node);
+    currentProd = ids.names.get(node);
     AAlt[] alts = (AAlt[])node.getAlts().toArray(new AAlt[0]);
     for(int i=0; i<alts.length; i++)
     {
@@ -41,7 +41,7 @@ public class ConstructParserGenerationDatas extends DepthFirstAdapter
 
   public void caseAAlt(AAlt node)
   {
-    currentAlt = Grammar.addProduction(currentProd, (String) ids.names.get(node));
+    currentAlt = Grammar.addProduction(currentProd, ids.names.get(node));
     alts.put(ids.names.get(node), node);
 
     AElem[] temp = (AElem[])node.getElems().toArray(new AElem[0]);
@@ -80,7 +80,7 @@ public class ConstructParserGenerationDatas extends DepthFirstAdapter
         ids.elemTypes.put(node, "P" + name);
       }
     }
-    name = (String) ids.elemTypes.get(node);
+    name = ids.elemTypes.get(node);
     Grammar.addSymbolToProduction(name, currentAlt);
   }
 }
diff --git a/src/main/java/org/sablecc/sablecc/GenAlts.java b/src/main/java/org/sablecc/sablecc/GenAlts.java
index db62b6d9eb2750bd8eb810d57b093322e81e8d97..dfd886a52383c6246a3e554a14e77a6f0824e3e4 100644
--- a/src/main/java/org/sablecc/sablecc/GenAlts.java
+++ b/src/main/java/org/sablecc/sablecc/GenAlts.java
@@ -52,7 +52,7 @@ public class GenAlts extends DepthFirstAdapter
 
   public void inAAstProd(AAstProd node)
   {
-    currentProd = (String) ast_ids.ast_names.get(node);
+    currentProd = ast_ids.ast_names.get(node);
   }
 
   public void inAAstAlt(AAstAlt node)
@@ -66,8 +66,8 @@ public class GenAlts extends DepthFirstAdapter
   public void inAElem(AElem node)
   {
     info = new ElemInfo();
-    info.name = (String) ast_ids.ast_names.get(node);
-    info.type = (String) ast_ids.ast_elemTypes.get(node);
+    info.name = ast_ids.ast_names.get(node);
+    info.type = ast_ids.ast_elemTypes.get(node);
     info.operator = ElemInfo.NONE;
 
     if(node.getUnOp() != null)
@@ -97,7 +97,7 @@ public class GenAlts extends DepthFirstAdapter
 
   public void outAAstAlt(AAstAlt node)
   {
-    String name = (String) ast_ids.ast_names.get(node);
+    String name = ast_ids.ast_names.get(node);
 
     BufferedWriter file;
 
diff --git a/src/main/java/org/sablecc/sablecc/GenAnalyses.java b/src/main/java/org/sablecc/sablecc/GenAnalyses.java
index 2e7eb94e7f3194e89920e783e1a212681c859dd6..f21830436ea11f95e71fafdb9a32764c0646e277 100644
--- a/src/main/java/org/sablecc/sablecc/GenAnalyses.java
+++ b/src/main/java/org/sablecc/sablecc/GenAnalyses.java
@@ -56,7 +56,7 @@ public class GenAnalyses extends DepthFirstAdapter
   {
     if(mainProduction == null)
     {
-      mainProduction = (String) ast_ids.ast_names.get(node);
+      mainProduction = ast_ids.ast_names.get(node);
     }
   }
 
@@ -77,8 +77,8 @@ public class GenAnalyses extends DepthFirstAdapter
   {
     info = new ElemInfo();
 
-    info.name = (String) ast_ids.ast_names.get(node);
-    info.type = (String) ast_ids.ast_elemTypes.get(node);
+    info.name = ast_ids.ast_names.get(node);
+    info.type = ast_ids.ast_elemTypes.get(node);
     info.operator = ElemInfo.NONE;
 
     if(node.getUnOp() != null)
@@ -112,7 +112,7 @@ public class GenAnalyses extends DepthFirstAdapter
   {
     AltInfo info = new AltInfo();
 
-    info.name = (String) ast_ids.ast_names.get(node);
+    info.name = ast_ids.ast_names.get(node);
     info.elems.addAll(elemList);
     elemList = null;
 
diff --git a/src/main/java/org/sablecc/sablecc/GenLexer.java b/src/main/java/org/sablecc/sablecc/GenLexer.java
index 05ea7991187be01a899eb96e527b607b43255006..9b633e247f989be79a6409f7c0b4106f1d0bae45 100644
--- a/src/main/java/org/sablecc/sablecc/GenLexer.java
+++ b/src/main/java/org/sablecc/sablecc/GenLexer.java
@@ -163,8 +163,7 @@ public class GenLexer extends AnalysisAdapter
       {
         String name = (String) i.next();
         Node node = (Node) ids.tokens.get(name);
-        boolean fixed = ((Boolean) ids.fixedTokens.get(node))
-                          .booleanValue();
+        boolean fixed = ids.fixedTokens.get(node);
 
         if(fixed)
         {
@@ -177,7 +176,7 @@ public class GenLexer extends AnalysisAdapter
                        new String[] {"" + i.previousIndex(), name});
         }
 
-        Map map = (Map) transitions.tokenStates.get(node);
+        Map map = transitions.tokenStates.get(node);
         if(map.size() > 0)
         {
           macros.apply(file, "TokenSwitchHeader", null);
@@ -203,8 +202,7 @@ public class GenLexer extends AnalysisAdapter
       {
         String name = (String) i.next();
         Node node = (Node) ids.tokens.get(name);
-        boolean fixed = ((Boolean) ids.fixedTokens.get(node))
-                          .booleanValue();
+        boolean fixed = ids.fixedTokens.get(node);
 
         if(fixed)
         {
diff --git a/src/main/java/org/sablecc/sablecc/GenParser.java b/src/main/java/org/sablecc/sablecc/GenParser.java
index 84230dd97dd50e7faeb6e8ce252cf2dea1fca2e7..41ed6b52891bf555a02b0189a7aa283023da3698 100644
--- a/src/main/java/org/sablecc/sablecc/GenParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenParser.java
@@ -69,17 +69,13 @@ public class GenParser extends DepthFirstAdapter
 
   private LinkedList listSimpleTermTransform = new LinkedList();
 
-  public final Map simpleTermTransform =
-    new TypedHashMap(NodeCast.instance,
-                     StringCast.instance);
+  public final Map<Node, String> simpleTermTransform = new HashMap<>();
 
   //This map contains Productions which were explicitely transformed in the grammar
   //Those transformations was specified by the grammar-writer.
-  private final Map mapProductionTransformations =
-    new TypedHashMap(StringCast.instance,
-                     ListCast.instance);
+  private final Map<String, LinkedList> mapProductionTransformations = new HashMap<>();
 
-  private Map alts;
+  private Map<String, Node> alts;
 
   public GenParser(ResolveIds ids, ResolveAltIds altIds, ResolveTransformIds transformIds,
                    String firstProductionName, boolean processInlining, boolean prettyPrinting,
@@ -130,7 +126,7 @@ public class GenParser extends DepthFirstAdapter
                                  if(node.getProdTransform() != null)
                                  {
                                    mapProductionTransformations.put("P"+ResolveIds.name(node.getId().getText()),
-                                                                    node.getProdTransform().clone() );
+                                                                    (LinkedList)node.getProdTransform().clone() );
                                  }
                                }
                              }
@@ -177,8 +173,8 @@ public class GenParser extends DepthFirstAdapter
 
                    public void caseATokenDef(ATokenDef node)
                    {
-                     String name = (String) ids.names.get(node);
-                     String errorName = (String) ids.errorNames.get(node);
+                     String name = ids.names.get(node);
+                     String errorName = ids.errorNames.get(node);
 
                      if(!ids.ignTokens.containsKey(name))
                      {
@@ -200,7 +196,7 @@ public class GenParser extends DepthFirstAdapter
                    {
                      if(hasAlternative)
                      {
-                       Grammar.addNonterminal((String) ids.names.get(node));
+                       Grammar.addNonterminal(ids.names.get(node));
                      }
                    }
                  }
@@ -208,7 +204,7 @@ public class GenParser extends DepthFirstAdapter
 
       //Construct all necessary informations for generation of the parser.
       //This map contains all the alternatives of the transformed final grammar
-      alts = new TypedHashMap(StringCast.instance, NodeCast.instance);
+      alts = new HashMap<>();
 
       tree.getPGrammar().apply(new ConstructParserGenerationDatas(ids, alts));
 
@@ -390,8 +386,6 @@ public class GenParser extends DepthFirstAdapter
       //the node needed to be created at a local point.
       for(int i = 0; i < (productions.length - 1); i++)
       {
-        Node node = (Node) alts.get(productions[i].name);
-
         if(activateFilter && !grammarHasTransformations)
         {
           macros.apply(file, "ParserNoInliningReduce", new String[] {
@@ -419,7 +413,7 @@ public class GenParser extends DepthFirstAdapter
                        "" + productions[i].index,
                        productions[i].name});
 
-        final Node node = (Node) alts.get(productions[i].name);
+        final Node node = alts.get(productions[i].name);
 
         final BufferedWriter finalFile = file;
         final LinkedList stack = new LinkedList();
@@ -452,8 +446,8 @@ public class GenParser extends DepthFirstAdapter
                                      new File(pkgDir, "Parser.java").getAbsolutePath());
         }
 
-        String nodeName = (String)ids.names.get(node);
-        String realnodeName = (String)ids.names.get(node);
+        String nodeName = ids.names.get(node);
+        String realnodeName = ids.names.get(node);
         aParsedAltAdapter =
           new GenerateAlternativeCodeForParser(pkgDir, nodeName, realnodeName,
                                                file, transformIds, CG, CTP,
diff --git a/src/main/java/org/sablecc/sablecc/GenProds.java b/src/main/java/org/sablecc/sablecc/GenProds.java
index 5e47012b49ca94a81c9112c7a0e09f253df98b0d..2bd082d547dbf7925833ed3ae341be7127a7a858 100644
--- a/src/main/java/org/sablecc/sablecc/GenProds.java
+++ b/src/main/java/org/sablecc/sablecc/GenProds.java
@@ -52,7 +52,7 @@ public class GenProds extends DepthFirstAdapter
 
   public void inAAstProd(AAstProd node)
   {
-    String name = (String) ast_ids.ast_names.get(node);
+    String name = ast_ids.ast_names.get(node);
 
     createProduction(name);
   }
diff --git a/src/main/java/org/sablecc/sablecc/GenTokens.java b/src/main/java/org/sablecc/sablecc/GenTokens.java
index dac7d0cf13b7ec77b90ebe12033414ef3f565523..110833abe499d6911223a5ad6517891985b62e43 100644
--- a/src/main/java/org/sablecc/sablecc/GenTokens.java
+++ b/src/main/java/org/sablecc/sablecc/GenTokens.java
@@ -51,7 +51,7 @@ public class GenTokens extends DepthFirstAdapter
 
   public void inATokenDef(ATokenDef node)
   {
-    String name = (String) ids.names.get(node);
+    String name = ids.names.get(node);
 
     BufferedWriter file;
 
@@ -107,7 +107,7 @@ public class GenTokens extends DepthFirstAdapter
     {
       if(text == null)
       {
-        ids.fixedTokens.put(node, new Boolean(false));
+        ids.fixedTokens.put(node, false);
 
         macros.apply(file, "VariableTextToken", new String[] { pkgName,
                      ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
@@ -115,7 +115,7 @@ public class GenTokens extends DepthFirstAdapter
       }
       else
       {
-        ids.fixedTokens.put(node, new Boolean(true));
+        ids.fixedTokens.put(node, true);
 
         macros.apply(file, "FixedTextToken", new String[] { pkgName,
                      ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
diff --git a/src/main/java/org/sablecc/sablecc/GenUtils.java b/src/main/java/org/sablecc/sablecc/GenUtils.java
index 06ea7360064cea70e8c0b36dd89f537a065666a2..8e76bf0a26d9d0f0aa5f8fda8b611ded0581708b 100644
--- a/src/main/java/org/sablecc/sablecc/GenUtils.java
+++ b/src/main/java/org/sablecc/sablecc/GenUtils.java
@@ -63,7 +63,7 @@ public class GenUtils extends DepthFirstAdapter
   {
     if(mainProduction == null)
     {
-      mainProduction = (String) ast_ids.ast_names.get(node);
+      mainProduction = ast_ids.ast_names.get(node);
     }
   }
 
diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
index 8a532a4d6a9803acc7699a772661eeecabf484b7..743d452b05d2ad10710100286f4f7fe0bf7c0db9 100644
--- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -26,9 +26,9 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   private ComputeCGNomenclature CG;
   private ComputeSimpleTermPosition CTP;
   private MacroExpander macros;
-  private Map simpleTermTransformMap;
+  private Map<Node, String> simpleTermTransformMap;
   private LinkedList listSimpleTermTransform;
-  private Map simpleTermOrsimpleListTermTypes;
+  private Map<Node, String> simpleTermOrsimpleListTermTypes;
 
   GenerateAlternativeCodeForParser(File pkgDir, String aParsedAltName,
                                    String raParsedAltName,
@@ -39,7 +39,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
                                    Map simpleTermTransformMap,
                                    MacroExpander macros,
                                    LinkedList listSimpleTermTransform,
-                                   Map simpleTermOrsimpleListTermTypes)
+                                   Map<Node, String> simpleTermOrsimpleListTermTypes)
   {
     this.pkgDir = pkgDir;
     this.file = file;
@@ -64,14 +64,14 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     {
       if(simpleTermTransformMap.get(temp[i]) != null)
       {
-        type_name = (String)simpleTermTransformMap.get(temp[i]);
+        type_name = simpleTermTransformMap.get(temp[i]);
       }
       else
       {
-        type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+        type_name = CG.getAltTransformElemTypes().get(temp[i]);
       }
 
-      position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+      position = CG.getTermNumbers().get(temp[i]);
 
       try
       {
@@ -108,14 +108,14 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
       {
         if(simpleTermTransformMap.get(temp[i]) != null)
         {
-          type_name = (String)simpleTermTransformMap.get(temp[i]);
+          type_name = simpleTermTransformMap.get(temp[i]);
         }
         else
         {
-          type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+          type_name = CG.getAltTransformElemTypes().get(temp[i]);
         }
 
-        position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+        position = CG.getTermNumbers().get(temp[i]);
 
         if(type_name.startsWith("L"))
         {
@@ -152,13 +152,13 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     {
       if(simpleTermTransformMap.get(temp[i]) != null)
       {
-        type_name = (String)simpleTermTransformMap.get(temp[i]);
+        type_name = simpleTermTransformMap.get(temp[i]);
       }
       else
       {
-        type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+        type_name = CG.getAltTransformElemTypes().get(temp[i]);
       }
-      position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+      position = CG.getTermNumbers().get(temp[i]);
 
       try
       {
@@ -190,22 +190,22 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
       String type_name;
       if(simpleTermTransformMap.get(node) != null)
       {
-        type_name = (String)simpleTermTransformMap.get(node);
+        type_name = simpleTermTransformMap.get(node);
       }
       else
       {
-        type_name = (String)CG.getAltTransformElemTypes().get(node);
+        type_name = CG.getAltTransformElemTypes().get(node);
       }
-      int position = ((Integer)CG.getTermNumbers().get(node)).intValue();
+      int position = CG.getTermNumbers().get(node).intValue();
       String termKey = currentAlt+"."+node.getId().getText();
-      int elemPosition = ((Integer)CTP.elems_position.get(termKey)).intValue();
+      int elemPosition = CTP.elems_position.get(termKey);
       int positionMap = 0;
 
       if(node.getSimpleTermTail() != null )
       {
         if( !listSimpleTermTransform.contains(node.getId().getText() ) )
         {
-          String type = (String)CTP.positionsMap.get( realcurrentAlt+"."+node.getId().getText() );
+          String type = CTP.positionsMap.get( realcurrentAlt+"."+node.getId().getText() );
           LinkedList list = (LinkedList)transformIds.getProdTransformIds().prod_transforms.get(type);
           if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
           {
@@ -215,7 +215,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
 
         if(simpleTermOrsimpleListTermTypes.get(node) != null)
         {
-          String type = (String)simpleTermOrsimpleListTermTypes.get(node);
+          String type = simpleTermOrsimpleListTermTypes.get(node);
           LinkedList list = (LinkedList)transformIds.getProdTransformIds().prod_transforms.get(type);
           if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
           {
@@ -261,17 +261,17 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
       String type_name;
       if(simpleTermTransformMap.get(node) != null)
       {
-        type_name = (String)simpleTermTransformMap.get(node);
+        type_name = simpleTermTransformMap.get(node);
       }
       else
       {
-        type_name = (String)CG.getAltTransformElemTypes().get(node);
+        type_name = CG.getAltTransformElemTypes().get(node);
       }
 
       String termKey = currentAlt+"."+node.getId().getText();
-      int position = ((Integer)CG.getTermNumbers().get(node)).intValue();
+      int position = CG.getTermNumbers().get(node);
 
-      int elemPosition = ((Integer)CTP.elems_position.get(termKey)).intValue();
+      int elemPosition = CTP.elems_position.get(termKey);
 
       int positionMap = 0;
 
@@ -279,7 +279,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
       {
         if( !listSimpleTermTransform.contains(node.getId().getText()) )
         {
-          String type = (String)CTP.positionsMap.get( realcurrentAlt+"."+node.getId().getText() );
+          String type = CTP.positionsMap.get( realcurrentAlt+"."+node.getId().getText() );
           LinkedList list = (LinkedList)transformIds.getProdTransformIds().prod_transforms.get(type);
           if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
           {
@@ -289,7 +289,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
 
         if(simpleTermOrsimpleListTermTypes.get(node) != null)
         {
-          String type = (String)simpleTermOrsimpleListTermTypes.get(node);
+          String type = simpleTermOrsimpleListTermTypes.get(node);
           LinkedList list = (LinkedList)transformIds.getProdTransformIds().prod_transforms.get(type);
           if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
           {
@@ -368,13 +368,13 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
         String type_name;
         if(simpleTermTransformMap.get(temp[i]) != null)
         {
-          type_name = (String)simpleTermTransformMap.get(temp[i]);
+          type_name = simpleTermTransformMap.get(temp[i]);
         }
         else
         {
-          type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+          type_name = CG.getAltTransformElemTypes().get(temp[i]);
         }
-        int position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+        int position = CG.getTermNumbers().get(temp[i]);
 
         if(type_name.startsWith("L"))
         {
@@ -402,20 +402,20 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     try
     {
       Object temp[] = node.getListTerms().toArray();
-      int listPosition = ((Integer)CG.getTermNumbers().get(node)).intValue();
+      int listPosition = CG.getTermNumbers().get(node);
 
       for(int i = 0; i < temp.length; i++)
       {
         String type_name;
         if(simpleTermTransformMap.get(temp[i]) != null)
         {
-          type_name = (String)simpleTermTransformMap.get(temp[i]);
+          type_name = simpleTermTransformMap.get(temp[i]);
         }
         else
         {
-          type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+          type_name = CG.getAltTransformElemTypes().get(temp[i]);
         }
-        int position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+        int position = CG.getTermNumbers().get(temp[i]);
 
         if(!type_name.equals("null"))
         {
@@ -440,16 +440,16 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
 
   public void outANewTerm(ANewTerm node)
   {
-    String type_name = (String)CG.getAltTransformElemTypes().get(node);
+    String type_name;
     if(simpleTermTransformMap.get(node) != null)
     {
-      type_name = (String)simpleTermTransformMap.get(node);
+      type_name = simpleTermTransformMap.get(node);
     }
     else
     {
-      type_name = (String)CG.getAltTransformElemTypes().get(node);
+      type_name = CG.getAltTransformElemTypes().get(node);
     }
-    int position = ((Integer)CG.getTermNumbers().get(node)).intValue();
+    int position = CG.getTermNumbers().get(node);
     String newAltName = name((AProdName)node.getProdName());
 
     try
@@ -473,13 +473,13 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
         {
           if(simpleTermTransformMap.get(temp[i]) != null)
           {
-            type_name = (String)simpleTermTransformMap.get(temp[i]);
+            type_name = simpleTermTransformMap.get(temp[i]);
           }
           else
           {
-            type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+            type_name = CG.getAltTransformElemTypes().get(temp[i]);
           }
-          position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+          position = CG.getTermNumbers().get(temp[i]);
 
           if(i != 0)
           {
@@ -520,13 +520,13 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     String type_name;
     if(simpleTermTransformMap.get(node) != null)
     {
-      type_name = (String)simpleTermTransformMap.get(node);
+      type_name = simpleTermTransformMap.get(node);
     }
     else
     {
-      type_name = (String)CG.getAltTransformElemTypes().get(node);
+      type_name = CG.getAltTransformElemTypes().get(node);
     }
-    int position = ((Integer)CG.getTermNumbers().get(node)).intValue();
+    int position = CG.getTermNumbers().get(node);
     String newAltName = name((AProdName)node.getProdName());
     try
     {
@@ -549,13 +549,13 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
         {
           if(simpleTermTransformMap.get(temp[i]) != null)
           {
-            type_name = (String)simpleTermTransformMap.get(temp[i]);
+            type_name = simpleTermTransformMap.get(temp[i]);
           }
           else
           {
-            type_name = (String)CG.getAltTransformElemTypes().get(temp[i]);
+            type_name = CG.getAltTransformElemTypes().get(temp[i]);
           }
-          position = ((Integer)CG.getTermNumbers().get(temp[i])).intValue();
+          position = CG.getTermNumbers().get(temp[i]);
 
           if(i != 0)
           {
diff --git a/src/main/java/org/sablecc/sablecc/In_Production.java b/src/main/java/org/sablecc/sablecc/In_Production.java
index 79aedb39dc3b5818d2fe5f2958b861e9f5c972e1..304131af96c9e6d22b14aca1ef6c7746d9d60d60 100644
--- a/src/main/java/org/sablecc/sablecc/In_Production.java
+++ b/src/main/java/org/sablecc/sablecc/In_Production.java
@@ -84,7 +84,7 @@ public class In_Production
     String name;
     int nbElems;
     AElem[] elements;
-    Map prodTransform_altTransform;
+    Map<String, Node> prodTransform_altTransform;
 
     In_Alternative(AAlt alt, String[] prodTransformElems, String prodName)
     {
@@ -113,10 +113,7 @@ public class In_Production
 
       nbElems = listOfElems.length;
 
-      prodTransform_altTransform =
-        new TypedHashMap(prodTransformElems.length,
-                         StringCast.instance,
-                         NodeCast.instance);
+      prodTransform_altTransform = new HashMap<>(prodTransformElems.length);
 
       LinkedList list = ((AAltTransform)alt.getAltTransform()).getTerms();
       for(int i=0; i<list.size(); i++)
@@ -155,7 +152,7 @@ public class In_Production
       return nbElems;
     }
 
-    Map getProdTransform_AlTransformMap()
+    Map<String, Node> getProdTransform_AlTransformMap()
     {
       return prodTransform_altTransform;
     }
diff --git a/src/main/java/org/sablecc/sablecc/Inlining.java b/src/main/java/org/sablecc/sablecc/Inlining.java
index a1361eda85327063dbbe6a6661a53e41d79e36f3..79393bfb947c3cf0aaa3fc4c10da459de21f0d76 100644
--- a/src/main/java/org/sablecc/sablecc/Inlining.java
+++ b/src/main/java/org/sablecc/sablecc/Inlining.java
@@ -238,7 +238,7 @@ public class Inlining
     LinkedList resultList = new LinkedList();
     AAlt[] alts = (AAlt[])altsList.toArray(new AAlt[0]);
     AAlt aParsed_alt;
-    Map mapOfNewTermNames;
+    Map<String, String> mapOfNewTermNames;
 
     for(int i=0; i<alts.length; i++)
     {
@@ -246,15 +246,14 @@ public class Inlining
 
       for(int j=0; j<prod_to_inline.getNbAlts(); j++)
       {
-        mapOfNewTermNames = new TypedHashMap(StringCast.instance,
-                                             StringCast.instance);
+        mapOfNewTermNames = new HashMap<>();
 
         LinkedList listElems = inlineList(aParsed_alt.getElems(),
                                           prod_to_inline.getAlternative(j).getElems(),
                                           mapOfNewTermNames);
         AAltTransform aAltTransform =
           (AAltTransform)((AAltTransform)aParsed_alt.getAltTransform()).clone();
-        final Map currentMap = prod_to_inline.getAlternative(j).getProdTransform_AlTransformMap();
+        final Map<String, Node> currentMap = prod_to_inline.getAlternative(j).getProdTransform_AlTransformMap();
 
         aAltTransform.apply(new DepthFirstAdapter()
                             {
@@ -273,7 +272,7 @@ public class Inlining
                                     termTail = prod_to_inline.getName();
                                   }
 
-                                  PTerm term = (PTerm)((PTerm)currentMap.get(termTail)).clone();
+                                  PTerm term = (PTerm)currentMap.get(termTail).clone();
 
                                   if(currentMap.get(termTail) != null)
                                   {
@@ -404,7 +403,7 @@ public class Inlining
 
   public LinkedList inlineList(LinkedList oldElemsList,
                                AElem[] inliningProductionsElems,
-                               Map mapOfNewTermNames)
+                               Map<String, String> mapOfNewTermNames)
   {
     int position = 0;
     AElem[] listElems = (AElem[]) oldElemsList.toArray(new AElem[0]);
@@ -469,7 +468,7 @@ public class Inlining
   }
 
   private void fixSimpleTermOrSimpleListTermNames(AAltTransform tmpaAltTransform,
-      final Map mapOldNameNewNames)
+      final Map<String, String> mapOldNameNewNames)
   {
     tmpaAltTransform.apply(new DepthFirstAdapter()
                            {
@@ -477,7 +476,7 @@ public class Inlining
                              {
                                if(mapOldNameNewNames.get(node.getId().getText()) != null)
                                {
-                                 node.setId(new TId( (String)mapOldNameNewNames.get(node.getId().getText()) ));
+                                 node.setId(new TId(mapOldNameNewNames.get(node.getId().getText())));
                                }
                              }
 
@@ -485,7 +484,7 @@ public class Inlining
                              {
                                if(mapOldNameNewNames.get(node.getId().getText()) != null)
                                {
-                                 node.setId(new TId( (String)mapOldNameNewNames.get(node.getId().getText()) ));
+                                 node.setId(new TId(mapOldNameNewNames.get(node.getId().getText())));
                                }
                              }
                            }
diff --git a/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java b/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
index 2cd0a92b257b449e301625cafea61b1c07eeb31f..310c42369a2b26e59b12c1ff905b759bd22301d3 100644
--- a/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
@@ -42,9 +42,9 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
 
   private LinkedList listSimpleTermTransform;
 
-  public final Map simpleTermTransform;
-  Map mapProductionTransformations;
-  Map simpleTermOrsimpleListTermTypes;
+  public final Map<Node, String> simpleTermTransform;
+  Map<String, LinkedList> mapProductionTransformations;
+  Map<Node, String> simpleTermOrsimpleListTermTypes;
 
   private Map isElementIsAlist = new TypedTreeMap(
                                    StringComparator.instance,
@@ -56,9 +56,9 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
   public InternalTransformationsToGrammar(ResolveIds ids, ResolveAltIds altIds,
                                           ResolveTransformIds transformIds,
                                           LinkedList listSimpleTermTransform,
-                                          Map simpleTermTransform,
-                                          Map mapProductionTransformations,
-                                          Map simpleTermOrsimpleListTermTypes)
+                                          Map<Node, String> simpleTermTransform,
+                                          Map<String, LinkedList> mapProductionTransformations,
+                                          Map<Node, String> simpleTermOrsimpleListTermTypes)
   {
     this.ids = ids;
     this.altIds = altIds;
@@ -88,7 +88,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
 
   public void caseAProd(AProd node)
   {
-    currentProd = (String) ids.names.get(node);
+    currentProd = ids.names.get(node);
     listOfAlts = new LinkedList();
 
     Object[] list_alt = (Object[])node.getAlts().toArray();
@@ -112,7 +112,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
   public void caseAAlt(AAlt node)
   {
     count = 1;
-    currentAltName = (String) ids.names.get(node);
+    currentAltName = ids.names.get(node);
 
     AAltTransform currentAltTransform = (AAltTransform)node.getAltTransform();
 
@@ -269,7 +269,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
     if(!processingAst)
     {
       int op = ((Integer) getOut(node)).intValue();
-      String name = (String) ids.elemTypes.get(node);
+      String name = ids.elemTypes.get(node);
       String numero = (countElementNecessary == true ? ""+(count+1) : "" );
       String qMarkOrPlusElemType;
       String elemNameOfElem = null;
@@ -321,8 +321,8 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
 
           if((count & (1 << elem)) != 0)
           {
-            qMarkOrPlusElemType = (String)ids.elemTypes.get(node);
-            LinkedList tmpProdTransform = (LinkedList)mapProductionTransformations.get(qMarkOrPlusElemType);
+            qMarkOrPlusElemType = ids.elemTypes.get(node);
+            LinkedList tmpProdTransform = mapProductionTransformations.get(qMarkOrPlusElemType);
 
             if(!checkCreationOfXElem.contains("$" + elemName))
             {
@@ -373,8 +373,8 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
         break;
       case PLUS:
         {
-          qMarkOrPlusElemType = (String)ids.elemTypes.get(node);
-          LinkedList tmpProdTransform = (LinkedList)mapProductionTransformations.get(qMarkOrPlusElemType);
+          qMarkOrPlusElemType = ids.elemTypes.get(node);
+          LinkedList tmpProdTransform = mapProductionTransformations.get(qMarkOrPlusElemType);
 
           if(!checkCreationOfXElem.contains("$" + elemName))
           {
diff --git a/src/main/java/org/sablecc/sablecc/ResolveAltIds.java b/src/main/java/org/sablecc/sablecc/ResolveAltIds.java
index e6f42f08556999c86ed43e952bb11d745841f858..838c81f4af8303ab59dab5b4081926b3ebf80ba4 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveAltIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveAltIds.java
@@ -107,7 +107,7 @@ public class ResolveAltIds extends DepthFirstAdapter
     //contains only element of the alternative which are list(operator * or +).
     listElemslist = new LinkedList();
 
-    currentAlt = (String)ids.names.get(alt);
+    currentAlt = ids.names.get(alt);
 
     AElem[] list_elems = (AElem[])alt.getElems().toArray(new AElem[0]);
     for(int i=0; i<list_elems.length; i++)
diff --git a/src/main/java/org/sablecc/sablecc/ResolveAstIds.java b/src/main/java/org/sablecc/sablecc/ResolveAstIds.java
index a0613dfc373240d7f4de635f30c425e0ac79335f..5d2319fe29c3347f5c05c96d638e6078bdc3fe66 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveAstIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveAstIds.java
@@ -54,12 +54,8 @@ public class ResolveAstIds extends DepthFirstAdapter
                                  NodeCast.instance);
   //Map of all names of AST productions.
   //They are essentially used to generate AST node classes.
-  public final Map ast_names = new TypedHashMap(
-                                 NodeCast.instance,
-                                 StringCast.instance);
-  public final Map ast_elemTypes = new TypedHashMap(
-                                     NodeCast.instance,
-                                     StringCast.instance);
+  public final Map<Node, String> ast_names = new HashMap<>();
+  public final Map<Node, String> ast_elemTypes = new HashMap<>();
   public ResolveIds astIds;
 
   private String firstAstProduction;
diff --git a/src/main/java/org/sablecc/sablecc/ResolveIds.java b/src/main/java/org/sablecc/sablecc/ResolveIds.java
index cfc425603b5bca11af95a953b82282aefc66c755..e542fe84bdea0611e9c13d196c2c9ad0088b75f7 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveIds.java
@@ -35,38 +35,22 @@ public class ResolveIds extends DepthFirstAdapter
                              StringCast.instance,
                              NodeCast.instance);
 
-  public final Map alts = new TypedHashMap(
-                            StringCast.instance,
-                            NodeCast.instance);
+  public final Map<String, AAlt> alts = new HashMap<>();
 
-  public final Map elems = new TypedHashMap(
-                             StringCast.instance,
-                             NodeCast.instance);
+  public final Map<String, AElem> elems = new HashMap<>();
 
-  public final Map names = new TypedHashMap(
-                             NodeCast.instance,
-                             StringCast.instance);
+  public final Map<Node, String> names = new HashMap<>();
 
-  public final Map errorNames = new TypedHashMap(
-                                  NodeCast.instance,
-                                  StringCast.instance);
-  public final Map elemTypes = new TypedHashMap(
-                                 NodeCast.instance,
-                                 StringCast.instance);
+  public final Map<Node, String> errorNames = new HashMap<>();
+  public final Map<Node, String> elemTypes = new HashMap<>();
 
-  public final Map altsElemNameTypes = new TypedHashMap(
-                                         StringCast.instance,
-                                         StringCast.instance);
+  public final Map<String, String> altsElemNameTypes = new HashMap<>();
 
   // This map will serve for simpleTerm and simplelistTerm type within an altTransform
   // Inside an altTransform, one would look at this map to know its type. (P... or T...)
-  public final Map altsElemTypes = new TypedHashMap(
-                                     StringCast.instance,
-                                     StringCast.instance);
+  public final Map<String, String> altsElemTypes = new HashMap<>();
 
-  public final Map fixedTokens = new TypedHashMap(
-                                   NodeCast.instance,
-                                   BooleanCast.instance);
+  public final Map<Node, Boolean> fixedTokens = new HashMap<>();
 
   public final List tokenList = new TypedLinkedList(StringCast.instance);
   public final LinkedList stateList = new TypedLinkedList(StringCast.instance);
@@ -194,7 +178,7 @@ public class ResolveIds extends DepthFirstAdapter
         error((TId)list_id[i], name);
       }
 
-      names.put(list_id[i], name);
+      names.put((Node)list_id[i], name);
       stateList.add(name);
     }
   }
@@ -217,7 +201,7 @@ public class ResolveIds extends DepthFirstAdapter
       {
         error((TId)list_id[i], name);
       }
-      names.put(list_id[i], name);
+      names.put((Node)list_id[i], name);
     }
   }
 
diff --git a/src/main/java/org/sablecc/sablecc/ResolveProdTransformIds.java b/src/main/java/org/sablecc/sablecc/ResolveProdTransformIds.java
index ab242d12baa5cbee14522621124375961dd1f559..019e3fe1e2a3353d6117ed8b3783552408df16da 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveProdTransformIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveProdTransformIds.java
@@ -34,15 +34,11 @@ public class ResolveProdTransformIds extends DepthFirstAdapter
 
   //Map of production transformation element type. The key of this map
   //is the node of this element in the AST.
-  public final Map prodTransformElemTypes = new TypedHashMap(
-        NoCast.instance,
-        StringCast.instance);
+  public final Map<Object, String> prodTransformElemTypes = new HashMap<>();
 
   //This map contains the same information as the other one just above.
   //But the keys for this map are String ("ProdName.ElemTransformationName")
-  public final Map prodTransformElemTypesString = new TypedHashMap(
-        StringCast.instance,
-        StringCast.instance);
+  public final Map<String, String> prodTransformElemTypesString = new HashMap<>();
 
   //Map of Productions which transformations contains list elements.
   public Map mapProdTransformContainsList = new TypedTreeMap(
@@ -63,7 +59,7 @@ public class ResolveProdTransformIds extends DepthFirstAdapter
 
   public void caseAProd(final AProd production)
   {
-    prod_name = (String)transformIds.astIds.names.get(production);
+    prod_name = transformIds.astIds.names.get(production);
 
     AElem temp[] =
       (AElem [])production.getProdTransform().toArray(new AElem[0]);
diff --git a/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java b/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java
index d7089fcf2dd8afdc6d130954fb267fb7dbdd2564..0908782fc5e28a5d5056a61fb512740d58ea4cea 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java
@@ -41,17 +41,11 @@ public class ResolveTransformIds extends DepthFirstAdapter
   private String currentAstProdName;
 
   //This Map contains the type of any term of alternative transformation(altTransform)
-  public final Map altTransformElemTypes = new TypedHashMap(
-        NodeCast.instance,
-        StringCast.instance);
+  public final Map<Node, String> altTransformElemTypes = new HashMap<>();
 
-  public final Map mapSimpleTermProdTransformation = new TypedHashMap(
-        StringCast.instance,
-        ListCast.instance);
+  public final Map<String, LinkedList> mapSimpleTermProdTransformation = new HashMap<>();
 
-  public final Map simpleTermOrsimpleListTermTypes = new TypedHashMap(
-        NodeCast.instance,
-        StringCast.instance);
+  public final Map<Node, String> simpleTermOrsimpleListTermTypes = new HashMap<>();
 
   public ResolveTransformIds(ResolveAstIds ast_ids, ResolveAltIds alt_ids, ResolveProdTransformIds p_ids)
   {
@@ -68,7 +62,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
   public void inAProd(final AProd production)
   {
     nbTransformProd = 0;
-    currentProd = (String)altIds.ids.names.get(production);
+    currentProd = altIds.ids.names.get(production);
 
     if(production.getArrow() != null)
     {
@@ -84,7 +78,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
   {
     nbTransformAlt = 0;
 
-    currentAlt = (String)altIds.ids.names.get(nodeAlt);
+    currentAlt = altIds.ids.names.get(nodeAlt);
     listCurrentAltGlobal = (LinkedList)((LinkedList)altIds.alts_elemsGlobal.get(currentAlt)).clone();
     listCurrentAlt = (LinkedList)((LinkedList)altIds.alts_elems.get(currentAlt)).clone();
     listOfListCurrentAlt = (LinkedList)((LinkedList)altIds.alts_elems_list.get(currentAlt)).clone();
@@ -193,8 +187,8 @@ public class ResolveTransformIds extends DepthFirstAdapter
       //here, we're checking the type compabitlity between for a new node creation
       for(int j=0; j<elemsTable.length; j++)
       {
-        termType = (String)altTransformElemTypes.get(paramsTable[j]);
-        elemType = (String)transformIds.ast_elemTypes.get(elemsTable[j]);
+        termType = altTransformElemTypes.get(paramsTable[j]);
+        elemType = transformIds.ast_elemTypes.get(elemsTable[j]);
 
         PUnOp eventual_ast_alt_elemOperator = ((AElem)elemsTable[j]).getUnOp();
 
@@ -283,8 +277,8 @@ public class ResolveTransformIds extends DepthFirstAdapter
       //here, we're checking the type compabitlity between for a new node creation
       for(int j=0; j<elemsTable.length; j++)
       {
-        termType = (String)altTransformElemTypes.get(paramsTable[j]);
-        elemType = (String)transformIds.ast_elemTypes.get(elemsTable[j]);
+        termType = altTransformElemTypes.get(paramsTable[j]);
+        elemType = transformIds.ast_elemTypes.get(elemsTable[j]);
 
         PUnOp elemOp = ((AElem)elemsTable[j]).getUnOp();
 
@@ -305,7 +299,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
     if( (node.getListTerms() != null) && (node.getListTerms().size() != 0) )
     {
       Object temp[] = node.getListTerms().toArray();
-      String firstTermType = (String)altTransformElemTypes.get(temp[0]);
+      String firstTermType = altTransformElemTypes.get(temp[0]);
       if(firstTermType.endsWith("?"))
       {
         firstTermType = firstTermType.substring(0, firstTermType.length()-1);
@@ -313,7 +307,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
 
       for(int i=1; i<temp.length; i++)
       {
-        String termType = (String)altTransformElemTypes.get(temp[i]);
+        String termType = altTransformElemTypes.get(temp[i]);
         if(termType.endsWith("?"))
         {
           termType = termType.substring(0, termType.length()-1);
@@ -347,8 +341,8 @@ public class ResolveTransformIds extends DepthFirstAdapter
   public void inASimpleTerm(ASimpleTerm node)
   {
     String name = node.getId().getText();
-    String typeOfExplicitElemName = (String)transformIds.astIds.altsElemNameTypes.get( currentAlt+"."+node.getId().getText() );
-    String alternativeElemType = (String)transformIds.astIds.altsElemTypes.get( currentAlt+"."+node.getId().getText() );
+    String typeOfExplicitElemName = transformIds.astIds.altsElemNameTypes.get( currentAlt+"."+node.getId().getText() );
+    String alternativeElemType = transformIds.astIds.altsElemTypes.get( currentAlt+"."+node.getId().getText() );
 
     boolean okTermtail = false;
     String tmpName = name;
@@ -432,7 +426,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
           }
           else
           {
-            listL = (LinkedList)mapSimpleTermProdTransformation.get(currentAlt+"."+tmpName);
+            listL = mapSimpleTermProdTransformation.get(currentAlt+"."+tmpName);
           }
         }
         if( mapSimpleTermProdTransformation.get(currentAlt+".P"+tmpName) == null )
@@ -446,7 +440,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
         }
         else
         {
-          listP = (LinkedList)mapSimpleTermProdTransformation.get(currentAlt+".P"+tmpName);
+          listP = mapSimpleTermProdTransformation.get(currentAlt+".P"+tmpName);
         }
 
         listCurrentAlt.remove(lastSimpleTerm);
@@ -562,7 +556,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
           alternativeElemType = alternativeElemType.substring(0, alternativeElemType.length()-1);
           qmark_op = true;
         }
-        String typeOfTerm = (String)prodTransformIds.prodTransformElemTypesString.get(alternativeElemType+"."+termTail);
+        String typeOfTerm = prodTransformIds.prodTransformElemTypesString.get(alternativeElemType+"."+termTail);
 
         // The substring is done because we want to ensures that lists term should be wrapped by square brackets
         if(typeOfTerm.startsWith("L"))
@@ -586,8 +580,8 @@ public class ResolveTransformIds extends DepthFirstAdapter
   public void inASimpleListTerm(ASimpleListTerm node)
   {
     String name = node.getId().getText();
-    String  typeOfExplicitElemName = (String)transformIds.astIds.altsElemNameTypes.get( currentAlt+"."+node.getId().getText() );
-    String alternativeElemType = (String)transformIds.astIds.altsElemTypes.get( currentAlt+"."+node.getId().getText() );
+    String typeOfExplicitElemName = transformIds.astIds.altsElemNameTypes.get( currentAlt+"."+node.getId().getText() );
+    String alternativeElemType = transformIds.astIds.altsElemTypes.get( currentAlt+"."+node.getId().getText() );
     String strTermTail;
     String tmpName = name;
 
@@ -675,7 +669,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
           }
           else
           {
-            listL = (LinkedList)mapSimpleTermProdTransformation.get(currentAlt+"."+tmpName);
+            listL = mapSimpleTermProdTransformation.get(currentAlt+"."+tmpName);
           }
         }
         if( mapSimpleTermProdTransformation.get(currentAlt+".P"+tmpName) == null )
@@ -689,7 +683,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
         }
         else
         {
-          listP = (LinkedList)mapSimpleTermProdTransformation.get(currentAlt+".P"+tmpName);
+          listP = mapSimpleTermProdTransformation.get(currentAlt+".P"+tmpName);
         }
 
         listCurrentAlt.remove(lastSimpleTerm);
@@ -810,7 +804,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
           alternativeElemType = alternativeElemType.substring(0, alternativeElemType.length()-1);
           qmark_op = true;
         }
-        String typeOfTerm = (String)prodTransformIds.prodTransformElemTypesString.get(alternativeElemType+"."+termTail);
+        String typeOfTerm = prodTransformIds.prodTransformElemTypesString.get(alternativeElemType+"."+termTail);
 
         // The substring is done because we want to ensures that lists term should be wrapped by square brackets
         if(typeOfTerm.startsWith("L"))
@@ -858,7 +852,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
                                   {
                                     curr_prod_has_prodTransform = true;
                                     curr_prodTransformElems = prodTransform.toArray();
-                                    prodTransformElemType = (String)prodTransformIds.prodTransformElemTypes.get(curr_prodTransformElems[0]);
+                                    prodTransformElemType = prodTransformIds.prodTransformElemTypes.get(curr_prodTransformElems[0]);
                                   }
                                   else if(production.getArrow() == null)
                                   {
@@ -898,13 +892,13 @@ public class ResolveTransformIds extends DepthFirstAdapter
 
                                     if(curr_prod_has_prodTransform)
                                     {
-                                      prodTransformElemType = (String)prodTransformIds.prodTransformElemTypes.get(curr_prodTransformElems[k]);
+                                      prodTransformElemType = prodTransformIds.prodTransformElemTypes.get(curr_prodTransformElems[k]);
                                     }
                                     else
                                     {
                                       prodTransformElemType = (String)curr_prodTransformElems[k];
                                     }
-                                    altTransformTermType = (String)altTransformElemTypes.get(curr_altTransformTerms[k]);
+                                    altTransformTermType = altTransformElemTypes.get(curr_altTransformTerms[k]);
 
                                     PUnOp elemOp = ((AElem)curr_prodTransformElems[k]).getUnOp();
 
@@ -921,7 +915,7 @@ public class ResolveTransformIds extends DepthFirstAdapter
                                   if(curr_altTransformTerms.length == 0)
                                   {
                                     String prodTransformElemType = (String)curr_prodTransformElems[0];
-                                    String altTransformTermType = (String)altTransformElemTypes.get(node);
+                                    String altTransformTermType = altTransformElemTypes.get(node);
                                     if(!prodTransformElemType.equals(altTransformTermType))
                                     {
                                       error10(node.getLBrace(), prodTransformElemType, altTransformTermType);
diff --git a/src/main/java/org/sablecc/sablecc/Transitions.java b/src/main/java/org/sablecc/sablecc/Transitions.java
index 817c7541e01037a56be45bc4aa94ba50b486f4cf..fb65877cc74bd805a17c75bb3b4ec900865be4bb 100644
--- a/src/main/java/org/sablecc/sablecc/Transitions.java
+++ b/src/main/java/org/sablecc/sablecc/Transitions.java
@@ -13,9 +13,7 @@ import java.util.*;
 
 public class Transitions extends DepthFirstAdapter
 {
-  public final Map tokenStates = new TypedHashMap(
-                                   NodeCast.instance,
-                                   NoCast.instance);
+  public final Map<Node, Map> tokenStates = new HashMap<>();
 
   private String state;
   private String transition;
diff --git a/src/main/java/org/sablecc/sablecc/TypedHashMap.java b/src/main/java/org/sablecc/sablecc/TypedHashMap.java
deleted file mode 100644
index 0a20b3f52fcd6e95a9d6aa9959c1dec36ed16fad..0000000000000000000000000000000000000000
--- a/src/main/java/org/sablecc/sablecc/TypedHashMap.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * This file is part of SableCC.                             *
- * See the file "LICENSE" for copyright information and the  *
- * terms and conditions for copying, distribution and        *
- * modification of SableCC.                                  *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-package org.sablecc.sablecc;
-
-import java.util.*;
-
-public class TypedHashMap extends HashMap
-{
-  private Cast keyCast;
-  private Cast valueCast;
-  private Set entries;
-
-  public TypedHashMap()
-  {
-    super();
-
-    keyCast = NoCast.instance;
-    valueCast = NoCast.instance;
-  }
-
-  public TypedHashMap(int initialCapacity, Cast keyCast, Cast valueCast)
-  {
-    super(initialCapacity);
-
-    this.keyCast = keyCast;
-    this.valueCast = valueCast;
-  }
-
-  public TypedHashMap(Map map)
-  {
-    super();
-
-    keyCast = NoCast.instance;
-    valueCast = NoCast.instance;
-
-    Map.Entry[] entries = (Map.Entry[]) map.entrySet().toArray(new Map.Entry[0]);
-    for(int i = 0; i < entries.length; i++)
-    {
-      this.put(entries[i].getKey(),entries[i].getValue());
-    }
-
-  }
-
-  public TypedHashMap(Cast keyCast, Cast valueCast)
-  {
-    super();
-
-    this.keyCast = keyCast;
-    this.valueCast = valueCast;
-  }
-
-  public Object clone()
-  {
-    return new TypedHashMap(this, keyCast, valueCast);
-  }
-
-  public TypedHashMap(Map map, Cast keyCast, Cast valueCast)
-  {
-    super();
-
-    this.keyCast = keyCast;
-    this.valueCast = valueCast;
-
-    Map.Entry[] entries = (Map.Entry[]) map.entrySet().toArray(new Map.Entry[0]);
-    for(int i = 0; i < entries.length; i++)
-    {
-      this.put(entries[i].getKey(),entries[i].getValue());
-    }
-
-  }
-
-  public Cast getKeyCast()
-  {
-    return keyCast;
-  }
-
-  public Cast getValueCast()
-  {
-    return valueCast;
-  }
-
-  public Set entrySet()
-  {
-    if(entries == null)
-    {
-      entries = new EntrySet(super.entrySet());
-    }
-
-    return entries;
-  }
-
-  public Object put(Object key, Object value)
-  {
-    return super.put(keyCast.cast(key), valueCast.cast(value));
-  }
-
-  private class EntrySet extends AbstractSet
-  {
-    private Set set
-      ;
-
-    EntrySet(Set set
-              )
-    {
-      this.set = set
-                   ;
-    }
-
-    public int size()
-    {
-      return set.size();
-    }
-
-    public Iterator iterator()
-    {
-      return new EntryIterator(set.iterator());
-    }
-  }
-
-  private class EntryIterator implements Iterator
-  {
-    private Iterator iterator;
-
-    EntryIterator(Iterator iterator)
-    {
-      this.iterator = iterator;
-    }
-
-    public boolean hasNext()
-    {
-      return iterator.hasNext();
-    }
-
-    public Object next()
-    {
-      return new TypedEntry((Map.Entry) iterator.next());
-    }
-
-    public void remove
-      ()
-    {
-      iterator.remove();
-    }
-  }
-
-  private class TypedEntry implements Map.Entry
-  {
-    private Map.Entry entry;
-
-    TypedEntry(Map.Entry entry)
-    {
-      this.entry = entry;
-    }
-
-    public Object getKey()
-    {
-      return entry.getKey();
-    }
-
-    public Object getValue()
-    {
-      return entry.getValue();
-    }
-
-    public Object setValue(Object value)
-    {
-      return entry.setValue(valueCast.cast(value));
-    }
-  }
-}