 
     (let [subitems (get items fmt)]
       [:fo:flow {:flow-name "xsl-region-body"}
-       (toc subitems [fmt] 3 :heading? true :editorial? true :recommendation-at-end? true)
+       (toc (select-keys items [fmt]) [] 3
+            :heading? true :editorial? true :recommendation-at-end? true :numbered? true)
        (block {:break-before "odd-page"}) ;; the very first format should start on recto
-       (heading :h1 :editorial [fmt :editorial])
-       (heading :h1 :hörbuch [fmt :hörbuch])
-       (mapcat #(genre-sexp (get subitems %) fmt % 2) (order (keys subitems)))
-       (heading :h1 :recommendations [fmt :recommendations])])]])
+       (heading :h1 :editorial [:editorial] [1])
+       (heading :h1 :hörbuch [:hörbuch] [2])
+       (letfn [(numbered-genre [number genre]
+                 (genre-sexp (get subitems genre) fmt genre 2 (add-number [2] number)))]
+         (apply concat (map-indexed #(numbered-genre %1 %2) (order (keys subitems)))))
+       (heading :h1 :recommendations [:recommendations] [3])])]])
 
 (defmethod document-sexp :all-formats
   [items _ {:keys [description date]}]

(defn- set-marker [title]
  [:fo:block {:keep-with-next "always"}
   [:fo:marker {:marker-class-name running-header-class-name} title]])

(defn- order
  "Return `items` ordered. Checks first if `items` are either a subset

  ([class attrs]
   (merge (*stylesheet* class {}) attrs)))

(defn- section-numbers [numbers]
  (when (not-empty numbers)
    (str (string/join "." numbers) ". ")))

(defn heading
  ([level title path]
   (heading level title path []))
  ([level title path numbers]
   [:fo:block (style level
                     {:id (hash path)})
    (section-numbers numbers)
    (layout/translations title)]))

(def ^:private running-header-class-name "running-header")

