                                           (assoc m term i)
                                           m))
                                       {}
-                                      path)]
+                                      path)
+              ;; Only these two keys are needed by the map traversal dispatcher, so there's no reason to keep
+              ;; the full metdata of the endpoint.
+              endpoint-meta' (select-keys endpoint-meta [:function :match])]
           (update-in dispatch-map path'
-                     conj' [handler endpoint-meta route-params])))
+                     conj' [handler endpoint-meta' route-params])))
       {}
-      routing-table)))
+      routing-specs)))
 
 (defn- endpoint-filter
   [request [_ {endpoint-matcher :match}]]

           doall))))

(defn- construct-routing-table
  "Expands the output of [[build-namespace-table]], converting each namespace entry into
  a series of entries:

      [method path handler endpoint-meta route-params]


                             (if async?
                               (get options :sync-wrapper default-sync-wrapper)
                               default-namespace-middleware)))
        handler (->>
                  routing-table
                  vals
                  (apply concat)
                  construct-dispatch-map
                  (create-map-traversal-handler
                    (if async? closed-channel)))]
    [handler routing-table]))