diff --git a/README b/README
index 7a2b01f49..f85e62e14 100644
--- a/README
+++ b/README
@@ -598,54 +598,6 @@ Options affecting specific writers
 Citation rendering
 ------------------
 
-`--bibliography=`*FILE*
-:   Specify bibliography database to be used in resolving
-    citations. The database type will be determined from the
-    extension of *FILE*, which may be `.mods` (MODS format),
-    `.bib` (BibLaTeX format, which will normally work for BibTeX
-    files as well), `.bibtex` (BibTeX format),
-    `.ris` (RIS format), `.enl` (EndNote format),
-    `.xml` (EndNote XML format), `.wos` (ISI format),
-    `.medline` (MEDLINE format), `.copac` (Copac format),
-    or `.json` (citeproc JSON).  If you want to use multiple
-    bibliographies, just use this option repeatedly.
-
-`--csl=`*FILE*
-:   Specify [CSL] style to be used in formatting citations and
-    the bibliography. If *FILE* is not found, pandoc will look
-    for it in
-
-        $HOME/.csl
-
-    in unix,
-
-        C:\Documents And Settings\USERNAME\Application Data\csl
-
-    in Windows XP, and
-
-        C:\Users\USERNAME\AppData\Roaming\csl
-
-    in Windows 7. If the `--csl` option is not specified, pandoc
-    will use a default style:  either `default.csl` in the
-    user data directory (see `--data-dir`), or, if that is
-    not present, the Chicago author-date style.
-
-`--citation-abbreviations=`*FILE*
-:   Specify a file containing abbreviations for journal titles and
-    other bibliographic fields (indicated by setting `form="short"`
-    in the CSL node for the field).  The format is described at
-    <http://citationstylist.org/2011/10/19/abbreviations-for-zotero-test-release/>.
-    Here is a short example:
-
-        { "default": {
-            "container-title": {
-                    "Lloyd's Law Reports": "Lloyd's Rep",
-                    "Estates Gazette": "EG",
-                    "Scots Law Times": "SLT"
-            }
-          }
-        }
-
 `--natbib`
 :   Use natbib for citations in LaTeX output.
 
@@ -2378,9 +2330,14 @@ Citations
 
 **Extension: `citations`**
 
-Pandoc can automatically generate citations and a bibliography in a number of
-styles (using Andrea Rossato's `hs-citeproc`). In order to use this feature,
-you will need a bibliographic database in one of the following formats:
+Using an external filter, `pandoc-citeproc`, pandoc can automatically generate
+citations and a bibliography in a number of styles.  Basic usage is
+
+    pandoc --filter pandoc-citeproc myinput.txt
+
+In order to use this feature, you will need to specify a bibliography file
+using the `bibliography` metadata field in a YAML metadata section.
+The bibliography may have any of these formats:
 
   Format            File extension
   ------------      --------------
@@ -2398,18 +2355,40 @@ you will need a bibliographic database in one of the following formats:
 Note that `.bib` can generally be used with both BibTeX and BibLaTeX
 files, but you can use `.bibtex` to force BibTeX.
 
-You will need to specify the bibliography file using the `--bibliography`
-command-line option (which may be repeated if you have several
-bibliographies).
+Alternatively you can use a `references` field in the document's YAML
+metadata.  This should include an array of YAML-encoded references,
+for example:
 
-By default, pandoc will use a Chicago author-date format for citations
-and references.  To use another style, you will need to use the
-`--csl` option to specify a [CSL] 1.0 style file.  A primer on
-creating and modifying CSL styles can be found at
-<http://citationstyles.org/downloads/primer.html>.
-A repository of CSL styles can be found at
-<https://github.com/citation-style-language/styles>.
-See also <http://zotero.org/styles> for easy browsing.
+    ---
+    references:
+    - id: fenner2012a
+      title: One-click science marketing
+      author:
+      - family: Fenner
+        given: Martin
+      container-title: Nature Materials
+      volume: 11
+      URL: 'http://dx.doi.org/10.1038/nmat3283'
+      DOI: 10.1038/nmat3283
+      issue: 4
+      publisher: Nature Publishing Group
+      page: 261-263
+      type: article-journal
+      issued:
+        year: 2012
+        month: 3
+    ...
+
+(The program `mods2yaml`, which comes with `pandoc-citeproc`, can help produce
+these from a MODS reference collection.)
+
+By default, `pandoc-citeproc` will use a Chicago author-date format for
+citations and references.  To use another style, you will need to specify
+a [CSL] 1.0 style file in the `csl` metadata field.  A primer on creating and
+modifying CSL styles can be found at
+<http://citationstyles.org/downloads/primer.html>.  A repository of CSL styles
+can be found at <https://github.com/citation-style-language/styles>.  See also
+<http://zotero.org/styles> for easy browsing.
 
 Citations go inside square brackets and are separated by semicolons.
 Each citation must have a key, composed of '@' + the citation
diff --git a/data/default.csl b/data/default.csl
deleted file mode 100644
index 83a70d0b5..000000000
--- a/data/default.csl
+++ /dev/null
@@ -1,458 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never">
-  <info>
-    <title>Chicago Manual of Style (author-date)</title>
-    <id>http://www.zotero.org/styles/chicago-author-date</id>
-    <link href="http://www.zotero.org/styles/chicago-author-date" rel="self"/>
-    <link href="http://www.chicagomanualofstyle.org/tools_citationguide.html" rel="documentation"/>
-    <author>
-      <name>Julian Onions</name>
-      <email>julian.onions@gmail.com</email>
-    </author>
-    <contributor>
-      <name>Sebastian Karcher</name>
-    </contributor>
-    <contributor>
-      <name>Richard Karnesky</name>
-      <email>karnesky+zotero@gmail.com</email>
-      <uri>http://arc.nucapt.northwestern.edu/Richard_Karnesky</uri>
-    </contributor>
-    <category citation-format="author-date"/>
-    <category field="generic-base"/>
-    <summary>The author-date variant of the Chicago style</summary>
-    <updated>2013-03-28T05:37:10+00:00</updated>
-    <rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights>
-  </info>
-  <locale>
-    <terms>
-      <term name="editor" form="verb-short">ed.</term>
-      <term name="container-author" form="verb">by</term>
-      <term name="translator" form="verb-short">trans.</term>
-      <term name="translator" form="short">trans.</term>
-    </terms>
-  </locale>
-  <macro name="secondary-contributors">
-    <choose>
-      <if type="chapter paper-conference" match="none">
-        <group delimiter=". ">
-          <names variable="editor translator">
-            <label form="verb" text-case="capitalize-first" suffix=" " plural="never"/>
-            <name and="text" delimiter=", "/>
-          </names>
-        </group>
-      </if>
-    </choose>
-  </macro>
-  <macro name="container-contributors">
-    <choose>
-      <if type="chapter paper-conference" match="any">
-        <group prefix=", " delimiter=", ">
-          <names variable="container-author editor" delimiter=", ">
-            <label form="verb" suffix=" " plural="never"/>
-            <name and="text" delimiter=", "/>
-          </names>
-        </group>
-      </if>
-    </choose>
-  </macro>
-  <macro name="editor">
-    <names variable="editor">
-      <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>
-      <label form="short" prefix=", "/>
-    </names>
-  </macro>
-  <macro name="translator">
-    <names variable="translator">
-      <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>
-      <label form="short" prefix=", " plural="never"/>
-    </names>
-  </macro>
-  <macro name="recipient">
-    <choose>
-      <if type="personal_communication">
-        <choose>
-          <if variable="genre">
-            <text variable="genre" text-case="capitalize-first"/>
-          </if>
-          <else>
-            <text term="letter" text-case="capitalize-first"/>
-          </else>
-        </choose>
-      </if>
-    </choose>
-    <names variable="recipient" delimiter=", ">
-      <label form="verb" prefix=" " text-case="lowercase" suffix=" "/>
-      <name and="text" delimiter=", "/>
-    </names>
-  </macro>
-  <macro name="contributors">
-    <names variable="author">
-      <name and="text" name-as-sort-order="first" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>
-      <label form="short" plural="never" prefix=", "/>
-      <substitute>
-        <names variable="editor"/>
-        <names variable="translator"/>
-        <text macro="title"/>
-      </substitute>
-    </names>
-    <text macro="recipient"/>
-  </macro>
-  <macro name="contributors-short">
-    <names variable="author">
-      <name form="short" and="text" delimiter=", " initialize-with=". "/>
-      <substitute>
-        <names variable="editor"/>
-        <names variable="translator"/>
-        <text macro="title"/>
-      </substitute>
-    </names>
-  </macro>
-  <macro name="interviewer">
-    <names variable="interviewer" delimiter=", ">
-      <label form="verb" prefix=" " text-case="capitalize-first" suffix=" "/>
-      <name and="text" delimiter=", "/>
-    </names>
-  </macro>
-  <macro name="archive">
-    <group delimiter=". ">
-      <text variable="archive_location" text-case="capitalize-first"/>
-      <text variable="archive"/>
-      <text variable="archive-place"/>
-    </group>
-  </macro>
-  <macro name="access">
-    <group delimiter=". ">
-      <choose>
-        <if type="graphic report" match="any">
-          <text macro="archive"/>
-        </if>
-        <else-if type="article-magazine article-newspaper bill book chapter graphic legal_case legislation motion_picture paper-conference report song thesis" match="none">
-          <text macro="archive"/>
-        </else-if>
-      </choose>
-      <text variable="DOI" prefix="doi:"/>
-      <choose>
-        <if variable="DOI issued" match="none">
-          <choose>
-            <if variable="URL accessed" match="all">
-              <group delimiter=" ">
-                <text term="accessed" text-case="capitalize-first"/>
-                <date variable="accessed" delimiter=" ">
-                  <date-part name="month"/>
-                  <date-part name="day"/>
-                </date>
-              </group>
-            </if>
-          </choose>
-        </if>
-        <else-if type="webpage">
-          <date variable="issued" delimiter=" ">
-            <date-part name="month"/>
-            <date-part name="day"/>
-          </date>
-        </else-if>
-      </choose>
-      <choose>
-        <if type="legal_case" match="none">
-          <text variable="URL"/>
-        </if>
-      </choose>
-    </group>
-  </macro>
-  <macro name="title">
-    <choose>
-      <if variable="title" match="none">
-        <choose>
-          <if type="personal_communication" match="none">
-            <text variable="genre" text-case="capitalize-first"/>
-          </if>
-        </choose>
-      </if>
-      <else-if type="bill book graphic legal_case legislation motion_picture song" match="any">
-        <text variable="title" text-case="title" font-style="italic"/>
-      </else-if>
-      <else>
-        <text variable="title" text-case="title" quotes="true"/>
-      </else>
-    </choose>
-  </macro>
-  <macro name="edition">
-    <choose>
-      <if type="bill book graphic legal_case legislation motion_picture report song" match="any">
-        <choose>
-          <if is-numeric="edition">
-            <group delimiter=" " prefix=". ">
-              <number variable="edition" form="ordinal"/>
-              <text term="edition" form="short" strip-periods="true"/>
-            </group>
-          </if>
-          <else>
-            <text variable="edition" prefix=". "/>
-          </else>
-        </choose>
-      </if>
-      <else-if type="chapter  paper-conference" match="any">
-        <choose>
-          <if is-numeric="edition">
-            <group delimiter=" " prefix=", ">
-              <number variable="edition" form="ordinal"/>
-              <text term="edition" form="short"/>
-            </group>
-          </if>
-          <else>
-            <text variable="edition" prefix=", "/>
-          </else>
-        </choose>
-      </else-if>
-    </choose>
-  </macro>
-  <macro name="locators">
-    <choose>
-      <if type="article-journal">
-        <text variable="volume" prefix=" "/>
-        <text variable="issue" prefix=" (" suffix=")"/>
-      </if>
-      <else-if type="legal_case">
-        <text variable="volume" prefix=", "/>
-        <text variable="container-title" prefix=" "/>
-        <text variable="page" prefix=" "/>
-      </else-if>
-      <else-if type="bill book graphic legal_case legislation motion_picture report song" match="any">
-        <group prefix=". " delimiter=". ">
-          <group>
-            <text term="volume" form="short" text-case="capitalize-first" suffix=" "/>
-            <number variable="volume" form="numeric"/>
-          </group>
-          <group>
-            <number variable="number-of-volumes" form="numeric"/>
-            <text term="volume" form="short" prefix=" " plural="true"/>
-          </group>
-        </group>
-      </else-if>
-      <else-if type="chapter paper-conference" match="any">
-        <choose>
-          <if variable="page" match="none">
-            <group prefix=". ">
-              <text term="volume" form="short" text-case="capitalize-first" suffix=" "/>
-              <number variable="volume" form="numeric"/>
-            </group>
-          </if>
-        </choose>
-      </else-if>
-    </choose>
-  </macro>
-  <macro name="locators-chapter">
-    <choose>
-      <if type="chapter paper-conference" match="any">
-        <choose>
-          <if variable="page">
-            <group prefix=", ">
-              <text variable="volume" suffix=":"/>
-              <text variable="page"/>
-            </group>
-          </if>
-        </choose>
-      </if>
-    </choose>
-  </macro>
-  <macro name="locators-article">
-    <choose>
-      <if type="article-newspaper">
-        <group prefix=", " delimiter=", ">
-          <group>
-            <text variable="edition" suffix=" "/>
-            <text term="edition" prefix=" "/>
-          </group>
-          <group>
-            <text term="section" form="short" suffix=" "/>
-            <text variable="section"/>
-          </group>
-        </group>
-      </if>
-      <else-if type="article-journal">
-        <text variable="page" prefix=": "/>
-      </else-if>
-    </choose>
-  </macro>
-  <macro name="point-locators">
-    <choose>
-      <if variable="locator">
-        <choose>
-          <if locator="page" match="none">
-            <choose>
-              <if type="bill book graphic legal_case legislation motion_picture report song" match="any">
-                <choose>
-                  <if variable="volume">
-                    <group>
-                      <text term="volume" form="short" suffix=" "/>
-                      <number variable="volume" form="numeric"/>
-                      <label variable="locator" form="short" prefix=", " suffix=" "/>
-                    </group>
-                  </if>
-                  <else>
-                    <label variable="locator" form="short" suffix=" "/>
-                  </else>
-                </choose>
-              </if>
-              <else>
-                <label variable="locator" form="short" suffix=" "/>
-              </else>
-            </choose>
-          </if>
-          <else-if type="bill book graphic legal_case legislation motion_picture report song" match="any">
-            <number variable="volume" form="numeric" suffix=":"/>
-          </else-if>
-        </choose>
-        <text variable="locator"/>
-      </if>
-    </choose>
-  </macro>
-  <macro name="container-prefix">
-    <text term="in" text-case="capitalize-first"/>
-  </macro>
-  <macro name="container-title">
-    <choose>
-      <if type="chapter paper-conference" match="any">
-        <text macro="container-prefix" suffix=" "/>
-      </if>
-    </choose>
-    <choose>
-      <if type="legal_case" match="none">
-        <text variable="container-title" text-case="title" font-style="italic"/>
-      </if>
-    </choose>
-  </macro>
-  <macro name="publisher">
-    <group delimiter=": ">
-      <text variable="publisher-place"/>
-      <text variable="publisher"/>
-    </group>
-  </macro>
-  <macro name="date">
-    <choose>
-      <if variable="issued">
-        <date variable="issued">
-          <date-part name="year"/>
-        </date>
-      </if>
-      <else-if variable="accessed">
-        <date variable="accessed">
-          <date-part name="year"/>
-        </date>
-      </else-if>
-    </choose>
-  </macro>
-  <macro name="day-month">
-    <date variable="issued">
-      <date-part name="month"/>
-      <date-part name="day" prefix=" "/>
-    </date>
-  </macro>
-  <macro name="collection-title">
-    <text variable="collection-title" text-case="title"/>
-    <text variable="collection-number" prefix=" "/>
-  </macro>
-  <macro name="event">
-    <group>
-      <text term="presented at" suffix=" "/>
-      <text variable="event"/>
-    </group>
-  </macro>
-  <macro name="description">
-    <choose>
-      <if type="interview">
-        <group delimiter=". ">
-          <text macro="interviewer"/>
-          <text variable="medium" text-case="capitalize-first"/>
-        </group>
-      </if>
-      <else>
-        <text variable="medium" text-case="capitalize-first" prefix=". "/>
-      </else>
-    </choose>
-    <choose>
-      <if variable="title" match="none"/>
-      <else-if type="thesis"/>
-      <else>
-        <group delimiter=" " prefix=". ">
-          <text variable="genre" text-case="capitalize-first"/>
-          <choose>
-            <if type="report">
-              <text variable="number"/>
-            </if>
-          </choose>
-        </group>
-      </else>
-    </choose>
-    <!--This is for computer programs only. Localization new to 1.0.1, so may be missing in many locales-->
-    <group delimiter=" " prefix=" (" suffix=")">
-      <text term="version"/>
-      <text variable="version"/>
-    </group>
-  </macro>
-  <macro name="issue">
-    <choose>
-      <if type="article-journal">
-        <text macro="day-month" prefix=" (" suffix=")"/>
-      </if>
-      <else-if type="legal_case">
-        <text variable="authority" prefix=". "/>
-      </else-if>
-      <else-if type="speech">
-        <group prefix=" " delimiter=", ">
-          <text macro="event"/>
-          <text macro="day-month"/>
-          <text variable="event-place"/>
-        </group>
-      </else-if>
-      <else-if type="article-newspaper article-magazine" match="any">
-        <text macro="day-month" prefix=", "/>
-      </else-if>
-      <else>
-        <group prefix=". " delimiter=", ">
-          <choose>
-            <if type="thesis">
-              <text variable="genre" text-case="capitalize-first"/>
-            </if>
-          </choose>
-          <text macro="publisher"/>
-        </group>
-      </else>
-    </choose>
-  </macro>
-  <citation et-al-min="4" et-al-use-first="1" disambiguate-add-year-suffix="true" disambiguate-add-names="true" disambiguate-add-givenname="true" givenname-disambiguation-rule="primary-name">
-    <layout prefix="(" suffix=")" delimiter="; ">
-      <group delimiter=", ">
-        <group delimiter=" ">
-          <text macro="contributors-short"/>
-          <text macro="date"/>
-        </group>
-        <text macro="point-locators"/>
-      </group>
-    </layout>
-  </citation>
-  <bibliography hanging-indent="true" et-al-min="11" et-al-use-first="7" subsequent-author-substitute="&#8212;&#8212;&#8212;" entry-spacing="0">
-    <sort>
-      <key macro="contributors"/>
-      <key variable="issued"/>
-    </sort>
-    <layout suffix=".">
-      <group delimiter=". ">
-        <text macro="contributors"/>
-        <text macro="date"/>
-        <text macro="title"/>
-      </group>
-      <text macro="description"/>
-      <text macro="secondary-contributors" prefix=". "/>
-      <text macro="container-title" prefix=". "/>
-      <text macro="container-contributors"/>
-      <text macro="edition"/>
-      <text macro="locators-chapter"/>
-      <text macro="locators"/>
-      <text macro="collection-title" prefix=". "/>
-      <text macro="issue"/>
-      <text macro="locators-article"/>
-      <text macro="access" prefix=". "/>
-    </layout>
-  </bibliography>
-</style>
diff --git a/pandoc.cabal b/pandoc.cabal
index ac28ad068..0ab990a17 100644
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -99,8 +99,6 @@ Data-Files:
                  data/slideous/slideous.js,
                  -- data for dzslides writer
                  data/dzslides/template.html,
-                 -- data for citeproc
-                 data/default.csl,
                  -- sample lua custom writer
                  data/sample.lua
                  -- documentation
@@ -250,7 +248,6 @@ Library
                  xml >= 1.3.12 && < 1.4,
                  random >= 1 && < 1.1,
                  extensible-exceptions >= 0.1 && < 0.2,
-                 citeproc-hs >= 0.3.7 && < 0.4,
                  pandoc-types >= 1.12 && < 1.13,
                  aeson >= 0.6 && < 0.7,
                  tagsoup >= 0.12.5 && < 0.14,
@@ -323,7 +320,6 @@ Library
                    Text.Pandoc.UTF8,
                    Text.Pandoc.Templates,
                    Text.Pandoc.XML,
-                   Text.Pandoc.Biblio,
                    Text.Pandoc.SelfContained,
                    Text.Pandoc.Process
   Other-Modules:   Text.Pandoc.Readers.Haddock.Lex,
@@ -353,8 +349,7 @@ Executable pandoc
                  extensible-exceptions >= 0.1 && < 0.2,
                  highlighting-kate >= 0.5.5 && < 0.6,
                  aeson >= 0.6 && < 0.7,
-                 HTTP >= 4000.0.5 && < 4000.3,
-                 citeproc-hs >= 0.3.7 && < 0.4
+                 HTTP >= 4000.0.5 && < 4000.3
   Ghc-Options:   -rtsopts -with-rtsopts=-K16m -Wall -fno-warn-unused-do-bind
   Ghc-Prof-Options: -auto-all -caf-all -rtsopts -with-rtsopts=-K16m
   if os(windows)
diff --git a/pandoc.hs b/pandoc.hs
index 8eed67544..6ad5694f1 100644
--- a/pandoc.hs
+++ b/pandoc.hs
@@ -35,7 +35,7 @@ import Text.Pandoc.PDF (makePDF)
 import Text.Pandoc.Readers.LaTeX (handleIncludes)
 import Text.Pandoc.Shared ( tabFilter, readDataFileUTF8, readDataFile,
                             safeRead, headerShift, normalize, err, warn )
-import Text.Pandoc.XML ( toEntities, fromEntities )
+import Text.Pandoc.XML ( toEntities )
 import Text.Pandoc.SelfContained ( makeSelfContained )
 import Text.Pandoc.Process (pipeProcess)
 import Text.Highlighting.Kate ( languages, Style, tango, pygments,
@@ -46,20 +46,18 @@ import System.FilePath
 import System.Console.GetOpt
 import Data.Char ( toLower )
 import Data.List ( intercalate, isPrefixOf, sort )
-import System.Directory ( getAppUserDataDirectory, doesFileExist, findExecutable )
+import System.Directory ( getAppUserDataDirectory, findExecutable )
 import System.IO ( stdout, stderr )
 import System.IO.Error ( isDoesNotExistError )
 import qualified Control.Exception as E
 import Control.Exception.Extensible ( throwIO )
 import qualified Text.Pandoc.UTF8 as UTF8
-import qualified Text.CSL as CSL
 import Control.Monad (when, unless, liftM)
 import Data.Foldable (foldrM)
 import Network.HTTP (simpleHTTP, mkRequest, getResponseBody, RequestMethod(..))
 import Network.URI (parseURI, isURI, URI(..))
 import qualified Data.ByteString.Lazy as B
 import qualified Data.ByteString as BS
-import Text.CSL.Reference (Reference(..))
 import Data.Aeson (eitherDecode', encode)
 
 copyrightMessage :: String
@@ -70,7 +68,7 @@ copyrightMessage = "\nCopyright (C) 2006-2013 John MacFarlane\n" ++
 
 compileInfo :: String
 compileInfo =
-  "\nCompiled with citeproc-hs " ++ VERSION_citeproc_hs ++ ", texmath " ++
+  "\nCompiled with texmath " ++
   VERSION_texmath ++ ", highlighting-kate " ++ VERSION_highlighting_kate ++
    ".\nSyntax highlighting is supported for the following languages:\n    " ++
        wrapWords 4 78
@@ -146,9 +144,6 @@ data Opt = Opt
     , optIndentedCodeClasses :: [String] -- ^ Default classes for indented code blocks
     , optDataDir           :: Maybe FilePath
     , optCiteMethod        :: CiteMethod -- ^ Method to output cites
-    , optBibliography      :: [String]
-    , optCslFile           :: Maybe FilePath
-    , optAbbrevsFile       :: Maybe FilePath
     , optListings          :: Bool       -- ^ Use listings package for code blocks
     , optLaTeXEngine       :: String     -- ^ Program to use for latex -> pdf
     , optSlideLevel        :: Maybe Int  -- ^ Header level that creates slides
@@ -203,9 +198,6 @@ defaultOpts = Opt
     , optIndentedCodeClasses   = []
     , optDataDir               = Nothing
     , optCiteMethod            = Citeproc
-    , optBibliography          = []
-    , optCslFile               = Nothing
-    , optAbbrevsFile           = Nothing
     , optListings              = False
     , optLaTeXEngine           = "pdflatex"
     , optSlideLevel            = Nothing
@@ -650,24 +642,6 @@ options =
                   "PROGRAM")
                  "" -- "Name of latex program to use in generating PDF"
 
-    , Option "" ["bibliography"]
-                 (ReqArg
-                  (\arg opt -> return opt { optBibliography = (optBibliography opt) ++ [arg] })
-                  "FILENAME")
-                 ""
-
-    , Option "" ["csl"]
-                 (ReqArg
-                  (\arg opt -> return opt { optCslFile = Just arg })
-                  "FILENAME")
-                 ""
-
-    , Option "" ["citation-abbreviations"]
-                 (ReqArg
-                  (\arg opt -> return opt { optAbbrevsFile = Just arg })
-                  "FILENAME")
-                 ""
-
     , Option "" ["natbib"]
                  (NoArg
                   (\opt -> return opt { optCiteMethod = Natbib }))
@@ -904,9 +878,6 @@ main = do
               , optIdentifierPrefix      = idPrefix
               , optIndentedCodeClasses   = codeBlockClasses
               , optDataDir               = mbDataDir
-              , optBibliography          = reffiles
-              , optCslFile               = mbCsl
-              , optAbbrevsFile           = cslabbrevs
               , optCiteMethod            = citeMethod
               , optListings              = listings
               , optLaTeXEngine           = latexEngine
@@ -1007,36 +978,6 @@ main = do
                                              $ lines dztempl
                         return $ ("dzslides-core", dzcore) : variables'
                     else return variables'
-
-  -- unescape reference ids, which may contain XML entities, so
-  -- that we can do lookups with regular string equality
-  let unescapeRefId ref = ref{ refId = fromEntities (refId ref) }
-
-  refs <- mapM (\f -> E.catch (CSL.readBiblioFile f)
-                   (\e -> let _ = (e :: E.SomeException)
-                          in  err 23 $ "Error reading bibliography `" ++ f ++
-                                       "'" ++ "\n" ++ show e))
-          reffiles >>=
-           return . map unescapeRefId . concat
-
-  mbsty <- if citeMethod == Citeproc && not (null refs)
-              then do
-                csl <- CSL.parseCSL =<<
-                        case mbCsl of
-                            Nothing      -> readDataFileUTF8 datadir
-                                              "default.csl"
-                            Just cslfile -> do
-                                  exists <- doesFileExist cslfile
-                                  if exists
-                                     then UTF8.readFile cslfile
-                                     else do
-                                       csldir <- getAppUserDataDirectory "csl"
-                                       readDataFileUTF8 (Just csldir)
-                                           (replaceExtension cslfile "csl")
-                abbrevs <- maybe (return []) CSL.readJsonAbbrevFile cslabbrevs
-                return $ Just csl { CSL.styleAbbrevs = abbrevs }
-              else return Nothing
-
   let sourceURL = case sources of
                         []    -> Nothing
                         (x:_) -> case parseURI x of
@@ -1054,8 +995,6 @@ main = do
                       , readerColumns = columns
                       , readerTabStop = tabStop
                       , readerOldDashes = oldDashes
-                      , readerReferences = refs
-                      , readerCitationStyle = mbsty
                       , readerIndentedCodeClasses = codeBlockClasses
                       , readerApplyMacros = not laTeXOutput
                       , readerDefaultImageExtension = defaultImageExtension
@@ -1069,7 +1008,6 @@ main = do
                             writerHTMLMathMethod   = mathMethod,
                             writerIncremental      = incremental,
                             writerCiteMethod       = citeMethod,
-                            writerBiblioFiles      = reffiles,
                             writerIgnoreNotes      = False,
                             writerNumberSections   = numberSections,
                             writerNumberOffset     = numberFrom,
diff --git a/src/Text/Pandoc/Biblio.hs b/src/Text/Pandoc/Biblio.hs
deleted file mode 100644
index 1c0975f11..000000000
--- a/src/Text/Pandoc/Biblio.hs
+++ /dev/null
@@ -1,216 +0,0 @@
-{-# LANGUAGE PatternGuards #-}
-{-
-Copyright (C) 2008 Andrea Rossato <andrea.rossato@ing.unitn.it>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
--}
-
-{- |
-   Module      : Text.Pandoc.Biblio
-   Copyright   : Copyright (C) 2008-2010 Andrea Rossato
-   License     : GNU GPL, version 2 or above
-
-   Maintainer  : Andrea Rossato <andrea.rossato@unitn.it>
-   Stability   : alpha
-   Portability : portable
--}
-
-module Text.Pandoc.Biblio ( processBiblio ) where
-
-import Data.List
-import Data.Char ( isDigit, isPunctuation )
-import qualified Data.Map as M
-import Text.CSL hiding ( Cite(..), Citation(..), endWithPunct )
-import qualified Text.CSL as CSL ( Cite(..) )
-import Text.Pandoc.Definition
-import Text.Pandoc.Generic
-import Text.Pandoc.Walk
-import Text.Pandoc.Shared (stringify)
-import Text.Parsec hiding (State)
-import Control.Monad
-import Control.Monad.State
-
--- | Process a 'Pandoc' document by adding citations formatted
--- according to a CSL style, using 'citeproc' from citeproc-hs.
-processBiblio :: Maybe Style -> [Reference] -> Pandoc -> Pandoc
-processBiblio Nothing _ p = p
-processBiblio _      [] p = p
-processBiblio (Just style) r p =
-  let p'         = evalState (bottomUpM setHash p) 1
-      grps       = query getCitation p'
-      result     = citeproc procOpts style r (setNearNote style $
-                      map (map toCslCite) grps)
-      cits_map   = M.fromList $ zip grps (citations result)
-      biblioList = map (renderPandoc' style) (bibliography result)
-      Pandoc m b = bottomUp mvPunct . deNote . topDown (processCite style cits_map) $ p'
-      (bs, lastb) = case reverse b of
-                         x@(Header _ _ _) : xs -> (reverse xs, [x])
-                         _                     -> (b,  [])
-  in  Pandoc m $ bs ++ [Div ("",["references"],[]) (lastb ++ biblioList)]
-
--- | Substitute 'Cite' elements with formatted citations.
-processCite :: Style -> M.Map [Citation] [FormattedOutput] -> Inline -> Inline
-processCite s cs (Cite t _) =
-   case M.lookup t cs of
-        Just (x:xs)
-          | isTextualCitation t && not (null xs) ->
-             let xs' = renderPandoc s xs
-             in  if styleClass s == "note"
-                    then Cite t (renderPandoc s [x] ++ [Note [Para xs']])
-                    else Cite t (renderPandoc s [x] ++ [Space | not (startWithPunct xs')] ++ xs')
-          | otherwise -> if styleClass s == "note"
-                            then Cite t [Note [Para $ renderPandoc s (x:xs)]]
-                            else Cite t (renderPandoc s (x:xs))
-        _             -> Strong [Str "???"]  -- TODO raise error instead?
-processCite _ _ x = x
-
-isNote :: Inline -> Bool
-isNote (Note _) = True
-isNote (Cite _ [Note _]) = True
-isNote _ = False
-
-mvPunct :: [Inline] -> [Inline]
-mvPunct (Space : Space : xs) = Space : xs
-mvPunct (Space : x : ys) | isNote x, startWithPunct ys =
-   Str (headInline ys) : x : tailFirstInlineStr ys
-mvPunct (Space : x : ys) | isNote x = x : ys
-mvPunct xs = xs
-
--- A replacement for citeproc-hs's endWithPunct, which wrongly treats
--- a sentence ending in '.)' as not ending with punctuation, leading
--- to an extra period.
-endWithPunct :: [Inline] -> Bool
-endWithPunct [] = True
-endWithPunct xs@(_:_) = case reverse (stringify [last xs]) of
-                              []                       -> True
-                              (')':c:_) | isEndPunct c -> True
-                              (c:_) | isEndPunct c     -> True
-                                    | otherwise        -> False
-  where isEndPunct c = c `elem` ".,;:!?"
-
-deNote :: Pandoc -> Pandoc
-deNote = topDown go
-  where go (Cite (c:cs) [Note xs]) =
-            Cite (c:cs) [Note $ bottomUp go' $ sanitize c xs]
-        go (Note xs) = Note $ bottomUp go' xs
-        go x = x
-        go' (Note [Para xs]:ys) =
-             if startWithPunct ys && endWithPunct xs
-                then initInline xs ++ ys
-                else xs ++ ys
-        go' xs = xs
-        sanitize :: Citation -> [Block] -> [Block]
-        sanitize Citation{citationPrefix = pref} [Para xs] =
-           case (null pref, endWithPunct xs) of
-                (True, False)  -> [Para $ xs ++ [Str "."]]
-                (True, True)   -> [Para xs]
-                (False, False) -> [Para $ toCapital $ xs ++ [Str "."]]
-                (False, True)  -> [Para $ toCapital xs]
-        sanitize _ bs = bs
-
-isTextualCitation :: [Citation] -> Bool
-isTextualCitation (c:_) = citationMode c == AuthorInText
-isTextualCitation _     = False
-
--- | Retrieve all citations from a 'Pandoc' docuument. To be used with
--- 'query'.
-getCitation :: Inline -> [[Citation]]
-getCitation i | Cite t _ <- i = [t]
-              | otherwise     = []
-
-setHash :: Citation -> State Int Citation
-setHash c = do
-  ident <- get
-  put $ ident + 1
-  return c{ citationHash = ident }
-
-toCslCite :: Citation -> CSL.Cite
-toCslCite c
-    = let (l, s)  = locatorWords $ citationSuffix c
-          (la,lo) = parseLocator l
-          s'      = case (l,s) of
-                         -- treat a bare locator as if it begins with space
-                         -- so @item1 [blah] is like [@item1, blah]
-                         ("",(x:_))
-                           | not (isPunct x) -> [Space] ++ s
-                         _                   -> s
-          isPunct (Str (x:_)) = isPunctuation x
-          isPunct _           = False
-          citMode = case citationMode c of
-                      AuthorInText   -> (True, False)
-                      SuppressAuthor -> (False,True )
-                      NormalCitation -> (False,False)
-      in   emptyCite { CSL.citeId         = citationId c
-                     , CSL.citePrefix     = PandocText $ citationPrefix c
-                     , CSL.citeSuffix     = PandocText s'
-                     , CSL.citeLabel      = la
-                     , CSL.citeLocator    = lo
-                     , CSL.citeNoteNumber = show $ citationNoteNum c
-                     , CSL.authorInText   = fst citMode
-                     , CSL.suppressAuthor = snd citMode
-                     , CSL.citeHash       = citationHash c
-                     }
-
-locatorWords :: [Inline] -> (String, [Inline])
-locatorWords inp =
-  case parse pLocatorWords "suffix" $ breakup inp of
-       Right r   -> r
-       Left _    -> ("",inp)
-   where breakup [] = []
-         breakup (Str x : xs) = map Str (splitup x) ++ breakup xs
-         breakup (x : xs) = x : breakup xs
-         splitup = groupBy (\x y -> x /= '\160' && y /= '\160')
-
-pLocatorWords :: Parsec [Inline] st (String, [Inline])
-pLocatorWords = do
-  l <- pLocator
-  s <- getInput -- rest is suffix
-  if length l > 0 && last l == ','
-     then return (init l, Str "," : s)
-     else return (l, s)
-
-pMatch :: (Inline -> Bool) -> Parsec [Inline] st Inline
-pMatch condition = try $ do
-  t <- anyToken
-  guard $ condition t
-  return t
-
-pSpace :: Parsec [Inline] st Inline
-pSpace = pMatch (\t -> t == Space || t == Str "\160")
-
-pLocator :: Parsec [Inline] st String
-pLocator = try $ do
-  optional $ pMatch (== Str ",")
-  optional pSpace
-  f  <- (guardFollowingDigit >> return [Str "p"]) -- "page" the default
-     <|> many1 (notFollowedBy pSpace >> anyToken)
-  gs <- many1 pWordWithDigits
-  return $ stringify f ++ (' ' : unwords gs)
-
-guardFollowingDigit :: Parsec [Inline] st ()
-guardFollowingDigit = do
-  t <- lookAhead anyToken
-  case t of
-       Str (d:_) | isDigit d -> return ()
-       _                     -> mzero
-
-pWordWithDigits :: Parsec [Inline] st String
-pWordWithDigits = try $ do
-  optional pSpace
-  r <- many1 (notFollowedBy pSpace >> anyToken)
-  let s = stringify r
-  guard $ any isDigit s
-  return s
-
diff --git a/src/Text/Pandoc/Options.hs b/src/Text/Pandoc/Options.hs
index c7c37d6b8..48e418ab2 100644
--- a/src/Text/Pandoc/Options.hs
+++ b/src/Text/Pandoc/Options.hs
@@ -48,7 +48,6 @@ import Data.Set (Set)
 import qualified Data.Set as Set
 import Data.Default
 import Text.Pandoc.Highlighting (Style, pygments)
-import qualified Text.CSL as CSL
 
 -- | Individually selectable syntax extensions.
 data Extension =
@@ -205,8 +204,6 @@ data ReaderOptions = ReaderOptions{
        , readerOldDashes       :: Bool -- ^ Use pandoc <= 1.8.2.1 behavior
                                        --   in parsing dashes; -- is em-dash;
                                        --   - before numerial is en-dash
-       , readerReferences      :: [CSL.Reference]  -- ^ Bibliographic references
-       , readerCitationStyle   :: Maybe CSL.Style -- ^ Citation style
        , readerApplyMacros     :: Bool -- ^ Apply macros to TeX math
        , readerIndentedCodeClasses :: [String] -- ^ Default classes for
                                        -- indented code blocks
@@ -223,8 +220,6 @@ instance Default ReaderOptions
                , readerColumns               = 80
                , readerTabStop               = 4
                , readerOldDashes             = False
-               , readerReferences            = []
-               , readerCitationStyle         = Nothing
                , readerApplyMacros           = True
                , readerIndentedCodeClasses   = []
                , readerDefaultImageExtension = ""
@@ -289,7 +284,6 @@ data WriterOptions = WriterOptions
   , writerSourceURL        :: Maybe String  -- ^ Absolute URL + directory of 1st source file
   , writerUserDataDir      :: Maybe FilePath -- ^ Path of user data directory
   , writerCiteMethod       :: CiteMethod -- ^ How to print cites
-  , writerBiblioFiles      :: [FilePath] -- ^ Biblio files to use for citations
   , writerHtml5            :: Bool       -- ^ Produce HTML5
   , writerHtmlQTags        :: Bool       -- ^ Use @<q>@ tags for quotes in HTML
   , writerBeamer           :: Bool       -- ^ Produce beamer LaTeX slide show
@@ -332,7 +326,6 @@ instance Default WriterOptions where
                       , writerSourceURL        = Nothing
                       , writerUserDataDir      = Nothing
                       , writerCiteMethod       = Citeproc
-                      , writerBiblioFiles      = []
                       , writerHtml5            = False
                       , writerHtmlQTags        = False
                       , writerBeamer           = False
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs
index ded57df5a..e558ed1b9 100644
--- a/src/Text/Pandoc/Readers/LaTeX.hs
+++ b/src/Text/Pandoc/Readers/LaTeX.hs
@@ -38,7 +38,6 @@ import Text.Pandoc.Definition
 import Text.Pandoc.Walk
 import Text.Pandoc.Shared
 import Text.Pandoc.Options
-import Text.Pandoc.Biblio (processBiblio)
 import Text.Pandoc.Parsing hiding ((<|>), many, optional, space)
 import qualified Text.Pandoc.UTF8 as UTF8
 import Data.Char ( chr, ord )
@@ -67,9 +66,7 @@ parseLaTeX = do
   eof
   st <- getState
   let meta = stateMeta st
-  refs <- getOption readerReferences
-  mbsty <- getOption readerCitationStyle
-  let (Pandoc _ bs') = processBiblio mbsty refs $ doc bs
+  let (Pandoc _ bs') = doc bs
   return $ Pandoc meta bs'
 
 type LP = Parser [Char] ParserState
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs
index 05662d9b5..658335202 100644
--- a/src/Text/Pandoc/Readers/Markdown.hs
+++ b/src/Text/Pandoc/Readers/Markdown.hs
@@ -54,7 +54,6 @@ import Text.Pandoc.Parsing hiding (tableWith)
 import Text.Pandoc.Readers.LaTeX ( rawLaTeXInline, rawLaTeXBlock )
 import Text.Pandoc.Readers.HTML ( htmlTag, htmlInBalanced, isInlineTag, isBlockTag,
                                   isTextTag, isCommentTag )
-import Text.Pandoc.Biblio (processBiblio)
 import Data.Monoid (mconcat, mempty)
 import Control.Applicative ((<$>), (<*), (*>), (<$))
 import Control.Monad
@@ -327,9 +326,7 @@ parseMarkdown = do
   st <- getState
   let meta = runF (stateMeta' st) st
   let Pandoc _ bs = B.doc $ runF blocks st
-  mbsty <- getOption readerCitationStyle
-  refs <- getOption readerReferences
-  return $ processBiblio mbsty refs $ Pandoc meta bs
+  return $ Pandoc meta bs
 
 addWarning :: Maybe SourcePos -> String -> MarkdownParser ()
 addWarning mbpos msg =
diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs
index ab579a326..6a781ddec 100644
--- a/src/Text/Pandoc/Writers/LaTeX.hs
+++ b/src/Text/Pandoc/Writers/LaTeX.hs
@@ -43,7 +43,6 @@ import Data.Char ( toLower, isPunctuation )
 import Control.Applicative ((<|>))
 import Control.Monad.State
 import Text.Pandoc.Pretty
-import System.FilePath (dropExtension)
 import Text.Pandoc.Slides
 import Text.Pandoc.Highlighting (highlight, styleToLaTeX,
                                  formatLaTeXInline, formatLaTeXBlock,
@@ -120,7 +119,6 @@ pandocToLaTeX options (Pandoc meta blocks) = do
   (biblioTitle :: String) <- liftM (render colwidth) $ inlineListToLaTeX lastHeader
   let main = render colwidth $ vsep body
   st <- get
-  let biblioFiles = intercalate "," $ map dropExtension $  writerBiblioFiles options
   let context  =  defField "toc" (writerTableOfContents options) $
                   defField "toc-depth" (show (writerTOCDepth options -
                                               if writerChapters options
@@ -152,11 +150,9 @@ pandocToLaTeX options (Pandoc meta blocks) = do
                                 $ writerHighlightStyle options )
                       else id) $
                   (case writerCiteMethod options of
-                         Natbib   -> defField "biblio-files" biblioFiles .
-                                     defField "biblio-title" biblioTitle .
+                         Natbib   -> defField "biblio-title" biblioTitle .
                                      defField "natbib" True
-                         Biblatex -> defField "biblio-files" biblioFiles .
-                                     defField "biblio-title" biblioTitle .
+                         Biblatex -> defField "biblio-title" biblioTitle .
                                      defField "biblatex" True
                          _        -> id) $
                   metadata
diff --git a/tests/Tests/Old.hs b/tests/Tests/Old.hs
index 8609781d0..5054559a1 100644
--- a/tests/Tests/Old.hs
+++ b/tests/Tests/Old.hs
@@ -63,7 +63,6 @@ tests = [ testGroup "markdown"
               "markdown-reader-more.txt" "markdown-reader-more.native"
             , lhsReaderTest "markdown+lhs"
             ]
-          , testGroup "citations" markdownCitationTests
           ]
         , testGroup "rst"
           [ testGroup "writer" (writerTests "rst" ++ lhsWriterTests "rst")
@@ -190,19 +189,6 @@ fb2WriterTest title opts inputfile normfile =
     ignoreBinary = unlines . filter (not . startsWith "<binary ") . lines
     startsWith tag str = all (uncurry (==)) $ zip tag str
 
-markdownCitationTests :: [Test]
-markdownCitationTests
-  =  map styleToTest ["chicago-author-date","ieee","mhra"]
-     ++ [test "natbib" wopts "markdown-citations.txt"
-         "markdown-citations.txt"]
-  where
-    ropts             = ["-r", "markdown", "-w", "markdown-citations", "--bibliography",
-                         "biblio.bib", "--no-wrap"]
-    wopts             = ["-r", "markdown", "-w", "markdown", "--no-wrap", "--natbib"]
-    styleToTest style = test style (ropts ++ ["--csl", style ++ ".csl"])
-                        "markdown-citations.txt"
-                        ("markdown-citations." ++ style ++ ".txt")
-
 -- | Run a test without normalize function, return True if test passed.
 test :: String    -- ^ Title of test
      -> [String]  -- ^ Options to pass to pandoc