diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
 # commonmark-extensions
 
+[![hackage release](https://img.shields.io/hackage/v/commonmark-extensions.svg?label=hackage)](http://hackage.haskell.org/package/commonmark-extensions)
+
 This package provides some syntax extensions for the
 commonmark package:
 
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,21 @@
 # Changelog for commonmark-extensions
 
-## Unreleased changes
+## 0.2.0.0
+
+- Add HasQuoted class in Smart extension, with singleQuoted
+  and doubleQuoted methods.  This gives more fleibility in
+  supporting smart quotes, and allows us to use pandoc's
+  Quoted elements.
+
+- Add advice to haddocks for pipeTableSpec (#52).
+  If a line could be a candidate pipe table heading, but the
+  following line of separators is not encountered, the line is
+  treated as a paragraph, even if it has indications of other
+  block-level formatting.  Putting the pipeTableSpec AFTER
+  parsers for lists, headings, etc. causes the latter to take
+  priority.
+
+
+## 0.1.0.0
+
+- Initial release
diff --git a/commonmark-extensions.cabal b/commonmark-extensions.cabal
--- a/commonmark-extensions.cabal
+++ b/commonmark-extensions.cabal
@@ -1,5 +1,5 @@
 name:           commonmark-extensions
-version:        0.1.0.0
+version:        0.2.0.0
 synopsis:       Pure Haskell commonmark parser.
 description:
    This library provides some useful extensions to core commonmark
diff --git a/src/Commonmark/Extensions/PipeTable.hs b/src/Commonmark/Extensions/PipeTable.hs
--- a/src/Commonmark/Extensions/PipeTable.hs
+++ b/src/Commonmark/Extensions/PipeTable.hs
@@ -128,6 +128,11 @@
   skipMany $ satisfyTok (hasType Spaces)
   return $! align
 
+-- | Syntax for pipe tables.  Note that this should generally be
+-- placed AFTER the syntax spec for lists, headings, and other block-level
+-- constructs, to avoid bad results when non-table lines contain pipe
+-- characters:  use @defaultSyntaxSpec <> pipeTableSpec@ rather
+-- than @pipeTableSpec <> defaultSyntaxSpec@.
 pipeTableSpec :: (Monad m, IsBlock il bl, IsInline il, HasPipeTable il bl)
               => SyntaxSpec m il bl
 pipeTableSpec = mempty
diff --git a/src/Commonmark/Extensions/Smart.hs b/src/Commonmark/Extensions/Smart.hs
--- a/src/Commonmark/Extensions/Smart.hs
+++ b/src/Commonmark/Extensions/Smart.hs
@@ -1,36 +1,49 @@
 {-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE FlexibleInstances    #-}
+{-# LANGUAGE UndecidableInstances #-}
 module Commonmark.Extensions.Smart
-  ( smartPunctuationSpec )
+  ( HasQuoted(..)
+  , smartPunctuationSpec )
 where
 
 import Commonmark.Types
 import Commonmark.Syntax
 import Commonmark.Inlines
+import Commonmark.Html
+import Commonmark.SourceMap
 import Commonmark.TokParsers (symbol)
 import Text.Parsec
 #if !MIN_VERSION_base(4,11,0)
-import Data.Monoid
+import Data.Monoid (Monoid)
+import Data.Semigroup (Semigroup, (<>))
 #endif
 
-smartPunctuationSpec :: (Monad m, IsBlock il bl, IsInline il)
+class IsInline il => HasQuoted il where
+  singleQuoted :: il -> il
+  doubleQuoted :: il -> il
+
+instance Rangeable (Html a) => HasQuoted (Html a) where
+  singleQuoted x = htmlText "‘" <> x <> htmlText "’"
+  doubleQuoted x = htmlText "“" <> x <> htmlText "”"
+
+instance (HasQuoted i, Monoid i, Semigroup i)
+        => HasQuoted (WithSourceMap i) where
+  singleQuoted x = (singleQuoted <$> x) <* addName "singleQuoted"
+  doubleQuoted x = (doubleQuoted <$> x) <* addName "doubleQuoted"
+
+smartPunctuationSpec :: (Monad m, IsBlock il bl, IsInline il, HasQuoted il)
                      => SyntaxSpec m il bl
 smartPunctuationSpec = mempty
   { syntaxFormattingSpecs = [singleQuotedSpec, doubleQuotedSpec]
   , syntaxInlineParsers = [pEllipses, pDash]
   }
 
-singleQuotedSpec :: IsInline il => FormattingSpec il
+singleQuotedSpec :: (IsInline il, HasQuoted il) => FormattingSpec il
 singleQuotedSpec = FormattingSpec '\'' False False (Just singleQuoted) Nothing '’'
 
-doubleQuotedSpec :: IsInline il => FormattingSpec il
+doubleQuotedSpec :: (IsInline il, HasQuoted il) => FormattingSpec il
 doubleQuotedSpec = FormattingSpec '"' False False (Just doubleQuoted) Nothing '“'
-
-singleQuoted :: IsInline il => il -> il
-singleQuoted x = str "‘" <> x <> str "’"
-
-doubleQuoted :: IsInline il => il -> il
-doubleQuoted x = str "“" <> x <> str "”"
 
 pEllipses :: (Monad m, IsInline a) => InlineParser m a
 pEllipses = try $ do
