anchor.diff:      }
   
   /// Gets versions of the given package via OData via /Packages?$filter=Id eq 'packageId'
  -let getAllVersionsFromNugetODataWithFilter (auth, nugetURL, package) = 
  +let getAllVersionsFromNugetODataWithFilter (getUrlContents, nugetURL, package) = 
       // we cannot cache this
  -    followODataLink auth (sprintf "%s/Packages?$filter=Id eq '%s'" nugetURL package)
  +    let url = sprintf "%s/Packages?$filter=Id eq '%s'" nugetURL package
  +    followODataLink getUrlContents url
   
   /// Gets versions of the given package via OData via /FindPackagesById()?id='packageId'.
   let getAllVersionsFromNugetOData (auth, nugetURL, package) = 
       async { 
           // we cannot cache this
  +        let getUrlContents url = getFromUrl(auth, url)
           try 
               let url = sprintf "%s/FindPackagesById()?id='%s'" nugetURL package
  -            return! followODataLink auth url
  -        with _ -> return! getAllVersionsFromNugetODataWithFilter (auth, nugetURL, package)
  +            return! followODataLink getUrlContents url
  +        with _ -> return! getAllVersionsFromNugetODataWithFilter (getUrlContents, nugetURL, package)
       }
   
   /// Gets all versions no. of the given package.
  
positive.code:       Unlisted : bool
        DownloadUrl : string}
  
  let rec private followODataLink auth url = 
      async { 
          let! raw = getFromUrl (auth, url)
          let doc = XmlDocument()
          doc.LoadXml raw
          let feed = 
  
negative.code:             |> getNodes "link"
              |> List.filter (fun node -> node |> getAttribute "rel" = Some "next")
              |> List.choose (getAttribute "href")
              |> List.map (followODataLink getUrlContents)
              |> Async.Parallel
              |> Async.RunSynchronously
              |> Seq.concat
  