diff --git a/lib/Text/Pandoc/CrossRef.hs b/lib/Text/Pandoc/CrossRef.hs
--- a/lib/Text/Pandoc/CrossRef.hs
+++ b/lib/Text/Pandoc/CrossRef.hs
@@ -83,7 +83,6 @@
 import Control.Monad.State
 import qualified Control.Monad.Reader as R
 import Text.Pandoc
-import Data.Monoid ((<>))
 
 import Text.Pandoc.CrossRef.References
 import Text.Pandoc.CrossRef.Util.Settings
diff --git a/lib/Text/Pandoc/CrossRef/References/Blocks.hs b/lib/Text/Pandoc/CrossRef/References/Blocks.hs
--- a/lib/Text/Pandoc/CrossRef/References/Blocks.hs
+++ b/lib/Text/Pandoc/CrossRef/References/Blocks.hs
@@ -25,11 +25,11 @@
 
 import Text.Pandoc.Definition
 import qualified Text.Pandoc.Builder as B
-import Text.Pandoc.Shared (stringify)
+import Text.Pandoc.Shared (stringify, blocksToInlines)
+import Text.Pandoc.Walk (walk)
 import Control.Monad.State hiding (get, modify)
 import Data.List
 import Data.Maybe
-import Data.Monoid
 import qualified Data.Map as M
 import qualified Data.Text as T
 import qualified Data.Text.Read as T
@@ -55,6 +55,17 @@
                  = everywhere (mkT splitMath)
                  | otherwise = id
 
+simpleTable :: [Alignment] -> [ColWidth] -> [[[Block]]] -> Block
+simpleTable align width bod = Table nullAttr noCaption (zip align width)
+  noTableHead [mkBody bod] noTableFoot
+  where
+  mkBody xs = TableBody nullAttr (RowHeadColumns 0) [] (map mkRow xs)
+  mkRow xs = Row nullAttr (map mkCell xs)
+  mkCell xs = Cell nullAttr AlignDefault (RowSpan 0) (ColSpan 0) xs
+  noCaption = Caption Nothing mempty
+  noTableHead = TableHead nullAttr []
+  noTableFoot = TableFoot nullAttr []
+
 replaceBlock :: Options -> Block -> WS (ReplacedResult Block)
 replaceBlock opts (Header n (label, cls, attrs) text')
   = do
@@ -139,7 +150,8 @@
               }
     toTable :: [Block] -> [Inline] -> [Block]
     toTable blks capt
-      | subfigGrid opts = [Table [] align widths [] $ map blkToRow blks, mkCaption opts "Image Caption" capt]
+      | subfigGrid opts = [ simpleTable align (map ColWidth widths) (map blkToRow blks)
+                          , mkCaption opts "Image Caption" capt]
       | otherwise = blks <> [mkCaption opts "Image Caption" capt]
       where
         align | Para ils:_ <- blks = replicate (length $ mapMaybe getWidth ils) AlignCenter
@@ -169,7 +181,7 @@
         inlToCell (Image (id', cs, as) txt tgt)  = Just [Para [Image (id', cs, setW as) txt tgt]]
         inlToCell _ = Nothing
         setW as = ("width", "100%"):filter ((/="width") . fst) as
-replaceBlock opts (Div divOps@(label,_,attrs) [Table title align widths header cells])
+replaceBlock opts (Div divOps@(label,_,attrs) [Table tattr (Caption short (btitle:rest)) colspec header cells foot])
   | not $ null title
   , "tbl:" `T.isPrefixOf` label
   = do
@@ -179,7 +191,22 @@
               f | isLatexFormat f ->
                 RawInline (Format "latex") (mkLaTeXLabel label) : title
               _  -> applyTemplate idxStr title $ tableTemplate opts
-    replaceNoRecurse $ Div divOps [Table title' align widths header cells]
+        caption' = Caption short (walkReplaceInlines title' title btitle:rest)
+    replaceNoRecurse $ Div divOps [Table tattr caption' colspec header cells foot]
+  where title = blocksToInlines [btitle]
+replaceBlock opts (Table divOps@(label,_,attrs) (Caption short (btitle:rest)) colspec header cells foot)
+  | not $ null title
+  , "tbl:" `T.isPrefixOf` label
+  = do
+    idxStr <- replaceAttr opts (Right label) (lookup "label" attrs) title tblRefs
+    let title' =
+          case outFormat opts of
+              f | isLatexFormat f ->
+                RawInline (Format "latex") (mkLaTeXLabel label) : title
+              _  -> applyTemplate idxStr title $ tableTemplate opts
+        caption' = Caption short (walkReplaceInlines title' title btitle:rest)
+    replaceNoRecurse $ Table divOps caption' colspec header cells foot
+  where title = blocksToInlines [btitle]
 replaceBlock opts cb@(CodeBlock (label, classes, attrs) code)
   | not $ T.null label
   , "lst:" `T.isPrefixOf` label
@@ -241,7 +268,9 @@
   , tableEqns opts
   = do
     (eq', idx) <- replaceEqn opts attrs eq
-    replaceNoRecurse $ Div attrs [Table [] [AlignCenter, AlignRight] [0.9, 0.09] [] [[[Plain [Math DisplayMath eq']], [Plain [Math DisplayMath $ "(" <> idx <> ")"]]]]]
+    replaceNoRecurse $ Div attrs [
+      simpleTable [AlignCenter, AlignRight] [ColWidth 0.9, ColWidth 0.09]
+       [[[Plain [Math DisplayMath eq']], [Plain [Math DisplayMath $ "(" <> idx <> ")"]]]]]
 replaceBlock _ _ = noReplaceRecurse
 
 replaceEqn :: Options -> Attr -> T.Text -> WS (T.Text, T.Text)
@@ -294,11 +323,21 @@
 replaceSubfig _ x = return [x]
 
 divBlocks :: Block -> Block
-divBlocks (Table title align widths header cells)
+divBlocks (Table tattr (Caption short (btitle:rest)) colspec header cells foot)
   | not $ null title
   , Just label <- getRefLabel "tbl" [last title]
-  = Div (label,[],[]) [Table (dropWhileEnd isSpace $ init title) align widths header cells]
+  = Div (label,[],[]) [
+    Table tattr (Caption short $ walkReplaceInlines (dropWhileEnd isSpace (init title)) title btitle:rest) colspec header cells foot]
+  where
+    title = blocksToInlines [btitle]
 divBlocks x = x
+
+walkReplaceInlines :: [Inline] -> [Inline] -> Block -> Block
+walkReplaceInlines newTitle title = walk replaceInlines
+  where
+  replaceInlines xs
+    | xs == title = newTitle
+    | otherwise = xs
 
 splitMath :: [Block] -> [Block]
 splitMath (Para ils:xs)
diff --git a/lib/Text/Pandoc/CrossRef/Util/Util.hs b/lib/Text/Pandoc/CrossRef/Util/Util.hs
--- a/lib/Text/Pandoc/CrossRef/Util/Util.hs
+++ b/lib/Text/Pandoc/CrossRef/Util/Util.hs
@@ -33,7 +33,6 @@
 import Data.Generics
 import Text.Pandoc.Writers.LaTeX
 import Data.Default
-import Data.Monoid ((<>))
 import qualified Data.Text as T
 
 intercalate' :: (Eq a, Monoid a, Foldable f) => a -> f a -> a
diff --git a/pandoc-crossref.cabal b/pandoc-crossref.cabal
--- a/pandoc-crossref.cabal
+++ b/pandoc-crossref.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.33.0.
+-- This file has been generated from package.yaml by hpack version 0.34.2.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: f7cb34c672ba0593634354b36827e7739adae2afff9aa42987658d79b49c446a
+-- hash: 232423e0b6a509d19ce5c9a2f9de39e0e1a56b2021f29f1ddec8cd41f4a15db8
 
 name:           pandoc-crossref
-version:        0.3.6.4
+version:        0.3.7.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
@@ -104,8 +104,8 @@
     , directory >=1 && <1.4
     , filepath >=1.1 && <1.5
     , mtl >=1.1 && <2.3
-    , pandoc >=2.9 && <2.10
-    , pandoc-types >=1.20 && <1.21
+    , pandoc >=2.10 && <2.11
+    , pandoc-types >=1.21 && <1.22
     , roman-numerals ==0.5.*
     , syb >=0.4 && <0.8
     , template-haskell >=2.7.0.0 && <3.0.0.0
@@ -135,9 +135,9 @@
     , mtl >=1.1 && <2.3
     , open-browser >=0.2 && <0.3
     , optparse-applicative >=0.13 && <0.16
-    , pandoc >=2.9 && <2.10
+    , pandoc >=2.10 && <2.11
     , pandoc-crossref
-    , pandoc-types >=1.20 && <1.21
+    , pandoc-types >=1.21 && <1.22
     , roman-numerals ==0.5.*
     , syb >=0.4 && <0.8
     , template-haskell >=2.7.0.0 && <3.0.0.0
@@ -163,9 +163,9 @@
     , filepath >=1.1 && <1.5
     , hspec >=2.4.4 && <3
     , mtl >=1.1 && <2.3
-    , pandoc >=2.9 && <2.10
+    , pandoc >=2.10 && <2.11
     , pandoc-crossref
-    , pandoc-types >=1.20 && <1.21
+    , pandoc-types >=1.21 && <1.22
     , roman-numerals ==0.5.*
     , syb >=0.4 && <0.8
     , template-haskell >=2.7.0.0 && <3.0.0.0
@@ -212,8 +212,8 @@
     , filepath >=1.1 && <1.5
     , hspec >=2.4.4 && <3
     , mtl >=1.1 && <2.3
-    , pandoc >=2.9 && <2.10
-    , pandoc-types >=1.20 && <1.21
+    , pandoc >=2.10 && <2.11
+    , pandoc-types >=1.21 && <1.22
     , roman-numerals ==0.5.*
     , syb >=0.4 && <0.8
     , template-haskell >=2.7.0.0 && <3.0.0.0
diff --git a/test/demo-chapters.inc b/test/demo-chapters.inc
--- a/test/demo-chapters.inc
+++ b/test/demo-chapters.inc
@@ -22,21 +22,55 @@
   ,Para [Str "Since",Space,Str "0.1.6.0",Space,Str "those",Space,Str "can",Space,Str "also",Space,Str "appear",Space,Str "in",Space,Str "the",Space,Str "middle",Space,Str "of",Space,Str "paragraph",SoftBreak,Span ("eq:quadr",[],[]) [Math DisplayMath "a x^2 + b x^2 + c = 0\\qquad(2.2)"],Space,Str "like",Space,Str "this."]
   ,Header 1 ("sec:chapter-3.-tables",[],[]) [Str "Chapter",Space,Str "3.",Space,Str "Tables"]
   ,Div ("tbl:table1",[],[])
-   [Table [Emph [Str "Table",Space,Str "3.1"],Str ":",Space,Str "Table",Space,Str "example"] [AlignLeft,AlignLeft] [0.0,0.0]
-    [[Plain [Str "First",Space,Str "Header"]]
-    ,[Plain [Str "Second",Space,Str "Header"]]]
-    [[[Plain [Str "Content",Space,Str "Cell"]]
-     ,[Plain [Str "Content",Space,Str "Cell"]]]
-    ,[[Plain [Str "Content",Space,Str "Cell"]]
-     ,[Plain [Str "Content",Space,Str "Cell"]]]]]
+   [Table ("",[],[]) (Caption Nothing
+    [Plain [Emph [Str "Table",Space,Str "3.1"],Str ":",Space,Str "Table",Space,Str "example"]])
+    [(AlignLeft,ColWidthDefault)
+    ,(AlignLeft,ColWidthDefault)]
+    (TableHead ("",[],[])
+    [Row ("",[],[])
+     [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+      [Plain [Str "First",Space,Str "Header"]]
+     ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+      [Plain [Str "Second",Space,Str "Header"]]]])
+    [(TableBody ("",[],[]) (RowHeadColumns 0)
+     []
+     [Row ("",[],[])
+      [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+       [Plain [Str "Content",Space,Str "Cell"]]
+      ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+       [Plain [Str "Content",Space,Str "Cell"]]]
+     ,Row ("",[],[])
+      [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+       [Plain [Str "Content",Space,Str "Cell"]]
+      ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+       [Plain [Str "Content",Space,Str "Cell"]]]])]
+    (TableFoot ("",[],[])
+    [])]
   ,Para [Str "Table",Space,Str "without",Space,Str "caption:"]
-  ,Table [] [AlignLeft,AlignLeft] [0.0,0.0]
-   [[Plain [Str "First",Space,Str "Header"]]
-   ,[Plain [Str "Second",Space,Str "Header"]]]
-   [[[Plain [Str "Content",Space,Str "Cell"]]
-    ,[Plain [Str "Content",Space,Str "Cell"]]]
-   ,[[Plain [Str "Content",Space,Str "Cell"]]
-    ,[Plain [Str "Content",Space,Str "Cell"]]]]
+  ,Table ("",[],[]) (Caption Nothing
+   [])
+   [(AlignLeft,ColWidthDefault)
+   ,(AlignLeft,ColWidthDefault)]
+   (TableHead ("",[],[])
+   [Row ("",[],[])
+    [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+     [Plain [Str "First",Space,Str "Header"]]
+    ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+     [Plain [Str "Second",Space,Str "Header"]]]])
+   [(TableBody ("",[],[]) (RowHeadColumns 0)
+    []
+    [Row ("",[],[])
+     [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+      [Plain [Str "Content",Space,Str "Cell"]]
+     ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+      [Plain [Str "Content",Space,Str "Cell"]]]
+    ,Row ("",[],[])
+     [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+      [Plain [Str "Content",Space,Str "Cell"]]
+     ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+      [Plain [Str "Content",Space,Str "Cell"]]]])]
+   (TableFoot ("",[],[])
+   [])
   ,Header 1 ("sec:chapter-4.-code-blocks",[],[]) [Str "Chapter",Space,Str "4.",Space,Str "Code",Space,Str "blocks"]
   ,Para [Str "There",Space,Str "are",Space,Str "a",Space,Str "couple",Space,Str "options",Space,Str "for",Space,Str "code",Space,Str "block",Space,Str "labels.",Space,Str "Those",Space,Str "work",Space,Str "only",Space,Str "if",Space,Str "code",Space,Str "block",Space,Str "id",Space,Str "starts",Space,Str "with",Space,Code ("",[],[]) "lst:",Str ",",Space,Str "e.g.\160",Code ("",[],[]) "{#lst:label}"]
   ,Header 2 ("sec:caption-attr",[],[]) [Code ("",[],[]) "caption",Space,Str "attribute"]
diff --git a/test/demo.inc b/test/demo.inc
--- a/test/demo.inc
+++ b/test/demo.inc
@@ -22,21 +22,55 @@
   ,Para [Str "Since",Space,Str "0.1.6.0",Space,Str "those",Space,Str "can",Space,Str "also",Space,Str "appear",Space,Str "in",Space,Str "the",Space,Str "middle",Space,Str "of",Space,Str "paragraph",SoftBreak,Span ("eq:quadr",[],[]) [Math DisplayMath "a x^2 + b x^2 + c = 0\\qquad(2)"],Space,Str "like",Space,Str "this."]
   ,Header 1 ("sec:chapter-3.-tables",[],[]) [Str "Chapter",Space,Str "3.",Space,Str "Tables"]
   ,Div ("tbl:table1",[],[])
-   [Table [Emph [Str "Table",Space,Str "1"],Str ":",Space,Str "Table",Space,Str "example"] [AlignLeft,AlignLeft] [0.0,0.0]
-    [[Plain [Str "First",Space,Str "Header"]]
-    ,[Plain [Str "Second",Space,Str "Header"]]]
-    [[[Plain [Str "Content",Space,Str "Cell"]]
-     ,[Plain [Str "Content",Space,Str "Cell"]]]
-    ,[[Plain [Str "Content",Space,Str "Cell"]]
-     ,[Plain [Str "Content",Space,Str "Cell"]]]]]
+   [Table ("",[],[]) (Caption Nothing
+    [Plain [Emph [Str "Table",Space,Str "1"],Str ":",Space,Str "Table",Space,Str "example"]])
+    [(AlignLeft,ColWidthDefault)
+    ,(AlignLeft,ColWidthDefault)]
+    (TableHead ("",[],[])
+    [Row ("",[],[])
+     [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+      [Plain [Str "First",Space,Str "Header"]]
+     ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+      [Plain [Str "Second",Space,Str "Header"]]]])
+    [(TableBody ("",[],[]) (RowHeadColumns 0)
+     []
+     [Row ("",[],[])
+      [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+       [Plain [Str "Content",Space,Str "Cell"]]
+      ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+       [Plain [Str "Content",Space,Str "Cell"]]]
+     ,Row ("",[],[])
+      [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+       [Plain [Str "Content",Space,Str "Cell"]]
+      ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+       [Plain [Str "Content",Space,Str "Cell"]]]])]
+    (TableFoot ("",[],[])
+    [])]
   ,Para [Str "Table",Space,Str "without",Space,Str "caption:"]
-  ,Table [] [AlignLeft,AlignLeft] [0.0,0.0]
-   [[Plain [Str "First",Space,Str "Header"]]
-   ,[Plain [Str "Second",Space,Str "Header"]]]
-   [[[Plain [Str "Content",Space,Str "Cell"]]
-    ,[Plain [Str "Content",Space,Str "Cell"]]]
-   ,[[Plain [Str "Content",Space,Str "Cell"]]
-    ,[Plain [Str "Content",Space,Str "Cell"]]]]
+  ,Table ("",[],[]) (Caption Nothing
+   [])
+   [(AlignLeft,ColWidthDefault)
+   ,(AlignLeft,ColWidthDefault)]
+   (TableHead ("",[],[])
+   [Row ("",[],[])
+    [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+     [Plain [Str "First",Space,Str "Header"]]
+    ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+     [Plain [Str "Second",Space,Str "Header"]]]])
+   [(TableBody ("",[],[]) (RowHeadColumns 0)
+    []
+    [Row ("",[],[])
+     [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+      [Plain [Str "Content",Space,Str "Cell"]]
+     ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+      [Plain [Str "Content",Space,Str "Cell"]]]
+    ,Row ("",[],[])
+     [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+      [Plain [Str "Content",Space,Str "Cell"]]
+     ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
+      [Plain [Str "Content",Space,Str "Cell"]]]])]
+   (TableFoot ("",[],[])
+   [])
   ,Header 1 ("sec:chapter-4.-code-blocks",[],[]) [Str "Chapter",Space,Str "4.",Space,Str "Code",Space,Str "blocks"]
   ,Para [Str "There",Space,Str "are",Space,Str "a",Space,Str "couple",Space,Str "options",Space,Str "for",Space,Str "code",Space,Str "block",Space,Str "labels.",Space,Str "Those",Space,Str "work",Space,Str "only",Space,Str "if",Space,Str "code",Space,Str "block",Space,Str "id",Space,Str "starts",Space,Str "with",Space,Code ("",[],[]) "lst:",Str ",",Space,Str "e.g.\160",Code ("",[],[]) "{#lst:label}"]
   ,Header 2 ("sec:caption-attr",[],[]) [Code ("",[],[]) "caption",Space,Str "attribute"]
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
@@ -387,9 +387,10 @@
 equation' eq ref = displayMath eq <> ref' "eq" ref
 
 table' :: T.Text -> T.Text -> Blocks
-table' title ref = table (text title <> ref' "tbl" ref) []
-   [para $ str "H1", para $ str "H2"]
-  [[para $ str "C1", para $ str "C2"]]
+table' title ref = table (simpleCaption . plain $ text title <> ref' "tbl" ref) []
+   (TableHead nullAttr [Row nullAttr $ map (Cell nullAttr AlignDefault (RowSpan 0) (ColSpan 0) . toList) [para $ str "H1", para $ str "H2"]])
+  [TableBody nullAttr (RowHeadColumns 0) [] [Row nullAttr $ map (Cell nullAttr AlignDefault (RowSpan 0) (ColSpan 0) . toList) [para $ str "C1", para $ str "C2"]]]
+  (TableFoot nullAttr [])
 
 codeBlock' :: T.Text -> T.Text -> Blocks
 codeBlock' title ref = codeBlockWith
