anchor.diff:      agent.Post(TriggerParseRequest(opts, full))
   
     /// Invokes dot-completion request and writes information to the standard output
  -  member x.DoCompletion(opts, ((line, column) as pos), lineStr, time) =
  -    Debug.print "DoCompletion request with options: %O" opts
  +  member x.DoCompletion(opts : RequestOptions, ((line, column) as pos), lineStr, time) =
  +    //Debug.print "DoCompletion request with options: %O" opts
       try
  -      try
  -        // Get the long identifier before the current location
  -        // 'residue' is the part after the last dot and 'longName' is before
  -        // e.g.  System.Console.Wri  --> "Wri", [ "System"; "Console"; ]
  -        let lookBack = Parsing.createBackStringReader lineStr (column - 1)
  -        let residue, longName =
  -          lookBack |> Parsing.getFirst Parsing.parseBackIdentWithResidue
  -
  -        // Try to get type information & run the request
  -        let op = agent.PostAndAsyncReply(fun r -> GetTypeCheckInfo(opts, time, r))
  -        let info = Async.RunSynchronously(op, ?timeout = time)
  -        match info with
  -        | Some(info) ->
  -            // Get items & generate output
  -            let decls = info.GetDeclarations(pos, lineStr, (longName, residue), 0, defaultArg time 1000)
  -            for d in decls.Items do Console.WriteLine(d.Name)
  -        | None -> ()
  -      with :? OperationCanceledException -> ()
  +      let info =
  +        // First check if cached results are available
  +        let checkres = checker.TryGetRecentTypeCheckResultsForFile(opts.FileName, opts.Options)
  +        Debug.print "Checkres: %A" checkres
  +        match checkres with
  +        | Some(untyped, typed, _) when typed.TypeCheckInfo.IsSome ->
  +            Debug.print "Worker: Quick parse completed - success"
  +            typed.TypeCheckInfo
  +        | _ ->
  +          Debug.print
  +          try
  +            // Otherwise try to get type information & run the request
  +            let op = agent.PostAndAsyncReply(fun r -> GetTypeCheckInfo(opts, time, r))
  +            Async.RunSynchronously(op, ?timeout = time)
  +          with :? OperationCanceledException -> None
  +
  +      match info with
  +      | Some(info) ->
  +          // Get the long identifier before the current location
  +          // 'residue' is the part after the last dot and 'longName' is before
  +          // e.g.  System.Console.Wri  --> "Wri", [ "System"; "Console"; ]
  +          let lookBack = Parsing.createBackStringReader lineStr (column - 1)
  +          let residue, longName =
  +            lookBack |> Parsing.getFirst Parsing.parseBackIdentWithResidue
  +
  +          // Get items & generate output
  +          let decls = info.GetDeclarations(pos, lineStr, (longName, residue), 0, defaultArg time 1000)
  +          for d in decls.Items do Console.WriteLine(d.Name)
  +      | None -> Debug.print "DoCompletion failed to get typed info"
       finally Console.WriteLine("<<EOF>>")
   
   
  
positive.code:       // We are in a project - construct options using current properties
        | Some proj, _ ->
          let projFile = ProjectParser.getFileName proj
           //Debug.WriteLine (sprintf "CheckOptions: Creating for file '%s' in project '%s'" fileName projFile)
          let files = ProjectParser.getFiles proj
          let args = ProjectParser.getOptions proj
  
  
negative.code:           return! loop errors }
      loop [||] )
  
    // Copy-paste from monodevelop binding LanguageService.fs and modified
    member x.GetCheckerOptions(fileName, source, proj:Option<ProjectParser.ProjectResolver>) =
      let ext = Path.GetExtension(fileName)
  