diff --git a/user/super/com/google/gwt/emul/java/lang/Byte.java b/user/super/com/google/gwt/emul/java/lang/Byte.java
index 0d69c2d..bc87eed 100644
--- a/user/super/com/google/gwt/emul/java/lang/Byte.java
+++ b/user/super/com/google/gwt/emul/java/lang/Byte.java
@@ -15,8 +15,6 @@
  */
 package java.lang;
 
-import javaemul.internal.annotations.HasNoSideEffects;
-
 /**
  * Wraps native <code>byte</code> as an object.
  */
@@ -34,16 +32,6 @@
   private static class BoxedValues {
     // Box all values according to JLS
     private static Byte[] boxedValues = new Byte[256];
-
-    @HasNoSideEffects
-    private static Byte get(byte b) {
-      int rebase = b + 128;
-      Byte result = BoxedValues.boxedValues[rebase];
-      if (result == null) {
-        result = BoxedValues.boxedValues[rebase] = new Byte(b);
-      }
-      return result;
-    }
   }
 
   public static int compare(byte x, byte y) {
@@ -72,7 +60,12 @@
   }
 
   public static Byte valueOf(byte b) {
-    return BoxedValues.get(b);
+    int rebase = b + 128;
+    Byte result = BoxedValues.boxedValues[rebase];
+    if (result == null) {
+      result = BoxedValues.boxedValues[rebase] = new Byte(b);
+    }
+    return result;
   }
 
   public static Byte valueOf(String s) throws NumberFormatException {
diff --git a/user/super/com/google/gwt/emul/java/lang/Character.java b/user/super/com/google/gwt/emul/java/lang/Character.java
index 4b01e4d..3733f73 100644
--- a/user/super/com/google/gwt/emul/java/lang/Character.java
+++ b/user/super/com/google/gwt/emul/java/lang/Character.java
@@ -19,7 +19,6 @@
 
 import java.io.Serializable;
 import javaemul.internal.NativeRegExp;
-import javaemul.internal.annotations.HasNoSideEffects;
 
 /**
  * Wraps a native <code>char</code> as an object.
@@ -105,15 +104,6 @@
   private static class BoxedValues {
     // Box values according to JLS - from \u0000 to \u007f
     private static Character[] boxedValues = new Character[128];
-
-    @HasNoSideEffects
-    private static Character get(char c) {
-      Character result = BoxedValues.boxedValues[c];
-      if (result == null) {
-        result = BoxedValues.boxedValues[c] = new Character(c);
-      }
-      return result;
-    }
   }
 
   public static final Class<Character> TYPE = Character.class;
@@ -436,7 +426,11 @@
 
   public static Character valueOf(char c) {
     if (c < 128) {
-      return BoxedValues.get(c);
+      Character result = BoxedValues.boxedValues[c];
+      if (result == null) {
+        result = BoxedValues.boxedValues[c] = new Character(c);
+      }
+      return result;
     }
     return new Character(c);
   }
diff --git a/user/super/com/google/gwt/emul/java/lang/Integer.java b/user/super/com/google/gwt/emul/java/lang/Integer.java
index a56e31e..1e2f584 100644
--- a/user/super/com/google/gwt/emul/java/lang/Integer.java
+++ b/user/super/com/google/gwt/emul/java/lang/Integer.java
@@ -16,7 +16,6 @@
 package java.lang;
 
 import javaemul.internal.JsUtils;
-import javaemul.internal.annotations.HasNoSideEffects;
 
 /**
  * Wraps a primitive <code>int</code> as an object.
@@ -35,16 +34,6 @@
   private static class BoxedValues {
     // Box values according to JLS - between -128 and 127
     private static Integer[] boxedValues = new Integer[256];
-
-    @HasNoSideEffects
-    private static Integer get(int i) {
-      int rebase = i + 128;
-      Integer result = boxedValues[rebase];
-      if (result == null) {
-        result = boxedValues[rebase] = new Integer(i);
-      }
-      return result;
-    }
   }
 
   /**
@@ -244,7 +233,12 @@
 
   public static Integer valueOf(int i) {
     if (i > -129 && i < 128) {
-      return BoxedValues.get(i);
+      int rebase = i + 128;
+      Integer result = BoxedValues.boxedValues[rebase];
+      if (result == null) {
+        result = BoxedValues.boxedValues[rebase] = new Integer(i);
+      }
+      return result;
     }
     return new Integer(i);
   }
diff --git a/user/super/com/google/gwt/emul/java/lang/Long.java b/user/super/com/google/gwt/emul/java/lang/Long.java
index 693efeb..da22734 100644
--- a/user/super/com/google/gwt/emul/java/lang/Long.java
+++ b/user/super/com/google/gwt/emul/java/lang/Long.java
@@ -16,7 +16,6 @@
 package java.lang;
 
 import javaemul.internal.LongUtils;
-import javaemul.internal.annotations.HasNoSideEffects;
 
 /** Wraps a primitive <code>long</code> as an object. */
 public final class Long extends Number implements Comparable<Long> {
@@ -25,16 +24,6 @@
   static class BoxedValues {
     // Box values according to JLS - between -128 and 127
     static Long[] boxedValues = new Long[256];
-
-    @HasNoSideEffects
-    private static Long get(long l) {
-      int rebase = (int) l + 128;
-      Long result = BoxedValues.boxedValues[rebase];
-      if (result == null) {
-        result = BoxedValues.boxedValues[rebase] = new Long(l);
-      }
-      return result;
-    }
   }
 
   public static final long MAX_VALUE = 0x7fffffffffffffffL;
@@ -217,11 +206,16 @@
     return String.valueOf(buf, cursor, bufLen - cursor);
   }
 
-  public static Long valueOf(long l) {
-    if (l > -129 && l < 128) {
-      return BoxedValues.get(l);
+  public static Long valueOf(long i) {
+    if (i > -129 && i < 128) {
+      int rebase = (int) i + 128;
+      Long result = BoxedValues.boxedValues[rebase];
+      if (result == null) {
+        result = BoxedValues.boxedValues[rebase] = new Long(i);
+      }
+      return result;
     }
-    return new Long(l);
+    return new Long(i);
   }
 
   public static Long valueOf(String s) throws NumberFormatException {
diff --git a/user/super/com/google/gwt/emul/java/lang/Short.java b/user/super/com/google/gwt/emul/java/lang/Short.java
index 15e9b38..c42d03c 100644
--- a/user/super/com/google/gwt/emul/java/lang/Short.java
+++ b/user/super/com/google/gwt/emul/java/lang/Short.java
@@ -15,8 +15,6 @@
  */
 package java.lang;
 
-import javaemul.internal.annotations.HasNoSideEffects;
-
 /**
  * Wraps a primitive <code>short</code> as an object.
  */
@@ -34,16 +32,6 @@
   private static class BoxedValues {
     // Box values according to JLS - between -128 and 127
     private static Short[] boxedValues = new Short[256];
-
-    @HasNoSideEffects
-    private static Short get(short s) {
-      int rebase = s + 128;
-      Short result = BoxedValues.boxedValues[rebase];
-      if (result == null) {
-        result = BoxedValues.boxedValues[rebase] = new Short(s);
-      }
-      return result;
-    }
   }
 
   public static int compare(short x, short y) {
@@ -77,7 +65,12 @@
 
   public static Short valueOf(short s) {
     if (s > -129 && s < 128) {
-      return BoxedValues.get(s);
+      int rebase = s + 128;
+      Short result = BoxedValues.boxedValues[rebase];
+      if (result == null) {
+        result = BoxedValues.boxedValues[rebase] = new Short(s);
+      }
+      return result;
     }
     return new Short(s);
   }
