anchor.diff:            nextCodeAddr = cilStartAddress
             data = ByteBuffer.Create 200
             resources = ByteBuffer.Create 200
  -          tables= Array.init 64 (fun i -> MetadataTable<_>.New ("row table "+string i,System.Collections.Generic.EqualityComparer.Default))
  -          AssemblyRefs = MetadataTable<_>.New("ILAssemblyRef",System.Collections.Generic.EqualityComparer.Default)
  -          documents=MetadataTable<_>.New("pdbdocs",System.Collections.Generic.EqualityComparer.Default)
  +          tables= 
  +              Array.init 64 (fun i -> 
  +                  if (i = TableNames.AssemblyRef.Index ||
  +                      i = TableNames.MemberRef.Index ||
  +                      i = TableNames.ModuleRef.Index ||
  +                      i = TableNames.File.Index ||
  +                      i = TableNames.TypeRef.Index ||
  +                      i = TableNames.TypeSpec.Index ||
  +                      i = TableNames.MethodSpec.Index ||
  +                      i = TableNames.StandAloneSig.Index ||
  +                      i = TableNames.GenericParam.Index) then 
  +                      MetadataTable.Shared (MetadataTable<SharedRow>.New ("row table "+string i,EqualityComparer.Default))
  +                    else
  +                      MetadataTable.Unshared (MetadataTable<UnsharedRow>.New ("row table "+string i,EqualityComparer.Default)))
  +
  +          AssemblyRefs = MetadataTable<_>.New("ILAssemblyRef",EqualityComparer.Default)
  +          documents=MetadataTable<_>.New("pdbdocs",EqualityComparer.Default)
             trefCache=new Dictionary<_,_>(100)
             pdbinfo= new ResizeArray<_>(200)
             moduleGuid= Array.zeroCreate 16
  -          fieldDefs= MetadataTable<_>.New("field defs",System.Collections.Generic.EqualityComparer.Default)
  -          methodDefIdxsByKey = MetadataTable<_>.New("method defs",System.Collections.Generic.EqualityComparer.Default)
  +          fieldDefs= MetadataTable<_>.New("field defs",EqualityComparer.Default)
  +          methodDefIdxsByKey = MetadataTable<_>.New("method defs",EqualityComparer.Default)
             // This uses reference identity on ILMethodDef objects
             methodDefIdxs = new Dictionary<_,_>(100, HashIdentity.Reference)
  -          propertyDefs = MetadataTable<_>.New("property defs",System.Collections.Generic.EqualityComparer.Default)
  -          eventDefs = MetadataTable<_>.New("event defs",System.Collections.Generic.EqualityComparer.Default)
  -          typeDefs = MetadataTable<_>.New("type defs",System.Collections.Generic.EqualityComparer.Default)
  +          propertyDefs = MetadataTable<_>.New("property defs",EqualityComparer.Default)
  +          eventDefs = MetadataTable<_>.New("event defs",EqualityComparer.Default)
  +          typeDefs = MetadataTable<_>.New("type defs",EqualityComparer.Default)
             entrypoint=None
             generatePdb=generatePdb
             // These must use structural comparison since they are keyed by arrays
             guids=MetadataTable<_>.New("guids",HashIdentity.Structural)
             blobs= MetadataTable<_>.New("blobs",HashIdentity.Structural)
  -          strings= MetadataTable<_>.New("strings",System.Collections.Generic.EqualityComparer.Default) 
  -          userStrings= MetadataTable<_>.New("user strings",System.Collections.Generic.EqualityComparer.Default) }
  +          strings= MetadataTable<_>.New("strings",EqualityComparer.Default) 
  +          userStrings= MetadataTable<_>.New("user strings",EqualityComparer.Default) }
   
       // Now the main compilation step 
       GenModule cenv  m
  
positive.code:         | :? UnsharedRow as y -> equalRows elems y.GenericRow
          | _ -> false
               
  /// Special representation for ILAssemblyRef rows with pre-computed hash 
  type AssemblyRefRow(s1,s2,s3,s4,l1,b1,nameIdx,str2,b2) = 
      let hashCode = hash nameIdx
      let genericRow = [| UShort s1; UShort s2; UShort s3; UShort s4; ULong l1; Blob b1; StringE nameIdx; StringE str2; Blob b2 |]
      interface ISharedRow with 
          member x.GetGenericRow() =  genericRow            
      member x.GenericRow = genericRow
      override x.GetHashCode() = hashCode
      override x.Equals(obj:obj) = 
          match obj with 
          | :? AssemblyRefRow as y -> equalRows genericRow y.GenericRow
          | _ -> false
  
  /// Special representation of a very common kind of row with pre-computed hash 
  type MemberRefRow(mrp:RowElement,nmIdx:StringIndex,blobIdx:BlobIndex) = 
      let hash =   combineHash (hash blobIdx) (combineHash (hash nmIdx) (hash mrp))
      let genericRow = [| mrp; StringE nmIdx; Blob blobIdx |]
      interface ISharedRow with 
          member x.GetGenericRow() = genericRow
      member x.GenericRow = genericRow
      override x.GetHashCode() = hash
      override x.Equals(obj:obj) = 
          match obj with 
          | :? MemberRefRow as y -> equalRows genericRow y.GenericRow
          | _ -> false
  
  //=====================================================================
  //=====================================================================
  
negative.code:     GetBytesAsBlobIdx cenv (GetTypeAsBytes cenv env ty)
  
  and GetTypeAsTypeSpecRow cenv env (ty:ILType) = 
      SharedRow [| Blob (GetTypeAsBlobIdx cenv env ty) |]
  
  and GetTypeAsTypeSpecIdx cenv env ty = 
      FindOrAddSharedRow cenv TableNames.TypeSpec (GetTypeAsTypeSpecRow cenv env ty)
  
  and EmitType cenv env bb ty =
      match ty with 
  