diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JMethod.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JMethod.java
index c9d561c..cecef6a 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JMethod.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JMethod.java
@@ -83,7 +83,7 @@
       return false;
     }
     for (JMethod method : getOverriddenMethodsIncludingSelf()) {
-      if (method.exported || method.isJsFunctionMethod()) {
+      if (method.exported || method.isJsFunctionMethod() || method.isJsNative()) {
         return true;
       }
     }
@@ -199,13 +199,13 @@
    * an existing non-JsMember inside a class.
    */
   public boolean exposesNonJsMember() {
-    if (isInterfaceMethod() || enclosingType.isJsNative() || !JjsUtils.exposesJsName(this)) {
+    if (isInterfaceMethod() || enclosingType.isJsNative() || !JjsUtils.requiresJsName(this)) {
       return false;
     }
 
     boolean hasNonJsMemberParent = false;
     for (JMethod overriddenMethod : overriddenMethods) {
-      if (!JjsUtils.exposesJsName(overriddenMethod)) {
+      if (!JjsUtils.requiresJsName(overriddenMethod)) {
         hasNonJsMemberParent = true;
       }
       if (overriddenMethod.exposesNonJsMember()) {
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
index f96c3d8..c9cf9a4 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
@@ -247,7 +247,7 @@
       if (x.isStatic()) {
         jsName = topScope.declareName(mangleName(x), x.getName());
       } else {
-        jsName = JjsUtils.exposesJsName(x)
+        jsName = JjsUtils.requiresJsName(x)
                 ? scopeStack.peek().declareUnobfuscatableName(x.getJsName())
                 : scopeStack.peek().declareName(mangleName(x), x.getName());
       }
@@ -371,7 +371,7 @@
       String name = x.getName();
       if (x.needsDynamicDispatch()) {
         if (polymorphicNames.get(x) == null) {
-          JsName polyName = JjsUtils.exposesJsName(x)
+          JsName polyName = JjsUtils.requiresJsName(x)
                   ? interfaceScope.declareUnobfuscatableName(x.getJsName())
                   : interfaceScope.declareName(mangleNameForPoly(x), name);
           polymorphicNames.put(x, polyName);
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/JjsUtils.java b/dev/core/src/com/google/gwt/dev/jjs/impl/JjsUtils.java
index e0a878e..7b2f3f7 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/JjsUtils.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/JjsUtils.java
@@ -672,10 +672,10 @@
   /**
    * Whether or not to use the JsName when implementing this member.
    *
-   * <p>A member should only expose a JsName when a JsName has been assigned and the compilation
+   * <p>A member should only require a JsName when a JsName has been assigned and the compilation
    * has been configured to honor those names.
    * */
-  public static boolean exposesJsName(JMember member) {
+  public static boolean requiresJsName(JMember member) {
     // JsFunction interfaces and  implementations do not have JsNames but canBeReferencedExternally
     // or canBeImplementedExternally.
     return member.getJsMemberType() != JsMemberType.NONE
diff --git a/user/test/com/google/gwt/dev/jjs/test/NoGenerateJsInteropExportsTest.java b/user/test/com/google/gwt/dev/jjs/test/NoGenerateJsInteropExportsTest.java
index 073d63d..838ace2 100644
--- a/user/test/com/google/gwt/dev/jjs/test/NoGenerateJsInteropExportsTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/NoGenerateJsInteropExportsTest.java
@@ -37,13 +37,14 @@
   @JsType
   static class A {
     @JsMethod(name = "method")
-    public void m() {
+    public int m() {
+      return 1;
     }
   }
 
   @JsType(isNative = true)
   interface ObjectWithMethod {
-    void method();
+    int method();
   }
 
   public void testJsMethodNameNotHonored() {
@@ -56,4 +57,14 @@
     } catch (JavaScriptException expected) {
     }
   }
+
+  public void testHonorJsMethodNameInOverrides() {
+    assertEquals(3,
+        ((ObjectWithMethod) new ObjectWithMethod() {
+          @Override
+          public int method() {
+            return 3;
+          }
+        }).method());
+  }
 }
