diff --git a/user/super/com/google/gwt/emul/java/math/BigInteger.java b/user/super/com/google/gwt/emul/java/math/BigInteger.java
index 11b8f8b..c3b4660 100644
--- a/user/super/com/google/gwt/emul/java/math/BigInteger.java
+++ b/user/super/com/google/gwt/emul/java/math/BigInteger.java
@@ -162,7 +162,7 @@
     return new BigInteger(1, intCount + 1, resDigits);
   }
 
-  static BigInteger valueOf(double val) {
+  public static BigInteger valueOf(double val) {
     if (val < 0) {
       if (val != -1) {
         return new BigInteger(-1, -val);
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerConstructorsTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerConstructorsTest.java
index a7757e8..3229ee3 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerConstructorsTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerConstructorsTest.java
@@ -39,7 +39,8 @@
 
 import com.google.gwt.emultest.java.util.EmulTestBase;
 import com.google.gwt.testing.TestUtils;
-
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
 import java.math.BigInteger;
 import java.util.Random;
 
@@ -786,25 +787,39 @@
       // JRE implementation doesn't have the method tested here
       return;
     }
-    BigInteger val = BigIntegerViolator.fromDouble(1.0);
+    BigInteger val = BigInteger.valueOf(noopToCompileForJvm(1.0));
     assertEquals("1", val.toString());
-    val = BigIntegerViolator.fromDouble(100.0);
+    val = BigInteger.valueOf(noopToCompileForJvm(100.0));
     assertEquals("100", val.toString());
-    val = BigIntegerViolator.fromDouble(2147483647.0);
+    val = BigInteger.valueOf(noopToCompileForJvm(2147483647.0));
     assertEquals("2147483647", val.toString());
-    val = BigIntegerViolator.fromDouble(-2147483647.0);
+    val = BigInteger.valueOf(noopToCompileForJvm(-2147483647.0));
     assertEquals("-2147483647", val.toString());
-    val = BigIntegerViolator.fromDouble(2147483648.0);
+    val = BigInteger.valueOf(noopToCompileForJvm(2147483648.0));
     assertEquals("2147483648", val.toString());
-    val = BigIntegerViolator.fromDouble(-2147483648.0);
+    val = BigInteger.valueOf(noopToCompileForJvm(-2147483648.0));
     assertEquals("-2147483648", val.toString());
-    val = BigIntegerViolator.fromDouble(4294967295.0);
+    val = BigInteger.valueOf(noopToCompileForJvm(4294967295.0));
     assertEquals("4294967295", val.toString());
-    val = BigIntegerViolator.fromDouble(-4294967295.0);
+    val = BigInteger.valueOf(noopToCompileForJvm(-4294967295.0));
     assertEquals("-4294967295", val.toString());
-    val = BigIntegerViolator.fromDouble(4294967296.0);
+    val = BigInteger.valueOf(noopToCompileForJvm(4294967296.0));
     assertEquals("4294967296", val.toString());
-    val = BigIntegerViolator.fromDouble(-4294967296.0);
+    val = BigInteger.valueOf(noopToCompileForJvm(-4294967296.0));
     assertEquals("-4294967296", val.toString());
   }
+
+  @Target({ElementType.METHOD})
+  private @interface GwtIncompatible {}
+
+  @GwtIncompatible
+  private static long noopToCompileForJvm(double d) {
+    // The BigInteger.valueOf(double) doesn't exist on JVM. This methods exists to so that this test
+    // can be compiled with the standard JRE.
+    throw new AssertionError();
+  }
+
+  private static double noopToCompileForJvm(Double d) {
+    return d;
+  }
 }
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerViolator.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerViolator.java
deleted file mode 100644
index 81edf89..0000000
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerViolator.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.emultest.java.math;
-
-import java.math.BigInteger;
-
-/**
- * Used to delay referencing methods only present in the emulated JRE until they
- * are actually used.
- */
-public class BigIntegerViolator {
-  
-  public static native BigInteger fromDouble(double v) /*-{
-    return @java.math.BigInteger::valueOf(D)(v);
-  }-*/;
-}
\ No newline at end of file
