 diff --git a/src/com/google/javascript/jscomp/TypeCheck.java b/src/com/google/javascript/jscomp/TypeCheck.java
-index 41b94e0c..5760f79c 100644
+index 41b94e0c..a752e76a 100644
 --- a/src/com/google/javascript/jscomp/TypeCheck.java
 +++ b/src/com/google/javascript/jscomp/TypeCheck.java
-@@ -182,6 +182,14 @@ public class TypeCheck implements NodeTraversal.Callback, CompilerPass {
+@@ -182,6 +182,13 @@ public class TypeCheck implements NodeTraversal.Callback, CompilerPass {
            "original: {2}\n" +
            "override: {3}");
  

 
   TypeValidator(AbstractCompiler compiler) {
     this.compiler = compiler;
@@ -564,14 +555,24 @@ class TypeValidator {
    * Expect that all properties on interfaces that this type implements are
    * implemented and correctly typed.
    */
-  void expectAllInterfaceProperties(NodeTraversal t, Node n,
-      FunctionType type) {
+  void expectAllInterfacePropertiesImplemented(FunctionType type) {
     ObjectType instance = type.getInstanceType();
     for (ObjectType implemented : type.getAllImplementedInterfaces()) {
       if (implemented.getImplicitPrototype() != null) {
         for (String prop :
             implemented.getImplicitPrototype().getOwnPropertyNames()) {
-          expectInterfaceProperty(t, n, instance, implemented, prop);
+          if (!instance.hasProperty(prop)) {
+            Node source = type.getSource();
+            Preconditions.checkNotNull(source);
+            String sourceName = (String) source.getProp(Node.SOURCENAME_PROP);
+            sourceName = sourceName == null ? "" : sourceName;
+            if (shouldReport) {
+              compiler.report(JSError.make(sourceName, source,
+                  INTERFACE_METHOD_NOT_IMPLEMENTED,
+                  prop, implemented.toString(), instance.toString()));
+            }
+            registerMismatch(instance, implemented);
+          }
         }
       }
     }
@@ -581,38 +582,6 @@ class TypeValidator {
    * Expect that the peroperty in an interface that this type implements is
    * implemented and correctly typed.
    */
-  private void expectInterfaceProperty(NodeTraversal t, Node n,
-      ObjectType instance, ObjectType implementedInterface, String prop) {
-    if (!instance.hasProperty(prop)) {
-      // Not implemented
-      String sourceName = (String) n.getProp(Node.SOURCENAME_PROP);
-      sourceName = sourceName == null ? "" : sourceName;
-      if (shouldReport) {
-        compiler.report(JSError.make(sourceName, n,
-            INTERFACE_METHOD_NOT_IMPLEMENTED,
-            prop, implementedInterface.toString(), instance.toString()));
-      }
-      registerMismatch(instance, implementedInterface);
-    } else {
-      JSType found = instance.getPropertyType(prop);
-      JSType required

+          "of the property it overrides from interface {1}\n" +
+          "original: {2}\n" +
+          "override: {3}");
   static final DiagnosticType UNKNOWN_OVERRIDE =
       DiagnosticType.warning(
           "JSC_UNKNOWN_OVERRIDE",
@@ -232,6 +239,7 @@ public class TypeCheck implements NodeTraversal.Callback, CompilerPass {
       HIDDEN_SUPERCLASS_PROPERTY,
       HIDDEN_INTERFACE_PROPERTY,
       HIDDEN_SUPERCLASS_PROPERTY_MISMATCH,
