diff --git a/dev/core/src/com/google/gwt/dev/javac/JsInteropUtil.java b/dev/core/src/com/google/gwt/dev/javac/JsInteropUtil.java
index a5bdaec..427ec57 100644
--- a/dev/core/src/com/google/gwt/dev/javac/JsInteropUtil.java
+++ b/dev/core/src/com/google/gwt/dev/javac/JsInteropUtil.java
@@ -81,11 +81,11 @@
 
     JDeclaredType enclosingType = member.getEnclosingType();
 
-    if (enclosingType.isJsType() && member.needsVtable()) {
+    if (enclosingType.isJsType() && member.needsDynamicDispatch()) {
       member.setJsMemberInfo(namespace, computeName(member), true);
     }
 
-    if (enclosingType.isClassWideExport() && !member.needsVtable()) {
+    if (enclosingType.isClassWideExport() && !member.needsDynamicDispatch()) {
       member.setJsMemberInfo(namespace, computeName(member), true);
     }
   }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JConstructor.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JConstructor.java
index 9b83845..b207a63 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JConstructor.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JConstructor.java
@@ -132,7 +132,7 @@
   }
 
   @Override
-  public boolean needsVtable() {
+  public boolean needsDynamicDispatch() {
     return false;
   }
 
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JField.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JField.java
index ed23292..bf349d3 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JField.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JField.java
@@ -194,7 +194,7 @@
   }
 
   @Override
-  public boolean needsVtable() {
+  public boolean needsDynamicDispatch() {
     return !isStatic;
   }
 
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JMember.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JMember.java
index 752baec..0031938 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JMember.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JMember.java
@@ -25,7 +25,7 @@
 
   boolean isPublic();
 
-  boolean needsVtable();
+  boolean needsDynamicDispatch();
 
   String getQualifiedName();
 }
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 ed39c7c..d19def5 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
@@ -87,7 +87,7 @@
   }
 
   public boolean isJsInteropEntryPoint() {
-    return exported && !needsVtable();
+    return exported && !needsDynamicDispatch();
   }
 
   public boolean canBeCalledExternally() {
@@ -126,10 +126,10 @@
   public String getQualifiedJsName() {
     String namespace = getJsNamespace();
     if (jsName.isEmpty()) {
-      assert !needsVtable();
+      assert !needsDynamicDispatch();
       return namespace;
     } else if (namespace.isEmpty()) {
-      assert !needsVtable();
+      assert !needsDynamicDispatch();
       return jsName;
     } else {
       return namespace + (isStatic() ? "." : ".prototype.") + jsName;
@@ -642,7 +642,7 @@
    * dispatch.
    */
   @Override
-  public boolean needsVtable() {
+  public boolean needsDynamicDispatch() {
     return !isStatic();
   }
 
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/Devirtualizer.java b/dev/core/src/com/google/gwt/dev/jjs/impl/Devirtualizer.java
index 021267a..258503b 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/Devirtualizer.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/Devirtualizer.java
@@ -106,7 +106,7 @@
     @Override
     public void endVisit(JMethodCall x, Context ctx) {
       JMethod method = x.getTarget();
-      if (!method.needsVtable()) {
+      if (!method.needsDynamicDispatch()) {
         return;
       }
 
@@ -194,7 +194,7 @@
 
     private boolean mightNeedDevirtualization(JMethod method, JReferenceType instanceType) {
       // todo remove instance check
-      if (instanceType == null || !method.needsVtable()) {
+      if (instanceType == null || !method.needsDynamicDispatch()) {
         return false;
       }
       if (devirtualMethodByMethod.containsKey(method)) {
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 4e132c2..785daaa 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
@@ -360,7 +360,7 @@
     public boolean visit(JMethod x, Context ctx) {
       // my polymorphic name
       String name = x.getName();
-      if (x.needsVtable()) {
+      if (x.needsDynamicDispatch()) {
         if (polymorphicNames.get(x) == null) {
           JsName polyName;
           if (x.isPrivate()) {
@@ -1741,7 +1741,7 @@
     private void emitStaticMethods(JDeclaredType type) {
       // declare all methods into the global scope
       for (JMethod method : type.getMethods()) {
-        if (method.needsVtable()) {
+        if (method.needsDynamicDispatch()) {
           continue;
         }
 
@@ -1947,7 +1947,7 @@
            * defined, the compiler will synthesize a default constructor which invokes
            * a synthensized $init() method. We must skip both of these inserted methods.
            */
-          if (method.needsVtable() || method instanceof JConstructor
+          if (method.needsDynamicDispatch() || method instanceof JConstructor
               || doesNotHaveConcreteImplementation(method)) {
             continue;
           }
@@ -2302,7 +2302,7 @@
     private void generatePrototypeDefinitions(JDeclaredType type) {
         assert !program.isRepresentedAsNativeJsPrimitive(type);
       for (JMethod method : type.getMethods()) {
-        if (!method.needsVtable()) {
+        if (!method.needsDynamicDispatch()) {
           continue;
         }
 
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropRestrictionChecker.java b/dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropRestrictionChecker.java
index fb3faf9..7912c74 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropRestrictionChecker.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropRestrictionChecker.java
@@ -128,7 +128,7 @@
       return;
     }
 
-    if (x.needsVtable()) {
+    if (x.needsDynamicDispatch()) {
       checkJsTypeFieldName(x, x.getJsName());
     } else if (currentType == x.getEnclosingType()) {
       checkExportName(x);
@@ -145,7 +145,7 @@
       return;
     }
 
-    if (x.needsVtable()) {
+    if (x.needsDynamicDispatch()) {
       checkJsTypeMethod(x);
     } else if (currentType == x.getEnclosingType()) {
       checkExportName(x);
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/MakeCallsStatic.java b/dev/core/src/com/google/gwt/dev/jjs/impl/MakeCallsStatic.java
index 5806da0..b824250 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/MakeCallsStatic.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/MakeCallsStatic.java
@@ -293,7 +293,7 @@
       if (x.canBePolymorphic()) {
         return false;
       }
-      if (!method.needsVtable()) {
+      if (!method.needsDynamicDispatch()) {
         return false;
       }
       if (method.isAbstract()) {
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java b/dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java
index 8650bb4..4305b94 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java
@@ -127,7 +127,7 @@
     }
 
     private boolean isNotOptimizable(JMethod x) {
-      return x.needsVtable() || x.canBeCalledExternally();
+      return x.needsDynamicDispatch() || x.canBeCalledExternally();
     }
 
     private boolean equalLiterals(JValueLiteral l1, JValueLiteral l2) {
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter/CodeSplitter.java b/dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter/CodeSplitter.java
index 4517294..418b186 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter/CodeSplitter.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter/CodeSplitter.java
@@ -168,7 +168,7 @@
     for (JClassType type : jprogram.immortalCodeGenTypes) {
       cfa.traverseFromInstantiationOf(type);
       for (JMethod method : type.getMethods()) {
-        if (!method.needsVtable()) {
+        if (!method.needsDynamicDispatch()) {
           cfa.traverseFrom(method);
         }
       }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter/ExclusivityMap.java b/dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter/ExclusivityMap.java
index 94282ea..b1b72e8 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter/ExclusivityMap.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter/ExclusivityMap.java
@@ -372,7 +372,7 @@
       * must be in the same one.
       */
       for (JMethod method : type.getMethods()) {
-        if (method.needsVtable() && methodsInJavaScript.contains(method)
+        if (method.needsDynamicDispatch() && methodsInJavaScript.contains(method)
             && typeFrag != fragmentForMethod.get(method)) {
           fragmentForType.put(type, NOT_EXCLUSIVE);
           numFixups++;
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter/FragmentExtractor.java b/dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter/FragmentExtractor.java
index 50add5b..f8c575f 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter/FragmentExtractor.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter/FragmentExtractor.java
@@ -329,7 +329,7 @@
       }
       // The method is live. Check that its enclosing type is instantiable.
       // TODO(spoon): this check should not be needed once the CFA is updated
-      return !method.needsVtable() || livenessPredicate.isLive(method.getEnclosingType());
+      return !method.needsDynamicDispatch() || livenessPredicate.isLive(method.getEnclosingType());
     }
 
     return livenessPredicate.miscellaneousStatementsAreLive();
@@ -454,7 +454,7 @@
   private JDeclaredType vtableTypeNeeded(JsStatement statement) {
     JMethod method = map.methodForStatement(statement);
     if (method != null) {
-      if (method.needsVtable()) {
+      if (method.needsDynamicDispatch()) {
         return method.getEnclosingType();
       }
     }
