diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,31 @@
+## 0.3.14.0
+
+### Main changes
+
+-   Add list-of-x item templates
+
+    New template variables, `lofItemTemplate`, `lotItemTemplate`,
+    `lolItemTemplate`, allowing to specify formatting for elements in lists-of
+    items.
+
+    Default values for templates also use variables `lofItemTitle`,
+    `lotItemTitle`, `lolItemTitle`, `listItemTitleDelim`.
+
+    Historically, list-of-x lists were formatted using markdown ordered lists when not using `chapters: true`. However, this is not enabled by default any more. You can restore the old behaviour by specifying the template using ordered list explicitly, e.g.
+
+    ```yaml
+    lofItemTemplate: |
+        1. $$t$$
+    ```
+
+    Note that custom numbering (including chapter numbers) will be ignored by ordered lists, so it only works well for the simplest numbering schemes.
+
+    Bullet lists are also now supported.
+
+-   Fix cleveref latex preamble
+
+    Cleveref now complains if it's loaded before hyperref, hence loading cleveref was wrapped into `AtEndPreamble`.
+
 ## 0.3.13.0
 
 ### Main changes
diff --git a/docs/demo/demo.md b/docs/demo/demo.md
--- a/docs/demo/demo.md
+++ b/docs/demo/demo.md
@@ -6,6 +6,8 @@
   ## List of Figures
 lotTitle: |
   ## List of Tables
+lolTitle: |
+  ## List of Listings
 tableTemplate: |
   *$$tableTitle$$ $$i$$*$$titleDelim$$ $$t$$
 autoSectionLabels: True
diff --git a/docs/index.md b/docs/index.md
--- a/docs/index.md
+++ b/docs/index.md
@@ -437,15 +437,15 @@
 ## Lists
 
 It's possible to use raw latex commands `\listoffigures`,
-`\listoftables` and `listoflistings`, which will produce ordered list of
+`\listoftables` and `\listoflistings`, which will produce ordered list of
 figure/table/listings titles, in order of appearance in document.
 
-`\listoflistings` depends on other options, and is defined in preamble,
-so it will work reliably only with standalone/pdf output.
+For LaTeX output, `\listoflistings` depends on other options, and is defined in
+preamble, so it will work reliably only with standalone/pdf output.
 
-**NOTE:** With Pandoc 2.0.6 and up, you'll have to explicitly separate
+**NOTE:** With Pandoc 2.0.6 and up, you might have to explicitly separate
 these commands if they are close together, at least when targeting
-something besides LaTeX. So this will not work:
+something besides LaTeX. So this might not work:
 
 ``` markdown
 \listoffigures
@@ -459,12 +459,18 @@
 
 ``` markdown
 \listoffigures
-[]: hack to split raw blocks
+
+<!-- hack to split raw blocks -->
+
 \listoftables
-[]: hack to split raw blocks
+
+<!-- hack to split raw blocks -->
+
 \listoflistings
 ```
 
+With HTML-compatible output, lists are wrapped into a `div` with classes `list` and `list-of-<prefix>`, where `<prefix>` is either `fig`, `tbl` or `lst` depending on the type of the list. This allows for ad-hoc style overrides in HTML.
+
 # Usage
 
 Run pandoc with `--filter` option, passing path to pandoc-crossref
@@ -559,6 +565,15 @@
 -   `lolTitle`, default `# List of Listings`: Title for list of listings
     (lol)
 
+### List items
+
+See also [List item templates](#list-item-templates)
+
+-   `lofItemTitle`, default empty: Title each item in the list of figures, i.e. each item will be prefixed by this string.
+-   `lotItemTitle`, default empty: Title each item in the list of tables, i.e. each item will be prefixed by this string.
+-   `lolItemTitle`, default empty: Title each item in the list of listings, i.e. each item will be prefixed by this string.
+-   `listItemTitleDelim`, default `.` (str "."): delimiter between list item numbers and captions.
+
 ### Reference format
 
 -   `figPrefix`, default `fig.`, `figs.`: Prefix for references to
@@ -726,6 +741,34 @@
     index template
 -   `subfigureRefIndexTemplate`, default `$$i$$$$suf$$ ($$s$$)` --
     subfigure reference index template
+
+### List item templates
+
+See [Templates](#templates)
+
+-   `lofItemTemplate`, default `$$lofItemTitle$$$$i$$$$listItemTitleDelim$$ $$t$$\\\n` -- list-of-figures item template
+-   `lotItemTemplate`, default `$$lotItemTitle$$$$i$$$$listItemTitleDelim$$ $$t$$\\\n`)
+-   `lolItemTemplate`, default `$$lolItemTitle$$$$i$$$$listItemTitleDelim$$ $$t$$\\\n`)
+
+Special handling is enabled for templates that are either ordered or bullet lists: items will be merged into a single list. Thus, for example, given
+
+```yaml
+lofItemTemplate: |
+  1. $$t$$
+```
+
+the list of figures will be formatted as
+
+```markdown
+# List of Figures
+
+::: {.list .list-of-fig}
+1.  Figure 1 caption
+2.  Figure 2 caption
+3.  Figure 3 caption
+4.  ...
+:::
+```
 
 ### LaTeX customization
 
diff --git a/lib-internal/Text/Pandoc/CrossRef/References/List.hs b/lib-internal/Text/Pandoc/CrossRef/References/List.hs
--- a/lib-internal/Text/Pandoc/CrossRef/References/List.hs
+++ b/lib-internal/Text/Pandoc/CrossRef/References/List.hs
@@ -18,45 +18,82 @@
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 -}
 
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
 module Text.Pandoc.CrossRef.References.List (listOf) where
 
-import Control.Arrow
 import Data.List
 import qualified Data.Map as M
 import qualified Data.Text as T
 import Text.Pandoc.Definition
+import Data.Maybe
 
 import Lens.Micro.Mtl
 import Text.Pandoc.CrossRef.References.Types
 import Text.Pandoc.CrossRef.Util.Options
 import Text.Pandoc.CrossRef.Util.Util
+import Text.Pandoc.CrossRef.Util.Template
 
 listOf :: Options -> [Block] -> WS [Block]
 listOf Options{outFormat=f} x | isLatexFormat f = return x
 listOf opts (RawBlock fmt "\\listoffigures":xs)
   | isLaTeXRawBlockFmt fmt
-  = use imgRefs >>= makeList opts lofTitle xs
+  = use imgRefs >>= makeList "fig" opts lofItemTemplate lofTitle xs
 listOf opts (RawBlock fmt "\\listoftables":xs)
   | isLaTeXRawBlockFmt fmt
-  = use tblRefs >>= makeList opts lotTitle xs
+  = use tblRefs >>= makeList "tbl" opts lotItemTemplate lotTitle xs
 listOf opts (RawBlock fmt "\\listoflistings":xs)
   | isLaTeXRawBlockFmt fmt
-  = use lstRefs >>= makeList opts lolTitle xs
+  = use lstRefs >>= makeList "lst" opts lolItemTemplate lolTitle xs
 listOf _ x = return x
 
-makeList :: Options -> (Options -> [Block]) -> [Block] -> M.Map T.Text RefRec -> WS [Block]
-makeList opts titlef xs refs
-  = return $
-      titlef opts ++
-      (if chaptersDepth opts > 0
-        then Div ("", ["list"], []) (itemChap `map` refsSorted)
-        else OrderedList style (item `map` refsSorted))
-      : xs
+makeList
+  :: T.Text
+  -> Options
+  -> (Options
+  -> BlockTemplate)
+  -> (Options
+  -> [Block])
+  -> [Block]
+  -> M.Map T.Text RefRec
+  -> WS [Block]
+makeList pfx o tf titlef xs refs =
+  pure $ titlef o <> (Div ("", ["list", "list-of-" <> pfx], []) items : xs)
   where
+    items = fromMaybe items'$ pure <$> mergeList Nothing [] items'
+    items' = concatMap (itemChap . snd) refsSorted
+    mergeList Nothing acc (OrderedList style item : ys) =
+      mergeList (Just $ OrderedList style) (item <> acc) ys
+    mergeList Nothing acc (BulletList item : ys) =
+      mergeList (Just BulletList) (item <> acc) ys
+    mergeList (Just cons) acc (OrderedList style item : ys)
+      | cons [] == OrderedList style [] =
+      mergeList (Just $ OrderedList style) (item <> acc) ys
+    mergeList (Just cons) acc (BulletList item : ys)
+      | cons [] == BulletList[] =
+      mergeList (Just BulletList) (item <> acc) ys
+    mergeList (Just cons) acc [] = Just $ cons $ reverse acc
+    mergeList _ _ _ = Nothing
     refsSorted = sortBy compare' $ M.toList refs
-    compare' (_,RefRec{refIndex=i}) (_,RefRec{refIndex=j}) = compare i j
-    item = (:[]) . Plain . refTitle . snd
-    itemChap = Para . uncurry ((. (Space :)) . (++)) . (numWithChap . refIndex &&& refTitle) . snd
-    numWithChap = chapPrefix (chapDelim opts)
-    style = (1,DefaultStyle,DefaultDelim)
+    compare'
+      (_,RefRec{refIndex=i, refSubfigure=si})
+      (_,RefRec{refIndex=j, refSubfigure=sj})
+      = compare (i, si) (j, sj)
+    itemChap :: RefRec -> [Block]
+    itemChap ref@RefRec{..} = applyTemplate (numWithChap ref) refTitle (tf o)
+    numWithChap :: RefRec -> [Inline]
+    numWithChap RefRec{..} = case refSubfigure of
+      Nothing ->
+        let vars = M.fromDistinctAscList
+              [ ("i", chapPrefix (chapDelim o) refIndex)
+              , ("suf", mempty)
+              , ("t", refTitle)
+              ]
+        in applyTemplate' vars $ refIndexTemplate o pfx
+      Just s ->
+        let vars = M.fromDistinctAscList
+              [ ("i", chapPrefix (chapDelim o) refIndex)
+              , ("s", chapPrefix (chapDelim o) s)
+              , ("suf", mempty)
+              , ("t", refTitle)
+              ]
+        in applyTemplate' vars $ subfigureRefIndexTemplate o
diff --git a/lib-internal/Text/Pandoc/CrossRef/Util/ModifyMeta.hs b/lib-internal/Text/Pandoc/CrossRef/Util/ModifyMeta.hs
--- a/lib-internal/Text/Pandoc/CrossRef/Util/ModifyMeta.hs
+++ b/lib-internal/Text/Pandoc/CrossRef/Util/ModifyMeta.hs
@@ -53,12 +53,13 @@
         unless (listings opts) $
           tell codelisting
         tell lolcommand
-        when (cref opts) $ do
+        when (cref opts) $ atEndPreamble $ do
           tell cleveref
           unless (listings opts) $
             tell cleverefCodelisting
         tell [ "\\makeatother" ]
       where
+        atEndPreamble = censor (\c -> "\\AtEndPreamble{%":c <> ["}"])
         subfig = [
             usepackage [] "subfig"
           , usepackage [] "caption"
@@ -108,7 +109,8 @@
             , "}"
             ]
           | otherwise = ["\\newcommand*\\listoflistings{\\listof{codelisting}{" <> metaString' "lolTitle" <> "}}"]
-        cleveref = [ usepackage cleverefOpts "cleveref" ]
+        cleveref =
+          [ usepackage cleverefOpts "cleveref" ]
           <> crefname "figure" figPrefix
           <> crefname "table" tblPrefix
           <> crefname "equation" eqnPrefix
diff --git a/lib-internal/Text/Pandoc/CrossRef/Util/Options.hs b/lib-internal/Text/Pandoc/CrossRef/Util/Options.hs
--- a/lib-internal/Text/Pandoc/CrossRef/Util/Options.hs
+++ b/lib-internal/Text/Pandoc/CrossRef/Util/Options.hs
@@ -40,6 +40,9 @@
                        , tblPrefixTemplate :: Template
                        , lstPrefixTemplate :: Template
                        , secPrefixTemplate :: Template
+                       , lofItemTemplate :: BlockTemplate
+                       , lotItemTemplate :: BlockTemplate
+                       , lolItemTemplate :: BlockTemplate
                        , eqnBlockTemplate :: BlockTemplate
                        , eqnBlockInlineMath :: Bool
                        , eqnIndexTemplate :: Template
diff --git a/lib-internal/Text/Pandoc/CrossRef/Util/Settings.hs b/lib-internal/Text/Pandoc/CrossRef/Util/Settings.hs
--- a/lib-internal/Text/Pandoc/CrossRef/Util/Settings.hs
+++ b/lib-internal/Text/Pandoc/CrossRef/Util/Settings.hs
@@ -115,6 +115,13 @@
   <> figureTemplate (var "figureTitle" <> space <> var "i" <> var "titleDelim" <> space <> var "t")
   <> tableTemplate (var "tableTitle" <> space <> var "i" <> var "titleDelim" <> space <> var "t")
   <> listingTemplate (var "listingTitle" <> space <> var "i" <> var "titleDelim" <> space <> var "t")
+  <> lofItemTemplate (plain $ var "lofItemTitle" <> var "i" <> var "listItemTitleDelim" <> space <> var "t" <> linebreak)
+  <> lotItemTemplate (plain $ var "lotItemTitle" <> var "i" <> var "listItemTitleDelim" <> space <> var "t" <> linebreak)
+  <> lolItemTemplate (plain $ var "lolItemTitle" <> var "i" <> var "listItemTitleDelim" <> space <> var "t" <> linebreak)
+  <> lofItemTitle (mempty :: Inlines)
+  <> lotItemTitle (mempty :: Inlines)
+  <> lolItemTitle (mempty :: Inlines)
+  <> listItemTitleDelim (str ".")
   <> crossrefYaml (MetaString "pandoc-crossref.yaml")
   <> subfigureChildTemplate (var "i")
   <> subfigureTemplate (var "figureTitle" <> space <> var "i" <> var "titleDelim" <> space <> var "t" <> str "." <> space <> var "ccs")
diff --git a/lib-internal/Text/Pandoc/CrossRef/Util/Settings/Gen.hs b/lib-internal/Text/Pandoc/CrossRef/Util/Settings/Gen.hs
--- a/lib-internal/Text/Pandoc/CrossRef/Util/Settings/Gen.hs
+++ b/lib-internal/Text/Pandoc/CrossRef/Util/Settings/Gen.hs
@@ -44,6 +44,10 @@
   , "lstLabels"
   , "secLabels"
   , "secHeaderDelim"
+  , "listItemTitleDelim"
+  , "lofItemTitle"
+  , "lotItemTitle"
+  , "lolItemTitle"
   ]
 
 getOptions :: Meta -> Maybe Format -> Options
diff --git a/lib-internal/Text/Pandoc/CrossRef/Util/Template.hs b/lib-internal/Text/Pandoc/CrossRef/Util/Template.hs
--- a/lib-internal/Text/Pandoc/CrossRef/Util/Template.hs
+++ b/lib-internal/Text/Pandoc/CrossRef/Util/Template.hs
@@ -85,6 +85,6 @@
 internalVars :: M.Map T.Text [Inline] -> T.Text -> Maybe MetaValue
 internalVars vars x = MetaInlines <$> M.lookup x vars
 
-applyTemplate :: MkTemplate a b =>[Inline] -> [Inline] -> b -> [a]
+applyTemplate :: MkTemplate a b => [Inline] -> [Inline] -> b -> [a]
 applyTemplate i t =
   applyTemplate' (M.fromDistinctAscList [("i", i), ("t", t)])
diff --git a/pandoc-crossref.cabal b/pandoc-crossref.cabal
--- a/pandoc-crossref.cabal
+++ b/pandoc-crossref.cabal
@@ -3,11 +3,9 @@
 -- This file has been generated from package.yaml by hpack version 0.34.4.
 --
 -- see: https://github.com/sol/hpack
---
--- hash: 284171f1ac9b309f9076827741d8057c87cc91d18ea79b096192c8f9345ae485
 
 name:           pandoc-crossref
-version:        0.3.13.0
+version:        0.3.14.0
 synopsis:       Pandoc filter for cross-references
 description:    pandoc-crossref is a pandoc filter for numbering figures, equations, tables and cross-references to them.
 category:       Text
@@ -38,6 +36,9 @@
     test/m2m/eqnBlockTemplate/expect.md
     test/m2m/eqnBlockTemplate/expect.tex
     test/m2m/eqnBlockTemplate/input.md
+    test/m2m/eqnInlineTemplate/expect.md
+    test/m2m/eqnInlineTemplate/expect.tex
+    test/m2m/eqnInlineTemplate/input.md
     test/m2m/equationNumberLaTeX/expect.md
     test/m2m/equationNumberLaTeX/expect.tex
     test/m2m/equationNumberLaTeX/input.md
@@ -68,6 +69,18 @@
     test/m2m/listings-code-block-caption-278/expect.md
     test/m2m/listings-code-block-caption-278/expect.tex
     test/m2m/listings-code-block-caption-278/input.md
+    test/m2m/listOfTemplates-buillet-list/expect.md
+    test/m2m/listOfTemplates-buillet-list/expect.tex
+    test/m2m/listOfTemplates-buillet-list/input.md
+    test/m2m/listOfTemplates-ord-list/expect.md
+    test/m2m/listOfTemplates-ord-list/expect.tex
+    test/m2m/listOfTemplates-ord-list/input.md
+    test/m2m/listOfTemplates/expect.md
+    test/m2m/listOfTemplates/expect.tex
+    test/m2m/listOfTemplates/input.md
+    test/m2m/loxItemTitle/expect.md
+    test/m2m/loxItemTitle/expect.tex
+    test/m2m/loxItemTitle/input.md
     test/m2m/multiple-eqn-same-para/expect.md
     test/m2m/multiple-eqn-same-para/expect.tex
     test/m2m/multiple-eqn-same-para/input.md
@@ -113,11 +126,11 @@
   ghc-options: -Wall
   build-depends:
       base >=4.11 && <5
-    , mtl >=1.1 && <2.3
-    , pandoc ==2.18.*
+    , mtl >=1.1 && <2.4
+    , pandoc >=2.18 && <2.20
     , pandoc-crossref-internal
     , pandoc-types >=1.22.2 && <1.23
-    , text >=1.2.2 && <1.3
+    , text >=1.2.2 && <2.1
   default-language: Haskell2010
 
 library pandoc-crossref-internal
@@ -150,11 +163,11 @@
     , microlens-mtl >=0.2.0.1 && <0.3.0.0
     , microlens-th >=0.4.3.10 && <0.5.0.0
     , mtl >=1.1 && <2.3
-    , pandoc ==2.18.*
+    , pandoc >=2.18 && <2.20
     , pandoc-types >=1.22.2 && <1.23
     , syb >=0.4 && <0.8
     , template-haskell >=2.7.0.0 && <3.0.0.0
-    , text >=1.2.2 && <1.3
+    , text >=1.2.2 && <2.1
     , utility-ht >=0.0.11 && <0.1.0
   default-language: Haskell2010
 
@@ -170,13 +183,13 @@
     , deepseq ==1.4.*
     , gitrev >=1.3.1 && <1.4
     , open-browser ==0.2.*
-    , optparse-applicative >=0.13 && <0.17
-    , pandoc ==2.18.*
+    , optparse-applicative >=0.13 && <0.18
+    , pandoc >=2.18 && <2.20
     , pandoc-crossref
     , pandoc-types >=1.22.2 && <1.23
     , template-haskell >=2.7.0.0 && <3.0.0.0
     , temporary >=1.2 && <1.4
-    , text >=1.2.2 && <1.3
+    , text >=1.2.2 && <2.1
   default-language: Haskell2010
 
 test-suite test-integrative
@@ -190,10 +203,10 @@
     , directory >=1 && <1.4
     , filepath >=1.1 && <1.5
     , hspec >=2.4.4 && <3
-    , pandoc ==2.18.*
+    , pandoc >=2.18 && <2.20
     , pandoc-crossref
     , pandoc-types >=1.22.2 && <1.23
-    , text >=1.2.2 && <1.3
+    , text >=1.2.2 && <2.1
   if flag(enable_flaky_tests)
     cpp-options: -DFLAKY
   default-language: Haskell2010
@@ -216,11 +229,11 @@
     , hspec >=2.4.4 && <3
     , microlens >=0.4.12.0 && <0.5.0.0
     , mtl >=1.1 && <2.3
-    , pandoc ==2.18.*
+    , pandoc >=2.18 && <2.20
     , pandoc-crossref
     , pandoc-crossref-internal
     , pandoc-types >=1.22.2 && <1.23
-    , text >=1.2.2 && <1.3
+    , text >=1.2.2 && <2.1
   if flag(enable_flaky_tests)
     cpp-options: -DFLAKY
   default-language: Haskell2010
@@ -235,9 +248,9 @@
   ghc-options: -Wall -fno-warn-unused-do-bind -threaded
   build-depends:
       base >=4.11 && <5
-    , criterion >=1.5.9.0 && <1.6
-    , pandoc ==2.18.*
+    , criterion >=1.5.9.0 && <1.7
+    , pandoc >=2.18 && <2.20
     , pandoc-crossref
     , pandoc-types >=1.22.2 && <1.23
-    , text >=1.2.2 && <1.3
+    , text >=1.2.2 && <2.1
   default-language: Haskell2010
diff --git a/test/demo-chapters.inc b/test/demo-chapters.inc
--- a/test/demo-chapters.inc
+++ b/test/demo-chapters.inc
@@ -965,61 +965,112 @@
       ( "list-of-figures" , [] , [] )
       [ Str "List" , Space , Str "of" , Space , Str "Figures" ]
   , Div
-      ( "" , [ "list" ] , [] )
-      [ Para [ Str "1" , Space , Str "A" , Space , Str "figure" ]
-      , Para
-          [ Str "1.1" , Space , Str "First" , Space , Str "figure" ]
-      , Para
-          [ Str "1.2" , Space , Str "Second" , Space , Str "figure" ]
-      , Para
-          [ Str "1.3" , Space , Str "Third" , Space , Str "figure" ]
-      , Para
-          [ Str "1.4" , Space , Str "Subfigure" , Space , Str "a" ]
-      , Para
-          [ Str "1.4" , Space , Str "Subfigure" , Space , Str "b" ]
-      , Para
-          [ Str "1.4"
+      ( "" , [ "list" , "list-of-fig" ] , [] )
+      [ Plain
+          [ Str "1."
           , Space
+          , Str "A"
+          , Space
+          , Str "figure"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "1.1."
+          , Space
+          , Str "First"
+          , Space
+          , Str "figure"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "1.2."
+          , Space
+          , Str "Second"
+          , Space
+          , Str "figure"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "1.3."
+          , Space
+          , Str "Third"
+          , Space
+          , Str "figure"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "1.4."
+          , Space
           , Str "Subfigures"
           , Space
           , Str "caption"
+          , LineBreak
           ]
+      , Plain
+          [ Str "1.4"
+          , Space
+          , Str "(a)."
+          , Space
+          , Str "Subfigure"
+          , Space
+          , Str "a"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "1.4"
+          , Space
+          , Str "(b)."
+          , Space
+          , Str "Subfigure"
+          , Space
+          , Str "b"
+          , LineBreak
+          ]
       ]
   , Header
       2
       ( "list-of-tables" , [] , [] )
       [ Str "List" , Space , Str "of" , Space , Str "Tables" ]
   , Div
-      ( "" , [ "list" ] , [] )
-      [ Para
-          [ Str "3.1" , Space , Str "Table" , Space , Str "example" ]
+      ( "" , [ "list" , "list-of-tbl" ] , [] )
+      [ Plain
+          [ Str "3.1."
+          , Space
+          , Str "Table"
+          , Space
+          , Str "example"
+          , LineBreak
+          ]
       ]
   , Header
-      1
-      ( "" , [] , [] )
+      2
+      ( "list-of-listings" , [] , [] )
       [ Str "List" , Space , Str "of" , Space , Str "Listings" ]
   , Div
-      ( "" , [ "list" ] , [] )
-      [ Para
-          [ Str "4.1"
+      ( "" , [ "list" , "list-of-lst" ] , [] )
+      [ Plain
+          [ Str "4.1."
           , Space
           , Str "Listing"
           , Space
           , Str "caption"
+          , LineBreak
           ]
-      , Para
-          [ Str "4.2"
+      , Plain
+          [ Str "4.2."
           , Space
           , Str "Listing"
           , Space
           , Str "caption"
+          , LineBreak
           ]
-      , Para
-          [ Str "4.3"
+      , Plain
+          [ Str "4.3."
           , Space
           , Str "Listing"
           , Space
           , Str "caption"
+          , LineBreak
           ]
       ]
   , Header
diff --git a/test/demo.inc b/test/demo.inc
--- a/test/demo.inc
+++ b/test/demo.inc
@@ -963,32 +963,114 @@
       2
       ( "list-of-figures" , [] , [] )
       [ Str "List" , Space , Str "of" , Space , Str "Figures" ]
-  , OrderedList
-      ( 1 , DefaultStyle , DefaultDelim )
-      [ [ Plain [ Str "A" , Space , Str "figure" ] ]
-      , [ Plain [ Str "First" , Space , Str "figure" ] ]
-      , [ Plain [ Str "Second" , Space , Str "figure" ] ]
-      , [ Plain [ Str "Third" , Space , Str "figure" ] ]
-      , [ Plain [ Str "Subfigure" , Space , Str "a" ] ]
-      , [ Plain [ Str "Subfigure" , Space , Str "b" ] ]
-      , [ Plain [ Str "Subfigures" , Space , Str "caption" ] ]
+  , Div
+      ( "" , [ "list" , "list-of-fig" ] , [] )
+      [ Plain
+          [ Str "1."
+          , Space
+          , Str "A"
+          , Space
+          , Str "figure"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "2."
+          , Space
+          , Str "First"
+          , Space
+          , Str "figure"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "3."
+          , Space
+          , Str "Second"
+          , Space
+          , Str "figure"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "4."
+          , Space
+          , Str "Third"
+          , Space
+          , Str "figure"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "5."
+          , Space
+          , Str "Subfigures"
+          , Space
+          , Str "caption"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "5"
+          , Space
+          , Str "(a)."
+          , Space
+          , Str "Subfigure"
+          , Space
+          , Str "a"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "5"
+          , Space
+          , Str "(b)."
+          , Space
+          , Str "Subfigure"
+          , Space
+          , Str "b"
+          , LineBreak
+          ]
       ]
   , Header
       2
       ( "list-of-tables" , [] , [] )
       [ Str "List" , Space , Str "of" , Space , Str "Tables" ]
-  , OrderedList
-      ( 1 , DefaultStyle , DefaultDelim )
-      [ [ Plain [ Str "Table" , Space , Str "example" ] ] ]
+  , Div
+      ( "" , [ "list" , "list-of-tbl" ] , [] )
+      [ Plain
+          [ Str "1."
+          , Space
+          , Str "Table"
+          , Space
+          , Str "example"
+          , LineBreak
+          ]
+      ]
   , Header
-      1
-      ( "" , [] , [] )
+      2
+      ( "list-of-listings" , [] , [] )
       [ Str "List" , Space , Str "of" , Space , Str "Listings" ]
-  , OrderedList
-      ( 1 , DefaultStyle , DefaultDelim )
-      [ [ Plain [ Str "Listing" , Space , Str "caption" ] ]
-      , [ Plain [ Str "Listing" , Space , Str "caption" ] ]
-      , [ Plain [ Str "Listing" , Space , Str "caption" ] ]
+  , Div
+      ( "" , [ "list" , "list-of-lst" ] , [] )
+      [ Plain
+          [ Str "1."
+          , Space
+          , Str "Listing"
+          , Space
+          , Str "caption"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "2."
+          , Space
+          , Str "Listing"
+          , Space
+          , Str "caption"
+          , LineBreak
+          ]
+      , Plain
+          [ Str "3."
+          , Space
+          , Str "Listing"
+          , Space
+          , Str "caption"
+          , LineBreak
+          ]
       ]
   , Header
       1
diff --git a/test/m2m/eqnInlineTemplate/expect.md b/test/m2m/eqnInlineTemplate/expect.md
new file mode 100644
--- /dev/null
+++ b/test/m2m/eqnInlineTemplate/expect.md
@@ -0,0 +1,1 @@
+[$$\begin{array}{lr} \int_0^x e^x dx & (1) \end{array}$$]{#eq:1}
diff --git a/test/m2m/eqnInlineTemplate/expect.tex b/test/m2m/eqnInlineTemplate/expect.tex
new file mode 100644
--- /dev/null
+++ b/test/m2m/eqnInlineTemplate/expect.tex
@@ -0,0 +1,1 @@
+\begin{equation}\protect\hypertarget{eq:1}{}{\int_0^x e^x dx}\label{eq:1}\end{equation}
diff --git a/test/m2m/eqnInlineTemplate/input.md b/test/m2m/eqnInlineTemplate/input.md
new file mode 100644
--- /dev/null
+++ b/test/m2m/eqnInlineTemplate/input.md
@@ -0,0 +1,8 @@
+---
+eqnInlineTemplate: |
+  \\begin{array}{lr}
+  $$e$$ & $$i$$
+  \\end{array}
+---
+
+$$\int_0^x e^x dx$${#eq:1}
diff --git a/test/m2m/listOfTemplates-buillet-list/expect.md b/test/m2m/listOfTemplates-buillet-list/expect.md
new file mode 100644
--- /dev/null
+++ b/test/m2m/listOfTemplates-buillet-list/expect.md
@@ -0,0 +1,31 @@
+![Figure 1: 1](fig1.png){#fig:1}
+
+![Figure 2: 2](fig2.png){#fig:2}
+
+![Figure 3: 3](fig3.png){#fig:3}
+
+![Figure 4: 4](fig4.png){#fig:4}
+
+![Figure 5: 5](fig5.png){#fig:5}
+
+![Figure 6: 6](fig6.png){#fig:6}
+
+![Figure 7: 7](fig7.png){#fig:7}
+
+![Figure 8: 8](fig8.png){#fig:8}
+
+![Figure 9: 9](fig9.png){#fig:9}
+
+# List of Figures
+
+::: {.list .list-of-fig}
+-   1: 1
+-   2: 2
+-   3: 3
+-   4: 4
+-   5: 5
+-   6: 6
+-   7: 7
+-   8: 8
+-   9: 9
+:::
diff --git a/test/m2m/listOfTemplates-buillet-list/expect.tex b/test/m2m/listOfTemplates-buillet-list/expect.tex
new file mode 100644
--- /dev/null
+++ b/test/m2m/listOfTemplates-buillet-list/expect.tex
@@ -0,0 +1,73 @@
+\begin{figure}
+\hypertarget{fig:1}{%
+\centering
+\includegraphics{fig1.png}
+\caption{1}\label{fig:1}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:2}{%
+\centering
+\includegraphics{fig2.png}
+\caption{2}\label{fig:2}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:3}{%
+\centering
+\includegraphics{fig3.png}
+\caption{3}\label{fig:3}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:4}{%
+\centering
+\includegraphics{fig4.png}
+\caption{4}\label{fig:4}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:5}{%
+\centering
+\includegraphics{fig5.png}
+\caption{5}\label{fig:5}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:6}{%
+\centering
+\includegraphics{fig6.png}
+\caption{6}\label{fig:6}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:7}{%
+\centering
+\includegraphics{fig7.png}
+\caption{7}\label{fig:7}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:8}{%
+\centering
+\includegraphics{fig8.png}
+\caption{8}\label{fig:8}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:9}{%
+\centering
+\includegraphics{fig9.png}
+\caption{9}\label{fig:9}
+}
+\end{figure}
+
+\listoffigures
diff --git a/test/m2m/listOfTemplates-buillet-list/input.md b/test/m2m/listOfTemplates-buillet-list/input.md
new file mode 100644
--- /dev/null
+++ b/test/m2m/listOfTemplates-buillet-list/input.md
@@ -0,0 +1,25 @@
+---
+lofItemTemplate: |
+  - $$i$$: $$t$$
+---
+
+![1](fig1.png){#fig:1}
+
+![2](fig2.png){#fig:2}
+
+![3](fig3.png){#fig:3}
+
+![4](fig4.png){#fig:4}
+
+![5](fig5.png){#fig:5}
+
+![6](fig6.png){#fig:6}
+
+![7](fig7.png){#fig:7}
+
+![8](fig8.png){#fig:8}
+
+![9](fig9.png){#fig:9}
+
+
+\listoffigures
diff --git a/test/m2m/listOfTemplates-ord-list/expect.md b/test/m2m/listOfTemplates-ord-list/expect.md
new file mode 100644
--- /dev/null
+++ b/test/m2m/listOfTemplates-ord-list/expect.md
@@ -0,0 +1,31 @@
+![Figure 1: 1](fig1.png){#fig:1}
+
+![Figure 2: 2](fig2.png){#fig:2}
+
+![Figure 3: 3](fig3.png){#fig:3}
+
+![Figure 4: 4](fig4.png){#fig:4}
+
+![Figure 5: 5](fig5.png){#fig:5}
+
+![Figure 6: 6](fig6.png){#fig:6}
+
+![Figure 7: 7](fig7.png){#fig:7}
+
+![Figure 8: 8](fig8.png){#fig:8}
+
+![Figure 9: 9](fig9.png){#fig:9}
+
+# List of Figures
+
+::: {.list .list-of-fig}
+1.  1
+2.  2
+3.  3
+4.  4
+5.  5
+6.  6
+7.  7
+8.  8
+9.  9
+:::
diff --git a/test/m2m/listOfTemplates-ord-list/expect.tex b/test/m2m/listOfTemplates-ord-list/expect.tex
new file mode 100644
--- /dev/null
+++ b/test/m2m/listOfTemplates-ord-list/expect.tex
@@ -0,0 +1,73 @@
+\begin{figure}
+\hypertarget{fig:1}{%
+\centering
+\includegraphics{fig1.png}
+\caption{1}\label{fig:1}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:2}{%
+\centering
+\includegraphics{fig2.png}
+\caption{2}\label{fig:2}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:3}{%
+\centering
+\includegraphics{fig3.png}
+\caption{3}\label{fig:3}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:4}{%
+\centering
+\includegraphics{fig4.png}
+\caption{4}\label{fig:4}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:5}{%
+\centering
+\includegraphics{fig5.png}
+\caption{5}\label{fig:5}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:6}{%
+\centering
+\includegraphics{fig6.png}
+\caption{6}\label{fig:6}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:7}{%
+\centering
+\includegraphics{fig7.png}
+\caption{7}\label{fig:7}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:8}{%
+\centering
+\includegraphics{fig8.png}
+\caption{8}\label{fig:8}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:9}{%
+\centering
+\includegraphics{fig9.png}
+\caption{9}\label{fig:9}
+}
+\end{figure}
+
+\listoffigures
diff --git a/test/m2m/listOfTemplates-ord-list/input.md b/test/m2m/listOfTemplates-ord-list/input.md
new file mode 100644
--- /dev/null
+++ b/test/m2m/listOfTemplates-ord-list/input.md
@@ -0,0 +1,25 @@
+---
+lofItemTemplate: |
+  1. $$t$$
+---
+
+![1](fig1.png){#fig:1}
+
+![2](fig2.png){#fig:2}
+
+![3](fig3.png){#fig:3}
+
+![4](fig4.png){#fig:4}
+
+![5](fig5.png){#fig:5}
+
+![6](fig6.png){#fig:6}
+
+![7](fig7.png){#fig:7}
+
+![8](fig8.png){#fig:8}
+
+![9](fig9.png){#fig:9}
+
+
+\listoffigures
diff --git a/test/m2m/listOfTemplates/expect.md b/test/m2m/listOfTemplates/expect.md
new file mode 100644
--- /dev/null
+++ b/test/m2m/listOfTemplates/expect.md
@@ -0,0 +1,114 @@
+![Figure 1: 1](fig1.png){#fig:1}
+
+![Figure 2: 2](fig2.png){#fig:2}
+
+![Figure 3: 3](fig3.png){#fig:3}
+
+![Figure 4: 4](fig4.png){#fig:4}
+
+![Figure 5: 5](fig5.png){#fig:5}
+
+![Figure 6: 6](fig6.png){#fig:6}
+
+![Figure 7: 7](fig7.png){#fig:7}
+
+![Figure 8: 8](fig8.png){#fig:8}
+
+![Figure 9: 9](fig9.png){#fig:9}
+
+::: {#lst:code1 .listing .haskell}
+Listing 1: Listing caption 1
+
+``` haskell
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+:::
+
+::: {#lst:code2 .listing .haskell}
+Listing 2: Listing caption 2
+
+``` haskell
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+:::
+
+::: {#lst:code3 .listing .haskell}
+Listing 3: Listing caption 3
+
+``` haskell
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+:::
+
+::: {#lst:code4 .listing .haskell}
+Listing 4: Listing caption 4
+
+``` haskell
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+:::
+
+------------------------------------------------------------------------
+
+::: {#tbl:mytable}
+  a   b   c
+  --- --- ---
+  1   2   3
+  4   5   6
+
+  : Table 1: My table
+:::
+
+::: {#tbl:1}
+  a   b
+  --- ---
+  1   2
+
+  : Table 2: Table
+:::
+
+# List of Figures
+
+::: {.list .list-of-fig}
+Figure 1. 1
+
+Figure 2. 2
+
+Figure 3. 3
+
+Figure 4. 4
+
+Figure 5. 5
+
+Figure 6. 6
+
+Figure 7. 7
+
+Figure 8. 8
+
+Figure 9. 9
+:::
+
+# List of Tables
+
+::: {.list .list-of-tbl}
+Title 1. My table
+
+Title 2. Table
+:::
+
+# List of Listings
+
+::: {.list .list-of-lst}
+Listing 1. Listing caption 1
+
+Listing 2. Listing caption 2
+
+Listing 3. Listing caption 3
+
+Listing 4. Listing caption 4
+:::
diff --git a/test/m2m/listOfTemplates/expect.tex b/test/m2m/listOfTemplates/expect.tex
new file mode 100644
--- /dev/null
+++ b/test/m2m/listOfTemplates/expect.tex
@@ -0,0 +1,170 @@
+\begin{figure}
+\hypertarget{fig:1}{%
+\centering
+\includegraphics{fig1.png}
+\caption{1}\label{fig:1}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:2}{%
+\centering
+\includegraphics{fig2.png}
+\caption{2}\label{fig:2}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:3}{%
+\centering
+\includegraphics{fig3.png}
+\caption{3}\label{fig:3}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:4}{%
+\centering
+\includegraphics{fig4.png}
+\caption{4}\label{fig:4}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:5}{%
+\centering
+\includegraphics{fig5.png}
+\caption{5}\label{fig:5}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:6}{%
+\centering
+\includegraphics{fig6.png}
+\caption{6}\label{fig:6}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:7}{%
+\centering
+\includegraphics{fig7.png}
+\caption{7}\label{fig:7}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:8}{%
+\centering
+\includegraphics{fig8.png}
+\caption{8}\label{fig:8}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:9}{%
+\centering
+\includegraphics{fig9.png}
+\caption{9}\label{fig:9}
+}
+\end{figure}
+
+\begin{codelisting}
+
+\caption{Listing caption 1}
+
+\hypertarget{lst:code1}{%
+\label{lst:code1}}%
+\begin{Shaded}
+\begin{Highlighting}[]
+\OtherTok{main ::} \DataTypeTok{IO}\NormalTok{ ()}
+\NormalTok{main }\OtherTok{=} \FunctionTok{putStrLn} \StringTok{"Hello World!"}
+\end{Highlighting}
+\end{Shaded}
+
+\end{codelisting}
+
+\begin{codelisting}
+
+\caption{Listing caption 2}
+
+\hypertarget{lst:code2}{%
+\label{lst:code2}}%
+\begin{Shaded}
+\begin{Highlighting}[]
+\OtherTok{main ::} \DataTypeTok{IO}\NormalTok{ ()}
+\NormalTok{main }\OtherTok{=} \FunctionTok{putStrLn} \StringTok{"Hello World!"}
+\end{Highlighting}
+\end{Shaded}
+
+\end{codelisting}
+
+\begin{codelisting}
+
+\caption{Listing caption 3}
+
+\hypertarget{lst:code3}{%
+\label{lst:code3}}%
+\begin{Shaded}
+\begin{Highlighting}[]
+\OtherTok{main ::} \DataTypeTok{IO}\NormalTok{ ()}
+\NormalTok{main }\OtherTok{=} \FunctionTok{putStrLn} \StringTok{"Hello World!"}
+\end{Highlighting}
+\end{Shaded}
+
+\end{codelisting}
+
+\begin{codelisting}
+
+\caption{Listing caption 4}
+
+\hypertarget{lst:code4}{%
+\label{lst:code4}}%
+\begin{Shaded}
+\begin{Highlighting}[]
+\OtherTok{main ::} \DataTypeTok{IO}\NormalTok{ ()}
+\NormalTok{main }\OtherTok{=} \FunctionTok{putStrLn} \StringTok{"Hello World!"}
+\end{Highlighting}
+\end{Shaded}
+
+\end{codelisting}
+
+\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center}
+
+\hypertarget{tbl:mytable}{}
+\begin{longtable}[]{@{}lll@{}}
+\caption{\label{tbl:mytable}My table}\tabularnewline
+\toprule()
+a & b & c \\
+\midrule()
+\endfirsthead
+\toprule()
+a & b & c \\
+\midrule()
+\endhead
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+\bottomrule()
+\end{longtable}
+
+\hypertarget{tbl:1}{}
+\begin{longtable}[]{@{}ll@{}}
+\caption{\label{tbl:1}Table}\tabularnewline
+\toprule()
+a & b \\
+\midrule()
+\endfirsthead
+\toprule()
+a & b \\
+\midrule()
+\endhead
+1 & 2 \\
+\bottomrule()
+\end{longtable}
+
+\listoffigures
+
+\listoftables
+
+\listoflistings
diff --git a/test/m2m/listOfTemplates/input.md b/test/m2m/listOfTemplates/input.md
new file mode 100644
--- /dev/null
+++ b/test/m2m/listOfTemplates/input.md
@@ -0,0 +1,71 @@
+---
+lofItemTemplate: "Figure $$i$$. $$t$$"
+lotItemTemplate: "Title $$i$$. $$t$$"
+lolItemTemplate: "Listing $$i$$. $$t$$"
+codeBlockCaptions: true
+---
+
+![1](fig1.png){#fig:1}
+
+![2](fig2.png){#fig:2}
+
+![3](fig3.png){#fig:3}
+
+![4](fig4.png){#fig:4}
+
+![5](fig5.png){#fig:5}
+
+![6](fig6.png){#fig:6}
+
+![7](fig7.png){#fig:7}
+
+![8](fig8.png){#fig:8}
+
+![9](fig9.png){#fig:9}
+
+```haskell
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+: Listing caption 1 {#lst:code1}
+
+```haskell
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+
+: Listing caption 2 {#lst:code2}
+
+```{#lst:code3 .haskell}
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+: Listing caption 3
+
+```{#lst:code4 .haskell}
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+
+: Listing caption 4
+
+***
+
+a   b   c
+--- --- ---
+1   2   3
+4   5   6
+
+: My table {#tbl:mytable}
+
+| a | b |
+|---|---|
+| 1 | 2 |
+
+: Table {#tbl:1}
+
+\listoffigures
+
+\listoftables
+
+\listoflistings
diff --git a/test/m2m/loxItemTitle/expect.md b/test/m2m/loxItemTitle/expect.md
new file mode 100644
--- /dev/null
+++ b/test/m2m/loxItemTitle/expect.md
@@ -0,0 +1,114 @@
+![Figure 1: 1](fig1.png){#fig:1}
+
+![Figure 2: 2](fig2.png){#fig:2}
+
+![Figure 3: 3](fig3.png){#fig:3}
+
+![Figure 4: 4](fig4.png){#fig:4}
+
+![Figure 5: 5](fig5.png){#fig:5}
+
+![Figure 6: 6](fig6.png){#fig:6}
+
+![Figure 7: 7](fig7.png){#fig:7}
+
+![Figure 8: 8](fig8.png){#fig:8}
+
+![Figure 9: 9](fig9.png){#fig:9}
+
+::: {#lst:code1 .listing .haskell}
+Listing 1: Listing caption 1
+
+``` haskell
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+:::
+
+::: {#lst:code2 .listing .haskell}
+Listing 2: Listing caption 2
+
+``` haskell
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+:::
+
+::: {#lst:code3 .listing .haskell}
+Listing 3: Listing caption 3
+
+``` haskell
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+:::
+
+::: {#lst:code4 .listing .haskell}
+Listing 4: Listing caption 4
+
+``` haskell
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+:::
+
+------------------------------------------------------------------------
+
+::: {#tbl:mytable}
+  a   b   c
+  --- --- ---
+  1   2   3
+  4   5   6
+
+  : Table 1: My table
+:::
+
+::: {#tbl:1}
+  a   b
+  --- ---
+  1   2
+
+  : Table 2: Table
+:::
+
+# List of Figures
+
+::: {.list .list-of-fig}
+Figure 1. 1\
+
+Figure 2. 2\
+
+Figure 3. 3\
+
+Figure 4. 4\
+
+Figure 5. 5\
+
+Figure 6. 6\
+
+Figure 7. 7\
+
+Figure 8. 8\
+
+Figure 9. 9\
+:::
+
+# List of Tables
+
+::: {.list .list-of-tbl}
+Title 1. My table\
+
+Title 2. Table\
+:::
+
+# List of Listings
+
+::: {.list .list-of-lst}
+Listing 1: Listing caption 1\
+
+Listing 2: Listing caption 2\
+
+Listing 3: Listing caption 3\
+
+Listing 4: Listing caption 4\
+:::
diff --git a/test/m2m/loxItemTitle/expect.tex b/test/m2m/loxItemTitle/expect.tex
new file mode 100644
--- /dev/null
+++ b/test/m2m/loxItemTitle/expect.tex
@@ -0,0 +1,170 @@
+\begin{figure}
+\hypertarget{fig:1}{%
+\centering
+\includegraphics{fig1.png}
+\caption{1}\label{fig:1}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:2}{%
+\centering
+\includegraphics{fig2.png}
+\caption{2}\label{fig:2}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:3}{%
+\centering
+\includegraphics{fig3.png}
+\caption{3}\label{fig:3}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:4}{%
+\centering
+\includegraphics{fig4.png}
+\caption{4}\label{fig:4}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:5}{%
+\centering
+\includegraphics{fig5.png}
+\caption{5}\label{fig:5}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:6}{%
+\centering
+\includegraphics{fig6.png}
+\caption{6}\label{fig:6}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:7}{%
+\centering
+\includegraphics{fig7.png}
+\caption{7}\label{fig:7}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:8}{%
+\centering
+\includegraphics{fig8.png}
+\caption{8}\label{fig:8}
+}
+\end{figure}
+
+\begin{figure}
+\hypertarget{fig:9}{%
+\centering
+\includegraphics{fig9.png}
+\caption{9}\label{fig:9}
+}
+\end{figure}
+
+\begin{codelisting}
+
+\caption{Listing caption 1}
+
+\hypertarget{lst:code1}{%
+\label{lst:code1}}%
+\begin{Shaded}
+\begin{Highlighting}[]
+\OtherTok{main ::} \DataTypeTok{IO}\NormalTok{ ()}
+\NormalTok{main }\OtherTok{=} \FunctionTok{putStrLn} \StringTok{"Hello World!"}
+\end{Highlighting}
+\end{Shaded}
+
+\end{codelisting}
+
+\begin{codelisting}
+
+\caption{Listing caption 2}
+
+\hypertarget{lst:code2}{%
+\label{lst:code2}}%
+\begin{Shaded}
+\begin{Highlighting}[]
+\OtherTok{main ::} \DataTypeTok{IO}\NormalTok{ ()}
+\NormalTok{main }\OtherTok{=} \FunctionTok{putStrLn} \StringTok{"Hello World!"}
+\end{Highlighting}
+\end{Shaded}
+
+\end{codelisting}
+
+\begin{codelisting}
+
+\caption{Listing caption 3}
+
+\hypertarget{lst:code3}{%
+\label{lst:code3}}%
+\begin{Shaded}
+\begin{Highlighting}[]
+\OtherTok{main ::} \DataTypeTok{IO}\NormalTok{ ()}
+\NormalTok{main }\OtherTok{=} \FunctionTok{putStrLn} \StringTok{"Hello World!"}
+\end{Highlighting}
+\end{Shaded}
+
+\end{codelisting}
+
+\begin{codelisting}
+
+\caption{Listing caption 4}
+
+\hypertarget{lst:code4}{%
+\label{lst:code4}}%
+\begin{Shaded}
+\begin{Highlighting}[]
+\OtherTok{main ::} \DataTypeTok{IO}\NormalTok{ ()}
+\NormalTok{main }\OtherTok{=} \FunctionTok{putStrLn} \StringTok{"Hello World!"}
+\end{Highlighting}
+\end{Shaded}
+
+\end{codelisting}
+
+\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center}
+
+\hypertarget{tbl:mytable}{}
+\begin{longtable}[]{@{}lll@{}}
+\caption{\label{tbl:mytable}My table}\tabularnewline
+\toprule()
+a & b & c \\
+\midrule()
+\endfirsthead
+\toprule()
+a & b & c \\
+\midrule()
+\endhead
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+\bottomrule()
+\end{longtable}
+
+\hypertarget{tbl:1}{}
+\begin{longtable}[]{@{}ll@{}}
+\caption{\label{tbl:1}Table}\tabularnewline
+\toprule()
+a & b \\
+\midrule()
+\endfirsthead
+\toprule()
+a & b \\
+\midrule()
+\endhead
+1 & 2 \\
+\bottomrule()
+\end{longtable}
+
+\listoffigures
+
+\listoftables
+
+\listoflistings
diff --git a/test/m2m/loxItemTitle/input.md b/test/m2m/loxItemTitle/input.md
new file mode 100644
--- /dev/null
+++ b/test/m2m/loxItemTitle/input.md
@@ -0,0 +1,71 @@
+---
+lofItemTitle: "Figure&nbsp;"
+lotItemTitle: "Title&nbsp;"
+lolItemTemplate: "Listing&nbsp;$$i$$: $$t$$\\\n"
+codeBlockCaptions: true
+---
+
+![1](fig1.png){#fig:1}
+
+![2](fig2.png){#fig:2}
+
+![3](fig3.png){#fig:3}
+
+![4](fig4.png){#fig:4}
+
+![5](fig5.png){#fig:5}
+
+![6](fig6.png){#fig:6}
+
+![7](fig7.png){#fig:7}
+
+![8](fig8.png){#fig:8}
+
+![9](fig9.png){#fig:9}
+
+```haskell
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+: Listing caption 1 {#lst:code1}
+
+```haskell
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+
+: Listing caption 2 {#lst:code2}
+
+```{#lst:code3 .haskell}
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+: Listing caption 3
+
+```{#lst:code4 .haskell}
+main :: IO ()
+main = putStrLn "Hello World!"
+```
+
+: Listing caption 4
+
+***
+
+a   b   c
+--- --- ---
+1   2   3
+4   5   6
+
+: My table {#tbl:mytable}
+
+| a | b |
+|---|---|
+| 1 | 2 |
+
+: Table {#tbl:1}
+
+\listoffigures
+
+\listoftables
+
+\listoflistings
diff --git a/test/test-pandoc-crossref.hs b/test/test-pandoc-crossref.hs
--- a/test/test-pandoc-crossref.hs
+++ b/test/test-pandoc-crossref.hs
@@ -236,11 +236,13 @@
       it "Generates list of tables" $
         testList (rawBlock "latex" "\\listoftables")
                  (tblRefs =: M.fromList $ refRec' "tbl:1" 4 "4" <> refRec' "tbl:2" 5 "5" <> refRec' "tbl:3" 6 "6")
-                 (header 1 (text "List of Tables") <> orderedList ((plain . str . T.pack . show) `map` [4..6 :: Int]))
+                 (header 1 (text "List of Tables") <> divWith ("", ["list", "list-of-tbl"], [])
+                   (mconcat $ map (\n -> plain (str (T.pack $ show n <> ".") <> space <> str (T.pack $ show n) <> linebreak)) [4..6 :: Int]))
       it "Generates list of figures" $
         testList (rawBlock "latex" "\\listoffigures")
                  (imgRefs =: M.fromList $ refRec' "fig:1" 4 "4" <> refRec' "fig:2" 5 "5" <> refRec' "fig:3" 6 "6")
-                 (header 1 (text "List of Figures") <> orderedList ((plain . str . T.pack . show) `map` [4..6 :: Int]))
+                 (header 1 (text "List of Figures") <> divWith ("", ["list", "list-of-fig"], [])
+                   (mconcat $ map (\n -> plain (str (T.pack $ show n <> ".") <> space <> str (T.pack $ show n) <> linebreak)) [4..6 :: Int]))
 
     describe "Util.CodeBlockCaptions" $
       it "Transforms table-style codeBlock captions to codeblock divs" $ do
