anchor.diff:      let boxedHandler (o : obj) =
           let t = o :?> 'T
           routeHandler t
  -    TemplateEndpoint (HttpVerb.NotSpecified, template, mappings, boxedHandler)
  +    TemplateEndpoint (HttpVerb.NotSpecified, template, mappings, boxedHandler, [])
   
   let subRoute
       (path      : string)
       (endpoints : Endpoint list) : Endpoint =
  -    NestedEndpoint (path, endpoints)
  +    NestedEndpoint (path, endpoints, [])
   
   let rec applyBefore
       (httpHandler  : HttpHandler)
       (endpoint     : Endpoint) =
       match endpoint with
  -    | SimpleEndpoint(v, p, h)      -> SimpleEndpoint(v, p, httpHandler >=> h)
  -    | TemplateEndpoint(v, p, m, h) -> TemplateEndpoint(v, p, m, fun (o: obj) -> httpHandler >=> h o)
  -    | NestedEndpoint(t, lst)       -> NestedEndpoint(t, List.map (applyBefore httpHandler) lst)
  +    | SimpleEndpoint(v, p, h, ml)      -> SimpleEndpoint(v, p, httpHandler >=> h, ml)
  +    | TemplateEndpoint(v, p, m, h, ml) -> TemplateEndpoint(v, p, m, (fun (o: obj) -> httpHandler >=> h o), ml)
  +    | NestedEndpoint(t, lst, ml)       -> NestedEndpoint(t, List.map (applyBefore httpHandler) lst, ml)
   
   let rec applyAfter
       (httpHandler  : HttpHandler)
       (endpoint     : Endpoint) =
       match endpoint with
  -    | SimpleEndpoint(v, p, h)      -> SimpleEndpoint(v, p, h >=> httpHandler)
  -    | TemplateEndpoint(v, p, m, h) -> TemplateEndpoint(v, p, m, fun (o: obj) -> h o >=> httpHandler)
  -    | NestedEndpoint(t, lst)       -> NestedEndpoint(t, List.map (applyAfter httpHandler) lst)
  +    | SimpleEndpoint(v, p, h, ml)      -> SimpleEndpoint(v, p, h >=> httpHandler, ml)
  +    | TemplateEndpoint(v, p, m, h, ml) -> TemplateEndpoint(v, p, m, (fun (o: obj) -> h o >=> httpHandler), ml)
  +    | NestedEndpoint(t, lst, ml)       -> NestedEndpoint(t, List.map (applyAfter httpHandler) lst, ml)
  +
  +let rec addMetadata
  +    (metadata: obj)
  +    (endpoint: Endpoint) =
  +    match endpoint with
  +    | SimpleEndpoint(v, p, h, ml)      -> SimpleEndpoint(v, p, h, metadata::ml)
  +    | TemplateEndpoint(v, p, m, h, ml) -> TemplateEndpoint(v, p, m, h, metadata::ml)
  +    | NestedEndpoint(t, lst, ml)       -> NestedEndpoint(t, lst, metadata::ml)
   
   // ---------------------------
   // Middleware Extension Methods
  
positive.code:         |> List.iter(
              fun endpoint ->
                  match endpoint with
                  | SimpleEndpoint (v, t, h)  ->
                      let d = RequestDelegateBuilder.createRequestDelegate h
                      this.MapSingleEndpoint (v, t, d)
                  | TemplateEndpoint(v, t, m, h) ->
                      let d = RequestDelegateBuilder.createTokenizedRequestDelegate m h
                      this.MapSingleEndpoint(v, t, d)
                  | NestedEndpoint (t, e)     -> this.MapNestedEndpoint (t, e)
          )
negative.code: 
  type IEndpointRouteBuilder with
  
      member private this.MapSingleEndpoint (singleEndpoint : HttpVerb * RouteTemplate * RequestDelegate * MetadataList) =
          let verb, routeTemplate, requestDelegate, metadataList = singleEndpoint
          match verb with
          | NotSpecified  -> this.Map(routeTemplate, requestDelegate).WithMetadata(List.toArray metadataList) |> ignore
          | _             -> this.MapMethods(routeTemplate, [ verb.ToString() ], requestDelegate).WithMetadata(List.toArray metadataList) |> ignore
  
      member private this.MapNestedEndpoint (nestedEndpoint : RouteTemplate * Endpoint list * MetadataList) =
          let subRouteTemplate, endpoints, parentMetadata = nestedEndpoint
          let routeTemplate = sprintf "%s%s" subRouteTemplate
          endpoints
          |> List.iter (
              fun endpoint ->
                  match endpoint with
                  | SimpleEndpoint (v, t, h, ml) ->
                      let d = RequestDelegateBuilder.createRequestDelegate h
                      this.MapSingleEndpoint(v, routeTemplate t, d, ml @ parentMetadata)
                  | TemplateEndpoint(v, t, m, h, ml) ->
                      let d = RequestDelegateBuilder.createTokenizedRequestDelegate m h
                      this.MapSingleEndpoint(v, routeTemplate t, d, ml @ parentMetadata)
                  | NestedEndpoint (t, e, ml) ->
                      this.MapNestedEndpoint(routeTemplate t, e, ml @ parentMetadata)
          )
  
      member this.MapGiraffeEndpoints (endpoints : Endpoint list) =
  