anchor.diff:  let private handlerWithRootedPath (path:string) (handler : HttpHandler) = 
       fun (ctx : HttpHandlerContext) ->
           async {
  -            let route = getRoute ctx.HttpContext
  +            let savedSubPath = getSavedSubPath ctx.HttpContext
               try
  -                ctx.HttpContext.Items.Item RouteKey <- ((route |> Option.defaultValue "") + path)
  +                ctx.HttpContext.Items.Item RouteKey <- ((savedSubPath |> Option.defaultValue "") + path)
                   return! handler ctx
               finally
  -                match route with
  -                | Some route -> ctx.HttpContext.Items.Item RouteKey <- route
  -                | None       -> ctx.HttpContext.Items.Remove RouteKey |> ignore
  +                match savedSubPath with
  +                | Some savedSubPath -> ctx.HttpContext.Items.Item RouteKey <- savedSubPath
  +                | None              -> ctx.HttpContext.Items.Remove RouteKey |> ignore
           }
   
   let subPath (path:string) (handler : HttpHandler) =
  -    route path >>=
  +    routeStartsWith path >>=
       handlerWithRootedPath path handler
   
   let subCiPath (path:string) (handler : HttpHandler) =
  -    routeCi path >>=
  +    routeStartsWithCi path >>=
       handlerWithRootedPath path handler
  
positive.code: /// route matches and subsequently passed into the supplied routeHandler.
  let routeCif (route : StringFormat<_, 'T>) (routeHandler : 'T -> HttpHandler) =
      fun (ctx : HttpHandlerContext) ->
          tryMatchInput route (getRalativePath ctx.HttpContext) true
          |> function
              | None      -> None |> async.Return
              | Some args -> routeHandler args ctx
  
negative.code:         ctx.HttpContext.Response.Clear()
          async.Return (Some ctx)
  
  let private strOption (str : string) =
      if String.IsNullOrEmpty str then None else Some str 
  
  let private getSavedSubPath (ctx : HttpContext) =
      if ctx.Items.ContainsKey RouteKey
      then ctx.Items.Item RouteKey |> string |> strOption 
      else None
  
  
  let private getPath (ctx : HttpContext) =
      match getSavedSubPath ctx with
      | Some p -> ctx.Request.Path.ToString().[p.Length..]
      | None   -> ctx.Request.Path.ToString()
  
  /// Filters an incoming HTTP request based on the request path (case sensitive).
  let route (path : string) =
      fun (ctx : HttpHandlerContext) ->
          if (getPath ctx.HttpContext).Equals path
          then Some ctx
          else None
          |> async.Return
  