diff --git a/src/Text/Pandoc/Writers/Docbook.hs b/src/Text/Pandoc/Writers/Docbook.hs
index 9d09d46e3..1ca76bfd6 100644
--- a/src/Text/Pandoc/Writers/Docbook.hs
+++ b/src/Text/Pandoc/Writers/Docbook.hs
@@ -185,24 +185,24 @@ blockToDocbook _ (RawBlock "html" str) = text str -- raw XML block
 blockToDocbook _ (RawBlock _ _) = empty
 blockToDocbook _ HorizontalRule = empty -- not semantic
 blockToDocbook opts (Table caption aligns widths headers rows) =
-  let alignStrings = map alignmentToString aligns
-      captionDoc   = if null caption
+  let captionDoc   = if null caption
                         then empty
-                        else inTagsIndented "caption" 
+                        else inTagsIndented "title"
                               (inlinesToDocbook opts caption)
       tableType    = if isEmpty captionDoc then "informaltable" else "table"
-      percent w    = show (truncate (100*w) :: Integer) ++ "%"
-      coltags = if all (== 0.0) widths
-                   then empty
-                   else vcat $ map (\w ->
-                          selfClosingTag "col" [("width", percent w)]) widths
+      percent w    = show (truncate (100*w) :: Integer) ++ "*"
+      coltags = vcat $ zipWith (\w al -> selfClosingTag "colspec"
+                       ([("colwidth", percent w) | w > 0] ++
+                        [("align", alignmentToString al)])) widths aligns
       head' = if all null headers
                  then empty
                  else inTagsIndented "thead" $
-                         tableRowToDocbook opts alignStrings "th" headers
+                         tableRowToDocbook opts headers
       body' = inTagsIndented "tbody" $
-              vcat $ map (tableRowToDocbook opts alignStrings "td") rows
-  in  inTagsIndented tableType $ captionDoc $$ coltags $$ head' $$ body'
+              vcat $ map (tableRowToDocbook opts) rows
+  in  inTagsIndented tableType $ captionDoc $$
+        (inTags True "tgroup" [("cols", show (length headers))] $
+         coltags $$ head' $$ body')
 
 alignmentToString :: Alignment -> [Char]
 alignmentToString alignment = case alignment of
@@ -212,22 +212,16 @@ alignmentToString alignment = case alignment of
                                  AlignDefault -> "left"
 
 tableRowToDocbook :: WriterOptions
-                  -> [String]
-                  -> String
                   -> [[Block]]
                   -> Doc
-tableRowToDocbook opts aligns celltype cols =
-  inTagsIndented "tr" $ vcat $
-     zipWith (tableItemToDocbook opts celltype) aligns cols
+tableRowToDocbook opts cols =
+  inTagsIndented "row" $ vcat $ map (tableItemToDocbook opts) cols
 
 tableItemToDocbook :: WriterOptions
-                   -> [Char]
-                   -> [Char]
                    -> [Block]
                    -> Doc
-tableItemToDocbook opts tag align item =
-  let attrib = [("align", align)]
-  in  inTags True tag attrib $ vcat $ map (blockToDocbook opts) item
+tableItemToDocbook opts item =
+  inTags True "entry" [] $ vcat $ map (blockToDocbook opts) item
 
 -- | Convert a list of inline elements to Docbook.
 inlinesToDocbook :: WriterOptions -> [Inline] -> Doc
diff --git a/tests/tables.docbook b/tests/tables.docbook
index 6483a97c0..6224cf222 100644
--- a/tests/tables.docbook
+++ b/tests/tables.docbook
@@ -2,401 +2,431 @@
   Simple table with caption:
 </para>
 <table>
-  <caption>
+  <title>
     Demonstration of simple table syntax.
-  </caption>
-  <thead>
-    <tr>
-      <th align="right">
-        Right
-      </th>
-      <th align="left">
-        Left
-      </th>
-      <th align="center">
-        Center
-      </th>
-      <th align="left">
-        Default
-      </th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td align="right">
-        12
-      </td>
-      <td align="left">
-        12
-      </td>
-      <td align="center">
-        12
-      </td>
-      <td align="left">
-        12
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        123
-      </td>
-      <td align="left">
-        123
-      </td>
-      <td align="center">
-        123
-      </td>
-      <td align="left">
-        123
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        1
-      </td>
-      <td align="left">
-        1
-      </td>
-      <td align="center">
-        1
-      </td>
-      <td align="left">
-        1
-      </td>
-    </tr>
-  </tbody>
+  </title>
+  <tgroup cols="4">
+    <colspec align="right" />
+    <colspec align="left" />
+    <colspec align="center" />
+    <colspec align="left" />
+    <thead>
+      <row>
+        <entry>
+          Right
+        </entry>
+        <entry>
+          Left
+        </entry>
+        <entry>
+          Center
+        </entry>
+        <entry>
+          Default
+        </entry>
+      </row>
+    </thead>
+    <tbody>
+      <row>
+        <entry>
+          12
+        </entry>
+        <entry>
+          12
+        </entry>
+        <entry>
+          12
+        </entry>
+        <entry>
+          12
+        </entry>
+      </row>
+      <row>
+        <entry>
+          123
+        </entry>
+        <entry>
+          123
+        </entry>
+        <entry>
+          123
+        </entry>
+        <entry>
+          123
+        </entry>
+      </row>
+      <row>
+        <entry>
+          1
+        </entry>
+        <entry>
+          1
+        </entry>
+        <entry>
+          1
+        </entry>
+        <entry>
+          1
+        </entry>
+      </row>
+    </tbody>
+  </tgroup>
 </table>
 <para>
   Simple table without caption:
 </para>
 <informaltable>
-  <thead>
-    <tr>
-      <th align="right">
-        Right
-      </th>
-      <th align="left">
-        Left
-      </th>
-      <th align="center">
-        Center
-      </th>
-      <th align="left">
-        Default
-      </th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td align="right">
-        12
-      </td>
-      <td align="left">
-        12
-      </td>
-      <td align="center">
-        12
-      </td>
-      <td align="left">
-        12
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        123
-      </td>
-      <td align="left">
-        123
-      </td>
-      <td align="center">
-        123
-      </td>
-      <td align="left">
-        123
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        1
-      </td>
-      <td align="left">
-        1
-      </td>
-      <td align="center">
-        1
-      </td>
-      <td align="left">
-        1
-      </td>
-    </tr>
-  </tbody>
+  <tgroup cols="4">
+    <colspec align="right" />
+    <colspec align="left" />
+    <colspec align="center" />
+    <colspec align="left" />
+    <thead>
+      <row>
+        <entry>
+          Right
+        </entry>
+        <entry>
+          Left
+        </entry>
+        <entry>
+          Center
+        </entry>
+        <entry>
+          Default
+        </entry>
+      </row>
+    </thead>
+    <tbody>
+      <row>
+        <entry>
+          12
+        </entry>
+        <entry>
+          12
+        </entry>
+        <entry>
+          12
+        </entry>
+        <entry>
+          12
+        </entry>
+      </row>
+      <row>
+        <entry>
+          123
+        </entry>
+        <entry>
+          123
+        </entry>
+        <entry>
+          123
+        </entry>
+        <entry>
+          123
+        </entry>
+      </row>
+      <row>
+        <entry>
+          1
+        </entry>
+        <entry>
+          1
+        </entry>
+        <entry>
+          1
+        </entry>
+        <entry>
+          1
+        </entry>
+      </row>
+    </tbody>
+  </tgroup>
 </informaltable>
 <para>
   Simple table indented two spaces:
 </para>
 <table>
-  <caption>
+  <title>
     Demonstration of simple table syntax.
-  </caption>
-  <thead>
-    <tr>
-      <th align="right">
-        Right
-      </th>
-      <th align="left">
-        Left
-      </th>
-      <th align="center">
-        Center
-      </th>
-      <th align="left">
-        Default
-      </th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td align="right">
-        12
-      </td>
-      <td align="left">
-        12
-      </td>
-      <td align="center">
-        12
-      </td>
-      <td align="left">
-        12
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        123
-      </td>
-      <td align="left">
-        123
-      </td>
-      <td align="center">
-        123
-      </td>
-      <td align="left">
-        123
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        1
-      </td>
-      <td align="left">
-        1
-      </td>
-      <td align="center">
-        1
-      </td>
-      <td align="left">
-        1
-      </td>
-    </tr>
-  </tbody>
+  </title>
+  <tgroup cols="4">
+    <colspec align="right" />
+    <colspec align="left" />
+    <colspec align="center" />
+    <colspec align="left" />
+    <thead>
+      <row>
+        <entry>
+          Right
+        </entry>
+        <entry>
+          Left
+        </entry>
+        <entry>
+          Center
+        </entry>
+        <entry>
+          Default
+        </entry>
+      </row>
+    </thead>
+    <tbody>
+      <row>
+        <entry>
+          12
+        </entry>
+        <entry>
+          12
+        </entry>
+        <entry>
+          12
+        </entry>
+        <entry>
+          12
+        </entry>
+      </row>
+      <row>
+        <entry>
+          123
+        </entry>
+        <entry>
+          123
+        </entry>
+        <entry>
+          123
+        </entry>
+        <entry>
+          123
+        </entry>
+      </row>
+      <row>
+        <entry>
+          1
+        </entry>
+        <entry>
+          1
+        </entry>
+        <entry>
+          1
+        </entry>
+        <entry>
+          1
+        </entry>
+      </row>
+    </tbody>
+  </tgroup>
 </table>
 <para>
   Multiline table with caption:
 </para>
 <table>
-  <caption>
+  <title>
     Here's the caption. It may span multiple lines.
-  </caption>
-  <col width="15%" />
-  <col width="13%" />
-  <col width="16%" />
-  <col width="33%" />
-  <thead>
-    <tr>
-      <th align="center">
-        Centered Header
-      </th>
-      <th align="left">
-        Left Aligned
-      </th>
-      <th align="right">
-        Right Aligned
-      </th>
-      <th align="left">
-        Default aligned
-      </th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td align="center">
-        First
-      </td>
-      <td align="left">
-        row
-      </td>
-      <td align="right">
-        12.0
-      </td>
-      <td align="left">
-        Example of a row that spans multiple lines.
-      </td>
-    </tr>
-    <tr>
-      <td align="center">
-        Second
-      </td>
-      <td align="left">
-        row
-      </td>
-      <td align="right">
-        5.0
-      </td>
-      <td align="left">
-        Here's another one. Note the blank line between rows.
-      </td>
-    </tr>
-  </tbody>
+  </title>
+  <tgroup cols="4">
+    <colspec colwidth="15*" align="center" />
+    <colspec colwidth="13*" align="left" />
+    <colspec colwidth="16*" align="right" />
+    <colspec colwidth="33*" align="left" />
+    <thead>
+      <row>
+        <entry>
+          Centered Header
+        </entry>
+        <entry>
+          Left Aligned
+        </entry>
+        <entry>
+          Right Aligned
+        </entry>
+        <entry>
+          Default aligned
+        </entry>
+      </row>
+    </thead>
+    <tbody>
+      <row>
+        <entry>
+          First
+        </entry>
+        <entry>
+          row
+        </entry>
+        <entry>
+          12.0
+        </entry>
+        <entry>
+          Example of a row that spans multiple lines.
+        </entry>
+      </row>
+      <row>
+        <entry>
+          Second
+        </entry>
+        <entry>
+          row
+        </entry>
+        <entry>
+          5.0
+        </entry>
+        <entry>
+          Here's another one. Note the blank line between rows.
+        </entry>
+      </row>
+    </tbody>
+  </tgroup>
 </table>
 <para>
   Multiline table without caption:
 </para>
 <informaltable>
-  <col width="15%" />
-  <col width="13%" />
-  <col width="16%" />
-  <col width="33%" />
-  <thead>
-    <tr>
-      <th align="center">
-        Centered Header
-      </th>
-      <th align="left">
-        Left Aligned
-      </th>
-      <th align="right">
-        Right Aligned
-      </th>
-      <th align="left">
-        Default aligned
-      </th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td align="center">
-        First
-      </td>
-      <td align="left">
-        row
-      </td>
-      <td align="right">
-        12.0
-      </td>
-      <td align="left">
-        Example of a row that spans multiple lines.
-      </td>
-    </tr>
-    <tr>
-      <td align="center">
-        Second
-      </td>
-      <td align="left">
-        row
-      </td>
-      <td align="right">
-        5.0
-      </td>
-      <td align="left">
-        Here's another one. Note the blank line between rows.
-      </td>
-    </tr>
-  </tbody>
+  <tgroup cols="4">
+    <colspec colwidth="15*" align="center" />
+    <colspec colwidth="13*" align="left" />
+    <colspec colwidth="16*" align="right" />
+    <colspec colwidth="33*" align="left" />
+    <thead>
+      <row>
+        <entry>
+          Centered Header
+        </entry>
+        <entry>
+          Left Aligned
+        </entry>
+        <entry>
+          Right Aligned
+        </entry>
+        <entry>
+          Default aligned
+        </entry>
+      </row>
+    </thead>
+    <tbody>
+      <row>
+        <entry>
+          First
+        </entry>
+        <entry>
+          row
+        </entry>
+        <entry>
+          12.0
+        </entry>
+        <entry>
+          Example of a row that spans multiple lines.
+        </entry>
+      </row>
+      <row>
+        <entry>
+          Second
+        </entry>
+        <entry>
+          row
+        </entry>
+        <entry>
+          5.0
+        </entry>
+        <entry>
+          Here's another one. Note the blank line between rows.
+        </entry>
+      </row>
+    </tbody>
+  </tgroup>
 </informaltable>
 <para>
   Table without column headers:
 </para>
 <informaltable>
-  <tbody>
-    <tr>
-      <td align="right">
-        12
-      </td>
-      <td align="left">
-        12
-      </td>
-      <td align="center">
-        12
-      </td>
-      <td align="right">
-        12
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        123
-      </td>
-      <td align="left">
-        123
-      </td>
-      <td align="center">
-        123
-      </td>
-      <td align="right">
-        123
-      </td>
-    </tr>
-    <tr>
-      <td align="right">
-        1
-      </td>
-      <td align="left">
-        1
-      </td>
-      <td align="center">
-        1
-      </td>
-      <td align="right">
-        1
-      </td>
-    </tr>
-  </tbody>
+  <tgroup cols="4">
+    <colspec align="right" />
+    <colspec align="left" />
+    <colspec align="center" />
+    <colspec align="right" />
+    <tbody>
+      <row>
+        <entry>
+          12
+        </entry>
+        <entry>
+          12
+        </entry>
+        <entry>
+          12
+        </entry>
+        <entry>
+          12
+        </entry>
+      </row>
+      <row>
+        <entry>
+          123
+        </entry>
+        <entry>
+          123
+        </entry>
+        <entry>
+          123
+        </entry>
+        <entry>
+          123
+        </entry>
+      </row>
+      <row>
+        <entry>
+          1
+        </entry>
+        <entry>
+          1
+        </entry>
+        <entry>
+          1
+        </entry>
+        <entry>
+          1
+        </entry>
+      </row>
+    </tbody>
+  </tgroup>
 </informaltable>
 <para>
   Multiline table without column headers:
 </para>
 <informaltable>
-  <col width="15%" />
-  <col width="13%" />
-  <col width="16%" />
-  <col width="33%" />
-  <tbody>
-    <tr>
-      <td align="center">
-        First
-      </td>
-      <td align="left">
-        row
-      </td>
-      <td align="right">
-        12.0
-      </td>
-      <td align="left">
-        Example of a row that spans multiple lines.
-      </td>
-    </tr>
-    <tr>
-      <td align="center">
-        Second
-      </td>
-      <td align="left">
-        row
-      </td>
-      <td align="right">
-        5.0
-      </td>
-      <td align="left">
-        Here's another one. Note the blank line between rows.
-      </td>
-    </tr>
-  </tbody>
+  <tgroup cols="4">
+    <colspec colwidth="15*" align="center" />
+    <colspec colwidth="13*" align="left" />
+    <colspec colwidth="16*" align="right" />
+    <colspec colwidth="33*" align="left" />
+    <tbody>
+      <row>
+        <entry>
+          First
+        </entry>
+        <entry>
+          row
+        </entry>
+        <entry>
+          12.0
+        </entry>
+        <entry>
+          Example of a row that spans multiple lines.
+        </entry>
+      </row>
+      <row>
+        <entry>
+          Second
+        </entry>
+        <entry>
+          row
+        </entry>
+        <entry>
+          5.0
+        </entry>
+        <entry>
+          Here's another one. Note the blank line between rows.
+        </entry>
+      </row>
+    </tbody>
+  </tgroup>
 </informaltable>