diff --git a/src/main/java/org/sablecc/sablecc/AddAstProductions.java b/src/main/java/org/sablecc/sablecc/AddAstProductions.java
index 1557fa4b5fd2a95cbd18bd31cd34738c0ee7e219..7ad1e1027354d399f43c28a18bfb5361bceef794 100644
--- a/src/main/java/org/sablecc/sablecc/AddAstProductions.java
+++ b/src/main/java/org/sablecc/sablecc/AddAstProductions.java
@@ -82,7 +82,7 @@ public class AddAstProductions extends DepthFirstAdapter
   @Override
   public void outAAlt(AAlt node)
   {
-    TId aAltname = node.getAltName() == null ? null : (TId)node.getAltName().clone();
+    TId aAltname = node.getAltName() == null ? null : node.getAltName().clone();
     AAstAlt astAlt = new AAstAlt(aAltname, listElems);
 
     listOfAstAlts.add(astAlt);
@@ -96,8 +96,7 @@ public class AddAstProductions extends DepthFirstAdapter
   {
     if(processingParsedAlt)
     {
-      AElem tmp = (AElem)node.clone();
-      listElems.add(tmp);
+      listElems.add(node.clone());
     }
   }
 
diff --git a/src/main/java/org/sablecc/sablecc/CharSet.java b/src/main/java/org/sablecc/sablecc/CharSet.java
index e3faaa91cfcc4a07e1957cffc9fae10a153f151f..027140dd495b310db1a383f3ad9bd4a8b73e3f82 100644
--- a/src/main/java/org/sablecc/sablecc/CharSet.java
+++ b/src/main/java/org/sablecc/sablecc/CharSet.java
@@ -96,7 +96,7 @@ public class CharSet implements Cloneable
 
   public CharSet union(CharSet chars)
   {
-    CharSet result = (CharSet) clone();
+    CharSet result = clone();
 
     Interval interval;
     Interval largeInterval;
@@ -104,7 +104,7 @@ public class CharSet implements Cloneable
 
     for(Enumeration e = chars.intervals.elements(); e.hasMoreElements();)
     {
-      interval = (Interval) ((Interval) e.nextElement()).clone();
+      interval = ((Interval) e.nextElement()).clone();
 
       do
       {
@@ -130,14 +130,14 @@ public class CharSet implements Cloneable
 
   public CharSet diff(CharSet chars)
   {
-    CharSet result = (CharSet) clone();
+    CharSet result = clone();
 
     Interval interval;
     Interval overlap;
 
     for(Enumeration e = chars.intervals.elements(); e.hasMoreElements();)
     {
-      interval = (Interval) ((Interval) e.nextElement()).clone();
+      interval = ((Interval) e.nextElement()).clone();
 
       do
       {
diff --git a/src/main/java/org/sablecc/sablecc/ComputeCGNomenclature.java b/src/main/java/org/sablecc/sablecc/ComputeCGNomenclature.java
index 6167a60473d6270f640cb49f7467211c96b65947..d1353743e0354e8d2ca2dda09eb3d997c2f890c3 100644
--- a/src/main/java/org/sablecc/sablecc/ComputeCGNomenclature.java
+++ b/src/main/java/org/sablecc/sablecc/ComputeCGNomenclature.java
@@ -163,7 +163,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
       if(name.startsWith("P") )
       {
         //add termtail to the simpleterm
-        node.setSimpleTermTail( (TId)node.getId().clone() );
+        node.setSimpleTermTail(node.getId().clone());
       }
     }
     else
@@ -259,7 +259,7 @@ public class ComputeCGNomenclature extends DepthFirstAdapter
       if( name.startsWith("P") )
       {
         //add termtail to the simpleterm
-        node.setSimpleTermTail( (TId)node.getId().clone() );
+        node.setSimpleTermTail(node.getId().clone());
       }
     }
     else
diff --git a/src/main/java/org/sablecc/sablecc/ComputeInlining.java b/src/main/java/org/sablecc/sablecc/ComputeInlining.java
index e4a2f550b03a9b9a5ba24ac4d3f9a670b9010515..6b1c880b10d2767d71e1e9c6d9bf42c1f225f6f2 100644
--- a/src/main/java/org/sablecc/sablecc/ComputeInlining.java
+++ b/src/main/java/org/sablecc/sablecc/ComputeInlining.java
@@ -66,7 +66,7 @@ public class ComputeInlining
       if( prod.getAlts().size() <= SableCC.inliningMaxAlts && !isProductionRecursive(prod) )
       {
         //This class construct a special data structure for the production to inline.
-        final In_Production in_production = new In_Production((AProd)prod.clone());
+        final In_Production in_production = new In_Production(prod.clone());
 
         tree.apply(new DepthFirstAdapter()
                    {
diff --git a/src/main/java/org/sablecc/sablecc/DFA.java b/src/main/java/org/sablecc/sablecc/DFA.java
index e9b53880b6c93ca35311a05de7143cd2ddb48a46..4ab4bd999fd958b7a9b7aa2fe6df4766027579dc 100644
--- a/src/main/java/org/sablecc/sablecc/DFA.java
+++ b/src/main/java/org/sablecc/sablecc/DFA.java
@@ -222,7 +222,7 @@ public class DFA
           if(dest != null)
           {
             state.transitions.addElement(
-              new Transition((CharSet.Interval) interval.clone(), dest.intValue()));
+              new Transition(interval.clone(), dest.intValue()));
           }
           else
           {
@@ -231,7 +231,7 @@ public class DFA
             finder.put(s.nfaStates, states.size() - 1);
 
             state.transitions.addElement(
-              new Transition((CharSet.Interval) interval.clone(), states.size() - 1));
+              new Transition(interval.clone(), states.size() - 1));
           }
         }
 
diff --git a/src/main/java/org/sablecc/sablecc/Grammar.java b/src/main/java/org/sablecc/sablecc/Grammar.java
index 77d121b7d21c772c36adb5b32f145915842eda0a..ae3fbf4272f5eace042df6659f05aa20a30b66f2 100644
--- a/src/main/java/org/sablecc/sablecc/Grammar.java
+++ b/src/main/java/org/sablecc/sablecc/Grammar.java
@@ -314,8 +314,7 @@ public final class Grammar
 
       for(int i = 0; i < productions.length; i++)
       {
-        SymbolSet before =
-          (SymbolSet) FIRST_Nonterminal[productions[i].leftside].clone();
+        SymbolSet before = FIRST_Nonterminal[productions[i].leftside].clone();
 
         FIRST_Nonterminal[productions[i].leftside].
         or(FIRST(productions[i].rightside()));
@@ -429,8 +428,7 @@ public final class Grammar
         {
           if(!rightside[j].terminal)
           {
-            SymbolSet before =
-              (SymbolSet) FOLLOW[rightside[j].index].clone();
+            SymbolSet before = FOLLOW[rightside[j].index].clone();
 
             if(FIRST(rightside, j + 1).getEmpty())
             {
diff --git a/src/main/java/org/sablecc/sablecc/In_Production.java b/src/main/java/org/sablecc/sablecc/In_Production.java
index ff35622a461ebfdcdc574fa708b56d7dfe74aa45..bbb4a6ebf3ee9087856ce6ceba5a080760e1b35e 100644
--- a/src/main/java/org/sablecc/sablecc/In_Production.java
+++ b/src/main/java/org/sablecc/sablecc/In_Production.java
@@ -97,7 +97,7 @@ public class In_Production
 
       for(int i=0; i<listOfElems.length; i++)
       {
-        AElem tmpElem = (AElem)listOfElems[i].clone();
+        AElem tmpElem = listOfElems[i].clone();
 
         if(tmpElem.getElemName() != null)
         {
diff --git a/src/main/java/org/sablecc/sablecc/Inlining.java b/src/main/java/org/sablecc/sablecc/Inlining.java
index 3874d6eb0faed22e1fea93ae4ce0736f5c2cb323..3229b307b71b2a835e99ce348f098334056ee388 100644
--- a/src/main/java/org/sablecc/sablecc/Inlining.java
+++ b/src/main/java/org/sablecc/sablecc/Inlining.java
@@ -251,8 +251,7 @@ public class Inlining
         LinkedList listElems = inlineList(aParsed_alt.getElems(),
                                           prod_to_inline.getAlternative(j).getElems(),
                                           mapOfNewTermNames);
-        AAltTransform aAltTransform =
-          (AAltTransform)((AAltTransform)aParsed_alt.getAltTransform()).clone();
+        AAltTransform aAltTransform = ((AAltTransform)aParsed_alt.getAltTransform()).clone();
         final Map<String, Node> currentMap = prod_to_inline.getAlternative(j).getProdTransform_AlTransformMap();
 
         aAltTransform.apply(new DepthFirstAdapter()
@@ -312,8 +311,8 @@ public class Inlining
                                                    public void caseANewTerm(ANewTerm node)
                                                    {
                                                      node_.replaceBy( new ANewListTerm(   (AProdName)node.getProdName().clone(),
-                                                                                          (TLPar)node.getLPar().clone(),
-                                                                                          (LinkedList)cloneList(node.getParams())
+                                                                                          node.getLPar().clone(),
+                                                                                          cloneList(node.getParams())
                                                                                       )
                                                                     );
                                                    }
@@ -329,10 +328,10 @@ public class Inlining
                                                      }
                                                      if(node.getSimpleTermTail() != null)
                                                      {
-                                                       simpleTermTail = (TId)node.getSimpleTermTail().clone();
+                                                       simpleTermTail = node.getSimpleTermTail().clone();
                                                      }
                                                      node_.replaceBy( new ASimpleListTerm(  specifier,
-                                                                                            (TId)node.getId().clone(),
+                                                                                            node.getId().clone(),
                                                                                             simpleTermTail
                                                                                          )
                                                                     );
@@ -384,7 +383,7 @@ public class Inlining
                             }
                            );
 
-        AAltTransform tmpaAltTransform = (AAltTransform)aAltTransform.clone();
+        AAltTransform tmpaAltTransform = aAltTransform.clone();
         fixSimpleTermOrSimpleListTermNames(tmpaAltTransform, mapOfNewTermNames);
         String newAltName;
         if(aParsed_alt.getAltName() != null)
diff --git a/src/main/java/org/sablecc/sablecc/IntSet.java b/src/main/java/org/sablecc/sablecc/IntSet.java
index 503dc7ff7a953f8c8f2898521bfaf415541da8c3..5747390fd83c6ac560726a5294940e855f94c857 100644
--- a/src/main/java/org/sablecc/sablecc/IntSet.java
+++ b/src/main/java/org/sablecc/sablecc/IntSet.java
@@ -18,7 +18,7 @@ public class IntSet
   private IntSet(IntSet set
                   )
   {
-    elements = (int[]) set.elements.clone();
+    elements = set.elements.clone();
   }
 
   public void and(IntSet set
@@ -331,8 +331,7 @@ public class IntSet
     if(set
         == this)
     {
-      set
-        = (IntSet) set.clone();
+      set = set.clone();
     }
 
     int length = 0;
diff --git a/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java b/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
index 5932fa1fe2fa3757535b0a1f11ab5d054794a92b..856307cc762cb5328ad61457bfbd069334f054f8 100644
--- a/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
@@ -183,14 +183,14 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
 
       if(node.getAltName() != null)
       {
-        nameOfAlt = (TId)node.getAltName().clone();
+        nameOfAlt = node.getAltName().clone();
       }
 
       currentNewAltName = currentProd + "." + currentAltName.toLowerCase();
       altIds.alts_elems.put(currentNewAltName, listElemsAltTransform);
       altIds.alts_elems_list_elemName.put(currentNewAltName, listOfAlternativeElemsWHaveName);
 
-      AAltTransform altTransform = (AAltTransform)currentAltTransform.clone();
+      AAltTransform altTransform = currentAltTransform.clone();
 
       AltTransformAdapter altTransformAdapter =
         new AltTransformAdapter(simpleTermTransform, listSimpleTermTransform,
@@ -247,7 +247,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
         altIds.alts_elems.put(currentNewAltName, listElemsAltTransform);
         altIds.alts_elems_list_elemName.put(currentNewAltName, listOfAlternativeElemsWHaveName);
 
-        altTransform = (AAltTransform)currentAltTransform.clone();
+        altTransform = currentAltTransform.clone();
 
         AltTransformAdapter altTransformAdapter =
           new AltTransformAdapter(simpleTermTransform, listSimpleTermTransform,
diff --git a/src/main/java/org/sablecc/sablecc/LR1Collection.java b/src/main/java/org/sablecc/sablecc/LR1Collection.java
index 91094efa758118be23631833d8ee392167e2f429..31334ee5e0bb6e6ec98a3dc46f92f3619a9c6ade 100644
--- a/src/main/java/org/sablecc/sablecc/LR1Collection.java
+++ b/src/main/java/org/sablecc/sablecc/LR1Collection.java
@@ -138,8 +138,7 @@ final class LR1Collection
           {
             LR0ItemAndSetPair pair = (LR0ItemAndSetPair) e.nextElement();
 
-            SymbolSet before = (SymbolSet)
-                               ((SymbolSet) lookaheads[pair.set].get(pair.item)).clone();
+            SymbolSet before = ((SymbolSet) lookaheads[pair.set].get(pair.item)).clone();
 
             ((SymbolSet) lookaheads[pair.set].get(pair.item)).
             or((SymbolSet) lookaheads[i].get(items[j]));
diff --git a/src/main/java/org/sablecc/sablecc/SymbolSet.java b/src/main/java/org/sablecc/sablecc/SymbolSet.java
index d64dd838917b8a6be40d3f017c6bc74d6cb75eb5..25a35b74989064a43907af921c60e8c576649510 100644
--- a/src/main/java/org/sablecc/sablecc/SymbolSet.java
+++ b/src/main/java/org/sablecc/sablecc/SymbolSet.java
@@ -50,8 +50,8 @@ final class SymbolSet implements Cloneable
   private SymbolSet(SymbolSet set
                      )
   {
-    this.terminals = (IntSet) set.terminals.clone();
-    this.nonterminals = (IntSet) set.nonterminals.clone();
+    this.terminals = set.terminals.clone();
+    this.nonterminals = set.nonterminals.clone();
     this.empty = set.empty;
   }