anchor.diff:          if fragPos > -1 then source.Substring(queryPos, fragPos - queryPos)
           else if queryPos > -1 then source.Substring(queryPos)
           else ""
  +
  +    let originalHostAndPath =
  +        if pathEnd > -1 then source.Substring(0, pathEnd)
  +        else source
  +
  +    let encodedQueryAndFragments =
  +        if queryPos > -1 then uri.AbsoluteUri.Substring(uri.AbsoluteUri.IndexOf("?"))
  +        elif fragPos > -1 then uri.AbsoluteUri.Substring(uri.AbsoluteUri.IndexOf("#"))
  +        else ""
       
  -    { Path = path; Query = query }
  +    { Path = path; 
  +      Query = query;
  +      OriginalHostAndPath = originalHostAndPath;
  +      EncodedQueryAndFragments = encodedQueryAndFragments }
   
   let private privateInstanceFlags = BindingFlags.NonPublic ||| BindingFlags.Instance
   let private publicInstanceFlags = BindingFlags.Public ||| BindingFlags.Instance
  
positive.code:                 uri.ToString().EndsWith("%2F", StringComparison.InvariantCulture)
  
  let enableUriSlashes =
      if isMono then id //purifierMono.Force()
      elif hasBrokenDotNetUri then purifierDotNet.Force()
      else id
  
  
negative.code:     fun (uri : Uri) ->
      
          let source = string (sourceField.GetValue(uri))
          let query = uri.Query
          let uriInfo = uriInfo uri source
  
          cachedToStringField.SetValue(uri, source)
          cachedAbsoluteUriField.SetValue(uri, uriInfo.OriginalHostAndPath + uriInfo.EncodedQueryAndFragments)
          pathField.SetValue(uri, uriInfo.Path)
          queryField.SetValue(uri, query)
  
          uri)
  
  