diff --git a/src/main/java/org/sablecc/sablecc/ConstructNFA.java b/src/main/java/org/sablecc/sablecc/ConstructNFA.java
index 761ab6a6ab882e8dd20d0065c7a23a74f564411a..ade311e8ad12c279338f2208e242067a29549119 100644
--- a/src/main/java/org/sablecc/sablecc/ConstructNFA.java
+++ b/src/main/java/org/sablecc/sablecc/ConstructNFA.java
@@ -46,7 +46,7 @@ public class ConstructNFA extends DepthFirstAdapter
   @Override
   public void outATokens(ATokens node)
   {
-    ATokenDef[] tokenDefs = (ATokenDef[]) node.getTokenDefs().toArray(new ATokenDef[0]);
+    PTokenDef[] tokenDefs = node.getTokenDefs().toArray(new PTokenDef[0]);
 
     for(int i = tokenDefs.length - 1; i >= 0 ; i--)
     {
@@ -101,7 +101,7 @@ public class ConstructNFA extends DepthFirstAdapter
 
     final AStateList node = (AStateList)stateList;
     Set<String> set = new TreeSet<>();
-    AStateListTail[] stateListTails = (AStateListTail[]) node.getStateLists().toArray(new AStateListTail[0]);
+    AStateListTail[] stateListTails = node.getStateLists().toArray(new AStateListTail[0]);
 
     for(int i = stateListTails.length - 1; i >= 0 ; i--)
     {
@@ -116,7 +116,7 @@ public class ConstructNFA extends DepthFirstAdapter
   @Override
   public void outARegExp(ARegExp node)
   {
-    AConcat[] concats = (AConcat[]) node.getConcats().toArray(new AConcat[0]);
+    PConcat[] concats = node.getConcats().toArray(new PConcat[0]);
     NFA result = null;
 
     if(concats.length > 1)
@@ -152,7 +152,7 @@ public class ConstructNFA extends DepthFirstAdapter
   @Override
   public void outAConcat(AConcat node)
   {
-    AUnExp[] unExps = (AUnExp[]) node.getUnExps().toArray(new AUnExp[0]);
+    PUnExp[] unExps = node.getUnExps().toArray(new PUnExp[0]);
 
     if(unExps.length == 0)
     {
diff --git a/src/main/java/org/sablecc/sablecc/ConstructParserGenerationDatas.java b/src/main/java/org/sablecc/sablecc/ConstructParserGenerationDatas.java
index d3f4f6cc7989b7b8c8613e85605448eff0258dea..c43996fbf3e0cb1ebbe3be20505f4c4539451218 100644
--- a/src/main/java/org/sablecc/sablecc/ConstructParserGenerationDatas.java
+++ b/src/main/java/org/sablecc/sablecc/ConstructParserGenerationDatas.java
@@ -34,10 +34,9 @@ public class ConstructParserGenerationDatas extends DepthFirstAdapter
   public void caseAProd(AProd node)
   {
     currentProd = ids.names.get(node);
-    AAlt[] alts = (AAlt[])node.getAlts().toArray(new AAlt[0]);
-    for(int i=0; i<alts.length; i++)
+    for(PAlt alt : node.getAlts())
     {
-      alts[i].apply(this);
+      alt.apply(this);
     }
   }
 
@@ -47,10 +46,9 @@ public class ConstructParserGenerationDatas extends DepthFirstAdapter
     currentAlt = Grammar.addProduction(currentProd, ids.names.get(node));
     alts.put(ids.names.get(node), node);
 
-    AElem[] temp = (AElem[])node.getElems().toArray(new AElem[0]);
-    for(int i = 0; i < temp.length; i++)
+    for(PElem elem : node.getElems())
     {
-      temp[i].apply(this);
+      elem.apply(this);
     }
   }
 
diff --git a/src/main/java/org/sablecc/sablecc/IntSet.java b/src/main/java/org/sablecc/sablecc/IntSet.java
index 5747390fd83c6ac560726a5294940e855f94c857..c7daf53a16e72c76872f793fd0b115a4031179d7 100644
--- a/src/main/java/org/sablecc/sablecc/IntSet.java
+++ b/src/main/java/org/sablecc/sablecc/IntSet.java
@@ -387,6 +387,6 @@ public class IntSet
 
   public int[] elements()
   {
-    return (int[]) elements/*.clone()*/;
+    return elements/*.clone()*/;
   }
 }
diff --git a/src/main/java/org/sablecc/sablecc/LR1Collection.java b/src/main/java/org/sablecc/sablecc/LR1Collection.java
index 48af3515a77ead2796398fcc25c4393db3a92b33..1264fa2db653cafa0f11dce60879880f3200826b 100644
--- a/src/main/java/org/sablecc/sablecc/LR1Collection.java
+++ b/src/main/java/org/sablecc/sablecc/LR1Collection.java
@@ -24,8 +24,12 @@ final class LR1Collection
 
     // Initialize lookaheads to nothing, propagation to nothing
     LR0ItemSet[] sets = collection.sets();
-    lookaheads = (TreeMap<LR0Item, SymbolSet>[])new TreeMap<?, ?>[sets.length];
-    propagation = (TreeMap<LR0Item, Vector<LR0ItemAndSetPair>>[])new TreeMap<?, ?>[sets.length];
+    @SuppressWarnings("unchecked")
+    final TreeMap<LR0Item, SymbolSet>[] lookaheadsTemp = (TreeMap<LR0Item, SymbolSet>[])new TreeMap<?, ?>[sets.length];
+    lookaheads = lookaheadsTemp;
+    @SuppressWarnings("unchecked")
+    final TreeMap<LR0Item, Vector<LR0ItemAndSetPair>>[] propagationTemp = (TreeMap<LR0Item, Vector<LR0ItemAndSetPair>>[])new TreeMap<?, ?>[sets.length];
+    propagation = propagationTemp;
 
     for(int i = 0; i < sets.length; i++)
     {
diff --git a/src/main/java/org/sablecc/sablecc/Symbol.java b/src/main/java/org/sablecc/sablecc/Symbol.java
index 2a74075fb3d3ee54d6640199576ca9a794bb04e8..916c8ccc223c45fec96f7a9c508fc94bf6d8a241 100644
--- a/src/main/java/org/sablecc/sablecc/Symbol.java
+++ b/src/main/java/org/sablecc/sablecc/Symbol.java
@@ -75,11 +75,11 @@ final class Symbol implements Comparable<Symbol>
   {
     if(terminal)
     {
-      return (Symbol) terminals.elementAt(index);
+      return terminals.elementAt(index);
     }
     else
     {
-      return (Symbol) nonterminals.elementAt(index);
+      return nonterminals.elementAt(index);
     }
   }