anchor.diff:              let docIds = documents |> List.map ^ fun doc -> doc.Id
               transientDocuments.TryAdd (fileName, docIds) |> ignore
               transientDocumentIds.UnionWith docIds
  -        documents |> List.iter ^ fun doc -> workspace.AddDocument doc |> ignore
  +        documents |> List.iter ^ fun doc -> self.AddDocument doc |> ignore
           true
   
  -    member __.ApplyTextChanges (docId:DocumentId) (textChanges:LinePositionSpanTextChange seq) = async {
  +    new () = new FSharpWorkspace (Host.Mef.DesktopMefHostServices.DefaultServices)
  +
  +//    new (aggregator:HostServicesAggregator) = new FSharpWorkspace (aggregator.CreateHostServices())
  +//    new () = new FSharpWorkspace(FSharpHostService())
  +
  +    member __.WorkspaceEvents = eventStream
  +
  +    member self.ApplyTextChanges (docId:DocumentId) (textChanges:LinePositionSpanTextChange seq) = async {
           if Seq.isEmpty textChanges then return () else
  -        match workspace.CurrentSolution.TryGetDocument docId with
  +        match self.CurrentSolution.TryGetDocument docId with
           | Some doc ->
               let! (sourceText:SourceText) = doc.GetTextAsync ()
               let sourceText =
  
positive.code:             | Some docIds ->
                  transientDocuments.TryRemove filename |> ignore
                  for docId in docIds do
                      workspace.RemoveDocument docId |> ignore
                      transientDocumentIds.Remove docId |> ignore
  
  
      member self.FindProjectsByFileName (fileName:string) =
          let dirInfo = (FileInfo fileName).Directory
          let candidates =
              workspace.CurrentSolution.Projects
                  .GroupBy(fun project -> (FileInfo project.FilePath).Directory.FullName)
                  .ToDictionary
                      (   (fun grouping -> grouping.Key)
  
negative.code:                     sourceText.WithChanges [| 
                          TextChange (TextSpan (startOffset, endOffset - startOffset), bufferChange.NewText) 
                      |]
                  self.OnDocumentChanged (docId, sourceText)
          else
              tryAddTransientDocument bufferChange.FileName bufferChange.NewText |> ignore
      }
  
      member self.OnWorkspaceChanged (args:WorkspaceChangeEventArgs) =
          let filename =
              match args.Kind with
              | WorkspaceChangeKind.DocumentAdded   -> (args.NewSolution.GetDocument args.DocumentId).FilePath
  