diff --git a/src/Text/Pandoc/Readers/MediaWiki.hs b/src/Text/Pandoc/Readers/MediaWiki.hs
index a07f66e7a..498f80216 100644
--- a/src/Text/Pandoc/Readers/MediaWiki.hs
+++ b/src/Text/Pandoc/Readers/MediaWiki.hs
@@ -232,7 +232,8 @@ para = do
 table :: PandocMonad m => MWParser m Blocks
 table = do
   tableStart
-  styles <- option [] parseAttrs
+  styles <- option [] $
+               parseAttrs <* skipMany spaceChar <* optional (char '|')
   skipMany spaceChar
   optional blanklines
   let tableWidth = case lookup "width" styles of
@@ -283,17 +284,29 @@ rowsep = try $ guardColumnOne *> skipSpaces *> sym "|-" <*
 
 cellsep :: PandocMonad m => MWParser m ()
 cellsep = try $ do
+  col <- sourceColumn <$> getPosition
   skipSpaces
-  (char '|' *> notFollowedBy (oneOf "-}+") *> optional (char '|'))
-    <|> (char '!' *> optional (char '!'))
+  let pipeSep = do
+        char '|'
+        notFollowedBy (oneOf "-}+")
+        if col == 1
+           then optional (char '|')
+           else void (char '|')
+  let exclSep = do
+        char '!'
+        if col == 1
+           then optional (char '!')
+           else void (char '!')
+  pipeSep <|> exclSep
 
 tableCaption :: PandocMonad m => MWParser m Inlines
 tableCaption = try $ do
   guardColumnOne
   skipSpaces
   sym "|+"
-  optional (try $ parseAttr *> skipSpaces *> char '|' *> skipSpaces)
-  (trimInlines . mconcat) <$> many (notFollowedBy (cellsep <|> rowsep) *> inline)
+  optional (try $ parseAttr *> skipSpaces *> char '|' *> blanklines)
+  (trimInlines . mconcat) <$>
+    many (notFollowedBy (cellsep <|> rowsep) *> inline)
 
 tableRow :: PandocMonad m => MWParser m [((Alignment, Double), Blocks)]
 tableRow = try $ skipMany htmlComment *> many tableCell
diff --git a/test/command/2649.md b/test/command/2649.md
index 8f594cfe1..52ae16ce4 100644
--- a/test/command/2649.md
+++ b/test/command/2649.md
@@ -67,7 +67,8 @@
 ! Aantal
 |-
 | 1
-|align=left| {{FR-VLAG}} [[Sébastien Loeb]] | 78
+|align=left| {{FR-VLAG}} [[Sébastien Loeb]]
+| 78
 |-
 | 2
 |align=left| {{FR-VLAG}} '''[[Sébastien Ogier]]'''
@@ -79,24 +80,25 @@
 |}
 ^D
 <table>
+<thead>
+<tr class="header">
+<th><p>Plaats</p></th>
+<th><p>Rijder</p></th>
+<th><p>Aantal</p></th>
+</tr>
+</thead>
 <tbody>
 <tr class="odd">
-<td></td>
-<td><p>Plaats</p></td>
-<td><p>Rijder</p></td>
-<td><p>Aantal</p></td>
-</tr>
-<tr class="even">
 <td><p>1</p></td>
 <td><p><a href="Sébastien_Loeb" title="wikilink">Sébastien Loeb</a></p></td>
 <td><p>78</p></td>
 </tr>
-<tr class="odd">
+<tr class="even">
 <td><p>2</p></td>
 <td><p><strong><a href="Sébastien_Ogier" title="wikilink">Sébastien Ogier</a></strong></p></td>
 <td><p>38</p></td>
 </tr>
-<tr class="even">
+<tr class="odd">
 <td><p>10</p></td>
 <td><p><a href="Hannu_Mikkola" title="wikilink">Hannu Mikkola</a></p></td>
 <td><p>18</p></td>