diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/AbstractWrapper.java
--- a/src/main/java/com/humaorie/dollar/AbstractWrapper.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/AbstractWrapper.java	Sun May 02 16:15:34 2010 +0100
@@ -72,12 +72,15 @@
         return toList(LinkedList.class);
     }
 
+    @SuppressWarnings({
+			"rawtypes", "unchecked"
+	})
     @Override
     public List<T> toList(Class<? extends List> concreteListClass) {
         List<T> list;
 
         try {
-            list = (List<T>) concreteListClass.newInstance();
+            list = concreteListClass.newInstance();
         } catch (InstantiationException ex) {
             throw new RuntimeException(ex);
         } catch (IllegalAccessException ex) {
@@ -97,6 +100,9 @@
         return toSet(HashSet.class);
     }
 
+    @SuppressWarnings({
+			"rawtypes", "unchecked"
+	})
     @Override
     public Set<T> toSet(Class<? extends Set> concreteSetClass) {
         Set<T> set;
diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/ArrayWrapper.java
--- a/src/main/java/com/humaorie/dollar/ArrayWrapper.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/ArrayWrapper.java	Sun May 02 16:15:34 2010 +0100
@@ -42,7 +42,7 @@
 
     @Override
     public Iterator<T> iterator() {
-        return new ArrayIterator(array);
+        return new ArrayIterator<T>(array);
     }
 
     private static class ArrayIterator<T> implements Iterator<T> {
@@ -66,6 +66,7 @@
 
         @Override
         public void remove() {
+        	throw new UnsupportedOperationException();
         }
     }
 
@@ -212,7 +213,7 @@
 
         return (T[]) res;
     }
-    static final Map<Class, Class> toPrimitive = new HashMap<Class, Class>();
+    static final Map<Class<?>, Class<?>> toPrimitive = new HashMap<Class<?>, Class<?>>();
 
     static {
         toPrimitive.put(Boolean.class, boolean.class);
@@ -290,7 +291,7 @@
         return boxed;
     }
 
-    static Method zero(Class primitiveClass) {
+    static Method zero(Class<?> primitiveClass) {
         try {
             return ArrayWrapper.class.getMethod("zero", primitiveClass);
         } catch (NoSuchMethodException ex) {
@@ -299,7 +300,7 @@
             throw new RuntimeException(ex);
         }
     }
-    static final Map<Class, Method> zeros = new HashMap<Class, Method>();
+    static final Map<Class<?>, Method> zeros = new HashMap<Class<?>, Method>();
 
     static {
         zeros.put(Boolean.class, zero(Boolean.class));
@@ -312,8 +313,8 @@
         zeros.put(Double.class, zero(Double.class));
     }
 
-    protected static <T> Object toUnboxedArray(Class wantedClass, T[] components) {
-        Class primitive = toPrimitive.get(wantedClass);
+    protected static <T> Object toUnboxedArray(Class<?> wantedClass, T[] components) {
+        Class<?> primitive = toPrimitive.get(wantedClass);
 
         if (!zeros.containsKey(components.getClass().getComponentType())) {
             return Array.newInstance(primitive, 0);
diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/CharRangeWrapper.java
--- a/src/main/java/com/humaorie/dollar/CharRangeWrapper.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/CharRangeWrapper.java	Sun May 02 16:15:34 2010 +0100
@@ -48,6 +48,7 @@
 
         @Override
         public void remove() {
+        	throw new UnsupportedOperationException();
         }
     }
 
@@ -67,6 +68,7 @@
 
         @Override
         public void remove() {
+        	throw new UnsupportedOperationException();
         }
     }
 
diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/CharSequenceWrapper.java
--- a/src/main/java/com/humaorie/dollar/CharSequenceWrapper.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/CharSequenceWrapper.java	Sun May 02 16:15:34 2010 +0100
@@ -51,7 +51,7 @@
 
     @Override
     public Wrapper<Character> fill(Character object) {
-        return new FillWrapper(object, size());
+        return new FillWrapper<Character>(object, size());
     }
 
     @Override
@@ -119,6 +119,7 @@
 
         @Override
         public void remove() {
+        	throw new UnsupportedOperationException();
         }
     }
 
diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/DateRangeWrapper.java
--- a/src/main/java/com/humaorie/dollar/DateRangeWrapper.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/DateRangeWrapper.java	Sun May 02 16:15:34 2010 +0100
@@ -74,6 +74,7 @@
 
         @Override
         public void remove() {
+        	throw new UnsupportedOperationException();
         }
     }
 
diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/Dollar.java
--- a/src/main/java/com/humaorie/dollar/Dollar.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/Dollar.java	Sun May 02 16:15:34 2010 +0100
@@ -27,6 +27,7 @@
 public final class Dollar {
 
     private Dollar() {
+    	throw new AssertionError();
     }
 
     // wrapper
@@ -60,10 +61,12 @@
 
         List<T> toList();
 
+        @SuppressWarnings("rawtypes")
         List<T> toList(Class<? extends List> concreteListClass);
 
         Set<T> toSet();
 
+        @SuppressWarnings("rawtypes")
         Set<T> toSet(Class<? extends Set> concreteSetClass);
 
         T[] toArray();
@@ -139,7 +142,7 @@
 
         ListWrapper<T> immutable();
 
-        ListWrapper<T> checked(Class requiredClass);
+        ListWrapper<T> checked(Class<T> requiredClass);
     }
 
     public static <T> ListWrapper<T> $(List<T> list) {
@@ -160,7 +163,7 @@
 
         SetWrapper<T> immutable();
 
-        SetWrapper<T> checked(Class requiredClass);
+        SetWrapper<T> checked(Class<T> requiredClass);
     }
 
     public static <T> SetWrapper<T> $(Set<T> set) {
@@ -176,7 +179,7 @@
 
         MapWrapper<K, V> immutable();
 
-        MapWrapper<K, V> checked(Class requiredKeyClass, Class requiredValueClass);
+        MapWrapper<K, V> checked(Class<K> requiredKeyClass, Class<V> requiredValueClass);
 
         Map<K, V> toMap();
     }
diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/FillWrapper.java
--- a/src/main/java/com/humaorie/dollar/FillWrapper.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/FillWrapper.java	Sun May 02 16:15:34 2010 +0100
@@ -39,6 +39,10 @@
         this.size = size;
     }
 
+    public static <U> FillWrapper<U> of(U value, int size) {
+        return new FillWrapper<U>(value, size);
+    }
+
     @Override
     public Wrapper<T> copy() {
         return new FillWrapper<T>(value, size);
@@ -71,6 +75,7 @@
 
         @Override
         public void remove() {
+        	throw new UnsupportedOperationException();
         }
     }
 
@@ -117,11 +122,12 @@
         }
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public boolean equals(Object object) {
         if (object instanceof FillWrapper) {
             FillWrapper<T> other = (FillWrapper<T>) object;
-            return this.value.equals(other.value) && this.size == other.size;
+            return this.size == other.size && this.value.equals(other.value);
         } else {
             return false;
         }
diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/ListWrapper.java
--- a/src/main/java/com/humaorie/dollar/ListWrapper.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/ListWrapper.java	Sun May 02 16:15:34 2010 +0100
@@ -51,7 +51,7 @@
     @Override
     public ListWrapper<T> copy() {
         LinkedList<T> copy = new LinkedList<T>(this.list);
-        return new ListWrapper(copy);
+        return new ListWrapper<T>(copy);
     }
 
     @Override
@@ -110,7 +110,7 @@
 
                 @Override
                 public int compare(T o1, T o2) {
-                    Comparable c1 = (Comparable<T>) o1;
+                    Comparable<T> c1 = (Comparable<T>) o1;
                     return c1.compareTo(o2);
                 }
             };
@@ -180,7 +180,7 @@
     }
 
     @Override
-    public Dollar.ListWrapper<T> checked(Class requiredClass) {
+    public Dollar.ListWrapper<T> checked(Class<T> requiredClass) {
         list = Collections.checkedList(list, requiredClass);
         return this;
     }
@@ -195,6 +195,7 @@
         return list.iterator();
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public boolean equals(Object object) {
         if (object instanceof ListWrapper) {
diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/MapWrapper.java
--- a/src/main/java/com/humaorie/dollar/MapWrapper.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/MapWrapper.java	Sun May 02 16:15:34 2010 +0100
@@ -54,7 +54,7 @@
     }
 
     @Override
-    public Dollar.MapWrapper<K, V> checked(Class requiredKeyClass, Class requiredValueClass) {
+    public Dollar.MapWrapper<K, V> checked(Class<K> requiredKeyClass, Class<V> requiredValueClass) {
         map = Collections.checkedMap(map, requiredKeyClass, requiredValueClass);
         return this;
     }
diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/NullWrapper.java
--- a/src/main/java/com/humaorie/dollar/NullWrapper.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/NullWrapper.java	Sun May 02 16:15:34 2010 +0100
@@ -53,6 +53,7 @@
 
             @Override
             public void remove() {
+            	throw new UnsupportedOperationException();
             }
         };
     }
diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/RandomWrapper.java
--- a/src/main/java/com/humaorie/dollar/RandomWrapper.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/RandomWrapper.java	Sun May 02 16:15:34 2010 +0100
@@ -42,12 +42,12 @@
     }
 
     @Override
-    public final Dollar.RandomWrapper<T> generator(Random random) {
-        if (random == null) {
-            random = new Random();
+    public final Dollar.RandomWrapper<T> generator(Random r) {
+        if (r == null) {
+            r = new Random();
         }
 
-        this.random = random;
+        this.random = r;
         return this;
     }
 
@@ -94,6 +94,7 @@
 
             @Override
             public void remove() {
+            	throw new UnsupportedOperationException();
             }
         };
     }
@@ -136,6 +137,7 @@
 
             @Override
             public void remove() {
+            	throw new UnsupportedOperationException();
             }
         };
     }
@@ -175,6 +177,7 @@
 
             @Override
             public void remove() {
+            	throw new UnsupportedOperationException();
             }
         };
     }
@@ -217,6 +220,7 @@
 
             @Override
             public void remove() {
+            	throw new UnsupportedOperationException();
             }
         };
     }
@@ -259,6 +263,7 @@
 
             @Override
             public void remove() {
+            	throw new UnsupportedOperationException();
             }
         };
     }
diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/RangeWrapper.java
--- a/src/main/java/com/humaorie/dollar/RangeWrapper.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/RangeWrapper.java	Sun May 02 16:15:34 2010 +0100
@@ -165,6 +165,7 @@
 
         @Override
         public void remove() {
+        	throw new UnsupportedOperationException();
         }
     }
 
diff -r c1dbd71af33a -r acd6f9cae3d2 src/main/java/com/humaorie/dollar/SetWrapper.java
--- a/src/main/java/com/humaorie/dollar/SetWrapper.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/main/java/com/humaorie/dollar/SetWrapper.java	Sun May 02 16:15:34 2010 +0100
@@ -78,7 +78,7 @@
     }
 
     @Override
-    public Dollar.SetWrapper<T> checked(Class requiredClass) {
+    public Dollar.SetWrapper<T> checked(Class<T> requiredClass) {
         set = Collections.checkedSet(set, requiredClass);
         return this;
     }
diff -r c1dbd71af33a -r acd6f9cae3d2 src/test/java/com/humaorie/dollar/CharRangeWrapperTest.java
--- a/src/test/java/com/humaorie/dollar/CharRangeWrapperTest.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/test/java/com/humaorie/dollar/CharRangeWrapperTest.java	Sun May 02 16:15:34 2010 +0100
@@ -26,6 +26,7 @@
 
 import com.humaorie.dollar.Dollar.Wrapper;
 
+@SuppressWarnings("unchecked")
 public class CharRangeWrapperTest {
 
     @Test
diff -r c1dbd71af33a -r acd6f9cae3d2 src/test/java/com/humaorie/dollar/DollarTest.java
--- a/src/test/java/com/humaorie/dollar/DollarTest.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/test/java/com/humaorie/dollar/DollarTest.java	Sun May 02 16:15:34 2010 +0100
@@ -24,10 +24,10 @@
 import static org.junit.Assert.assertThat;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -501,17 +501,17 @@
 
     @Test
     public void listWrapper() {
-        assertThat($(new LinkedList()), is(ListWrapper.class));
+        assertThat($(Collections.emptyList()), is(ListWrapper.class));
     }
 
     @Test
     public void setWrapper() {
-        assertThat($(new HashSet()), is(SetWrapper.class));
+        assertThat($(Collections.emptySet()), is(SetWrapper.class));
     }
 
     @Test
     public void mapWrapper() {
-        assertThat($(new HashMap()), is(MapWrapper.class));
+        assertThat($(Collections.emptyMap()), is(MapWrapper.class));
     }
 
     @Test
diff -r c1dbd71af33a -r acd6f9cae3d2 src/test/java/com/humaorie/dollar/FillWrapperTest.java
--- a/src/test/java/com/humaorie/dollar/FillWrapperTest.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/test/java/com/humaorie/dollar/FillWrapperTest.java	Sun May 02 16:15:34 2010 +0100
@@ -29,90 +29,90 @@
 
     @Test
     public void shuffleFill() {
-        FillWrapper fillWrapper = new FillWrapper(10, 10);
+        FillWrapper<Integer> fillWrapper = FillWrapper.of(10, 10);
         assertThat(fillWrapper.shuffle() == fillWrapper, is(true));
         assertThat(fillWrapper.shuffle().equals(fillWrapper), is(true));
     }
 
     @Test
     public void sortFill() {
-        FillWrapper fillWrapper = new FillWrapper(10, 10);
+        FillWrapper<Integer> fillWrapper = FillWrapper.of(10, 10);
         assertThat(fillWrapper.sort() == fillWrapper, is(true));
         assertThat(fillWrapper.sort().equals(fillWrapper), is(true));
     }
 
     @Test
     public void copyFill() {
-        FillWrapper fillWrapper = new FillWrapper(10, 10);
+        FillWrapper<Integer> fillWrapper = FillWrapper.of(10, 10);
         assertThat(fillWrapper.copy() != fillWrapper, is(true));
         assertThat(fillWrapper.copy().equals(fillWrapper), is(true));
     }
 
     @Test
     public void iterate() {
-        FillWrapper fill = new FillWrapper("a", 5);
+        FillWrapper<String> fill = FillWrapper.of("a", 5);
         assertThat(fill.join(), is("aaaaa"));
     }
 
     @Test
     public void fillFill() {
-        Wrapper fill = new FillWrapper("a", 5);
-        Wrapper fillFilled = fill.fill("b");
+        Wrapper<String> fill = FillWrapper.of("a", 5);
+        Wrapper<String> fillFilled = fill.fill("b");
         assertThat(fillFilled.join(), is("bbbbb"));
     }
 
     @Test
     public void reverseFill() {
-        FillWrapper fillWrapper = new FillWrapper(10, 10);
+        FillWrapper<Integer> fillWrapper = FillWrapper.of(10, 10);
         assertThat(fillWrapper.shuffle() == fillWrapper, is(true));
         assertThat(fillWrapper.shuffle().equals(fillWrapper), is(true));
     }
 
     @Test
     public void repeatFillNegativeTimes() {
-        FillWrapper fillWrapper = new FillWrapper("a", 10);
+        FillWrapper<String> fillWrapper = FillWrapper.of("a", 10);
         assertThat(fillWrapper.repeat(-1).join(), is(""));
     }
 
     @Test
     public void repeatFillZeroTimes() {
-        FillWrapper fillWrapper = new FillWrapper("a", 10);
+        FillWrapper<String> fillWrapper = FillWrapper.of("a", 10);
         assertThat(fillWrapper.repeat(0).join(), is(""));
     }
 
     @Test
     public void repeatFillOneTime() {
-        FillWrapper fillWrapper = new FillWrapper("a", 2);
+        FillWrapper<String> fillWrapper = FillWrapper.of("a", 2);
         assertThat(fillWrapper.repeat(1).join(), is("aa"));
     }
 
     @Test
     public void repeatFillTwoTimes() {
-        FillWrapper fillWrapper = new FillWrapper("a", 2);
+        FillWrapper<String> fillWrapper = FillWrapper.of("a", 2);
         assertThat(fillWrapper.repeat(2).join(), is("aaaa"));
     }
 
     @Test
     public void string() {
-        FillWrapper fillWrapper = new FillWrapper("a", 2);
+        FillWrapper<String> fillWrapper = FillWrapper.of("a", 2);
         assertThat(fillWrapper.toString(), equalTo("aa"));
     }
 
     @Test
     public void slice() {
-        FillWrapper fillWrapper = new FillWrapper("a", 10);
+        FillWrapper<String> fillWrapper = FillWrapper.of("a", 10);
         assertThat(fillWrapper.slice(0, 5).join(), equalTo("aaaaa"));
     }
 
     @Test
     public void sliceOutOfRange1() {
-        FillWrapper fillWrapper = new FillWrapper("a", 5);
+        FillWrapper<String> fillWrapper = FillWrapper.of("a", 5);
         assertThat(fillWrapper.slice(-1, 5).equals(fillWrapper), is(true));
     }
 
     @Test
     public void sliceOutOfRange2() {
-        FillWrapper fillWrapper = new FillWrapper("a", 5);
+        FillWrapper<String> fillWrapper = FillWrapper.of("a", 5);
         assertThat(fillWrapper.slice(0, 10).equals(fillWrapper), is(true));
     }
 }
diff -r c1dbd71af33a -r acd6f9cae3d2 src/test/java/com/humaorie/dollar/IntegrationTest.java
--- a/src/test/java/com/humaorie/dollar/IntegrationTest.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/test/java/com/humaorie/dollar/IntegrationTest.java	Sun May 02 16:15:34 2010 +0100
@@ -101,9 +101,9 @@
             new Date(System.currentTimeMillis() + (1000 * 60 * 60 * 24 * 10))); // +10 days
 
     @Theory
-    public void copy(Wrapper wrapper) {
+    public <T> void copy(Wrapper<T> wrapper) {
         try {
-            Wrapper copy = wrapper.copy();
+            Wrapper<T> copy = wrapper.copy();
             assertThat(copy, equalTo(wrapper));
         } catch (Exception e) {
             todoLogger(wrapper, e);
@@ -111,7 +111,7 @@
     }
 
     @Theory
-    public void size(Wrapper wrapper) {
+    public <T> void size(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.size(), is(10));
         } catch (Exception e) {
@@ -120,7 +120,7 @@
     }
 
     @Theory
-    public void sort(Wrapper wrapper) {
+    public <T> void sort(Wrapper<T> wrapper) {
         try {
             wrapper.sort();
         } catch (Exception e) {
@@ -129,7 +129,7 @@
     }
 
     @Theory
-    public void sliceBy2(Wrapper wrapper) {
+    public <T> void sliceBy2(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.slice(2).size(), is(8));
         } catch (Exception e) {
@@ -138,7 +138,7 @@
     }
 
     @Theory
-    public void slice2to5(Wrapper wrapper) {
+    public <T> void slice2to5(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.slice(2, 5).size(), is(3));
         } catch (Exception e) {
@@ -147,7 +147,7 @@
     }
 
     @Theory
-    public void sliceOutOfLowerBound(Wrapper wrapper) {
+    public <T> void sliceOutOfLowerBound(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.slice(-2, 10).size(), is(10));
         } catch (Exception e) {
@@ -156,7 +156,7 @@
     }
 
     @Theory
-    public void sliceOutOfUpperBound(Wrapper wrapper) {
+    public <T> void sliceOutOfUpperBound(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.slice(10).size(), is(10));
         } catch (Exception e) {
@@ -165,7 +165,7 @@
     }
 
     @Theory
-    public void sliceOutOfBounds(Wrapper wrapper) {
+    public <T> void sliceOutOfBounds(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.slice(-10, 10).size(), is(10));
         } catch (Exception e) {
@@ -174,7 +174,7 @@
     }
 
     @Theory
-    public void fill(Wrapper wrapper) {
+    public <T> void fill(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.fill(null).size(), is(10));
         } catch (Exception e) {
@@ -183,7 +183,7 @@
     }
 
     @Theory
-    public void shuffle(Wrapper wrapper) {
+    public <T> void shuffle(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.shuffle().size(), is(10));
         } catch (Exception e) {
@@ -192,7 +192,7 @@
     }
 
     @Theory
-    public void reverse(Wrapper wrapper) {
+    public <T> void reverse(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.reverse().size(), is(10));
         } catch (Exception e) {
@@ -201,7 +201,7 @@
     }
 
     @Theory
-    public void repeat(Wrapper wrapper) {
+    public <T> void repeat(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.repeat(2).size(), is(20));
         } catch (Exception e) {
@@ -210,7 +210,7 @@
     }
 
     @Theory
-    public void join(Wrapper wrapper) {
+    public <T> void join(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.join(), notNullValue());
         } catch (Exception e) {
@@ -219,7 +219,7 @@
     }
 
     @Theory
-    public void joinWithSeperator(Wrapper wrapper) {
+    public <T> void joinWithSeperator(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.join("1"), notNullValue());
         } catch (Exception e) {
@@ -228,7 +228,7 @@
     }
 
     @Theory
-    public void countIterations(Wrapper wrapper) {
+    public <T> void countIterations(Wrapper<T> wrapper) {
         int total = 0;
 
         for (Object i : wrapper) {
@@ -239,7 +239,7 @@
     }
 
     @Theory
-    public void string(Wrapper wrapper) {
+    public <T> void string(Wrapper<T> wrapper) {
         try {
             wrapper.toString();
         } catch (Exception e) {
@@ -248,7 +248,7 @@
     }
 
     @Theory
-    public void hashCode(Wrapper wrapper) {
+    public <T> void hashCode(Wrapper<T> wrapper) {
         try {
             wrapper.hashCode();
         } catch (Exception e) {
@@ -257,7 +257,7 @@
     }
 
     @Theory
-    public void equalsNull(Wrapper wrapper) {
+    public <T> void equalsNull(Wrapper<T> wrapper) {
         try {
             assertThat(wrapper.equals(null), is(false));
         } catch (Exception e) {
@@ -283,7 +283,7 @@
         }
     }
 
-    private void todoLogger(Wrapper wrapper, Exception e) {
+    private <T> void todoLogger(Wrapper<T> wrapper, Exception e) {
         if (e.getMessage().contains("TODO")) {
             String todo = wrapper.getClass().getSimpleName() + "#" + e.getStackTrace()[0].getMethodName();
             stats.add(todo);
diff -r c1dbd71af33a -r acd6f9cae3d2 src/test/java/com/humaorie/dollar/ListWrapperTest.java
--- a/src/test/java/com/humaorie/dollar/ListWrapperTest.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/test/java/com/humaorie/dollar/ListWrapperTest.java	Sun May 02 16:15:34 2010 +0100
@@ -116,9 +116,11 @@
         assertThat(list.isEmpty(), is(true));
     }
 
-    @Test(expected = ClassCastException.class)
+    @SuppressWarnings({
+			"rawtypes", "unchecked"
+	}) @Test(expected = ClassCastException.class)
     public void buildCheckedLinkedList() {
-        List<Object> list = $(new LinkedList<Object>()).
+        List<Object> list = $(new LinkedList()).
                 checked(Integer.class).
                 toList();
         list.add("aaa");
diff -r c1dbd71af33a -r acd6f9cae3d2 src/test/java/com/humaorie/dollar/MapWrapperTest.java
--- a/src/test/java/com/humaorie/dollar/MapWrapperTest.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/test/java/com/humaorie/dollar/MapWrapperTest.java	Sun May 02 16:15:34 2010 +0100
@@ -30,6 +30,7 @@
 
 import org.junit.Test;
 
+@SuppressWarnings("unchecked") // silly hamcrest
 public class MapWrapperTest {
 
     @Test
@@ -71,6 +72,7 @@
         assertThat(map.containsKey("bar"), is(true));
     }
 
+    @SuppressWarnings("rawtypes")
     @Test(expected = ClassCastException.class)
     public void buildCheckedHashMap() {
         Map<Object, Object> map = $(new HashMap()).
diff -r c1dbd71af33a -r acd6f9cae3d2 src/test/java/com/humaorie/dollar/SetWrapperTest.java
--- a/src/test/java/com/humaorie/dollar/SetWrapperTest.java	Sat Apr 17 21:00:56 2010 +0100
+++ b/src/test/java/com/humaorie/dollar/SetWrapperTest.java	Sun May 02 16:15:34 2010 +0100
@@ -29,6 +29,7 @@
 
 import org.junit.Test;
 
+@SuppressWarnings("unchecked")
 public class SetWrapperTest {
 
     @Test
@@ -46,6 +47,7 @@
         assertThat(set.isEmpty(), is(true));
     }
 
+    @SuppressWarnings("rawtypes")
     @Test(expected = ClassCastException.class)
     public void buildCheckedHashSet() {
         Set<Object> set = $(new HashSet()).checked(Integer.class).toSet();
