anchor.diff:      /// Provide Xml Documentation             
       type Provider(xmlIndexService:IVsXMLMemberIndexService) = 
           /// Index of assembly name to xml member index.
  -        let mutable xmlCache = new AgedLookup<VsThreadToken,string,IVsXMLMemberIndex>(10,areSimilar=(fun (x,y) -> x = y))
  +        let cache = Dictionary<string, IVsXMLMemberIndex>()
           
  -        do Events.SolutionEvents.OnAfterCloseSolution.Add (fun _ -> 
  -            xmlCache.Clear(vsToken))
  -
  -    #if DEBUG // Keep under DEBUG so that it can keep building.
  -
  -        let _AppendTypeParameters (collector: ITaggedTextCollector) (memberData:IVsXMLMemberData3) = 
  -            let ok,count = memberData.GetTypeParamCount()
  -            if Com.Succeeded(ok) && count > 0 then 
  -                for param in 0..count do
  -                    let ok,name,text = memberData.GetTypeParamTextAt(param)
  -                    if Com.Succeeded(ok) then
  -                        EnsureHardLine collector
  -                        collector.Add(tagTypeParameter name)
  -                        collector.Add(Literals.space)
  -                        collector.Add(tagPunctuation "-")
  -                        collector.Add(Literals.space)
  -                        collector.Add(tagText text)
  -
  -        let _AppendRemarks (collector: ITaggedTextCollector) (memberData:IVsXMLMemberData3) = 
  -            let ok, remarksText = memberData.GetRemarksText()
  -            if Com.Succeeded(ok) then 
  -                AppendOnNewLine collector remarksText            
  -    #endif
  -
  -        let _AppendReturns (collector: ITaggedTextCollector) (memberData:IVsXMLMemberData3) = 
  -            let ok,returnsText = memberData.GetReturnsText()
  -            if Com.Succeeded(ok) then 
  -                if not collector.EndsWithLineBreak then 
  -                    AppendHardLine(collector)
  -                    AppendHardLine(collector)
  -                AppendOnNewLine collector returnsText
  +        do Events.SolutionEvents.OnAfterCloseSolution.Add (fun _ -> cache.Clear())
   
           /// Retrieve the pre-existing xml index or None
           let GetMemberIndexOfAssembly(assemblyName) =
  -            match xmlCache.TryGet(vsToken, assemblyName) with 
  -            | Some(memberIndex) -> Some(memberIndex)
  -            | None -> 
  +            match cache.TryGetValue(assemblyName) with 
  +            | true, memberIndex -> Some(memberIndex)
  +            | false, _ -> 
                   let ok,memberIndex = xmlIndexService.CreateXMLMemberIndex(assemblyName)
                   if Com.Succeeded(ok) then 
                       let ok = memberIndex.BuildMemberIndex()
  -                    if Com.Succeeded(ok) then 
  -                        xmlCache.Put(vsToken, assemblyName,memberIndex)
  +                    if Com.Succeeded(ok) then
  +                        cache.Add(assemblyName, memberIndex)
                           Some(memberIndex)
                       else None
                   else None
  
positive.code: 
          interface IDocumentationBuilder with 
              /// Append the given processed XML formatted into the string builder
              override this.AppendDocumentationFromProcessedXML(xmlCollector, exnCollector, processedXml, showExceptions, showParameters, paramName) =
                  match XmlDocReader.TryCreate processedXml with
                  | Some xmlDocReader ->
                      match paramName with
  
negative.code: 
  open System
  open System.Runtime.CompilerServices
  open System.Text.RegularExpressions
  open Microsoft.VisualStudio.Shell
  open Microsoft.VisualStudio.Shell.Interop
  open FSharp.Compiler.SourceCodeServices
  open FSharp.Compiler.Layout
  open FSharp.Compiler.Layout.TaggedTextOps
  open System.Collections.Generic
  
  type internal ITaggedTextCollector =
      abstract Add: text: TaggedText -> unit
  