diff --git a/dev/core/test/com/google/gwt/dev/CompilerTest.java b/dev/core/test/com/google/gwt/dev/CompilerTest.java
index a9d6465..bb342f2 100644
--- a/dev/core/test/com/google/gwt/dev/CompilerTest.java
+++ b/dev/core/test/com/google/gwt/dev/CompilerTest.java
@@ -2747,7 +2747,9 @@
         "java.lang.Double",
         "java.lang.HasCharSequenceTypeMarker",
         "java.lang.HasComparableTypeMarker",
+        "java.lang.Integer$NativeNumber",
         "java.lang.Number",
+        "java.lang.Number$JavaLangNumber",
         "java.lang.String",
         "java.lang.String$NativeFunction",
         "java.lang.String$NativeString",
diff --git a/user/super/com/google/gwt/emul/java/lang/Boolean.java b/user/super/com/google/gwt/emul/java/lang/Boolean.java
index ec3e351..af7a3ae 100644
--- a/user/super/com/google/gwt/emul/java/lang/Boolean.java
+++ b/user/super/com/google/gwt/emul/java/lang/Boolean.java
@@ -114,17 +114,13 @@
 
   // CHECKSTYLE_OFF: Utility Methods for unboxed Boolean.
   protected static Boolean $create(boolean x) {
-    return createNative(x);
+    return JsUtils.uncheckedCast(x);
   }
 
   protected static Boolean $create(String x) {
-    return createNative(Boolean.parseBoolean(x));
+    return JsUtils.uncheckedCast(Boolean.parseBoolean(x));
   }
 
-  private static native Boolean createNative(boolean x) /*-{
-    return x;
-  }-*/;
-
   @JsMethod
   protected static boolean $isInstance(Object instance) {
     return "boolean".equals(JsUtils.typeOf(instance));
diff --git a/user/super/com/google/gwt/emul/java/lang/Double.java b/user/super/com/google/gwt/emul/java/lang/Double.java
index f41d44b..a30c839 100644
--- a/user/super/com/google/gwt/emul/java/lang/Double.java
+++ b/user/super/com/google/gwt/emul/java/lang/Double.java
@@ -379,17 +379,13 @@
 
   // CHECKSTYLE_OFF: Utility Methods for unboxed Double.
   protected static Double $create(double x) {
-    return createNative(x);
+    return JsUtils.uncheckedCast(x);
   }
 
   protected static Double $create(String s) {
-    return createNative(Double.parseDouble(s));
+    return JsUtils.uncheckedCast(Double.parseDouble(s));
   }
 
-  private static native Double createNative(double x) /*-{
-    return x;
-  }-*/;
-
   @JsMethod
   protected static boolean $isInstance(Object instance) {
     return "number".equals(JsUtils.typeOf(instance));
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 bda0338..a549b93 100644
--- a/user/super/com/google/gwt/emul/java/lang/Integer.java
+++ b/user/super/com/google/gwt/emul/java/lang/Integer.java
@@ -15,6 +15,9 @@
  */
 package java.lang;
 
+import javaemul.internal.JsUtils;
+import jsinterop.annotations.JsType;
+
 /**
  * Wraps a primitive <code>int</code> as an object.
  */
@@ -206,17 +209,25 @@
   }
 
   public static String toBinaryString(int value) {
-    return toUnsignedRadixString(value, 2);
+    return toUnsignedString(value, 2);
   }
 
   public static String toHexString(int value) {
-    return toUnsignedRadixString(value, 16);
+    return toUnsignedString(value, 16);
   }
 
   public static String toOctalString(int value) {
-    return toUnsignedRadixString(value, 8);
+    return toUnsignedString(value, 8);
   }
 
+  private static String toUnsignedString(int value, int radix) {
+    return toRadixString(toUnsigned(value), radix);
+  }
+
+  private static native int toUnsigned(int value) /*-{
+    return (value >>> 0);
+  }-*/;
+
   public static String toString(int value) {
     return String.valueOf(value);
   }
@@ -228,6 +239,16 @@
     return toRadixString(value, radix);
   }
 
+  private static String toRadixString(double value, int radix) {
+    NativeNumber number = JsUtils.uncheckedCast(value);
+    return number.toString(radix);
+  }
+
+  @JsType(isNative = true, name = "Number", namespace = "<window>")
+  private interface NativeNumber {
+    String toString(int radix);
+  }
+
   public static Integer valueOf(int i) {
     if (i > -129 && i < 128) {
       int rebase = i + 128;
@@ -249,15 +270,6 @@
     return Integer.valueOf(Integer.parseInt(s, radix));
   }
 
-  private static native String toRadixString(int value, int radix) /*-{
-    return value.toString(radix);
-  }-*/;
-
-  private static native String toUnsignedRadixString(int value, int radix) /*-{
-    // ">>> 0" converts the value to unsigned number.
-    return (value >>> 0).toString(radix);
-  }-*/;
-
   private final transient int value;
 
   public Integer(int value) {
diff --git a/user/super/com/google/gwt/emul/java/lang/Number.java b/user/super/com/google/gwt/emul/java/lang/Number.java
index 2e1e955..e487b9b 100644
--- a/user/super/com/google/gwt/emul/java/lang/Number.java
+++ b/user/super/com/google/gwt/emul/java/lang/Number.java
@@ -19,7 +19,9 @@
 
 import javaemul.internal.JsUtils;
 import javaemul.internal.NativeRegExp;
+
 import jsinterop.annotations.JsMethod;
+import jsinterop.annotations.JsType;
 
 /**
  * Abstract base class for numeric wrapper classes.
@@ -127,16 +129,14 @@
     }
   }
 
+  @JsType(isNative = true, name = "Number$impl", namespace = "java.lang")
+  private static class JavaLangNumber { }
+
   @JsMethod
   private static boolean $isInstance(Object instance) {
-    return "number".equals(JsUtils.typeOf(instance)) || instanceOfJavaLangNumber(instance);
+    return "number".equals(JsUtils.typeOf(instance)) || instance instanceof JavaLangNumber;
   }
 
-  private static native boolean instanceOfJavaLangNumber(Object instance) /*-{
-    // Note: The instanceof Number here refers to java.lang.Number in j2cl.
-    return instance instanceof Number;
-  }-*/;
-
   /**
    * @skip
    *
diff --git a/user/super/com/google/gwt/emul/java/math/BigDecimal.java b/user/super/com/google/gwt/emul/java/math/BigDecimal.java
index dfb608c..52e44f1 100644
--- a/user/super/com/google/gwt/emul/java/math/BigDecimal.java
+++ b/user/super/com/google/gwt/emul/java/math/BigDecimal.java
@@ -41,6 +41,8 @@
 import javaemul.internal.JsUtils;
 import javaemul.internal.NativeRegExp;
 
+import jsinterop.annotations.JsType;
+
 /**
  * This class represents immutable arbitrary precision decimal numbers. Each
  * {@code BigDecimal} instance is represented with a unscaled arbitrary
@@ -491,13 +493,18 @@
    * Convert a double to a string with {@code digits} precision.  The resulting
    * string may still be in exponential notation.
    *
-   * @param d double value
    * @param digits number of digits of precision to include
    * @return non-localized string representation of {@code d}
    */
-  private static native String toPrecision(double d, int digits) /*-{
-    return d.toPrecision(digits);
-  }-*/;
+  private static String toPrecision(double value, int digits) {
+    NativeNumber number = JsUtils.uncheckedCast(value);
+    return number.toPrecision(digits);
+  }
+
+  @JsType(isNative = true, name = "Number", namespace = "<window>")
+  private interface NativeNumber {
+    String toPrecision(int digits);
+  }
 
   private static BigDecimal valueOf(double smallValue, double scale) {
     return new BigDecimal(smallValue, scale);
diff --git a/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java b/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
index ad2abff..e569add 100644
--- a/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
+++ b/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
@@ -15,6 +15,7 @@
  */
 package javaemul.internal;
 
+import javaemul.internal.annotations.DoNotAutobox;
 import javaemul.internal.annotations.UncheckedCast;
 import jsinterop.annotations.JsMethod;
 import jsinterop.annotations.JsProperty;
@@ -56,7 +57,7 @@
   }-*/;
 
   @UncheckedCast
-  public static native <T> T uncheckedCast(Object o) /*-{
+  public static native <T> T uncheckedCast(@DoNotAutobox Object o) /*-{
     return o;
   }-*/;
 
diff --git a/user/test/com/google/gwt/emultest/java/lang/IntegerTest.java b/user/test/com/google/gwt/emultest/java/lang/IntegerTest.java
index d02a8e8..4f93f55 100644
--- a/user/test/com/google/gwt/emultest/java/lang/IntegerTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/IntegerTest.java
@@ -292,18 +292,20 @@
     assertEquals("-2147483648", Integer.toString(Integer.MIN_VALUE));
     assertEquals("0", Integer.toString(0));
 
-    assertEquals("17777777777", Integer.toString(2147483647, 8));
-    assertEquals("7fffffff", Integer.toString(2147483647, 16));
-    assertEquals("1111111111111111111111111111111", Integer.toString(2147483647, 2));
-    assertEquals("2147483647", Integer.toString(2147483647, 10));
-    assertEquals("-17777777777", Integer.toString(-2147483647, 8));
-    assertEquals("-7fffffff", Integer.toString(-2147483647, 16));
-    assertEquals("-1111111111111111111111111111111", Integer.toString(-2147483647, 2));
-    assertEquals("-2147483647", Integer.toString(-2147483647, 10));
-    assertEquals("-20000000000", Integer.toString(-2147483648, 8));
-    assertEquals("-80000000", Integer.toString(-2147483648, 16));
-    assertEquals("-10000000000000000000000000000000", Integer.toString(-2147483648, 2));
-    assertEquals("-2147483648", Integer.toString(-2147483648, 10));
+    assertEquals("7fffffff", Integer.toString(Integer.MAX_VALUE, 16));
+    assertEquals("2147483647", Integer.toString(Integer.MAX_VALUE, 10));
+    assertEquals("17777777777", Integer.toString(Integer.MAX_VALUE, 8));
+    assertEquals("1111111111111111111111111111111", Integer.toString(Integer.MAX_VALUE, 2));
+
+    assertEquals("-7fffffff", Integer.toString(-Integer.MAX_VALUE, 16));
+    assertEquals("-2147483647", Integer.toString(-Integer.MAX_VALUE, 10));
+    assertEquals("-17777777777", Integer.toString(-Integer.MAX_VALUE, 8));
+    assertEquals("-1111111111111111111111111111111", Integer.toString(-Integer.MAX_VALUE, 2));
+
+    assertEquals("-80000000", Integer.toString(Integer.MIN_VALUE, 16));
+    assertEquals("-2147483648", Integer.toString(Integer.MIN_VALUE, 10));
+    assertEquals("-20000000000", Integer.toString(Integer.MIN_VALUE, 8));
+    assertEquals("-10000000000000000000000000000000", Integer.toString(Integer.MIN_VALUE, 2));
   }
 
   public void testValueOf() {
