diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,19 @@
+pandoc-citeproc (0.10.4)
+
+  * Fixed 'et al' in certain styles (#274).  The `et al` phrase was
+    not being appended in the bibliography in ieee.csl and some others.
+  * Leave ALLCAPS words alone in titlecase transformation.
+    See #273.  There is some confusion about the citeproc
+    rules here, but this follows citeproc-js behavior.
+  * Improved title case rules to conform better to CSL spec (#273).
+    We now correctly retain case on mixed-case words and don't
+    decapitalize "small words" when they're the last word.
+  * Use readerSmart in parsing yaml bibliographies (#272).
+  * Bumped some dependency version bounds.
+  * Improved .travis.yml.
+  * Added Text.CSL.Compat.Pandoc module to work around version differences.
+    This allows building with the typeclass branch of pandoc.
+
 pandoc-citeproc (0.10.3)
 
   * Update to work with pandoc 1.19 (including writerStandalone API change).
diff --git a/compat/Text/CSL/Compat/Pandoc.hs b/compat/Text/CSL/Compat/Pandoc.hs
new file mode 100644
--- /dev/null
+++ b/compat/Text/CSL/Compat/Pandoc.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE CPP, ScopedTypeVariables #-}
+-- | Compatibility module to work around differences in the
+-- types of functions between pandoc < 2.0 and pandoc >= 2.0.
+module Text.CSL.Compat.Pandoc (
+  writeMarkdown,
+  writePlain,
+  writeNative,
+  writeHtmlString,
+  readNative,
+  readHtml,
+  readMarkdown,
+  readLaTeX,
+  fetchItem,
+  pipeProcess ) where
+
+import qualified Control.Exception as E
+import System.Exit (ExitCode)
+import Data.ByteString.Lazy as BL
+import Data.ByteString as B
+import Text.Pandoc (Pandoc, ReaderOptions, WriterOptions)
+import qualified Text.Pandoc as Pandoc
+import qualified Text.Pandoc.Process
+#if MIN_VERSION_pandoc(2,0,0)
+import Text.Pandoc.MIME (MimeType)
+import Text.Pandoc.Error (PandocError)
+import Text.Pandoc.Class (runPure, runIO)
+import qualified Text.Pandoc.Class (fetchItem)
+import Control.Monad.Except (runExceptT, lift)
+#else
+import System.IO (stderr)
+import qualified Text.Pandoc.Shared (fetchItem)
+
+type MimeType = String
+#endif
+
+#if MIN_VERSION_pandoc(2,0,0)
+#define WRAPREADER(f) f o = either mempty id . runPure . Pandoc.f o
+#define WRAPWRITER(f) f o = either mempty id . runPure . Pandoc.f o
+#else
+#define WRAPREADER(f) f o = either mempty id . Pandoc.f o
+#define WRAPWRITER(f) f = Pandoc.f
+#endif
+
+readHtml, readLaTeX, readMarkdown, readNative ::
+  ReaderOptions -> String -> Pandoc
+
+WRAPREADER(readHtml)
+WRAPREADER(readLaTeX)
+WRAPREADER(readMarkdown)
+
+#if MIN_VERSION_pandoc(2,0,0)
+WRAPREADER(readNative)
+#else
+readNative _ = either mempty id . Pandoc.readNative
+#endif
+
+writeMarkdown, writePlain, writeNative, writeHtmlString ::
+  WriterOptions -> Pandoc -> String
+
+WRAPWRITER(writeMarkdown)
+WRAPWRITER(writePlain)
+WRAPWRITER(writeNative)
+WRAPWRITER(writeHtmlString)
+
+pipeProcess :: Maybe [(String, String)] -> FilePath -> [String]
+            -> BL.ByteString -> IO (ExitCode,BL.ByteString)
+#if MIN_VERSION_pandoc(2,0,0)
+pipeProcess = Text.Pandoc.Process.pipeProcess
+#else
+pipeProcess e f a b = do
+  (ec, out, err) <- Text.Pandoc.Process.pipeProcess e f a b
+  BL.hPutStr stderr err
+  return (ec, out)
+#endif
+
+fetchItem :: Maybe String
+          -> String
+          -> IO (Either E.SomeException (B.ByteString, Maybe MimeType))
+#if MIN_VERSION_pandoc(2,0,0)
+fetchItem mbd s = do
+  res <- runIO $ runExceptT $ lift $ Text.Pandoc.Class.fetchItem mbd s
+  return $ case res of
+       Left e          -> Left (E.toException e)
+       Right (Left (e :: PandocError))  -> Left (E.toException e)
+       Right (Right r) -> Right r
+#else
+fetchItem = Text.Pandoc.Shared.fetchItem
+#endif
diff --git a/pandoc-citeproc.cabal b/pandoc-citeproc.cabal
--- a/pandoc-citeproc.cabal
+++ b/pandoc-citeproc.cabal
@@ -1,5 +1,5 @@
 name:               pandoc-citeproc
-version:            0.10.3
+version:            0.10.4
 cabal-version:      >= 1.12
 synopsis:           Supports using pandoc with citeproc
 
@@ -70,7 +70,7 @@
   default:     False
 
 library
-    hs-source-dirs:   src, prelude
+    hs-source-dirs:   src, prelude, compat
     exposed-modules:  Text.CSL.Pandoc
                       Text.CSL
                       Text.CSL.Reference
@@ -92,14 +92,17 @@
     other-modules:    Text.CSL.Util
                       Prelude
                       Paths_pandoc_citeproc
+                      Text.CSL.Compat.Pandoc
     ghc-options:      -funbox-strict-fields -Wall -fno-warn-unused-do-bind
     ghc-prof-options: -fprof-auto-exported
     build-depends:    containers, directory, mtl,
                       bytestring, filepath,
                       pandoc-types >= 1.16 && < 1.18,
-                      pandoc >= 1.16 && < 1.20,
+                      pandoc >= 1.16 && < 2.1,
                       tagsoup,
-                      aeson >= 0.7 && < 1.1, text, vector,
+                      aeson >= 0.7 && < 1.2,
+                      text,
+                      vector,
                       xml-conduit >= 1.2 && < 1.5,
                       unordered-containers >= 0.2 && < 0.3,
                       data-default,
@@ -142,13 +145,14 @@
     ghc-prof-options: -fprof-auto-exported -rtsopts
     build-depends:    base >= 4, pandoc-citeproc,
                       pandoc-types >= 1.16 && < 1.18,
-                      pandoc >= 1.16 && < 1.20,
+                      pandoc >= 1.16 && < 2.1,
                       aeson,
                       aeson-pretty >= 0.8, yaml, bytestring, syb, attoparsec, text,
                       filepath
     other-modules:    Paths_pandoc_citeproc
                       Prelude
     default-language: Haskell2010
+    ghc-options:      -funbox-strict-fields -Wall -fno-warn-unused-do-bind
     if flag(bibutils)
        default-extensions: CPP
        cpp-options:     -DUSE_BIBUTILS
@@ -157,28 +161,32 @@
   Main-Is:        test-citeproc.hs
   Other-Modules:  JSON
                   Prelude
-  Hs-Source-Dirs: tests, prelude
+  Hs-Source-Dirs: tests, prelude, compat
   if flag(test_citeproc)
     Buildable:    True
   else
     Buildable:    False
-  build-depends:  base >= 4, aeson, directory, text,
+  build-depends:  base >= 4, aeson, directory, text, mtl,
                   pandoc-types >= 1.16 && < 1.18,
-                  pandoc >= 1.16 && < 1.20,
+                  pandoc >= 1.16 && < 2.1,
                   filepath,
                   bytestring, pandoc-citeproc, process, temporary >= 1.1,
                   yaml >= 0.8.8.7, containers >= 0.4, vector >= 0.10
+  ghc-options:    -funbox-strict-fields -Wall -fno-warn-unused-do-bind
   default-language: Haskell2010
+  other-modules:  Text.CSL.Compat.Pandoc
 
 test-suite test-pandoc-citeproc
   Type:           exitcode-stdio-1.0
   Main-Is:        test-pandoc-citeproc.hs
   Other-Modules:  JSON
                   Prelude
-  Hs-Source-Dirs: tests, prelude
+  Hs-Source-Dirs: tests, prelude, compat
   build-depends:  base >= 4, aeson, directory, text,
-                  pandoc-types >= 1.16 && < 1.18,
-                  pandoc >= 1.16 && < 1.20, filepath,
+                  pandoc-types >= 1.16 && < 1.18, mtl,
+                  pandoc >= 1.16 && < 2.1, filepath,
                   bytestring, pandoc-citeproc, process, temporary >= 1.1,
                   yaml >= 0.8.8.7
+  ghc-options:    -funbox-strict-fields -Wall -fno-warn-unused-do-bind
   default-language: Haskell2010
+  other-modules:  Text.CSL.Compat.Pandoc
diff --git a/src/Text/CSL/Eval/Names.hs b/src/Text/CSL/Eval/Names.hs
--- a/src/Text/CSL/Eval/Names.hs
+++ b/src/Text/CSL/Eval/Names.hs
@@ -119,18 +119,15 @@
 
     | EtAl fm t <- n = do
         o <- gets (options . env)
-        if (getOptionVal "et-al-min" o == [])
-           then return []
-           else do
-             et <- gets etal
-             let i = length as - length et
-                 t' = if null t then "et-al" else t
-             r <- mapM (et_al o False t' fm del) [i .. length as]
-             let (r',r'') = case r of
-                              (x:xs) -> (x, xs)
-                              []     -> ([],[])
-             updateEtal r''
-             return r'
+        et <- gets etal
+        let i = length as - length et
+            t' = if null t then "et-al" else t
+        r <- mapM (et_al o False t' fm del) [i .. length as]
+        let (r',r'') = case r of
+                         (x:xs) -> (x, xs)
+                         []     -> ([],[])
+        updateEtal r''
+        return r'
 
     | otherwise = return []
     where
diff --git a/src/Text/CSL/Input/Bibtex.hs b/src/Text/CSL/Input/Bibtex.hs
--- a/src/Text/CSL/Input/Bibtex.hs
+++ b/src/Text/CSL/Input/Bibtex.hs
@@ -1,5 +1,5 @@
+{-# LANGUAGE ScopedTypeVariables #-}
 {-# OPTIONS_GHC -fno-warn-unused-do-bind #-}
-{-# LANGUAGE CPP #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Text.CSL.Input.Bibtex
@@ -20,7 +20,8 @@
 
 import Text.Parsec hiding (optional, (<|>), many, State)
 import Control.Applicative
-import Text.Pandoc (readLaTeX, ReaderOptions(..))
+import Text.Pandoc (ReaderOptions(..))
+import Text.CSL.Compat.Pandoc (readLaTeX)
 import Text.Pandoc.Definition
 import Text.Pandoc.Generic (bottomUp)
 import Data.Default (Default(def))
@@ -937,7 +938,7 @@
              _          -> (mempty, mempty, mempty)
   let year'' = case safeRead year' of
                     -- EDTF 0 == CSL JSON -1 (1 BCE)
-                    Just n | n <= 0 -> show (n - 1)
+                    Just (n :: Integer) | n <= 0 -> show (n - 1)
                     _ -> year'
   let (season'', month'') = case month' of
                                  "21" -> ("1","")
@@ -1124,14 +1125,8 @@
 
 latex' :: String -> [Block]
 latex' s = Walk.walk removeSoftBreak $
-#if MIN_VERSION_pandoc(1,14,0)
   case readLaTeX def{readerParseRaw = True, readerSmart = True} s of
-                Right (Pandoc _ bs) -> bs
-                _                   -> []
-#else
-  case readLaTeX def{readerParseRaw = True, readerSmart = True} s of
-                Pandoc _ bs         -> bs
-#endif
+                (Pandoc _ bs) -> bs
 
 removeSoftBreak :: Inline -> Inline
 removeSoftBreak SoftBreak = Space
diff --git a/src/Text/CSL/Input/Bibutils.hs b/src/Text/CSL/Input/Bibutils.hs
--- a/src/Text/CSL/Input/Bibutils.hs
+++ b/src/Text/CSL/Input/Bibutils.hs
@@ -19,7 +19,8 @@
     ) where
 
 import qualified Text.Pandoc.UTF8 as UTF8
-import Text.Pandoc
+import Text.Pandoc hiding (readMarkdown)
+import Text.CSL.Compat.Pandoc (readMarkdown)
 import Data.Char
 import System.FilePath ( takeExtension )
 import Text.CSL.Reference hiding ( Value )
@@ -147,14 +148,9 @@
 
 readYamlBib :: String -> Either String [Reference]
 readYamlBib s =
-#if MIN_VERSION_pandoc(1,14,0)
-  case readMarkdown def{readerStandalone = True} s of
-       Right (Pandoc meta _) -> convertRefs (lookupMeta "references" meta)
-       Left e                -> Left (show e)
-#else
-  case readMarkdown def{readerStandalone = True} s of
-       Pandoc meta _ -> convertRefs (lookupMeta "references" meta)
-#endif
+  case readMarkdown def{ readerStandalone = True
+                       , readerSmart = True } s of
+         (Pandoc meta _) -> convertRefs (lookupMeta "references" meta)
 
 convertRefs :: Maybe MetaValue -> Either String [Reference]
 convertRefs Nothing = Right []
diff --git a/src/Text/CSL/Output/Pandoc.hs b/src/Text/CSL/Output/Pandoc.hs
--- a/src/Text/CSL/Output/Pandoc.hs
+++ b/src/Text/CSL/Output/Pandoc.hs
@@ -48,6 +48,8 @@
 clean' _   []  = []
 clean' sty (i:is) =
   case (i:is) of
+      (Str "" : rest) -> clean' sty rest
+      (Str xs : Str ys : rest) -> clean' sty $ Str (xs ++ ys) : rest
       (Link a1 lab1 ('#':r1, "") : Str "\8211" : Link a2 lab2 ('#':r2, "") : rest)
         | r1 == r2, a1 == a2 ->
            Link a1 (lab1 ++ [Str "\8211"] ++ lab2) ('#':r1, "") : clean' sty rest
diff --git a/src/Text/CSL/Output/Plain.hs b/src/Text/CSL/Output/Plain.hs
--- a/src/Text/CSL/Output/Plain.hs
+++ b/src/Text/CSL/Output/Plain.hs
@@ -18,7 +18,8 @@
     ) where
 
 import Text.CSL.Style
-import Text.Pandoc
+import Text.CSL.Compat.Pandoc (writePlain)
+import Text.Pandoc (Block(Plain), Pandoc(..), nullMeta, def)
 
 -- | Render the 'Formatted' into a plain text string.
 renderPlain :: Formatted -> String
diff --git a/src/Text/CSL/Pandoc.hs b/src/Text/CSL/Pandoc.hs
--- a/src/Text/CSL/Pandoc.hs
+++ b/src/Text/CSL/Pandoc.hs
@@ -21,7 +21,7 @@
 import Text.CSL.Output.Pandoc (renderPandoc, renderPandoc')
 import qualified Text.CSL.Style as CSL
 import Text.CSL.Parser
-import Text.CSL.Output.Pandoc ( headInline, tailFirstInlineStr, initInline,
+import Text.CSL.Output.Pandoc ( headInline, tailInline, initInline,
                                 toCapital )
 import Text.CSL.Data (getDefaultCSL)
 import Text.Parsec hiding (State, (<|>))
@@ -272,7 +272,7 @@
 mvPunct _ _ (x : Space : xs) | isSpacy x = x : xs
 mvPunct moveNotes _ (s : x : ys) | isSpacy s, isNote x, startWithPunct ys =
   if moveNotes
-     then Str (headInline ys) : x : tailFirstInlineStr ys
+     then Str (headInline ys) : x : tailInline ys
      else x : ys
 mvPunct moveNotes _ (Cite cs ils : ys) |
      length ils > 1
@@ -280,7 +280,7 @@
    , startWithPunct ys
    , moveNotes
    = Cite cs (init ils ++ [Str (headInline ys) | not (endWithPunct False (init ils))]
-     ++ [last ils]) : tailFirstInlineStr ys
+     ++ [last ils]) : tailInline ys
 mvPunct moveNotes sty (q@(Quoted _ _) : w@(Str _) : x : ys)
   | isNote x, isPunctuationInQuote sty, moveNotes  =
     mvPunctInsideQuote q w ++ (x : ys)
@@ -305,8 +305,8 @@
 
 deNote :: Pandoc -> Pandoc
 deNote = topDown go
-  where go (Cite (c:cs) [Note xs]) =
-            Cite (c:cs) [Note $ sanitize xs]
+  where go (Cite (c:cs) [Note [Para xs]]) =
+            Cite (c:cs) [Note [Para $ toCapital xs]]
         go (Note xs) = Note $ topDown go' xs
         go x = x
         go' (x : Cite cs [Note [Para xs]] : ys) | not (isSpacy x) =
@@ -316,19 +316,15 @@
         go' (Cite cs [Note [Para xs]] : ys) = comb (\zs -> [Cite cs zs]) xs ys
         go' (Note [Para xs] : ys) = comb id xs ys
         go' xs = xs
-        sanitize :: [Block] -> [Block]
-        sanitize [Para xs] =
-           [Para $ toCapital xs ++ if endWithPunct False xs then [Space] else []]
-        sanitize bs = bs
 
 comb :: ([Inline] -> [Inline]) -> [Inline] -> [Inline] -> [Inline]
 comb f xs ys =
   let xs' = if startWithPunct ys && endWithPunct True xs
                then initInline $ removeLeadingPunct xs
                else removeLeadingPunct xs
-      removeLeadingPunct (Str [c] : s : xs)
-          | isSpacy s && (c == ',' || c == '.' || c == ':') = xs
-      removeLeadingPunct xs = xs
+      removeLeadingPunct (Str [c] : s : zs)
+          | isSpacy s && (c == ',' || c == '.' || c == ':') = zs
+      removeLeadingPunct zs = zs
   in  f xs' ++ ys
 
 -- | Retrieve all citations from a 'Pandoc' docuument. To be used with
diff --git a/src/Text/CSL/Parser.hs b/src/Text/CSL/Parser.hs
--- a/src/Text/CSL/Parser.hs
+++ b/src/Text/CSL/Parser.hs
@@ -31,7 +31,7 @@
 import Text.XML.Cursor
 import Data.Maybe (listToMaybe, fromMaybe)
 import Text.Pandoc.UTF8 (fromStringLazy)
-import Text.Pandoc.Shared (fetchItem)
+import Text.CSL.Compat.Pandoc (fetchItem)
 import Text.CSL.Data (getLocale)
 
 -- | Parse a 'String' into a 'Style' (with default locale).
diff --git a/src/Text/CSL/Style.hs b/src/Text/CSL/Style.hs
--- a/src/Text/CSL/Style.hs
+++ b/src/Text/CSL/Style.hs
@@ -106,9 +106,9 @@
 import Data.Yaml.Builder(ToYaml(..))
 import qualified Data.Yaml.Builder as Y
 import Text.Pandoc.Definition hiding (Citation, Cite)
-import Text.Pandoc (readHtml, writeMarkdown,
-                    WriterOptions(..), ReaderOptions(..), WrapOption(..),
+import Text.Pandoc (WriterOptions(..), ReaderOptions(..), WrapOption(..),
                     bottomUp, def)
+import Text.CSL.Compat.Pandoc (readHtml, writeMarkdown)
 import qualified Text.Pandoc.Walk as Walk
 import qualified Text.Pandoc.Builder as B
 import qualified Data.Text as T
@@ -133,16 +133,9 @@
                 $ case readHtml def{ readerSmart = True
                                    , readerParseRaw = True }
                                 (adjustScTags s) of
-#if MIN_VERSION_pandoc(1,14,0)
-                        Right (Pandoc _ [Plain ils])   -> ils
-                        Right (Pandoc _ [Para  ils])   -> ils
-                        Right (Pandoc _ x)             -> Walk.query (:[]) x
-                        Left  _                        -> []
-#else
                         Pandoc _ [Plain ils]   -> ils
                         Pandoc _ [Para  ils]   -> ils
                         Pandoc _ x             -> Walk.query (:[]) x
-#endif
   -- this is needed for versions of pandoc that don't turn
   -- a span with font-variant:small-caps into a SmallCaps element:
   where handleSmallCapsSpans (Span ("",[],[("style",sty)]) ils)
diff --git a/src/Text/CSL/Util.hs b/src/Text/CSL/Util.hs
--- a/src/Text/CSL/Util.hs
+++ b/src/Text/CSL/Util.hs
@@ -49,8 +49,7 @@
 import Data.Aeson.Types (Parser)
 import Data.Text (Text)
 import qualified Data.Text as T
-import Data.Char (toLower, toUpper, isLower, isUpper, isPunctuation,
-                  isLetter, isAscii)
+import Data.Char (toLower, toUpper, isLower, isUpper, isPunctuation, isAscii)
 import qualified Data.Traversable
 import Text.Pandoc.Shared (safeRead, stringify)
 import Text.Pandoc.Walk (walk)
@@ -186,7 +185,10 @@
         startsWithLowercase _           = False
 
 splitUpStr :: [Inline] -> [Inline]
-splitUpStr = splitStrWhen (\c -> isPunctuation c || c == '\160')
+splitUpStr ils =
+  case reverse (splitStrWhen (\c -> isPunctuation c || c == '\160') ils) of
+       [] -> []
+       (x:xs) -> reverse $ Span ("",["lastword"],[]) [x] : xs
 
 unTitlecase :: [Inline] -> [Inline]
 unTitlecase zs = evalState (caseTransform untc zs) SentenceBoundary
@@ -194,6 +196,8 @@
           st <- get
           case (w, st) of
                (y, NoBoundary) -> return y
+               (Str (x:xs), LastWordBoundary) | isUpper x ->
+                 return $ Str (map toLower (x:xs))
                (Str (x:xs), WordBoundary) | isUpper x ->
                  return $ Str (map toLower (x:xs))
                (Str (x:xs), SentenceBoundary) | isLower x ->
@@ -212,16 +216,42 @@
                  _          -> return $ Span ("",["nocase"],[]) xs
         protect x = return x
 
+-- From CSL docs:
+-- "Title case conversion (with text-case set to “title”) for English-language
+-- items is performed by:
+--
+-- For uppercase strings, the first character of each word remains capitalized.
+-- All other letters are lowercased.
+-- For lower or mixed case strings, the first character of each lowercase word
+-- is capitalized. The case of words in mixed or uppercase stays the same.
+-- In both cases, stop words are lowercased, unless they are the first or last
+-- word in the string, or follow a colon. The stop words are “a”, “an”, “and”,
+-- “as”, “at”, “but”, “by”, “down”, “for”, “from”, “in”, “into”, “nor”, “of”,
+-- “on”, “onto”, “or”, “over”, “so”, “the”, “till”, “to”, “up”, “via”, “with”,
+-- and “yet”.
 titlecase :: [Inline] -> [Inline]
 titlecase zs = evalState (caseTransform tc zs) SentenceBoundary
   where tc (Str (x:xs)) = do
           st <- get
           return $ case st of
-                        WordBoundary -> if isShortWord (x:xs) ||
-                                             not (isAscii x && isLetter x)
-                                           then Str (x:xs)
-                                           else Str (toUpper x : xs)
-                        SentenceBoundary -> Str (toUpper x : xs)
+                        LastWordBoundary ->
+                          case (x:xs) of
+                           s | not (isAscii x) -> Str s
+                             | isShortWord s   -> Str s
+                             | all isUpper s   -> Str s
+                             | isMixedCase s   -> Str s
+                             | otherwise       -> Str (toUpper x:map toLower xs)
+                        WordBoundary ->
+                          case (x:xs) of
+                           s | not (isAscii x) -> Str s
+                             | all isUpper s   -> Str s
+                             | isShortWord s   -> Str (map toLower s)
+                             | isMixedCase s   -> Str s
+                             | otherwise       -> Str (toUpper x:map toLower xs)
+                        SentenceBoundary ->
+                           if isMixedCase (x:xs) || (all isUpper (x:xs))
+                              then Str (x:xs)
+                              else Str (toUpper x : xs)
                         _ -> Str (x:xs)
         tc (Span ("",["nocase"],[]) xs) = return $ Span ("",["nocase"],[]) xs
         tc x = return x
@@ -231,8 +261,14 @@
                       ,"in","into","nor","of","on","onto","or","over","so"
                       ,"the","till","to","up","van","von","via","with","yet"]
 
-data CaseTransformState = WordBoundary | SentenceBoundary | NoBoundary
+isMixedCase :: String -> Bool
+isMixedCase xs = any isUpper xs && any isLower xs
 
+data CaseTransformState = WordBoundary
+                        | LastWordBoundary
+                        | SentenceBoundary
+                        | NoBoundary
+
 caseTransform :: (Inline -> State CaseTransformState Inline) -> [Inline]
               -> State CaseTransformState [Inline]
 caseTransform xform = fmap reverse . foldM go [] . splitUpStr
@@ -261,6 +297,12 @@
                res <- xform (Str xs)
                put NoBoundary
                return $ res : acc
+        go acc (Span ("",["lastword"],[]) [x]) = do
+               b <- get
+               case b of
+                    WordBoundary -> put LastWordBoundary
+                    _ -> return ()
+               go acc x
         go acc (Span ("",classes,[]) xs)
           | null classes || classes == ["nocase"] = do
                res <- xform (Span ("",classes,[]) xs)
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -7,11 +7,14 @@
     debug: false
 packages:
 - '.'
-- location:
-    git: https://github.com/jgm/pandoc.git
-    commit: fb8a2540bdb91eee0ecf620b4e9d7acf3d78042f
+# - location:
+#     git: https://github.com/jgm/pandoc.git
+#     commit: 411434bf130a3116290c7ca54358678e03d0d92b
+#   extra-dep: true
 extra-deps:
+- pandoc-1.19.1
 - doctemplates-0.1.0.2
 - pandoc-types-1.17.0.4
 - texmath-0.9
-resolver: lts-7.9
+# - skylighting-0.1.1.2
+resolver: lts-7.14
diff --git a/tests/issue13.expected.native b/tests/issue13.expected.native
--- a/tests/issue13.expected.native
+++ b/tests/issue13.expected.native
@@ -1,3 +1,5 @@
 Pandoc (Meta {unMeta = fromList [("csl",MetaInlines [Str "tests/chicago-note-bibliography.csl"]),("references",MetaList [MetaMap (fromList [("author",MetaMap (fromList [("family",MetaInlines [Str "Author"]),("given",MetaList [MetaInlines [Str "Ann"]])])),("container-title",MetaInlines [Str "Journal"]),("id",MetaInlines [Str "item1"]),("issued",MetaList [MetaMap (fromList [("year",MetaString "2011")])]),("title",MetaInlines [Str "Title"]),("type",MetaInlines [Str "article-newspaper"])])])]})
-[Para [Str "Foo",Str ".",Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Note [Para [Str "Author",Str ",",Space,Str "\8220",Str "Title",Str ".",Str "\8221",Space]]],Str ""]
-,Div ("refs",["references"],[]) [Div ("ref-item1",[],[]) [Para [Str "Author",Str ",",Space,Str "Ann",Str ".",Space,Str "\8220",Str "Title",Str ".",Str "\8221",Space,Emph [Str "Journal"],Str ",",Space,Str "2011",Str "."]]]]
+[Para [Str "Foo",Str ".",Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Note [Para [Str "Author,",Space,Str "\8220Title.\8221"]]]]
+,Div ("refs",["references"],[])
+ [Div ("ref-item1",[],[])
+  [Para [Str "Author,",Space,Str "Ann.",Space,Str "\8220Title.\8221",Space,Emph [Str "Journal"],Str ",",Space,Str "2011."]]]]
diff --git a/tests/issue175.expected.native b/tests/issue175.expected.native
--- a/tests/issue175.expected.native
+++ b/tests/issue175.expected.native
@@ -1,7 +1,9 @@
 Pandoc (Meta {unMeta = fromList [("references",MetaList [MetaMap (fromList [("author",MetaList [MetaMap (fromList [("family",MetaInlines [Str "Doe"]),("given",MetaInlines [Str "Jane"])])]),("container-title",MetaInlines [Str "A",Space,Str "magazine"]),("id",MetaInlines [Str "item1"]),("issued",MetaList [MetaMap (fromList [("month",MetaString "1"),("year",MetaString "2011")]),MetaMap (fromList [("month",MetaString "2"),("year",MetaString "2011")])]),("page",MetaInlines [Str "33-44"]),("title",MetaInlines [Str "A",Space,Str "title"]),("type",MetaInlines [Str "article-magazine"])])])]})
 [Header 2 ("missing-en-dash-between-months",[],[]) [Str "Missing",Space,Str "en-dash",Space,Str "between",Space,Str "months"]
-,Para [Str "Foo",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Str "(",Str "Doe",Space,Str "2011",Str ")"],Str "."]
+,Para [Str "Foo",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Str "(Doe",Space,Str "2011)"],Str "."]
 ,Header 2 ("expected",[],[]) [Str "Expected"]
 ,BlockQuote
  [Para [Str "Doe,",Space,Str "Jane.",Space,Str "2011.",Space,Str "\8220A",Space,Str "Title.\8221",Space,Emph [Str "A",Space,Str "Magazine"],Str ",",Space,Str "January\8211February."]]
-,Div ("refs",["references"],[]) [Div ("ref-item1",[],[]) [Para [Str "Doe",Str ",",Space,Str "Jane",Str ".",Space,Str "2011",Str ".",Space,Str "\8220",Str "A",Space,Str "Title",Str ".",Str "\8221",Space,Emph [Str "A",Space,Str "Magazine"],Str ",",Space,Str "January",Str "\8211",Str "February",Str "."]]]]
+,Div ("refs",["references"],[])
+ [Div ("ref-item1",[],[])
+  [Para [Str "Doe,",Space,Str "Jane.",Space,Str "2011.",Space,Str "\8220A",Space,Str "Title.\8221",Space,Emph [Str "A",Space,Str "Magazine"],Str ",",Space,Str "January\8211February."]]]]
diff --git a/tests/issue197.expected.native b/tests/issue197.expected.native
--- a/tests/issue197.expected.native
+++ b/tests/issue197.expected.native
@@ -1,5 +1,5 @@
 Pandoc (Meta {unMeta = fromList [("csl",MetaInlines [Str "tests/chicago-fullnote-bibliography.csl"]),("nocite",MetaInlines [Cite [Citation {citationId = "test", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@test"]]),("references",MetaList [MetaMap (fromList [("editor",MetaList [MetaMap (fromList [("family",MetaInlines [Str "Abelard"]),("given",MetaInlines [Str "Peter"])])]),("id",MetaInlines [Str "test"]),("issued",MetaMap (fromList [("date-parts",MetaList [MetaList [MetaString "1989"]])])),("publisher",MetaInlines [Str "Clarendon",Space,Str "Press"]),("publisher-place",MetaInlines [Str "Oxford"]),("title",MetaInlines [Str "Test"]),("type",MetaInlines [Str "book"])])])]})
-[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "test",Str ".",Cite [Citation {citationId = "test", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Note [Para [Str "Peter",Space,Str "Abelard",Str ",",Space,Str "ed.",Str ",",Space,Emph [Str "Test"],Space,Str "(",Str "Oxford",Str ":",Space,Str "Clarendon",Space,Str "Press",Str ",",Space,Str "1989",Str ")",Str ".",Space]]],Str ""]
+[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "test",Str ".",Cite [Citation {citationId = "test", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Note [Para [Str "Peter",Space,Str "Abelard,",Space,Str "ed.,",Space,Emph [Str "Test"],Space,Str "(Oxford:",Space,Str "Clarendon",Space,Str "Press,",Space,Str "1989)."]]]]
 ,Div ("refs",["references"],[])
  [Div ("ref-test",[],[])
-  [Para [Str "Abelard",Str ",",Space,Str "Peter",Str ",",Space,Str "ed.",Space,Emph [Str "Test"],Str ".",Space,Str "Oxford",Str ":",Space,Str "Clarendon",Space,Str "Press",Str ",",Space,Str "1989",Str "."]]]]
+  [Para [Str "Abelard,",Space,Str "Peter,",Space,Str "ed.",Space,Emph [Str "Test"],Str ".",Space,Str "Oxford:",Space,Str "Clarendon",Space,Str "Press,",Space,Str "1989."]]]]
diff --git a/tests/issue61.expected.native b/tests/issue61.expected.native
--- a/tests/issue61.expected.native
+++ b/tests/issue61.expected.native
@@ -1,9 +1,13 @@
 Pandoc (Meta {unMeta = fromList [("csl",MetaInlines [Str "tests/modern-humanities-research-association.csl"]),("references",MetaList [MetaMap (fromList [("author",MetaList [MetaMap (fromList [("family",MetaInlines [Str "Doe"]),("given",MetaInlines [Str "John"])])]),("id",MetaInlines [Str "doe"]),("issued",MetaMap (fromList [("date-parts",MetaList [MetaList [MetaString "1985"]])])),("publisher",MetaInlines [Str "Publisher"]),("title",MetaInlines [Str "Title"]),("type",MetaInlines [Str "book"])]),MetaMap (fromList [("author",MetaList [MetaMap (fromList [("family",MetaInlines [Str "Roe"]),("given",MetaInlines [Str "Rob"])])]),("id",MetaInlines [Str "roe"]),("issued",MetaMap (fromList [("date-parts",MetaList [MetaList [MetaString "1985"]])])),("publisher",MetaInlines [Str "Publisher"]),("title",MetaInlines [Str "Title"]),("type",MetaInlines [Str "book"])])])]})
 [Header 1 ("text",[],[]) [Str "Text"]
-,Para [Str "Foo",Cite [Citation {citationId = "doe", citationPrefix = [], citationSuffix = [Str ",",Space,Str "VIII,",Space,Str "89"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Note [Para [Str "John",Space,Str "Doe,",Space,Emph [Str "Title"],Space,Str "(Publisher,",Space,Str "1985),",Space,Str "VIII,",Space,Str "89."]]]]
-,Para [Str "Foo",Cite [Citation {citationId = "roe", citationPrefix = [], citationSuffix = [Str ",",Space,Str "III,",Space,Str "89"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 2}] [Note [Para [Str "Rob",Space,Str "Roe,",Space,Emph [Str "Title"],Space,Str "(Publisher,",Space,Str "1985),",Space,Str "III,",Space,Str "89."]]]]
-,Para [Str "Foo",Cite [Citation {citationId = "doe", citationPrefix = [], citationSuffix = [Str ",",Space,Str "LVIII,",Space,Str "89"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 3}] [Note [Para [Str "Doe,",Space,Str "LVIII,",Space,Str "89."]]]]
-,Para [Str "Foo",Cite [Citation {citationId = "roe", citationPrefix = [], citationSuffix = [Str ",",Space,Str "MVIII,",Space,Str "89"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 4}] [Note [Para [Str "Roe,",Space,Str "MVIII,",Space,Str "89."]]]]
-,Para [Str "Foo",Cite [Citation {citationId = "doe", citationPrefix = [], citationSuffix = [Str ",",Space,Str "CL,",Space,Str "89"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 5}] [Note [Para [Str "Doe,",Space,Str "CL,",Space,Str "89."]]]]
+,Para [Str "Foo",Str "",Cite [Citation {citationId = "doe", citationPrefix = [], citationSuffix = [Str ",",Space,Str "VIII,",Space,Str "89"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Note [Para [Str "John",Space,Str "Doe,",Space,Emph [Str "Title"],Space,Str "(Publisher,",Space,Str "1985),",Space,Str "VIII,",Space,Str "89."]]]]
+,Para [Str "Foo",Str "",Cite [Citation {citationId = "roe", citationPrefix = [], citationSuffix = [Str ",",Space,Str "III,",Space,Str "89"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 2}] [Note [Para [Str "Rob",Space,Str "Roe,",Space,Emph [Str "Title"],Space,Str "(Publisher,",Space,Str "1985),",Space,Str "III,",Space,Str "89."]]]]
+,Para [Str "Foo",Str "",Cite [Citation {citationId = "doe", citationPrefix = [], citationSuffix = [Str ",",Space,Str "LVIII,",Space,Str "89"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 3}] [Note [Para [Str "Doe,",Space,Str "LVIII,",Space,Str "89."]]]]
+,Para [Str "Foo",Str "",Cite [Citation {citationId = "roe", citationPrefix = [], citationSuffix = [Str ",",Space,Str "MVIII,",Space,Str "89"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 4}] [Note [Para [Str "Roe,",Space,Str "MVIII,",Space,Str "89."]]]]
+,Para [Str "Foo",Str "",Cite [Citation {citationId = "doe", citationPrefix = [], citationSuffix = [Str ",",Space,Str "CL,",Space,Str "89"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 5}] [Note [Para [Str "Doe,",Space,Str "CL,",Space,Str "89."]]]]
 ,Header 1 ("references",["unnumbered"],[]) [Str "References"]
-,Div ("refs",["references"],[]) [Div ("ref-doe",[],[]) [Para [Str "Doe,",Space,Str "John,",Space,Emph [Str "Title"],Space,Str "(Publisher,",Space,Str "1985)"]],Div ("ref-roe",[],[]) [Para [Str "Roe,",Space,Str "Rob,",Space,Emph [Str "Title"],Space,Str "(Publisher,",Space,Str "1985)"]]]]
+,Div ("refs",["references"],[])
+ [Div ("ref-doe",[],[])
+  [Para [Str "Doe,",Space,Str "John,",Space,Emph [Str "Title"],Space,Str "(Publisher,",Space,Str "1985)"]]
+ ,Div ("ref-roe",[],[])
+  [Para [Str "Roe,",Space,Str "Rob,",Space,Emph [Str "Title"],Space,Str "(Publisher,",Space,Str "1985)"]]]]
diff --git a/tests/issue64.expected.native b/tests/issue64.expected.native
--- a/tests/issue64.expected.native
+++ b/tests/issue64.expected.native
@@ -1,8 +1,8 @@
 Pandoc (Meta {unMeta = fromList [("bibliography",MetaList [MetaInlines [Str "tests/biblio.bib"]]),("nocite",MetaInlines [Cite [Citation {citationId = "*", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [RawInline (Format "latex") "\\nocite{*}"]])]})
 [Div ("refs",["references"],[])
  [Div ("ref-item1",[],[])
-  [Para [Str "Doe",Str ",",Space,Str "John",Str ".",Space,Str "2005",Str ".",Space,Emph [Str "First",Space,Str "Book"],Str ".",Space,Str "Cambridge",Str ":",Space,Str "Cambridge",Space,Str "University",Space,Str "Press",Str "."]]
+  [Para [Str "Doe,",Space,Str "John.",Space,Str "2005.",Space,Emph [Str "First",Space,Str "Book"],Str ".",Space,Str "Cambridge:",Space,Str "Cambridge",Space,Str "University",Space,Str "Press."]]
  ,Div ("ref-item2",[],[])
-  [Para [Str "\8212\8212\8212",Str ".",Space,Str "2006",Str ".",Space,Str "\8220",Str "Article",Str ".",Str "\8221",Space,Emph [Str "Journal",Space,Str "of",Space,Str "Generic",Space,Str "Studies"],Space,Str "6",Str ":",Space,Str "33\8211\&34",Str "."]]
+  [Para [Str "\8212\8212\8212.",Space,Str "2006.",Space,Str "\8220Article.\8221",Space,Emph [Str "Journal",Space,Str "of",Space,Str "Generic",Space,Str "Studies"],Space,Str "6:",Space,Str "33\8211\&34."]]
  ,Div ("ref-\1087\1091\1085\1082\1090\&3",[],[])
-  [Para [Str "Doe",Str ",",Space,Str "John",Str ",",Space,Str "and",Space,Str "Jenny",Space,Str "Roe",Str ".",Space,Str "2007",Str ".",Space,Str "\8220",Str "Why",Space,Str "Water",Space,Str "Is",Space,Str "Wet",Str ".",Str "\8221",Space,Str "In",Space,Emph [Str "Third",Space,Str "Book"],Str ",",Space,Str "edited",Space,Str "by",Space,Str "Sam",Space,Str "Smith",Str ".",Space,Str "Oxford",Str ":",Space,Str "Oxford",Space,Str "University",Space,Str "Press",Str "."]]]]
+  [Para [Str "Doe,",Space,Str "John,",Space,Str "and",Space,Str "Jenny",Space,Str "Roe.",Space,Str "2007.",Space,Str "\8220Why",Space,Str "Water",Space,Str "Is",Space,Str "Wet.\8221",Space,Str "In",Space,Emph [Str "Third",Space,Str "Book"],Str ",",Space,Str "edited",Space,Str "by",Space,Str "Sam",Space,Str "Smith.",Space,Str "Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press."]]]]
diff --git a/tests/issue68.expected.native b/tests/issue68.expected.native
--- a/tests/issue68.expected.native
+++ b/tests/issue68.expected.native
@@ -1,3 +1,5 @@
 Pandoc (Meta {unMeta = fromList [("csl",MetaInlines [Str "tests/chicago-fullnote-bibliography.csl"]),("references",MetaList [MetaMap (fromList [("ISBN",MetaInlines [Str "0888441088"]),("author",MetaList [MetaMap (fromList [("family",MetaInlines [Str "Goering"]),("given",MetaInlines [Str "Joseph"])])]),("call-number",MetaInlines [Str "BV4009",Space,Str ".W55",Space,Str "1992"]),("collection-number",MetaInlines [Str "108"]),("collection-title",MetaInlines [Str "Studies",Space,Str "and",Space,Str "Texts"]),("event-place",MetaInlines [Str "Toronto"]),("first-reference-note-number",MetaString "1"),("id",MetaInlines [Str "goering:1992william"]),("issued",MetaMap (fromList [("date-parts",MetaList [MetaList [MetaString "1992"]])])),("publisher",MetaInlines [Str "Pontifical",Space,Str "Institute",Space,Str "of",Space,Str "Mediaeval",Space,Str "Studies"]),("publisher-place",MetaInlines [Str "Toronto"]),("source",MetaInlines [Str "toroprod.library.utoronto.ca",Space,Str "Library",Space,Str "Catalog"]),("title",MetaInlines [Str "William",Space,Str "de",Space,Str "Montibus",Space,Str "(c.",Space,Str "1140\8211\&1213):",Space,Str "The",Space,Str "Schools",Space,Str "and",Space,Str "the",Space,Str "Literature",Space,Str "of",Space,Str "Pastoral",Space,Str "Care"]),("title-short",MetaInlines [Str "William",Space,Str "de",Space,Str "Montibus"]),("type",MetaInlines [Str "book"])])])]})
-[Para [Str "...",Space,Str "a",Space,Str "prose",Space,Str "commentary",Str ".",Cite [Citation {citationId = "goering:1992william", citationPrefix = [Str "the",Space,Str "text",Space,Str "of",Space,Str "fol.",Space,Str "9r",Space,Str "is",Space,Str "printed",Space,Str "in"], citationSuffix = [Str ",",Space,Str "pp.",Space,Str "501\8211\&3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Note [Para [Str "The",Space,Str "text",Space,Str "of",Space,Str "fol.",Space,Str "9r",Space,Str "is",Space,Str "printed",Space,Str "in",Space,Str "Joseph",Space,Str "Goering",Str ",",Space,Emph [Str "William",Space,Str "de",Space,Str "Montibus",Space,Str "(",Str "c",Str ".",Space,Str "1140",Str "\8211",Str "1213",Str ")",Str ":",Space,Str "The",Space,Str "Schools",Space,Str "and",Space,Str "the",Space,Str "Literature",Space,Str "of",Space,Str "Pastoral",Space,Str "Care"],Str ",",Space,Str "Studies",Space,Str "and",Space,Str "Texts",Space,Str "108",Space,Str "(",Str "Toronto",Str ":",Space,Str "Pontifical",Space,Str "Institute",Space,Str "of",Space,Str "Mediaeval",Space,Str "Studies",Str ",",Space,Str "1992",Str ")",Str ",",Space,Str "501\8211\&3",Str ".",Space]]],Str "",Space,Str "...",Space,Str "a",Space,Str "collection",Space,Str "of",Space,Str "verses",Space,Str "with",Space,Str "a",Space,Str "formal",Space,Str "prose",Space,Str "commentary",Cite [Citation {citationId = "goering:1992william", citationPrefix = [Str "excerpts",Space,Str "from",Space,Str "this",Space,Str "text",Space,Str "were",Space,Str "previously",Space,Str "printed",Space,Str "in"], citationSuffix = [Str ",",Space,Str "p.",Space,Str "508\8211\&14"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 2},Citation {citationId = "goering:1992william", citationPrefix = [Str "it",Space,Str "was",Space,Str "also",Space,Str "briefly",Space,Str "described",Space,Str "in"], citationSuffix = [Str ",",Space,Str "pp.",Space,Str "141\8211\&42"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 3}] [Note [Para [Str "Excerpts",Space,Str "from",Space,Str "this",Space,Str "text",Space,Str "were",Space,Str "previously",Space,Str "printed",Space,Str "in",Space,Str "ibid.",Str ",",Space,Str "508\8211\&14",Str ";",Space,Str "it",Space,Str "was",Space,Str "also",Space,Str "briefly",Space,Str "described",Space,Str "in",Space,Str "ibid.",Str ",",Space,Str "141\8211\&42",Str ".",Space]]],Space,Str "...",Space,Str "and",Space,Str "finally",Space,Str "a",Space,Str "note",Space,Str "starting",Space,Str "with",Space,Str "a",Space,Str "citation",Str ".",Cite [Citation {citationId = "goering:1992william", citationPrefix = [], citationSuffix = [Str ",",Space,Str "pp.",Space,Str "141-42"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 4}] [Note [Para [Str "Ibid.",Str ",",Space,Str "141\8211\&42",Str ".",Space]]],Str ""]
-,Div ("refs",["references"],[]) [Div ("ref-goering:1992william",[],[]) [Para [Str "Goering",Str ",",Space,Str "Joseph",Str ".",Space,Emph [Str "William",Space,Str "de",Space,Str "Montibus",Space,Str "(",Str "c",Str ".",Space,Str "1140",Str "\8211",Str "1213",Str ")",Str ":",Space,Str "The",Space,Str "Schools",Space,Str "and",Space,Str "the",Space,Str "Literature",Space,Str "of",Space,Str "Pastoral",Space,Str "Care"],Str ".",Space,Str "Studies",Space,Str "and",Space,Str "Texts",Space,Str "108",Str ".",Space,Str "Toronto",Str ":",Space,Str "Pontifical",Space,Str "Institute",Space,Str "of",Space,Str "Mediaeval",Space,Str "Studies",Str ",",Space,Str "1992",Str "."]]]]
+[Para [Str "...",Space,Str "a",Space,Str "prose",Space,Str "commentary",Str ".",Cite [Citation {citationId = "goering:1992william", citationPrefix = [Str "the",Space,Str "text",Space,Str "of",Space,Str "fol.",Space,Str "9r",Space,Str "is",Space,Str "printed",Space,Str "in"], citationSuffix = [Str ",",Space,Str "pp.",Space,Str "501\8211\&3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Note [Para [Str "The",Space,Str "text",Space,Str "of",Space,Str "fol.",Space,Str "9r",Space,Str "is",Space,Str "printed",Space,Str "in",Space,Str "Joseph",Space,Str "Goering,",Space,Emph [Str "William",Space,Str "de",Space,Str "Montibus",Space,Str "(c.",Space,Str "1140\8211\&1213):",Space,Str "The",Space,Str "Schools",Space,Str "and",Space,Str "the",Space,Str "Literature",Space,Str "of",Space,Str "Pastoral",Space,Str "Care"],Str ",",Space,Str "Studies",Space,Str "and",Space,Str "Texts",Space,Str "108",Space,Str "(Toronto:",Space,Str "Pontifical",Space,Str "Institute",Space,Str "of",Space,Str "Mediaeval",Space,Str "Studies,",Space,Str "1992),",Space,Str "501\8211\&3."]]],Space,Str "...",Space,Str "a",Space,Str "collection",Space,Str "of",Space,Str "verses",Space,Str "with",Space,Str "a",Space,Str "formal",Space,Str "prose",Space,Str "commentary",Cite [Citation {citationId = "goering:1992william", citationPrefix = [Str "excerpts",Space,Str "from",Space,Str "this",Space,Str "text",Space,Str "were",Space,Str "previously",Space,Str "printed",Space,Str "in"], citationSuffix = [Str ",",Space,Str "p.",Space,Str "508\8211\&14"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 2},Citation {citationId = "goering:1992william", citationPrefix = [Str "it",Space,Str "was",Space,Str "also",Space,Str "briefly",Space,Str "described",Space,Str "in"], citationSuffix = [Str ",",Space,Str "pp.",Space,Str "141\8211\&42"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 3}] [Note [Para [Str "Excerpts",Space,Str "from",Space,Str "this",Space,Str "text",Space,Str "were",Space,Str "previously",Space,Str "printed",Space,Str "in",Space,Str "ibid.,",Space,Str "508\8211\&14;",Space,Str "it",Space,Str "was",Space,Str "also",Space,Str "briefly",Space,Str "described",Space,Str "in",Space,Str "ibid.,",Space,Str "141\8211\&42."]]],Space,Str "...",Space,Str "and",Space,Str "finally",Space,Str "a",Space,Str "note",Space,Str "starting",Space,Str "with",Space,Str "a",Space,Str "citation",Str ".",Cite [Citation {citationId = "goering:1992william", citationPrefix = [], citationSuffix = [Str ",",Space,Str "pp.",Space,Str "141-42"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 4}] [Note [Para [Str "Ibid.,",Space,Str "141\8211\&42."]]]]
+,Div ("refs",["references"],[])
+ [Div ("ref-goering:1992william",[],[])
+  [Para [Str "Goering,",Space,Str "Joseph.",Space,Emph [Str "William",Space,Str "de",Space,Str "Montibus",Space,Str "(c.",Space,Str "1140\8211\&1213):",Space,Str "The",Space,Str "Schools",Space,Str "and",Space,Str "the",Space,Str "Literature",Space,Str "of",Space,Str "Pastoral",Space,Str "Care"],Str ".",Space,Str "Studies",Space,Str "and",Space,Str "Texts",Space,Str "108.",Space,Str "Toronto:",Space,Str "Pontifical",Space,Str "Institute",Space,Str "of",Space,Str "Mediaeval",Space,Str "Studies,",Space,Str "1992."]]]]
diff --git a/tests/issue77.expected.native b/tests/issue77.expected.native
--- a/tests/issue77.expected.native
+++ b/tests/issue77.expected.native
@@ -1,3 +1,13 @@
 Pandoc (Meta {unMeta = fromList [("csl",MetaInlines [Str "tests/chicago-fullnote-bibliography.csl"]),("references",MetaList [MetaMap (fromList [("author",MetaList [MetaMap (fromList [("family",MetaInlines [Str "Doe"]),("given",MetaInlines [Str "John,",Space,Str "III"]),("parse-names",MetaBool True)])]),("id",MetaInlines [Str "item1"]),("type",MetaInlines [Str "book"])]),MetaMap (fromList [("author",MetaList [MetaMap (fromList [("family",MetaInlines [Str "van",Space,Str "Gogh"]),("given",MetaInlines [Str "Vincent"]),("parse-names",MetaBool True)])]),("id",MetaInlines [Str "item2"]),("type",MetaInlines [Str "book"])]),MetaMap (fromList [("author",MetaList [MetaMap (fromList [("family",MetaInlines [Str "Humboldt"]),("given",MetaInlines [Str "Alexander",Space,Str "von"]),("parse-names",MetaBool True)])]),("id",MetaInlines [Str "item3"]),("type",MetaInlines [Str "book"])]),MetaMap (fromList [("author",MetaList [MetaMap (fromList [("family",MetaInlines [Str "Bennett"]),("given",MetaInlines [Str "Frank",Space,Str "G.,!",Space,Str "Jr."]),("parse-names",MetaBool True)])]),("id",MetaInlines [Str "item4"]),("type",MetaInlines [Str "book"])]),MetaMap (fromList [("author",MetaList [MetaMap (fromList [("family",MetaInlines [Str "Dumboldt"]),("given",MetaInlines [Str "Ezekiel,",Space,Str "III"]),("parse-names",MetaBool True)])]),("id",MetaInlines [Str "item5"]),("type",MetaInlines [Str "book"])])])]})
-[Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 2},Citation {citationId = "item3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 3},Citation {citationId = "item4", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 4},Citation {citationId = "item5", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 5}] [Note [Para [Str "John",Space,Str "Doe",Space,Str "III",Str ",",Space,Str "n.d.",Str ";",Space,Str "Vincent",Space,Str "van",Space,Str "G",Str "ogh",Str ",",Space,Str "n.d.",Str ";",Space,Str "Alexander",Space,Str "von",Space,Str "Humboldt",Str ",",Space,Str "n.d.",Str ";",Space,Str "Frank",Space,Str "G",Str ".",Space,Str "Bennett",Str ",",Space,Str "Jr.",Str ",",Space,Str "n.d.",Str ";",Space,Str "Ezekiel",Space,Str "Dumboldt",Space,Str "III",Str ",",Space,Str "n.d.",Space]]]]
-,Div ("refs",["references"],[]) [Div ("ref-item4",[],[]) [Para [Str "Bennett",Str ",",Space,Str "Frank",Space,Str "G",Str ".",Str ",",Space,Str "Jr.",Str ",",Space,Str "n.d."]],Div ("ref-item1",[],[]) [Para [Str "Doe",Str ",",Space,Str "John",Str ",",Space,Str "III",Str ",",Space,Str "n.d."]],Div ("ref-item5",[],[]) [Para [Str "Dumboldt",Str ",",Space,Str "Ezekiel",Str ",",Space,Str "III",Str ",",Space,Str "n.d."]],Div ("ref-item3",[],[]) [Para [Str "Humboldt",Str ",",Space,Str "Alexander",Space,Str "von",Str ",",Space,Str "n.d."]],Div ("ref-item2",[],[]) [Para [Str "van",Space,Str "G",Str "ogh",Str ",",Space,Str "Vincent",Str ",",Space,Str "n.d."]]]]
+[Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 2},Citation {citationId = "item3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 3},Citation {citationId = "item4", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 4},Citation {citationId = "item5", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 5}] [Note [Para [Str "John",Space,Str "Doe",Space,Str "III,",Space,Str "n.d.;",Space,Str "Vincent",Space,Str "van",Space,Str "Gogh,",Space,Str "n.d.;",Space,Str "Alexander",Space,Str "von",Space,Str "Humboldt,",Space,Str "n.d.;",Space,Str "Frank",Space,Str "G.",Space,Str "Bennett,",Space,Str "Jr.,",Space,Str "n.d.;",Space,Str "Ezekiel",Space,Str "Dumboldt",Space,Str "III,",Space,Str "n.d."]]]]
+,Div ("refs",["references"],[])
+ [Div ("ref-item4",[],[])
+  [Para [Str "Bennett,",Space,Str "Frank",Space,Str "G.,",Space,Str "Jr.,",Space,Str "n.d."]]
+ ,Div ("ref-item1",[],[])
+  [Para [Str "Doe,",Space,Str "John,",Space,Str "III,",Space,Str "n.d."]]
+ ,Div ("ref-item5",[],[])
+  [Para [Str "Dumboldt,",Space,Str "Ezekiel,",Space,Str "III,",Space,Str "n.d."]]
+ ,Div ("ref-item3",[],[])
+  [Para [Str "Humboldt,",Space,Str "Alexander",Space,Str "von,",Space,Str "n.d."]]
+ ,Div ("ref-item2",[],[])
+  [Para [Str "van",Space,Str "Gogh,",Space,Str "Vincent,",Space,Str "n.d."]]]]
diff --git a/tests/issue82.expected.native b/tests/issue82.expected.native
--- a/tests/issue82.expected.native
+++ b/tests/issue82.expected.native
@@ -1,4 +1,6 @@
 Pandoc (Meta {unMeta = fromList [("csl",MetaInlines [Str "tests/chicago-annotated-bibliography.csl"]),("references",MetaList [MetaMap (fromList [("URL",MetaInlines [Str "https://www.worldcat.org/"]),("accessed",MetaMap (fromList [("date-parts",MetaList [MetaList [MetaString "2014",MetaString "9",MetaString "19"]])])),("author",MetaList [MetaMap (fromList [("literal",MetaInlines [Str "OCLC"])])]),("first-reference-note-number",MetaString "1"),("id",MetaInlines [Str "OCLC_i1099"]),("title",MetaInlines [Str "WorldCat"]),("type",MetaInlines [Str "webpage"])])])]})
 [Header 1 ("title",[],[]) [Str "Title"]
-,Para [Str "Some",Space,Str "text.",Note [Para [Str "Comment",Space,Str "regarding",Space,Str "text,",Space,Str "supported",Space,Str "by",Space,Str "citation",Space,Cite [Citation {citationId = "OCLC_i1099", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Str "OCLC",Str ",",Space,Str "\8220",Str "WorldCat",Str ".",Str "\8221"]]]]
-,Div ("refs",["references"],[]) [Div ("ref-OCLC_i1099",[],[]) [Para [Str "OCLC",Str ".",Space,Str "\8220",Str "WorldCat",Str ".",Str "\8221",Space,Str "Accessed",Space,Str "September",Space,Str "19",Str ",",Space,Str "2014",Str ".",Space,Link ("",[],[]) [Str "https://www.worldcat.org/"] ("https://www.worldcat.org/",""),Str "."]]]]
+,Para [Str "Some",Space,Str "text.",Note [Para [Str "Comment",Space,Str "regarding",Space,Str "text,",Space,Str "supported",Space,Str "by",Space,Str "citation",Space,Cite [Citation {citationId = "OCLC_i1099", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Str "OCLC,",Space,Str "\8220WorldCat.\8221"]]]]
+,Div ("refs",["references"],[])
+ [Div ("ref-OCLC_i1099",[],[])
+  [Para [Str "OCLC.",Space,Str "\8220WorldCat.\8221",Space,Str "Accessed",Space,Str "September",Space,Str "19,",Space,Str "2014.",Space,Link ("",[],[]) [Str "https://www.worldcat.org/"] ("https://www.worldcat.org/",""),Str "."]]]]
diff --git a/tests/mhra.expected.native b/tests/mhra.expected.native
--- a/tests/mhra.expected.native
+++ b/tests/mhra.expected.native
@@ -2,17 +2,23 @@
 [Header 1 ("pandoc-with-citeproc-hs",[],[]) [Str "Pandoc",Space,Str "with",Space,Str "citeproc-hs"]
 ,Para [Cite [Citation {citationId = "nonexistent", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Note [Para [Span ("",["citeproc-not-found"],[("data-reference-id","nonexistent")]) [Strong [Str "???"]]]]]]
 ,Para [Cite [Citation {citationId = "nonexistent", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 2}] [Note [Para [Span ("",["citeproc-not-found"],[("data-reference-id","nonexistent")]) [Strong [Str "???"]]]]]]
-,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 3}] [Str "John",Space,Str "Doe.",Note [Para [Emph [Str "First",Space,Str "Book"],Space,Str "(Cambridge:",Space,Str "Cambridge",Space,Str "University",Space,Str "Press,",Space,Str "2005)."]]]]
+,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 3}] [Str "John",Space,Str "Doe",Str ".",Note [Para [Emph [Str "First",Space,Str "Book"],Space,Str "(Cambridge:",Space,Str "Cambridge",Space,Str "University",Space,Str "Press,",Space,Str "2005)."]]]]
 ,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "30"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 4}] [Str "Doe",Note [Para [Emph [Str "First",Space,Str "Book"],Str ",",Space,Str "p.",Space,Str "30."]]],Space,Str "says",Space,Str "blah."]
 ,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "30,",Space,Str "with",Space,Str "suffix"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 5}] [Str "Doe",Note [Para [Emph [Str "First",Space,Str "Book"],Str ",",Space,Str "p.",Space,Str "30,",Space,Str "with",Space,Str "suffix."]]],Space,Str "says",Space,Str "blah."]
 ,Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 6},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [Space,Str "p.",Space,Str "30"], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 7},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [Str "see",Space,Str "also"], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 8}] [Str "Doe",Note [Para [Emph [Str "First",Space,Str "Book"],Str ";",Space,Str "\8216Article\8217,",Space,Emph [Str "Journal",Space,Str "of",Space,Str "Generic",Space,Str "Studies"],Str ",",Space,Str "6",Space,Str "(2006),",Space,Str "33\8211\&34",Space,Str "(p.",Space,Str "30);",Space,Str "see",Space,Str "also",Space,Str "John",Space,Str "Doe",Space,Str "and",Space,Str "Jenny",Space,Str "Roe,",Space,Str "\8216Why",Space,Str "Water",Space,Str "Is",Space,Str "Wet\8217,",Space,Str "in",Space,Emph [Str "Third",Space,Str "Book"],Str ",",Space,Str "ed.",Space,Str "by",Space,Str "Sam",Space,Str "Smith",Space,Str "(Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press,",Space,Str "2007)."]]],Space,Str "says",Space,Str "blah."]
-,Para [Str "In",Space,Str "a",Space,Str "note.",Note [Para [Cite [Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "12"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 9}] [Str "Doe",Space,Str "and",Space,Str "Roe,",Space,Str "p.",Space,Str "12"],Space,Str "and",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "locators",Space,Cite [Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 10}] [Str "Doe",Space,Str "and",Space,Str "Roe"],Str "."]]]
-,Para [Str "A",Space,Str "citation",Space,Str "group.",Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.",Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 11},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [Str "also"], citationSuffix = [Space,Str "p.",Space,Str "34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 12}] [Note [Para [Str "See",Space,Str "Doe,",Space,Emph [Str "First",Space,Str "Book"],Str ",",Space,Str "chap.",Space,Str "3;",Space,Str "also",Space,Str "Doe",Space,Str "and",Space,Str "Roe,",Space,Str "pp.",Space,Str "34\8211\&35."]]]]
-,Para [Str "Another",Space,Str "one.",Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "p.",Space,Str "34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 13}] [Note [Para [Str "See",Space,Str "Doe,",Space,Emph [Str "First",Space,Str "Book"],Str ",",Space,Str "pp.",Space,Str "34\8211\&35."]]]]
+,Para [Str "In",Space,Str "a",Space,Str "note.",Note [Para [Cite [Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "12"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 9}] [Str "Doe",Space,Str "and",Space,Str "Roe",Str ",",Space,Str "p.",Space,Str "12"],Space,Str "and",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "locators",Space,Cite [Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 10}] [Str "Doe",Space,Str "and",Space,Str "Roe"],Str "."]]]
+,Para [Str "A",Space,Str "citation",Space,Str "group",Str ".",Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.",Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 11},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [Str "also"], citationSuffix = [Space,Str "p.",Space,Str "34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 12}] [Note [Para [Str "See",Space,Str "Doe,",Space,Emph [Str "First",Space,Str "Book"],Str ",",Space,Str "chap.",Space,Str "3;",Space,Str "also",Space,Str "Doe",Space,Str "and",Space,Str "Roe,",Space,Str "pp.",Space,Str "34\8211\&35."]]]]
+,Para [Str "Another",Space,Str "one",Str ".",Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "p.",Space,Str "34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 13}] [Note [Para [Str "See",Space,Str "Doe,",Space,Emph [Str "First",Space,Str "Book"],Str ",",Space,Str "pp.",Space,Str "34\8211\&35."]]]]
 ,Para [Str "And",Space,Str "another",Space,Str "one",Space,Str "in",Space,Str "a",Space,Str "note.",Note [Para [Str "Some",Space,Str "citations",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.",Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 14},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 15},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 16}] [Str "see",Space,Str "Doe,",Space,Emph [Str "First",Space,Str "Book"],Str ",",Space,Str "chap.",Space,Str "3;",Space,Str "Doe",Space,Str "and",Space,Str "Roe;",Space,Str "Doe,",Space,Str "\8216Article\8217,",Space,Str "33\8211\&34"],Str "."]]]
-,Para [Str "Citation",Space,Str "with",Space,Str "a",Space,Str "suffix",Space,Str "and",Space,Str "locator.",Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "pp.",Space,Str "33,",Space,Str "35-37,",Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 17}] [Note [Para [Str "Doe,",Space,Emph [Str "First",Space,Str "Book"],Str ",",Space,Str "pp.",Space,Str "33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space,Str "else."]]]]
-,Para [Str "Citation",Space,Str "with",Space,Str "suffix",Space,Str "only.",Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 18}] [Note [Para [Str "Doe,",Space,Emph [Str "First",Space,Str "Book"],Space,Str "and",Space,Str "nowhere",Space,Str "else."]]]]
-,Para [Str "Now",Space,Str "some",Space,Str "modifiers.",Note [Para [Str "Like",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "author:",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 19}] [Emph [Str "First",Space,Str "Book"]],Str ",",Space,Str "and",Space,Str "now",Space,Str "Doe",Space,Str "with",Space,Str "a",Space,Str "locator",Space,Cite [Citation {citationId = "item2", citationPrefix = [], citationSuffix = [Space,Str "p.",Space,Str "44"], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 20}] [Str "\8216Article\8217,",Space,Str "33\8211\&34",Space,Str "(p.",Space,Str "44)"],Str "."]]]
-,Para [Str "With",Space,Str "some",Space,Str "markup.",Cite [Citation {citationId = "item1", citationPrefix = [Emph [Str "see"]], citationSuffix = [Space,Str "p.",Space,Strong [Str "32"]], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 21}] [Note [Para [Emph [Str "See"],Space,Str "Doe,",Space,Emph [Str "First",Space,Str "Book"],Str ",",Space,Str "p.",Space,Str "32."]]]]
+,Para [Str "Citation",Space,Str "with",Space,Str "a",Space,Str "suffix",Space,Str "and",Space,Str "locator",Str ".",Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "pp.",Space,Str "33,",Space,Str "35-37,",Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 17}] [Note [Para [Str "Doe,",Space,Emph [Str "First",Space,Str "Book"],Str ",",Space,Str "pp.",Space,Str "33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space,Str "else."]]]]
+,Para [Str "Citation",Space,Str "with",Space,Str "suffix",Space,Str "only",Str ".",Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 18}] [Note [Para [Str "Doe,",Space,Emph [Str "First",Space,Str "Book"],Space,Str "and",Space,Str "nowhere",Space,Str "else."]]]]
+,Para [Str "Now",Space,Str "some",Space,Str "modifiers.",Note [Para [Str "Like",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "author:",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 19}] [Emph [Str "First",Space,Str "Book"],Str ""],Str ",",Space,Str "and",Space,Str "now",Space,Str "Doe",Space,Str "with",Space,Str "a",Space,Str "locator",Space,Cite [Citation {citationId = "item2", citationPrefix = [], citationSuffix = [Space,Str "p.",Space,Str "44"], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 20}] [Str "\8216Article\8217,",Space,Str "33\8211\&34",Space,Str "(p.",Space,Str "44)"],Str "."]]]
+,Para [Str "With",Space,Str "some",Space,Str "markup",Str ".",Cite [Citation {citationId = "item1", citationPrefix = [Emph [Str "see"]], citationSuffix = [Space,Str "p.",Space,Strong [Str "32"]], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 21}] [Note [Para [Emph [Str "See"],Space,Str "Doe,",Space,Emph [Str "First",Space,Str "Book"],Str ",",Space,Str "p.",Space,Str "32."]]]]
 ,Header 1 ("references",["unnumbered"],[]) [Str "References"]
-,Div ("refs",["references"],[]) [Div ("ref-item2",[],[]) [Para [Str "Doe,",Space,Str "John,",Space,Str "\8216Article\8217,",Space,Emph [Str "Journal",Space,Str "of",Space,Str "Generic",Space,Str "Studies"],Str ",",Space,Str "6",Space,Str "(2006),",Space,Str "33\8211\&34."]],Div ("ref-item1",[],[]) [Para [Str "---,",Space,Emph [Str "First",Space,Str "Book"],Space,Str "(Cambridge:",Space,Str "Cambridge",Space,Str "University",Space,Str "Press,",Space,Str "2005)."]],Div ("ref-\1087\1091\1085\1082\1090\&3",[],[]) [Para [Str "Doe,",Space,Str "John,",Space,Str "and",Space,Str "Jenny",Space,Str "Roe,",Space,Str "\8216Why",Space,Str "Water",Space,Str "Is",Space,Str "Wet\8217,",Space,Str "in",Space,Emph [Str "Third",Space,Str "Book"],Str ",",Space,Str "ed.",Space,Str "by",Space,Str "Sam",Space,Str "Smith",Space,Str "(Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press,",Space,Str "2007)."]]]]
+,Div ("refs",["references"],[])
+ [Div ("ref-item2",[],[])
+  [Para [Str "Doe,",Space,Str "John,",Space,Str "\8216Article\8217,",Space,Emph [Str "Journal",Space,Str "of",Space,Str "Generic",Space,Str "Studies"],Str ",",Space,Str "6",Space,Str "(2006),",Space,Str "33\8211\&34."]]
+ ,Div ("ref-item1",[],[])
+  [Para [Str "---,",Space,Emph [Str "First",Space,Str "Book"],Space,Str "(Cambridge:",Space,Str "Cambridge",Space,Str "University",Space,Str "Press,",Space,Str "2005)."]]
+ ,Div ("ref-\1087\1091\1085\1082\1090\&3",[],[])
+  [Para [Str "Doe,",Space,Str "John,",Space,Str "and",Space,Str "Jenny",Space,Str "Roe,",Space,Str "\8216Why",Space,Str "Water",Space,Str "Is",Space,Str "Wet\8217,",Space,Str "in",Space,Emph [Str "Third",Space,Str "Book"],Str ",",Space,Str "ed.",Space,Str "by",Space,Str "Sam",Space,Str "Smith",Space,Str "(Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press,",Space,Str "2007)."]]]]
diff --git a/tests/test-citeproc.hs b/tests/test-citeproc.hs
--- a/tests/test-citeproc.hs
+++ b/tests/test-citeproc.hs
@@ -1,33 +1,26 @@
 {-# LANGUAGE OverloadedStrings, TypeSynonymInstances, FlexibleInstances,
     ScopedTypeVariables #-}
-import JSON
 import Text.Printf
 import System.Exit
 import qualified Control.Exception as E
-import Text.Pandoc
+import Text.Pandoc hiding (writeHtmlString)
+import Text.CSL.Compat.Pandoc (writeHtmlString)
 import Data.Char (isSpace, toLower)
 import System.Environment (getArgs)
 import System.Process
 import System.IO.Temp (withSystemTempDirectory)
 import Text.Pandoc.Definition (Inline(Span, Str))
-import Text.Pandoc.Generic
-import Text.Pandoc.Walk
 import qualified Text.Pandoc.UTF8 as UTF8
-import Data.Maybe (mapMaybe)
 import Data.Aeson
-import Data.Aeson.Types (Parser)
 import System.FilePath
 import System.Directory
-import Data.List (intercalate, sort, isInfixOf)
+import Data.List (sort, isInfixOf)
 import qualified Data.Vector as V
 import qualified Data.Map as M
-import qualified Data.Text as T
-import qualified Data.Text.Encoding as T
 import Text.CSL.Style hiding (Number)
 import Text.CSL.Reference
 import Text.CSL
 import Control.Monad
-import Control.Applicative
 import qualified Data.ByteString.Lazy as BL
 
 data TestCase = TestCase{
@@ -60,7 +53,7 @@
               v .:? "bibsection" .!= Select [] [] <*>
               v .:? "citations" .!= [] <*>
               v .:? "citation_items" .!= [] <*>
-              v .:  "csl" <*>
+              (parseCSL <$> (v .:  "csl")) <*>
               v .:? "abbreviations" .!= (Abbreviations M.empty) <*>
               v .:  "input" <*>
               v .:  "result"
@@ -92,16 +85,16 @@
 testDir :: FilePath
 testDir = "citeproc-test" </> "processor-tests" </> "machines"
 
-handleError :: FilePath -> E.SomeException -> IO TestResult
-handleError path e = do
+handler :: FilePath -> E.SomeException -> IO TestResult
+handler path e = do
   putStrLn $ "[ERROR] " ++ path ++ "\n" ++ show e
   return Errored
 
 runTest :: FilePath -> IO TestResult
-runTest path = E.handle (handleError path) $ do
+runTest path = E.handle (handler path) $ do
   raw <- BL.readFile path
   let testCase = either error id $ eitherDecode raw
-  let procOpts = ProcOpts (testBibopts testCase) False
+  let procOpts' = ProcOpts (testBibopts testCase) False
   style <- localizeCSL Nothing
            $ (testCsl testCase) { styleAbbrevs = testAbbreviations testCase }
   let refs     = testReferences testCase
@@ -127,7 +120,7 @@
          let result   = assemble mode
               $ map (inlinesToString . renderPandoc style) $
                 (case mode of {CitationMode -> citations; _ -> bibliography})
-                $ citeproc procOpts style refs cites'
+                $ citeproc procOpts' style refs cites'
          if result == expected
             then do
               putStrLn $ "[PASSED] " ++ path ++ "\n"
diff --git a/tests/test-pandoc-citeproc.hs b/tests/test-pandoc-citeproc.hs
--- a/tests/test-pandoc-citeproc.hs
+++ b/tests/test-pandoc-citeproc.hs
@@ -1,7 +1,5 @@
 {-# LANGUAGE CPP #-}
 module Main where
-import JSON
-import System.Process
 import System.Exit
 import System.Directory
 import System.FilePath
@@ -10,18 +8,12 @@
 import Data.Monoid (mempty)
 import System.IO.Temp (withSystemTempDirectory)
 import System.Process (rawSystem)
-import Text.Printf
 import qualified Data.Aeson as Aeson
 import Text.Pandoc.Definition
-import qualified Data.ByteString.Lazy.Char8 as BL
-import qualified Data.ByteString.Char8 as B
 import qualified Text.Pandoc.UTF8 as UTF8
-import Text.Pandoc.Shared (normalize)
-import Text.Pandoc.Process (pipeProcess)
 import Text.Pandoc.Options (WriterOptions(..))
-import qualified Data.Yaml as Yaml
-import Text.Pandoc (writeNative, writeHtmlString, readNative, def)
-import Text.CSL.Pandoc (processCites')
+import Text.CSL.Compat.Pandoc (writeNative, pipeProcess)
+import Text.Pandoc (def)
 import Data.List (isSuffixOf)
 import System.Environment
 import Control.Monad (when)
@@ -65,17 +57,17 @@
   indataNative <- UTF8.readFile $ "tests/" ++ csl ++ ".in.native"
   expectedNative <- UTF8.readFile $ "tests/" ++ csl ++ ".expected.native"
   let jsonIn = Aeson.encode $ (read indataNative :: Pandoc)
-  let expectedDoc = normalize $ read expectedNative
+  let expectedDoc = read expectedNative
   testProgPath <- getExecutablePath
   let pandocCiteprocPath = takeDirectory testProgPath </> ".." </>
         "pandoc-citeproc" </> "pandoc-citeproc"
-  (ec, jsonOut, errout) <- pipeProcess
+  (ec, jsonOut) <- pipeProcess
                      (Just [("LANG","en_US.UTF-8"),("HOME",".")])
                      pandocCiteprocPath
                      [] jsonIn
   if ec == ExitSuccess
      then do
-       let outDoc = normalize $ fromMaybe mempty $ Aeson.decode $ jsonOut
+       let outDoc = fromMaybe mempty $ Aeson.decode $ jsonOut
        if outDoc == expectedDoc
           then err "PASSED" >> return Passed
           else do
@@ -92,7 +84,6 @@
      else do
        err "ERROR"
        err $ "Error status " ++ show ec
-       err $ UTF8.toStringLazy errout
        return Errored
 
 showDiff :: String -> String -> IO ()
@@ -119,7 +110,7 @@
   testProgPath <- getExecutablePath
   let pandocCiteprocPath = takeDirectory testProgPath </> ".." </>
         "pandoc-citeproc" </> "pandoc-citeproc"
-  (ec, result', errout) <- pipeProcess
+  (ec, result') <- pipeProcess
                      (Just [("LANG","en_US.UTF-8"),("HOME",".")])
                      pandocCiteprocPath
                      ["--bib2yaml", "-f", drop 1 $ takeExtension fp]
@@ -136,5 +127,4 @@
      else do
        err "ERROR"
        err $ "Error status " ++ show ec
-       err $ UTF8.toStringLazy errout
        return Errored
