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 c8ced03..5d021cf 100644
--- a/user/super/com/google/gwt/emul/java/util/ArrayList.java
+++ b/user/super/com/google/gwt/emul/java/util/ArrayList.java
@@ -257,7 +257,7 @@
 
   @Override
   public Object[] toArray() {
-    return ArrayHelper.clone(array, 0, array.length);
+    return ArrayHelper.clone(array);
   }
 
   /*
diff --git a/user/super/com/google/gwt/emul/java/util/Arrays.java b/user/super/com/google/gwt/emul/java/util/Arrays.java
index f0fa2fa..7c15f86 100644
--- a/user/super/com/google/gwt/emul/java/util/Arrays.java
+++ b/user/super/com/google/gwt/emul/java/util/Arrays.java
@@ -600,9 +600,7 @@
   }
 
   private static <T> T[] copyObjectArray(T[] original, int from, int to) {
-    T[] copy = ArrayHelper.clone(original, from, to);
-    ArrayHelper.setLength(copy, to - from);
-    return copy;
+    return ArrayHelper.clone(original, from, to);
   }
 
   private static void checkCopyOfRange(Object original, int from, int to) {
diff --git a/user/super/com/google/gwt/emul/java/util/EnumMap.java b/user/super/com/google/gwt/emul/java/util/EnumMap.java
index c9140a4..0dbd223 100644
--- a/user/super/com/google/gwt/emul/java/util/EnumMap.java
+++ b/user/super/com/google/gwt/emul/java/util/EnumMap.java
@@ -210,7 +210,7 @@
 
   private void init(EnumMap<K, ? extends V> m) {
     keySet = m.keySet.clone();
-    values = ArrayHelper.clone(m.values, 0, m.values.length);
+    values = ArrayHelper.clone(m.values);
   }
 
   private V set(int ordinal, V value) {
diff --git a/user/super/com/google/gwt/emul/java/util/EnumSet.java b/user/super/com/google/gwt/emul/java/util/EnumSet.java
index e3594ef..6badd31 100644
--- a/user/super/com/google/gwt/emul/java/util/EnumSet.java
+++ b/user/super/com/google/gwt/emul/java/util/EnumSet.java
@@ -129,7 +129,7 @@
 
     @Override
     public EnumSet<E> clone() {
-      E[] clonedSet = ArrayHelper.clone(set, 0, set.length);
+      E[] clonedSet = ArrayHelper.clone(set);
       return new EnumSetImpl<E>(all, clonedSet, size);
     }
 
@@ -176,7 +176,7 @@
 
   public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType) {
     E[] all = elementType.getEnumConstants();
-    E[] set = ArrayHelper.clone(all, 0, all.length);
+    E[] set = ArrayHelper.clone(all);
     return new EnumSetImpl<E>(all, set, all.length);
   }
 
diff --git a/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java b/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
index 8f40c34..c474c9a 100644
--- a/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
+++ b/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
@@ -25,14 +25,21 @@
 
   public static final int ARRAY_PROCESS_BATCH_SIZE = 10000;
 
+  public static <T> T[] clone(T[] array) {
+    Object result = asNativeArray(array).slice();
+    return ArrayStamper.stampJavaTypeInfo(result, array);
+  }
+
   public static <T> T[] clone(T[] array, int fromIndex, int toIndex) {
     Object result = unsafeClone(array, fromIndex, toIndex);
+    // array.slice doesn't expand if toIndex > array.length
+    setLength(result, toIndex - fromIndex);
     return ArrayStamper.stampJavaTypeInfo(result, array);
   }
 
   /**
-   * Unlike clone, this method returns a copy of the array that is not type marked. This is only
-   * safe for temp arrays as returned array will not do any type checks.
+   * Unlike clone, this method returns a copy of the array that is not type marked, nor size
+   * guaranteed. This is only safe for temp arrays as returned array will not do any type checks.
    */
   public static Object[] unsafeClone(Object array, int fromIndex, int toIndex) {
     return asNativeArray(array).slice(fromIndex, toIndex);
@@ -128,6 +135,8 @@
 
     native void push(Object item);
 
+    native Object[] slice();
+
     native Object[] slice(int fromIndex, int toIndex);
 
     native void splice(int index, int deleteCount, Object... value);
