anchor.diff:      | Some (untyped,typed,_) when typed.HasFullTypeCheckInfo  -> Some (ParseAndCheckResults(typed, untyped))
       | _ -> None
   
  -  member x.GetTypedParseResultWithTimeout(projectFilename, fileName:string, src, files, args, stale, timeout) = 
  +  member x.GetTypedParseResultWithTimeout(projectFilename, fileName:string, src, files, args, stale, ?timeout) = 
      async {
       let fileName = if Path.GetExtension fileName = ".sketchfs" then Path.ChangeExtension (fileName, ".fsx") else fileName
       let opts = x.GetCheckerOptions(fileName, projectFilename, src, files, args)
  
positive.code:    async { 
      match FSharp.CompilerBinding.Parsing.findLongIdents(col, lineStr) with 
      | Some(colu, identIsland) ->
  
          let! checkResults = x.GetTypedParseResultAsync(projectFilename, fileName, source, files, args, stale= AllowStaleResults.MatchingSource)
          let! symbolResults = checkResults.GetSymbolAtLocation(line, colu, lineStr, identIsland)
          match symbolResults with
          | Some symbolUse -> 
              let lastIdent = Seq.last identIsland
              let! refs = checkResults.GetUsesOfSymbolInFile(symbolUse.Symbol)
              return Some(lastIdent, refs)
          | None -> return None
      | None -> return None 
     }
  
negative.code:     | None -> 
          Debug.WriteLine(sprintf "LanguageService: Not using stale results - trying typecheck with timeout")
          // If we didn't get a recent set of type checking results, we put in a request and wait for at most 'timeout' for a response
          match timeout with
          | Some timeout -> return mbox.TryPostAndReply((fun reply -> (fileName, src, opts, reply)), timeout = timeout)
          | None -> return mbox.TryPostAndReply((fun reply -> (fileName, src, opts, reply)))
     }
  
    member x.GetTypedParseResultIfAvailable(projectFilename, fileName:string, src, files, args, stale) = 
  