diff --git a/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java b/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
index 7f3e3011aa6162da091921fdd081d2cb44a1ef8d..a79d570f5e6e9d9b143e8fbb88afd999b97139ba 100644
--- a/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
@@ -92,8 +92,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
     currentProd = ids.names.get(node);
     listOfAlts = new LinkedList<>();
 
-    PAlt[] list_alt = node.getAlts().toArray(new PAlt[0]);
-    for(PAlt alt : list_alt)
+    for(PAlt alt : node.getAlts())
     {
       alt.apply(this);
     }
@@ -103,12 +102,12 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
 
   private List<PElem> listElems;
   private AAlt aParsedAlt;
-  private LinkedList listElemsAltTransform;
+  private List<String> listElemsAltTransform;
   private String currentNewAltName;
 
   boolean countElementNecessary;
 
-  LinkedList listOfAlternativeElemsWHaveName;
+  List<String> listOfAlternativeElemsWHaveName;
 
   private final Map<AElem, Integer> elemOperators = new HashMap<>();
 
@@ -120,7 +119,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
 
     AAltTransform currentAltTransform = (AAltTransform)node.getAltTransform();
 
-    listOfAlternativeElemsWHaveName = new LinkedList();
+    listOfAlternativeElemsWHaveName = new LinkedList<>();
 
     node.apply(new DepthFirstAdapter()
                {
@@ -155,18 +154,17 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
     if(count == 1)
     {
       listElems = new LinkedList<>();
-      listElemsAltTransform = new LinkedList();
+      listElemsAltTransform = new LinkedList<>();
 
       countElementNecessary = false;
 
-      Object temp[] = node.getElems().toArray();
-      for(int i = 0; i < temp.length; i++)
+      for(PElem pElem : node.getElems())
       {
-        Object obj = temp[i];
+        final PUnOp unOp = ((AElem)pElem).getUnOp();
 
-        if( ((AElem)obj).getUnOp() != null &&
-            ( ((AElem)obj).getUnOp() instanceof AQMarkUnOp ||
-              ((AElem)obj).getUnOp() instanceof AStarUnOp )
+        if( unOp != null &&
+            ( unOp instanceof AQMarkUnOp ||
+              unOp instanceof AStarUnOp )
           )
         {
           if(!countElementNecessary)
@@ -176,9 +174,9 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
         }
       }
 
-      for(int i = 0; i < temp.length; i++)
+      for(PElem pElem : node.getElems())
       {
-        ((PElem)temp[i]).apply(this);
+        pElem.apply(this);
       }
 
       TId nameOfAlt = null;
@@ -216,7 +214,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
       for(count = 0; count < max; count++)
       {
         listElems = new LinkedList<>();
-        listElemsAltTransform = new LinkedList();
+        listElemsAltTransform = new LinkedList<>();
 
         elem = 0;
 
@@ -224,14 +222,13 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
 
         countElementNecessary = false;
 
-        Object temp[] = node.getElems().toArray();
-        for(int i = 0; i < temp.length; i++)
+        for(PElem pElem : node.getElems())
         {
-          Object obj = temp[i];
+          final PUnOp unOp = ((AElem)pElem).getUnOp();
 
-          if( ((AElem)obj).getUnOp() != null &&
-              ( ((AElem)obj).getUnOp() instanceof AQMarkUnOp ||
-                ((AElem)obj).getUnOp() instanceof AStarUnOp )
+          if( unOp != null &&
+              ( unOp instanceof AQMarkUnOp ||
+                unOp instanceof AStarUnOp )
             )
           {
             if(!countElementNecessary)
@@ -241,9 +238,9 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
           }
         }
 
-        for(int i = 0; i < temp.length; i++)
+        for(PElem pElem : node.getElems())
         {
-          ((PElem)temp[i]).apply(this);
+          pElem.apply(this);
         }
 
         altIds.alts_elems.put(currentNewAltName, listElemsAltTransform);
diff --git a/src/main/java/org/sablecc/sablecc/ResolveAltIds.java b/src/main/java/org/sablecc/sablecc/ResolveAltIds.java
index 26a52e5ce6fc43d7c5fb2dcc0d8bb06e8544c9a3..a8930adb2bdb80c0e38b746e30a0448a762400fa 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveAltIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveAltIds.java
@@ -33,23 +33,23 @@ public class ResolveAltIds extends DepthFirstAdapter
 
   //Map of alternatives elements which are not list :
   // ie not followed by * or + operator.
-  public Map<String, LinkedList> alts_elems = new TreeMap<>();
+  public Map<String, List<String>> alts_elems = new TreeMap<>();
 
   //Map of only alternatives elements which are list :
   //followed by * or + operator.
-  public Map<String, LinkedList> alts_elems_list = new TreeMap<>();
+  public Map<String, List<String>> alts_elems_list = new TreeMap<>();
 
   //Map of all alternatives elements. Elements name are stored
   //if it is specified otherwise, it is its id.
   //(elem = elem_name? specifier? id un_op?)
-  public Map<String, LinkedList> alts_elemsGlobal = new TreeMap<>();
+  public Map<String, List<String>> alts_elemsGlobal = new TreeMap<>();
 
   //Map of all alternatives elements which have explicit name.
-  public Map<String, List> alts_elems_list_elemName = new TreeMap<>();
+  public Map<String, List<String>> alts_elems_list_elemName = new TreeMap<>();
 
-  private LinkedList listElemsGlobal;
-  private LinkedList listElems;
-  private LinkedList listElemslist;
+  private List<String> listElemsGlobal;
+  private List<String> listElems;
+  private List<String> listElemslist;
 
   String currentAlt;
 
@@ -69,8 +69,7 @@ public class ResolveAltIds extends DepthFirstAdapter
   @Override
   public void caseAProd(AProd node)
   {
-    PAlt[] list_alts = node.getAlts().toArray(new PAlt[0]);
-    for(PAlt alt : list_alts)
+    for(PAlt alt : node.getAlts())
     {
       alt.apply(this);
     }
@@ -84,18 +83,17 @@ public class ResolveAltIds extends DepthFirstAdapter
   public void caseAAlt(AAlt alt)
   {
     //contains all the elements in the alternative, no matter if they are list or not
-    listElemsGlobal = new LinkedList();
+    listElemsGlobal = new LinkedList<>();
 
     //contains only single (without operator * or +) element of the alternative.
-    listElems = new LinkedList();
+    listElems = new LinkedList<>();
 
     //contains only element of the alternative which are list(operator * or +).
-    listElemslist = new LinkedList();
+    listElemslist = new LinkedList<>();
 
     currentAlt = ids.names.get(alt);
 
-    PElem[] list_elems = alt.getElems().toArray(new PElem[0]);
-    for(PElem elem : list_elems)
+    for(PElem elem : alt.getElems())
     {
       elem.apply(this);
     }
diff --git a/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java b/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java
index 8f1990578b7da8bd4fe66e303c0599cab91dc82e..dc26aee3be4496a9fa9b78233e928cafb0e5659a 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveTransformIds.java
@@ -71,9 +71,9 @@ public class ResolveTransformIds extends DepthFirstAdapter
     }
   }
 
-  private LinkedList listCurrentAltGlobal;
-  private LinkedList listCurrentAlt;
-  private LinkedList listOfListCurrentAlt;
+  private List<String> listCurrentAltGlobal;
+  private List<String> listCurrentAlt;
+  private List<String> listOfListCurrentAlt;
 
   @Override
   public void inAAlt(AAlt nodeAlt)
@@ -81,9 +81,9 @@ public class ResolveTransformIds extends DepthFirstAdapter
     nbTransformAlt = 0;
 
     currentAlt = altIds.ids.names.get(nodeAlt);
-    listCurrentAltGlobal = (LinkedList)altIds.alts_elemsGlobal.get(currentAlt).clone();
-    listCurrentAlt = (LinkedList)altIds.alts_elems.get(currentAlt).clone();
-    listOfListCurrentAlt = (LinkedList)altIds.alts_elems_list.get(currentAlt).clone();
+    listCurrentAltGlobal = new LinkedList<>(altIds.alts_elemsGlobal.get(currentAlt));
+    listCurrentAlt = new LinkedList<>(altIds.alts_elems.get(currentAlt));
+    listOfListCurrentAlt = new LinkedList<>(altIds.alts_elems_list.get(currentAlt));
   }
 
   @Override
@@ -360,12 +360,9 @@ public class ResolveTransformIds extends DepthFirstAdapter
     }
     else
     {
-      ListIterator iter = null;
-      iter = listCurrentAltGlobal.listIterator();
-
-      while(iter.hasNext())
+      for(Iterator<String> iter = listCurrentAltGlobal.iterator(); iter.hasNext();)
       {
-        if( name.equals((String)iter.next()) )
+        if( name.equals(iter.next()) )
         {
           if( node.getSimpleTermTail() == null )
           {
@@ -382,12 +379,9 @@ public class ResolveTransformIds extends DepthFirstAdapter
     }
     else
     {
-      ListIterator iter = null;
-      iter = listCurrentAlt.listIterator();
-
-      while(iter.hasNext())
+      for(Iterator<String> iter = listCurrentAlt.iterator(); iter.hasNext();)
       {
-        if( name.equals((String)iter.next()) )
+        if( name.equals(iter.next()) )
         {
           if( node.getSimpleTermTail() == null )
           {
@@ -587,12 +581,9 @@ public class ResolveTransformIds extends DepthFirstAdapter
     }
     else
     {
-      ListIterator iter = null;
-      iter = listCurrentAltGlobal.listIterator();
-
-      while(iter.hasNext())
+      for(Iterator<String> iter = listCurrentAltGlobal.iterator(); iter.hasNext();)
       {
-        if( name.equals((String)iter.next()) )
+        if( name.equals(iter.next()) )
         {
           if( node.getSimpleTermTail() == null )
           {
@@ -609,19 +600,19 @@ public class ResolveTransformIds extends DepthFirstAdapter
     }
     else
     {
-      ListIterator iter = null;
+      Iterator<String> iter = null;
       if( (listCurrentAlt != null) && listCurrentAlt.contains(name) )
       {
-        iter = listCurrentAlt.listIterator();
+        iter = listCurrentAlt.iterator();
       }
       else if( (listOfListCurrentAlt != null) && listOfListCurrentAlt.contains(name) )
       {
-        iter = listOfListCurrentAlt.listIterator();
+        iter = listOfListCurrentAlt.iterator();
       }
 
       while(iter.hasNext())
       {
-        if( name.equals((String)iter.next()) )
+        if( name.equals(iter.next()) )
         {
           if( node.getSimpleTermTail() == null )
           {