diff --git a/src/main/java/org/sablecc/sablecc/LR0Item.java b/src/main/java/org/sablecc/sablecc/LR0Item.java
index 16d87c993ea2367e0d2a72c7b25732aa018630c0..104702ee03d052596b6616d5a4bc09e6c2546b7d 100644
--- a/src/main/java/org/sablecc/sablecc/LR0Item.java
+++ b/src/main/java/org/sablecc/sablecc/LR0Item.java
@@ -9,7 +9,7 @@ package org.sablecc.sablecc;
 
 import java.util.*;
 
-final class LR0Item implements Cloneable, Comparable
+final class LR0Item implements Cloneable, Comparable<LR0Item>
 {
   final int production;
   final int position;
@@ -21,10 +21,8 @@ final class LR0Item implements Cloneable, Comparable
   }
 
   @Override
-  public int compareTo(Object object)
+  public int compareTo(LR0Item item)
   {
-    LR0Item item = (LR0Item) object;
-
     int result = production - item.production;
 
     if(result == 0)
diff --git a/src/main/java/org/sablecc/sablecc/LR0ItemSet.java b/src/main/java/org/sablecc/sablecc/LR0ItemSet.java
index 56fc438e0b681769dc11da4b9d4ade7edcb86347..a58b1a91fed189fd6fdf4d9787d758fcf3c23421 100644
--- a/src/main/java/org/sablecc/sablecc/LR0ItemSet.java
+++ b/src/main/java/org/sablecc/sablecc/LR0ItemSet.java
@@ -9,22 +9,20 @@ package org.sablecc.sablecc;
 
 import java.util.*;
 
-import java.util.Vector;
-
-final class LR0ItemSet implements Cloneable, Comparable
+final class LR0ItemSet implements Cloneable, Comparable<LR0ItemSet>
 {
-  private final TreeMap items;
+  private final TreeMap<LR0Item, LR0Item> items;
   private int hashCode;
 
   LR0ItemSet()
   {
-    items = new TreeMap();
+    items = new TreeMap<>();
   }
 
   private LR0ItemSet(LR0ItemSet set
                       )
   {
-    items = (TreeMap) set.items.clone();
+    items = new TreeMap<>(set.items);
   }
 
   void set
@@ -48,15 +46,7 @@ final class LR0ItemSet implements Cloneable, Comparable
 
   private void computeArray()
   {
-    Vector itemVector = new Vector(0);
-
-    for(Iterator e = items.keySet().iterator(); e.hasNext();)
-    {
-      itemVector.addElement(e.next());
-    }
-
-    items_ = new LR0Item[itemVector.size()];
-    itemVector.copyInto(items_);
+    items_ = items.keySet().toArray(new LR0Item[0]);
     modified_ = false;
   }
 
@@ -125,20 +115,7 @@ final class LR0ItemSet implements Cloneable, Comparable
     LR0ItemSet set
       = (LR0ItemSet) obj;
 
-    if(set.items.size() != items.size())
-    {
-      return false;
-    }
-
-    for(Iterator e = items.keySet().iterator(); e.hasNext();)
-    {
-      if(!set.get((LR0Item) e.next()))
-      {
-        return false;
-      }
-    }
-
-    return true;
+    return items.keySet().equals(set.items.keySet());
   }
 
   @Override
@@ -148,21 +125,18 @@ final class LR0ItemSet implements Cloneable, Comparable
   }
 
   @Override
-  public int compareTo(Object object)
+  public int compareTo(LR0ItemSet set)
   {
-    LR0ItemSet set
-      = (LR0ItemSet) object;
-
     int result = items.size() - set.items.size();
 
     if(result == 0)
     {
-      Iterator e = items.keySet().iterator();
-      Iterator f = set.items.keySet().iterator();
+      Iterator<LR0Item> e = items.keySet().iterator();
+      Iterator<LR0Item> f = set.items.keySet().iterator();
 
       while(e.hasNext() && f.hasNext() && (result == 0))
       {
-        result = ((LR0Item) e.next()).compareTo(f.next());
+        result = e.next().compareTo(f.next());
       }
 
       if(result == 0)
diff --git a/src/main/java/org/sablecc/sablecc/LR1Item.java b/src/main/java/org/sablecc/sablecc/LR1Item.java
index a3471f0c91068d520758db49694dd9b9fcec75ae..0936d085fdff40f3242facb194745816709d5796 100644
--- a/src/main/java/org/sablecc/sablecc/LR1Item.java
+++ b/src/main/java/org/sablecc/sablecc/LR1Item.java
@@ -9,7 +9,7 @@ package org.sablecc.sablecc;
 
 import java.util.*;
 
-final class LR1Item implements Cloneable, Comparable
+final class LR1Item implements Cloneable, Comparable<LR1Item>
 {
   final LR0Item lr0Item;
   final int terminal;
@@ -88,10 +88,8 @@ final class LR1Item implements Cloneable, Comparable
   }
 
   @Override
-  public int compareTo(Object object)
+  public int compareTo(LR1Item item)
   {
-    LR1Item item = (LR1Item) object;
-
     int result = lr0Item.compareTo(item.lr0Item);
 
     if(result == 0)
diff --git a/src/main/java/org/sablecc/sablecc/LR1ItemSet.java b/src/main/java/org/sablecc/sablecc/LR1ItemSet.java
index 983c7cb2e000a2593a139c9bdeba10cfdc5cd9e1..ca9596349283c99314ba1fc3fb253ab0f11f781d 100644
--- a/src/main/java/org/sablecc/sablecc/LR1ItemSet.java
+++ b/src/main/java/org/sablecc/sablecc/LR1ItemSet.java
@@ -8,22 +8,21 @@
 package org.sablecc.sablecc;
 
 import java.util.*;
-import java.util.Vector;
 
-final class LR1ItemSet implements Cloneable, Comparable
+final class LR1ItemSet implements Cloneable, Comparable<LR1ItemSet>
 {
-  private final TreeMap items;
+  private final TreeMap<LR1Item, LR1Item> items;
   private int hashCode = 0;
 
   LR1ItemSet()
   {
-    this.items = new TreeMap();
+    this.items = new TreeMap<>();
   }
 
   private LR1ItemSet(LR1ItemSet set
                       )
   {
-    this.items = (TreeMap) set.items.clone();
+    this.items = new TreeMap<>(set.items);
     this.hashCode = set.hashCode;
   }
 
@@ -48,15 +47,7 @@ final class LR1ItemSet implements Cloneable, Comparable
 
   private void computeArray()
   {
-    Vector itemVector = new Vector(0);
-
-    for(Iterator e = items.keySet().iterator(); e.hasNext();)
-    {
-      itemVector.addElement(e.next());
-    }
-
-    items_ = new LR1Item[itemVector.size()];
-    itemVector.copyInto(items_);
+    items_ = items.keySet().toArray(new LR1Item[0]);
     modified_ = false;
   }
 
@@ -121,7 +112,7 @@ final class LR1ItemSet implements Cloneable, Comparable
     LR1Item[] items = items();
     int length = items.length;
 
-    TreeSet strings = new TreeSet();
+    Set<String> strings = new TreeSet<>();
 
     for(int i = 0; i < length; i++)
     {
@@ -138,7 +129,7 @@ final class LR1ItemSet implements Cloneable, Comparable
     result.append("{");
 
     boolean colon = false;
-    for(Iterator i = strings.iterator(); i.hasNext(); )
+    for(String s : strings)
     {
       if(colon)
       {
@@ -152,7 +143,7 @@ final class LR1ItemSet implements Cloneable, Comparable
       }
 
       result.append("\t");
-      result.append(i.next());
+      result.append(s);
     }
 
     result.append(nl);
@@ -179,20 +170,7 @@ final class LR1ItemSet implements Cloneable, Comparable
     LR1ItemSet set
       = (LR1ItemSet) obj;
 
-    if(set.items.size() != items.size())
-    {
-      return false;
-    }
-
-    for(Iterator e = items.keySet().iterator(); e.hasNext();)
-    {
-      if(!set.get((LR1Item) e.next()))
-      {
-        return false;
-      }
-    }
-
-    return true;
+    return items.keySet().equals(set.items.keySet());
   }
 
   @Override
@@ -202,21 +180,18 @@ final class LR1ItemSet implements Cloneable, Comparable
   }
 
   @Override
-  public int compareTo(Object object)
+  public int compareTo(LR1ItemSet set)
   {
-    LR1ItemSet set
-      = (LR1ItemSet) object;
-
     int result = items.size() - set.items.size();
 
     if(result == 0)
     {
-      Iterator e = items.keySet().iterator();
-      Iterator f = set.items.keySet().iterator();
+      Iterator<LR1Item> e = items.keySet().iterator();
+      Iterator<LR1Item> f = set.items.keySet().iterator();
 
       while(e.hasNext() && f.hasNext() && (result == 0))
       {
-        result = ((LR1Item) e.next()).compareTo(f.next());
+        result = e.next().compareTo(f.next());
       }
 
       if(result == 0)