diff --git a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Runtime.java b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Runtime.java
index 5118b40..8e6c5f8 100644
--- a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Runtime.java
+++ b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Runtime.java
@@ -176,11 +176,19 @@
     @Runtime::prototypesByTypeId = {};
 
     // Do polyfills for all methods expected in a modern browser.
-    // Patch up Array.isArray for browsers that don't support the fast native check.
+
+    // Required by IE8
     if (!Array.isArray) {
-        Array.isArray = function (vArg) {
-          return Object.prototype.toString.call(vArg) === "[object Array]";
-        };
+      Array.isArray = function (vArg) {
+        return Object.prototype.toString.call(vArg) === "[object Array]";
+      };
+    }
+
+    // Required by IE8
+    if (!Date.now) {
+      Date.now = function now() {
+        return new Date().getTime();
+      };
     }
   }-*/;
 
diff --git a/user/super/com/google/gwt/emul/java/lang/System.java b/user/super/com/google/gwt/emul/java/lang/System.java
index a3b3062..5767122 100644
--- a/user/super/com/google/gwt/emul/java/lang/System.java
+++ b/user/super/com/google/gwt/emul/java/lang/System.java
@@ -22,8 +22,8 @@
 import java.io.PrintStream;
 
 import javaemul.internal.ArrayHelper;
-import javaemul.internal.DateUtil;
 import javaemul.internal.HashCodes;
+import javaemul.internal.JsUtils;
 
 import jsinterop.annotations.JsMethod;
 
@@ -93,7 +93,7 @@
   }
 
   public static long currentTimeMillis() {
-    return (long) DateUtil.now();
+    return (long) JsUtils.getTime();
   }
 
   /**
diff --git a/user/super/com/google/gwt/emul/java/util/Random.java b/user/super/com/google/gwt/emul/java/util/Random.java
index c603378..4a7da06 100644
--- a/user/super/com/google/gwt/emul/java/util/Random.java
+++ b/user/super/com/google/gwt/emul/java/util/Random.java
@@ -37,7 +37,7 @@
 import static javaemul.internal.InternalPreconditions.checkCriticalArgument;
 import static javaemul.internal.InternalPreconditions.checkNotNull;
 
-import javaemul.internal.DateUtil;
+import javaemul.internal.JsUtils;
 
 /**
  * This class provides methods that generates pseudo-random numbers of different
@@ -114,7 +114,7 @@
   public Random() {
     // JsDate.now used instead of System.currentTimeMillis()
     // as it returns a double in order to avoid the use os LongLib.
-    double seed = uniqueSeed++ + DateUtil.now();
+    double seed = uniqueSeed++ + JsUtils.getTime();
     int hi = (int) Math.floor(seed * twoToTheMinus24) & 0xffffff;
     int lo = (int) (seed - (hi * twoToThe24));
     setSeed(hi, lo);
diff --git a/user/super/com/google/gwt/emul/javaemul/internal/DateUtil.java b/user/super/com/google/gwt/emul/javaemul/internal/DateUtil.java
deleted file mode 100644
index 321bf95..0000000
--- a/user/super/com/google/gwt/emul/javaemul/internal/DateUtil.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2015 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 javaemul.internal;
-
-/**
- * Simple Helper class to return Date.now.
- */
-public class DateUtil {
-  /**
-   * Returns the numeric value corresponding to the current time -
-   * the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.
-   */
-  public static native double now() /*-{
-      // IE8 does not have Date.now
-      // when removing IE8 support we change this to Date.now()
-      if (Date.now) {
-          // Date.now vs Date.getTime() performance comparison:
-          // http://jsperf.com/date-now-vs-new-date/8
-          return Date.now();
-      }
-      return (new Date()).getTime();
-  }-*/;
-}
\ No newline at end of file
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 21a1d5a..164f5ff 100644
--- a/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
+++ b/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
@@ -24,9 +24,8 @@
  */
 public class JsUtils {
 
-  public static native int compare(String a, String b) /*-{
-    return a == b ? 0 : (a < b ? -1 : 1);
-  }-*/;
+  @JsMethod(namespace = "<window>", name = "Date.now")
+  public static native double getTime();
 
   @JsMethod(namespace = "<window>")
   public static native boolean isFinite(double d);
