              builder.addAlternate(alt);
            }
          }
-@@ -264,10 +265,11 @@ class RecordType extends PrototypeObjectType {
+@@ -264,6 +265,7 @@ class RecordType extends PrototypeObjectType {
  
        JSType propA = typeA.getPropertyType(property);
        JSType propB = typeB.getPropertyType(property);
--      if (typeA.isPropertyTypeDeclared(property)) {
 +      if (!propA.isUnknownType() && !propB.isUnknownType()) {
-+        if (typeA.isPropertyTypeDeclared(property)) {
+       if (typeA.isPropertyTypeDeclared(property)) {
          // If one declared property isn't invariant,
          // then the whole record isn't covariant.
--        if (!propA.isInvariant(propB)) {
-+          if (!propA.isEquivalentTo(propB)) {
-           return false;
-         }
-       } else {
 @@ -275,6 +277,7 @@ class RecordType extends PrototypeObjectType {
          // then the whole record isn't covariant.
          if (!propA.isSubtype(propB)) {

 
     // Relies on the fact that for the base {@link JSType}, only one
diff --git a/src/com/google/javascript/rhino/jstype/RecordType.java b/src/com/google/javascript/rhino/jstype/RecordType.java
index d70db704..446670cc 100755
--- a/src/com/google/javascript/rhino/jstype/RecordType.java
+++ b/src/com/google/javascript/rhino/jstype/RecordType.java
@@ -115,7 +115,7 @@ class RecordType extends PrototypeObjectType {

 
   /**
diff --git a/src/com/google/javascript/rhino/jstype/JSType.java b/src/com/google/javascript/rhino/jstype/JSType.java
index 9c8e9897..7906bfef 100644
--- a/src/com/google/javascript/rhino/jstype/JSType.java
+++ b/src/com/google/javascript/rhino/jstype/JSType.java
@@ -489,7 +489,7 @@ public abstract class JSType implements Serializable {
    * Checks if two types are equivalent.
    */
   public final boolean isEquivalentTo(JSType that) {
-    return checkEquivalenceHelper(that, EquivalenceMethod.IDENTITY);
+    return checkEquivalenceHelper(that, false);
   }
 
   /**
@@ -497,7 +497,7 @@ public abstract class JSType implements Serializable {
    * @see EquivalenceMethod
    */
   public final boolean isInvariant(JSType that) {
-    return checkEquivalenceHelper(that, EquivalenceMethod.INVARIANT);
+    return checkEquivalenceHelper(that, false);
   }
 
   /**
@@ -511,25 +511,23 @@ public abstract class JSType implements Serializable {
    *     unknowns</a>
    */
   public final boolean differsFrom(JSType that) {
