diff --git a/src/main/java/org/sablecc/sablecc/Inlining.java b/src/main/java/org/sablecc/sablecc/Inlining.java
index a1686f6d4c63d9118318e2716944215f8071b2aa..0450a29d026e02d3f51f02a2ffc97f4d16434358 100644
--- a/src/main/java/org/sablecc/sablecc/Inlining.java
+++ b/src/main/java/org/sablecc/sablecc/Inlining.java
@@ -247,7 +247,7 @@ public class Inlining
       {
         mapOfNewTermNames = new HashMap<>();
 
-        LinkedList listElems = inlineList(aParsed_alt.getElems(),
+        List<PElem> listElems = inlineList(aParsed_alt.getElems(),
                                           prod_to_inline.getAlternative(j).getElems(),
                                           mapOfNewTermNames);
         AAltTransform aAltTransform = ((AAltTransform)aParsed_alt.getAltTransform()).clone();
@@ -345,22 +345,14 @@ public class Inlining
                                                    public void caseAListTerm(AListTerm node)
                                                    {
                                                      AListTerm parent = (AListTerm)node_.parent();
-                                                     LinkedList oldlistTerms = parent.getListTerms();
-                                                     LinkedList newlistTerms = new LinkedList();
+                                                     List<PListTerm> oldlistTerms = parent.getListTerms();
+                                                     List<PListTerm> newlistTerms = new LinkedList<>();
 
-                                                     Object[] oldListTermsArray = (Object[]) oldlistTerms.toArray();
-                                                     for(int i=0; i<oldListTermsArray.length; i++)
+                                                     for(PListTerm oldListTerm : oldlistTerms)
                                                      {
-                                                       if(oldListTermsArray[i] != node_)
+                                                       if(oldListTerm != node_)
                                                        {
-                                                         if(oldListTermsArray[i] instanceof PTerm)
-                                                         {
-                                                           newlistTerms.add( ((PTerm)oldListTermsArray[i]).clone() );
-                                                         }
-                                                         else
-                                                         {
-                                                           newlistTerms.add( ((PListTerm)oldListTermsArray[i]).clone() );
-                                                         }
+                                                         newlistTerms.add(oldListTerm.clone());
                                                        }
                                                        else
                                                        {
@@ -404,12 +396,12 @@ public class Inlining
     return resultList;
   }
 
-  public LinkedList inlineList(LinkedList oldElemsList,
+  public List<PElem> inlineList(List<PElem> oldElemsList,
                                AElem[] inliningProductionsElems,
                                Map<String, String> mapOfNewTermNames)
   {
     int position = 0;
-    AElem[] listElems = (AElem[]) oldElemsList.toArray(new AElem[0]);
+    AElem[] listElems = oldElemsList.toArray(new AElem[0]);
     for(int i=0; i<listElems.length; i++)
     {
       //We are looking for the position of the element inside the alternative.
@@ -429,7 +421,7 @@ public class Inlining
       }
     }
 
-    LinkedList list = new LinkedList();
+    List<PElem> list = new LinkedList<>();
     int elemPosition = 1;
 
     //Before the inlined element (old alternative elements)
@@ -445,19 +437,18 @@ public class Inlining
     }
 
     // After the inlined element (old alternative elements)
-    for(int i=position+1; i<listElems.length; i++)
+    for(int i=position+1; i<oldElemsList.size(); i++)
     {
       list.add(((AElem)oldElemsList.get(i)).clone());
     }
 
-    AElem[] listOfAltElems = (AElem[]) list.toArray(new AElem[0]);
+    AElem[] listOfAltElems = list.toArray(new AElem[0]);
     for(int i=0; i<listOfAltElems.length; i++)
     {
       String old_name = listOfAltElems[i].getId().getText();
-      TId elemName = (TId)listOfAltElems[i].getElemName();
+      TId elemName = listOfAltElems[i].getElemName();
       if(elemName != null)
       {
-        elemName = (TId)elemName;
         old_name = elemName.getText();
       }
 
@@ -496,13 +487,13 @@ public class Inlining
                           );
   }
 
-  private List cloneList(List list)
+  @SuppressWarnings("unchecked")
+  private <T extends Node> List<T> cloneList(List<T> list)
   {
-    List clone = new LinkedList();
+    List<T> clone = new LinkedList<>();
 
-    for(Iterator i = list.iterator(); i.hasNext();)
-    {
-      clone.add(((Node) i.next()).clone());
+    for (final T node : list) {
+      clone.add((T)node.clone());
     }
 
     return clone;