The implementation of getFields behaved as a bag, not a set: for functionally extended objects, field names might be repeated.  This led to equality claiming that objects that were "obviously" equal were not, because they erroneously were considered to have different numbers of fields.