diff --git a/dev/build.xml b/dev/build.xml
index 66e97ac..b2092f6 100755
--- a/dev/build.xml
+++ b/dev/build.xml
@@ -32,7 +32,8 @@
         <pathelement location="${gwt.tools.lib}/junit/junit-4.8.2.jar"/>
       </classpath>
     </gwt.javac>
-    <gwt.javac srcdir="" destdir="${javac.junit.out}" excludes="**/EmulatedCharset.java,**/HashCodes.java">
+    <gwt.javac srcdir="" destdir="${javac.junit.out}"
+               excludes="**/EmulatedCharset.java,**/HashCodes.java,**/ConsoleLogger.java,**/SuperDevModeLogger.java">
       <src path="${gwt.root}/user/src" />
       <src path="${gwt.root}/user/super/com/google/gwt/emul/javaemul/internal"/>
       <classpath>
diff --git a/user/BUILD b/user/BUILD
index 05209c3..41e2e6e 100644
--- a/user/BUILD
+++ b/user/BUILD
@@ -66,6 +66,8 @@
         ],
         exclude = [
             "src/com/google/gwt/junit/**/*.java",  # see gwt-testing
+            "**/ConsoleLogger.java", # relies on internal APIs
+            "**/SuperDevModeLogger.java", # relies on ConsoleLogger
             "**/EmulatedCharset.java",
             "**/HashCodes.java",  # relies on java8 only APIs
             "**/RunStyleSelenium.java",
diff --git a/user/build.xml b/user/build.xml
index f07aa33..b67bac4 100755
--- a/user/build.xml
+++ b/user/build.xml
@@ -98,7 +98,7 @@
   <target name="compile" description="Compile all class files"
           unless="compile.complete">
     <mkdir dir="${javac.out}"/>
-    <gwt.javac excludes="**/EmulatedCharset.java,**/HashCodes.java">
+    <gwt.javac excludes="**/EmulatedCharset.java,**/HashCodes.java,**/ConsoleLogger.java,**/SuperDevModeLogger.java">
       <src path="super/com/google/gwt/emul/javaemul/internal"/>
       <classpath>
         <pathelement location="${gwt.tools.lib}/gss/2015-10-07/closure-stylesheets-library-20151007-rebased.jar"/>
diff --git a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
index a8b2958..0222af7 100644
--- a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
+++ b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
@@ -374,7 +374,7 @@
   }-*/;
 
   private static native JsArrayString split(Object t) /*-{
-    var e = t.backingJsObject;
+    var e = t.@Throwable::backingJsObject;
     return (e && e.stack) ? e.stack.split('\n') : [];
   }-*/;
 }
diff --git a/user/super/com/google/gwt/emul/java/lang/Throwable.java b/user/super/com/google/gwt/emul/java/lang/Throwable.java
index bf53e83..e636ec3 100644
--- a/user/super/com/google/gwt/emul/java/lang/Throwable.java
+++ b/user/super/com/google/gwt/emul/java/lang/Throwable.java
@@ -24,7 +24,6 @@
 
 import javaemul.internal.JsUtils;
 import javaemul.internal.annotations.DoNotInline;
-
 import jsinterop.annotations.JsMethod;
 import jsinterop.annotations.JsPackage;
 import jsinterop.annotations.JsProperty;
@@ -134,6 +133,10 @@
     @com.google.gwt.core.client.impl.StackTraceCreator::captureStackTrace(*)(this);
   }-*/;
 
+  public Object getBackingJsObject() {
+    return backingJsObject;
+  }
+
   private void setBackingJsObject(Object backingJsObject) {
     this.backingJsObject = backingJsObject;
     linkBack(backingJsObject);
diff --git a/user/super/com/google/gwt/emul/javaemul/internal/ConsoleLogger.java b/user/super/com/google/gwt/emul/javaemul/internal/ConsoleLogger.java
index ebad921..26a4af7 100644
--- a/user/super/com/google/gwt/emul/javaemul/internal/ConsoleLogger.java
+++ b/user/super/com/google/gwt/emul/javaemul/internal/ConsoleLogger.java
@@ -38,7 +38,7 @@
 
   private void log(String level, Throwable t, String label, boolean expanded) {
     groupStart(label + t.toString(), expanded);
-    log(level, getBackingError(t));
+    log(level, getBackingError(t, t.getBackingJsObject()));
     Throwable cause = t.getCause();
     if (cause != null) {
       log(level, cause, "Caused by: ", false);
@@ -60,7 +60,7 @@
     groupEnd.call(console);
   }-*/;
 
-  private native String getBackingError(Throwable t) /*-{
+  private native String getBackingError(Throwable t, Object backingError) /*-{
     // Converts CollectorLegacy (IE8/IE9/Safari5) function stack to something readable.
     function stringify(fnStack) {
       if (!fnStack || fnStack.length == 0) {
@@ -68,7 +68,7 @@
       }
       return "\t" + fnStack.join("\n\t");
     }
-    var backingError = t.backingJsObject;
+
     return backingError && (backingError.stack || stringify(t["fnStack"]));
   }-*/;
 }
diff --git a/user/test/com/google/gwt/emultest/java/lang/JsExceptionTest.java b/user/test/com/google/gwt/emultest/java/lang/JsExceptionTest.java
index 68558ff..245ee41 100644
--- a/user/test/com/google/gwt/emultest/java/lang/JsExceptionTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/JsExceptionTest.java
@@ -14,6 +14,7 @@
 package com.google.gwt.emultest.java.lang;
 
 import static com.google.gwt.emultest.java.lang.JsExceptionViolator.createJsException;
+import static com.google.gwt.emultest.java.lang.JsExceptionViolator.getBackingJsObject;
 
 import com.google.gwt.testing.TestUtils;
 
@@ -155,10 +156,6 @@
     assertEquals(expected, getBackingJsObject(exception));
   }
 
-  private static native Object getBackingJsObject(Throwable e) /*-{
-    return e.backingJsObject;
-  }-*/;
-
   private static native Object makeJSO() /*-{
     return {
       toString : function() {
diff --git a/user/test/com/google/gwt/emultest/java/lang/JsExceptionViolator.java b/user/test/com/google/gwt/emultest/java/lang/JsExceptionViolator.java
index f538a5c..9ab620f 100644
--- a/user/test/com/google/gwt/emultest/java/lang/JsExceptionViolator.java
+++ b/user/test/com/google/gwt/emultest/java/lang/JsExceptionViolator.java
@@ -22,4 +22,7 @@
   public static native Exception createJsException(Object wrapped) /*-{
     return @com.google.gwt.core.client.JavaScriptException::new(Ljava/lang/Object;)(wrapped);
   }-*/;
+  public static native Object getBackingJsObject(Throwable t) /*-{
+    return t.@Throwable::backingJsObject;
+  }-*/;
 }
