diff --git a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Array.java b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Array.java
index e9c0eb5..b9ef608 100644
--- a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Array.java
+++ b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Array.java
@@ -44,7 +44,8 @@
     Array a = asArrayType(array);
     Array result = arraySlice(a, fromIndex, toIndex);
     initValues(a.getClass(), a.typeId, a.queryId, result);
-    return asArray(result);
+    // implicit type arg not inferred (as of JDK 1.5.0_07)
+    return Array.<T>asArray(result);
   }
 
   /**
@@ -55,7 +56,8 @@
     Array a = asArrayType(array);
     Array result = createFromSeed(NULL_SEED_TYPE, length);
     initValues(a.getClass(), a.typeId, a.queryId, result);
-    return asArray(result);
+    // implicit type arg not inferred (as of JDK 1.5.0_07)
+    return Array.<T>asArray(result);
   }
 
   /**
@@ -149,9 +151,9 @@
    * 
    * @param seedType the primitive type of the array; 0: null; 1: zero; 2: false
    * @param length the requested length
-   * @see #NULL_ARRAY
-   * @see #ZERO_ARRAY
-   * @see #FALSE_ARRAY
+   * @see #NULL_SEED_TYPE
+   * @see #ZERO_SEED_TYPE
+   * @see #FALSE_SEED_TYPE
    * @return the new JSON array
    */
   private static native Array createFromSeed(int seedType, int length) /*-{
diff --git a/user/super/com/google/gwt/emul/java/util/ArrayList.java b/user/super/com/google/gwt/emul/java/util/ArrayList.java
index 51b9d73..aaac930 100644
--- a/user/super/com/google/gwt/emul/java/util/ArrayList.java
+++ b/user/super/com/google/gwt/emul/java/util/ArrayList.java
@@ -138,7 +138,8 @@
     if (index < 0 || index >= size) {
       indexOutOfBounds(index);
     }
-    return getImpl(array, index);
+    // implicit type arg not inferred (as of JDK 1.5.0_07)
+    return ArrayList.<E>getImpl(array, index);
   }
 
   @Override
@@ -201,7 +202,8 @@
       a = Array.clonify(a, size);
     }
     for (int i = 0; i < size; ++i) {
-      a[i] = getImpl(array, i);
+      // implicit type arg not inferred (as of JDK 1.5.0_07)
+      a[i] = ArrayList.<T>getImpl(array, i);
     }
     if (a.length > size) {
       a[size] = null;
