diff --git a/COPYRIGHT b/COPYRIGHT
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -85,6 +85,22 @@
 
 Released under an explicit Public Domain License
 
+----------------------------------------------------------------------
+slidy/default
+Slidy javascript and CSS
+by Dave Raggett
+http://www.w3.org/Talks/Tools/Slidy2
+
+Released under W3C document and software licenses
+
+----------------------------------------------------------------------
+slideous/default
+Slideous javascript and CSS
+by Stefan Gössner
+http://goessner.net/
+
+Released under Creative Commons GNU LGPL License
+
 ------------------------------------------------------------------------
 windows/modpath.iss
 Copyright (c) 2007 Jared Breland
diff --git a/INSTALL b/INSTALL
--- a/INSTALL
+++ b/INSTALL
@@ -119,6 +119,7 @@
     data/
     s5/
     slidy/
+    slideous/
     dzslides/
     pcre-license.txt
     pcre3.dll
diff --git a/README b/README
--- a/README
+++ b/README
@@ -18,8 +18,8 @@
 slide shows), [ConTeXt], [RTF], [DocBook XML], [OpenDocument XML],
 [ODT], [Word docx], [GNU Texinfo], [MediaWiki markup], [EPUB],
 [Textile], [groff man] pages, [Emacs Org-Mode], [AsciiDoc], and [Slidy],
-[DZSlides], or [S5] HTML slide shows. It can also produce [PDF] output
-on systems where LaTeX is installed.
+[Slideous], [DZSlides], or [S5] HTML slide shows. It can also produce
+[PDF] output on systems where LaTeX is installed.
 
 Pandoc's enhanced version of markdown includes syntax for footnotes,
 tables, flexible ordered lists, definition lists, delimited code blocks,
@@ -153,6 +153,7 @@
     `docbook` (DocBook XML), `opendocument` (OpenDocument XML), `odt`
     (OpenOffice text document), `docx` (Word docx), `epub` (EPUB book),
     `asciidoc` (AsciiDoc), `slidy` (Slidy HTML and javascript slide show),
+    `slideous` (Slideous HTML and javascript slide show),
     `dzslides` (HTML5 + javascript slide show), `s5` (S5 HTML and javascript
     slide show), or `rtf` (rich text format). Note that `odt` and `epub`
     output will not be directed to *stdout*; an output filename must
@@ -178,8 +179,8 @@
         C:\Documents And Settings\USERNAME\Application Data\pandoc
 
     in Windows. A `reference.odt`, `reference.docx`, `default.csl`,
-    `epub.css`, `templates`, `slidy`, or `s5` directory placed in this
-    directory will override pandoc's normal defaults.
+    `epub.css`, `templates`, `slidy`, `slideous`, or `s5` directory
+    placed in this directory will override pandoc's normal defaults.
 
 `-v`, `--version`
 :   Print version.
@@ -199,7 +200,8 @@
 `-R`, `--parse-raw`
 :   Parse untranslatable HTML codes and LaTeX environments as raw HTML
     or LaTeX, instead of ignoring them.  Affects only HTML and LaTeX
-    input. Raw HTML can be printed in markdown, reStructuredText, HTML, Slidy,
+    input. Raw HTML can be printed in markdown, reStructuredText, HTML,
+    Slidy, Slideous,
     DZSlides, and S5 output; raw LaTeX can be printed in markdown,
     reStructuredText, LaTeX, and ConTeXt output. The default is for the
     readers to omit untranslatable HTML codes and LaTeX environments.
@@ -280,7 +282,7 @@
 :   Include an automatically generated table of contents (or, in
     the case of `latex`, `context`, and `rst`, an instruction to create
     one) in the output document. This option has no effect on `man`,
-    `docbook`, `slidy`, or `s5` output.
+    `docbook`, `slidy`, `slideous`, or `s5` output.
 
 `--no-highlight`
 :   Disables syntax highlighting for code blocks and inlines, even when
@@ -289,7 +291,7 @@
 `--highlight-style`=*STYLE*
 :   Specifies the coloring style to be used in highlighted source code.
     Options are `pygments` (the default), `kate`, `monochrome`,
-    `espresso`, `haddock`, and `tango`.
+    `espresso`, `zenburn`, `haddock`, and `tango`.
 
 `-H` *FILE*, `--include-in-header=`*FILE*
 :   Include contents of *FILE*, verbatim, at the end of the header.
@@ -323,7 +325,8 @@
     in the sense that it needs no external files and no net access to be
     displayed properly by a browser. This option works only with HTML output
     formats, including `html`, `html5`, `html+lhs`, `html5+lhs`, `s5`,
-    `slidy`, and `dzslides`. Scripts, images, and stylesheets at absolute URLs
+    `slidy`, `slideous`,
+    and `dzslides`. Scripts, images, and stylesheets at absolute URLs
     will be downloaded; those at relative URLs will be sought first relative
     to the working directory, then relative to the user data directory (see
     `--data-dir`), and finally relative to pandoc's default data directory.
@@ -378,7 +381,7 @@
 
 `--slide-level`=*NUMBER*
 :   Specifies that headers with the specified level create
-    slides (for `beamer`, `s5`, `slidy`, `dzslides`).  Headers
+    slides (for `beamer`, `s5`, `slidy`, `slideous`, `dzslides`).  Headers
     above this level in the hierarchy are used to divide the
     slide show into sections; headers below this level create
     subheads within a slide.  The default is to set the slide level
@@ -683,6 +686,8 @@
 `slidy-url`
 :   base URL for Slidy documents (defaults to
     `http://www.w3.org/Talks/Tools/Slidy2`)
+`slideous-url`
+:   base URL for Slideous documents (defaults to `default`)
 `s5-url`
 :   base URL for S5 documents (defaults to `ui/default`)
 `fontsize`
@@ -1698,7 +1703,7 @@
 Docx
   ~ It will be rendered using OMML math markup.
 
-HTML, Slidy, DZSlides, S5, EPUB
+HTML, Slidy, Slideous, DZSlides, S5, EPUB
   ~ The way math is rendered in HTML will depend on the
     command-line options selected:
 
@@ -1749,7 +1754,8 @@
 (except verbatim contexts, where `<`, `>`, and `&` are interpreted
 literally).
 
-The raw HTML is passed through unchanged in HTML, S5, Slidy, DZSlides, EPUB,
+The raw HTML is passed through unchanged in HTML, S5, Slidy, Slideous,
+DZSlides, EPUB,
 Markdown, and Textile output, and suppressed in other formats.
 
 *Pandoc extension*.
@@ -2070,9 +2076,9 @@
 =================================
 
 You can use Pandoc to produce an HTML + javascript slide presentation
-that can be viewed via a web browser.  There are three ways to do this,
-using [S5], [DZSlides], or [Slidy].  You can also produce a PDF slide
-show using LaTeX [beamer].
+that can be viewed via a web browser.  There are four ways to do this,
+using [S5], [DZSlides], [Slidy], or [Slideous].  You can also produce a
+PDF slide show using LaTeX [beamer].
 
 Here's the markdown source for a simple slide show, `habits.txt`:
 
@@ -2118,6 +2124,10 @@
 
 for Slidy,
 
+    pandoc -t slideous -s habits.txt -o habits.html
+
+for Slideous,
+
     pandoc -t dzslides -s habits.txt -o habits.html
 
 for DZSlides, or
@@ -2164,11 +2174,14 @@
 will be the slide level.) But you can also structure the slide show into
 sections, as in the example above.
 
-For Slidy and S5, the file produced by pandoc with the `-s/--standalone`
+For Slidy, Slideous and S5, the file produced by pandoc with the
+`-s/--standalone`
 option embeds a link to javascripts and CSS files, which are assumed to
-be available at the relative path `s5/default` (for S5) or at the Slidy
+be available at the relative path `s5/default` (for S5) or `slideous`
+(for Slideous), or at the Slidy
 website at `w3.org` (for Slidy). (These paths can be changed by setting
-the `slidy-url` or `s5-url` variables; see `--variable`, above.) For DZSlides,
+the `slidy-url`, `slideous-url` or `s5-url` variables; see `--variable`,
+above.) For DZSlides,
 the (relatively short) javascript and css are included in the file by default.
 
 Incremental lists
@@ -2190,7 +2203,8 @@
 ------------------
 
 You can change the style of HTML slides by putting customized CSS files
-in `$DATADIR/s5/default` (for S5) or `$DATADIR/slidy` (for Slidy),
+in `$DATADIR/s5/default` (for S5), `$DATADIR/slidy` (for Slidy),
+or `$DATADIR/slideous` (for Slideous),
 where `$DATADIR` is the user data directory (see `--data-dir`, above).
 The originals may be found in pandoc's system data directory (generally
 `$CABALDIR/pandoc-VERSION/s5/default`). Pandoc will look there for any
@@ -2267,6 +2281,7 @@
 [reStructuredText]: http://docutils.sourceforge.net/docs/ref/rst/introduction.html
 [S5]: http://meyerweb.com/eric/tools/s5/
 [Slidy]: http://www.w3.org/Talks/Tools/Slidy/
+[Slideous]: http://goessner.net/articles/slideous/
 [HTML]:  http://www.w3.org/TR/html40/
 [HTML 5]:  http://www.w3.org/TR/html5/
 [XHTML]:  http://www.w3.org/TR/xhtml1/
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,58 @@
+pandoc (1.9.4)
+
+  * Simplified `Text.Pandoc.Biblio` and fixed bugs with citations inside
+    footnotes and captions.  We now handle note citations by inserting
+    footnotes during initial citation processing, and doing a separate
+    pass later to remove notes inside notes.
+
+  * Added 'zenburn' highlight style from highlighting-kate.
+
+  * Added Slideous writer. Slideous is an HTML + javascript slide show
+    format, similar to Slidy, but works with IE 7. (Jonas Smedegaard)
+
+  * LaTeX writer:
+
+    + Ensure we don't have extra blank lines at ends of cells.
+      This can cause LaTeX errors, as they are interpreted as new paragraphs.
+    + More consistent interblock spacing.
+    + Require highlighting-kate >= 0.5.1, for proper highlighted inline
+      code in LaTeX.  Closes #527.
+    + Ensure that a Verbatim at the end of a footnote is followed by
+      a newline. (Fixes a regression in the previous version.)
+    + In default template, use black for internal links and TOC.
+      Added commented-out code to use footnotes for links, as would
+      be suitable in print output.
+
+  * Beamer writer:  When `--incremental` is used, lists inside
+    a block quote should appear all at once.  (This makes Beamer
+    output consistent with the HTML slide show formats.)
+
+  * ConTeXt writer:
+
+    + Escape `%` as `\letterpercent{}` not `\letterpercent `,
+      to avoid gobbling spaces after the `%` sign.
+    + Ensure space after `\stopformula`.
+
+  * Markdown writer:
+
+    + Use `:` form instead of `~` in definition lists, for better
+      compatibility with other markdown implementations.
+    + Don't wrap the term, because it breaks definition lists.
+    + Use a nonzero space to prevent false recognition
+      of list marker in ordered lists.  Closes #516.
+
+  * Org writer: Add space before language name.  Closes #523.
+
+  * Docx writer: Simplified bullet characters so they work properly
+    with Word 2007. Closes #520.
+
+  * LaTeX reader: Support `\centerline`.
+
+  * RST reader:  handle figures.  Closes #522.
+
+  * Textile reader: fix for `<notextile>` and `==`.  Closes #517.
+    (Paul Rivier)
+
 pandoc (1.9.3)
 
   * Fixed bug in `fromEntities`.  The previous version would turn
diff --git a/man/man1/pandoc.1 b/man/man1/pandoc.1
--- a/man/man1/pandoc.1
+++ b/man/man1/pandoc.1
@@ -13,7 +13,8 @@
 reStructuredText, XHTML, HTML 5, LaTeX (including beamer slide shows),
 ConTeXt, RTF, DocBook XML, OpenDocument XML, ODT, Word docx, GNU
 Texinfo, MediaWiki markup, EPUB, Textile, groff man pages, Emacs
-Org-Mode, AsciiDoc, and Slidy, DZSlides, or S5 HTML slide shows.
+Org-Mode, AsciiDoc, and Slidy, Slideous, DZSlides, or S5 HTML slide
+shows.
 It can also produce PDF output on systems where LaTeX is installed.
 .PP
 Pandoc\[aq]s enhanced version of markdown includes syntax for footnotes,
@@ -186,9 +187,9 @@
 \f[C]opendocument\f[] (OpenDocument XML), \f[C]odt\f[] (OpenOffice text
 document), \f[C]docx\f[] (Word docx), \f[C]epub\f[] (EPUB book),
 \f[C]asciidoc\f[] (AsciiDoc), \f[C]slidy\f[] (Slidy HTML and javascript
-slide show), \f[C]dzslides\f[] (HTML5 + javascript slide show),
-\f[C]s5\f[] (S5 HTML and javascript slide show), or \f[C]rtf\f[] (rich
-text format).
+slide show), \f[C]slideous\f[] (Slideous HTML and javascript slide
+show), \f[C]dzslides\f[] (HTML5 + javascript slide show), \f[C]s5\f[]
+(S5 HTML and javascript slide show), or \f[C]rtf\f[] (rich text format).
 Note that \f[C]odt\f[] and \f[C]epub\f[] output will not be directed to
 \f[I]stdout\f[]; an output filename must be specified using the
 \f[C]-o/--output\f[] option.
@@ -229,9 +230,9 @@
 .PP
 in Windows.
 A \f[C]reference.odt\f[], \f[C]reference.docx\f[], \f[C]default.csl\f[],
-\f[C]epub.css\f[], \f[C]templates\f[], \f[C]slidy\f[], or \f[C]s5\f[]
-directory placed in this directory will override pandoc\[aq]s normal
-defaults.
+\f[C]epub.css\f[], \f[C]templates\f[], \f[C]slidy\f[],
+\f[C]slideous\f[], or \f[C]s5\f[] directory placed in this directory
+will override pandoc\[aq]s normal defaults.
 .RE
 .TP
 .B \f[C]-v\f[], \f[C]--version\f[]
@@ -258,7 +259,7 @@
 LaTeX, instead of ignoring them.
 Affects only HTML and LaTeX input.
 Raw HTML can be printed in markdown, reStructuredText, HTML, Slidy,
-DZSlides, and S5 output; raw LaTeX can be printed in markdown,
+Slideous, DZSlides, and S5 output; raw LaTeX can be printed in markdown,
 reStructuredText, LaTeX, and ConTeXt output.
 The default is for the readers to omit untranslatable HTML codes and
 LaTeX environments.
@@ -375,7 +376,7 @@
 \f[C]latex\f[], \f[C]context\f[], and \f[C]rst\f[], an instruction to
 create one) in the output document.
 This option has no effect on \f[C]man\f[], \f[C]docbook\f[],
-\f[C]slidy\f[], or \f[C]s5\f[] output.
+\f[C]slidy\f[], \f[C]slideous\f[], or \f[C]s5\f[] output.
 .RS
 .RE
 .TP
@@ -388,8 +389,8 @@
 .B \f[C]--highlight-style\f[]=\f[I]STYLE\f[]
 Specifies the coloring style to be used in highlighted source code.
 Options are \f[C]pygments\f[] (the default), \f[C]kate\f[],
-\f[C]monochrome\f[], \f[C]espresso\f[], \f[C]haddock\f[], and
-\f[C]tango\f[].
+\f[C]monochrome\f[], \f[C]espresso\f[], \f[C]zenburn\f[],
+\f[C]haddock\f[], and \f[C]tango\f[].
 .RS
 .RE
 .TP
@@ -439,7 +440,7 @@
 browser.
 This option works only with HTML output formats, including
 \f[C]html\f[], \f[C]html5\f[], \f[C]html+lhs\f[], \f[C]html5+lhs\f[],
-\f[C]s5\f[], \f[C]slidy\f[], and \f[C]dzslides\f[].
+\f[C]s5\f[], \f[C]slidy\f[], \f[C]slideous\f[], and \f[C]dzslides\f[].
 Scripts, images, and stylesheets at absolute URLs will be downloaded;
 those at relative URLs will be sought first relative to the working
 directory, then relative to the user data directory (see
@@ -525,7 +526,8 @@
 .TP
 .B \f[C]--slide-level\f[]=\f[I]NUMBER\f[]
 Specifies that headers with the specified level create slides (for
-\f[C]beamer\f[], \f[C]s5\f[], \f[C]slidy\f[], \f[C]dzslides\f[]).
+\f[C]beamer\f[], \f[C]s5\f[], \f[C]slidy\f[], \f[C]slideous\f[],
+\f[C]dzslides\f[]).
 Headers above this level in the hierarchy are used to divide the slide
 show into sections; headers below this level create subheads within a
 slide.
@@ -959,6 +961,11 @@
 .RS
 .RE
 .TP
+.B \f[C]slideous-url\f[]
+base URL for Slideous documents (defaults to \f[C]default\f[])
+.RS
+.RE
+.TP
 .B \f[C]s5-url\f[]
 base URL for S5 documents (defaults to \f[C]ui/default\f[])
 .RS
@@ -1050,7 +1057,7 @@
 .PP
 You can use Pandoc to produce an HTML + javascript slide presentation
 that can be viewed via a web browser.
-There are three ways to do this, using S5, DZSlides, or Slidy.
+There are four ways to do this, using S5, DZSlides, Slidy, or Slideous.
 You can also produce a PDF slide show using LaTeX beamer.
 .PP
 Here\[aq]s the markdown source for a simple slide show,
@@ -1112,6 +1119,14 @@
 .IP
 .nf
 \f[C]
+pandoc\ -t\ slideous\ -s\ habits.txt\ -o\ habits.html
+\f[]
+.fi
+.PP
+for Slideous,
+.IP
+.nf
+\f[C]
 pandoc\ -t\ dzslides\ -s\ habits.txt\ -o\ habits.html
 \f[]
 .fi
@@ -1164,13 +1179,14 @@
  But you can also structure the slide show into sections, as in the
 example above.
 .PP
-For Slidy and S5, the file produced by pandoc with the
+For Slidy, Slideous and S5, the file produced by pandoc with the
 \f[C]-s/--standalone\f[] option embeds a link to javascripts and CSS
 files, which are assumed to be available at the relative path
-\f[C]s5/default\f[] (for S5) or at the Slidy website at \f[C]w3.org\f[]
-(for Slidy).
-(These paths can be changed by setting the \f[C]slidy-url\f[] or
-\f[C]s5-url\f[] variables; see \f[C]--variable\f[], above.)
+\f[C]s5/default\f[] (for S5) or \f[C]slideous\f[] (for Slideous), or at
+the Slidy website at \f[C]w3.org\f[] (for Slidy).
+(These paths can be changed by setting the \f[C]slidy-url\f[],
+\f[C]slideous-url\f[] or \f[C]s5-url\f[] variables; see
+\f[C]--variable\f[], above.)
  For DZSlides, the (relatively short) javascript and css are included in
 the file by default.
 .SS Incremental lists
@@ -1194,9 +1210,10 @@
 .SS Styling the slides
 .PP
 You can change the style of HTML slides by putting customized CSS files
-in \f[C]$DATADIR/s5/default\f[] (for S5) or \f[C]$DATADIR/slidy\f[] (for
-Slidy), where \f[C]$DATADIR\f[] is the user data directory (see
-\f[C]--data-dir\f[], above).
+in \f[C]$DATADIR/s5/default\f[] (for S5), \f[C]$DATADIR/slidy\f[] (for
+Slidy), or \f[C]$DATADIR/slideous\f[] (for Slideous), where
+\f[C]$DATADIR\f[] is the user data directory (see \f[C]--data-dir\f[],
+above).
 The originals may be found in pandoc\[aq]s system data directory
 (generally \f[C]$CABALDIR/pandoc-VERSION/s5/default\f[]).
 Pandoc will look there for any files it does not find in the user data
diff --git a/man/man5/pandoc_markdown.5 b/man/man5/pandoc_markdown.5
--- a/man/man5/pandoc_markdown.5
+++ b/man/man5/pandoc_markdown.5
@@ -1260,7 +1260,7 @@
 .RS
 .RE
 .TP
-.B HTML, Slidy, DZSlides, S5, EPUB
+.B HTML, Slidy, Slideous, DZSlides, S5, EPUB
 The way math is rendered in HTML will depend on the command-line options
 selected:
 .RS
@@ -1320,8 +1320,9 @@
 document (except verbatim contexts, where \f[C]<\f[], \f[C]>\f[], and
 \f[C]&\f[] are interpreted literally).
 .PP
-The raw HTML is passed through unchanged in HTML, S5, Slidy, DZSlides,
-EPUB, Markdown, and Textile output, and suppressed in other formats.
+The raw HTML is passed through unchanged in HTML, S5, Slidy, Slideous,
+DZSlides, EPUB, Markdown, and Textile output, and suppressed in other
+formats.
 .PP
 \f[I]Pandoc extension\f[].
 .PP
diff --git a/pandoc.cabal b/pandoc.cabal
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -1,5 +1,5 @@
 Name:            pandoc
-Version:         1.9.3
+Version:         1.9.4
 Cabal-Version:   >= 1.10
 Build-Type:      Custom
 License:         GPL
@@ -15,12 +15,12 @@
 Synopsis:        Conversion between markup formats
 Description:     Pandoc is a Haskell library for converting from one markup
                  format to another, and a command-line tool that uses
-                 this library. It can read markdown and (subsets of)
-                 reStructuredText, HTML, LaTeX and Textile, and it can write
+                 this library. It can read markdown and (subsets of) HTML,
+                 reStructuredText, LaTeX, DocBook, and Textile, and it can write
                  markdown, reStructuredText, HTML, LaTeX, ConTeXt, Docbook,
                  OpenDocument, ODT, Word docx, RTF, MediaWiki, Textile,
                  groff man pages, plain text, Emacs Org-Mode, AsciiDoc, EPUB,
-                 and S5 and Slidy HTML slide shows.
+                 and S5, Slidy and Slideous HTML slide shows.
                  .
                  Pandoc extends standard markdown syntax with footnotes,
                  embedded LaTeX, definition lists, tables, and other
@@ -45,6 +45,7 @@
                  templates/default.rst, templates/default.plain,
                  templates/default.mediawiki, templates/default.rtf,
                  templates/default.s5, templates/default.slidy,
+                 templates/default.slideous,
                  templates/default.dzslides, templates/default.asciidoc,
                  templates/default.textile, templates/default.org,
                  templates/epub-titlepage.html, templates/epub-page.html,
@@ -78,6 +79,9 @@
                  slidy/graphics/nofold-dim.gif,
                  slidy/graphics/unfold-dim.gif,
                  slidy/graphics/fold-dim.gif,
+                 -- data for slideous writer
+                 slideous/slideous.css,
+                 slideous/slideous.js,
                  -- data for dzslides writer
                  dzslides/template.html,
                  -- data for citeproc
@@ -216,7 +220,7 @@
                  tagsoup >= 0.12.5 && < 0.13,
                  base64-bytestring >= 0.1 && < 0.2,
                  zlib >= 0.5 && < 0.6,
-                 highlighting-kate >= 0.5.0.2 && < 0.6,
+                 highlighting-kate >= 0.5.1 && < 0.6,
                  temporary >= 1.1 && < 1.2
   if flag(blaze_html_0_5)
     build-depends:
@@ -321,7 +325,7 @@
                  tagsoup >= 0.12.5 && < 0.13,
                  base64-bytestring >= 0.1 && < 0.2,
                  zlib >= 0.5 && < 0.6,
-                 highlighting-kate >= 0.5.0.2 && < 0.6,
+                 highlighting-kate >= 0.5.1 && < 0.6,
                  temporary >= 1.1 && < 1.2
   if flag(blaze_html_0_5)
     build-depends:
@@ -385,7 +389,7 @@
                  tagsoup >= 0.12.5 && < 0.13,
                  base64-bytestring >= 0.1 && < 0.2,
                  zlib >= 0.5 && < 0.6,
-                 highlighting-kate >= 0.5.0.2 && < 0.6,
+                 highlighting-kate >= 0.5.1 && < 0.6,
                  temporary >= 1.1 && < 1.2
   if flag(blaze_html_0_5)
     build-depends:
diff --git a/slideous/slideous.css b/slideous/slideous.css
new file mode 100644
--- /dev/null
+++ b/slideous/slideous.css
@@ -0,0 +1,95 @@
+/*	This work is licensed under Creative Commons GNU LGPL License.
+
+	License: http://creativecommons.org/licenses/LGPL/2.1/
+	Version: 1.0
+
+	Author:  Stefan Goessner/2005
+	Web:     http://goessner.net/ 
+*/
+@media screen, projection {
+body {
+  background-color: #e3eee7;
+  padding: 0;
+  margin: 0;
+  color: #132; 
+  border-color: #678; 
+  font-size: 125%;
+}
+#statusbar {
+  display: none;
+  position: absolute; z-index: 10;
+  top: auto; bottom: 0; left: 0; right: 0;
+  height: 2em;
+  background-color: #f0fff8;
+  color: #132;
+  font-size: 75%;
+  padding: 0.5em 0.5em 0 2px;
+  border-top: solid 1px #000;
+}
+#statusbar button, #tocbox {
+  cursor: pointer; 
+  color: #031;
+  background-color: #e0eee7;
+  margin: 1px;
+  padding: 0 0.5em;
+  border: inset 1px black;
+}
+#statusbar button:hover, #tocbox:hover {
+  color: #031;
+  background-color: #c0ccc6;
+  border: outset 1px black;
+}
+#tocbox {
+  width: 15em;
+}
+#eos {
+  visibility: hidden;
+  color: #021;
+  background-color: #fffafa;
+  border: inset 1px black;
+  font-size: 120%;
+}
+div.slide {
+   display: block;
+   margin: 0 0 2em 0;
+   padding: 0 150px;
+}
+
+div.slide h1 {
+  background: #a0aaa4;
+  color: #f0fff8;
+  padding: 0 0.5em 0 0.5em;
+  margin: 0 -150px;
+  font-size: 120%;
+  border-bottom: solid 1px black;
+}
+
+div.slide h1:before { content: "# "; }
+div.handout { display: block; }
+   
+body>#statusbar {   /* ie6 hack for fixing the statusbar - in quirks mode */
+  position: fixed;  /* thanks to Anne van Kesteren and Arthur Steiner */
+}                   /* see http://limpid.nl/lab/css/fixed/footer */
+* html body {
+  overflow: hidden;
+}
+* html div.slide {
+  height: 100%;
+  padding-bottom: 2em;
+  overflow: auto;
+}                   /* end ie6-hack */
+
+} /* @media screen, projection */
+
+@media print {
+body {
+  color: black;
+  font-family: sans-serif;
+  font-size: 11pt;
+}
+
+#statusbar { display: none; }
+div.slide { page-break-after: always; }
+div.handout { display: block; }
+
+} /* @media print */
diff --git a/slideous/slideous.js b/slideous/slideous.js
new file mode 100644
--- /dev/null
+++ b/slideous/slideous.js
@@ -0,0 +1,321 @@
+/*	This work is licensed under Creative Commons GNU LGPL License.
+
+	License: http://creativecommons.org/licenses/LGPL/2.1/
+
+	Author:  Stefan Goessner/2005-2006
+	Web:     http://goessner.net/ 
+*/
+var Slideous = {
+   version: 1.0,
+   // == user customisable ===
+   clickables: { a: true, button: true, img: true, input: true, object: true, textarea: true, select: true, option: true },
+   incrementables: { blockquote: { filter: "self, parent" }, 
+                     dd: { filter: "self, parent" },
+                     dt: { filter: "self, parent" },
+                     h2: { filter: "self, parent" },
+                     h3: { filter: "self, parent" },
+                     h4: { filter: "self, parent" },
+                     h5: { filter: "self, parent" },
+                     h6: { filter: "self, parent" },
+                     li: { filter: "self, parent" },
+                     p: { filter: "self" }, 
+                     pre: { filter: "self" }, 
+                     img: { filter: "self, parent" }, 
+                     object: { filter: "self, parent" },
+                     table: { filter: "self, parent" },
+                     td: { filter: "self, parent" },
+                     th: { filter: "self, parent" },
+                     tr: { filter: "parent, grandparent" }
+                   },
+   autoincrementables: { ol: true, ul: true, dl: true },
+   autoincrement: false,
+   statusbar: true,
+   navbuttons: { incfontbutton:   function(){Slideous.changefontsize(+Slideous.fontdelta);},
+                 decfontbutton:   function(){Slideous.changefontsize(-Slideous.fontdelta);},
+                 contentbutton:   function(){Slideous.gotoslide(Slideous.tocidx(), true, true);},
+                 homebutton:      function(){Slideous.gotoslide(1, true, true);},
+                 prevslidebutton: function(){Slideous.previous(false);},
+                 previtembutton:  function(){Slideous.previous(true);},
+                 nextitembutton:  function(){Slideous.next(true);},
+                 nextslidebutton: function(){Slideous.next(false);},
+                 endbutton:       function(){Slideous.gotoslide(Slideous.count,true,true);} },
+   fontsize: 125,  // in percent, corresponding to body.font-size in css file
+   fontdelta: 5,   // increase/decrease fontsize by this value
+   mousesensitive: true,
+   tocidx: 0,
+   tocitems: { toc: "<li><a href=\"#s{\$slideidx}\">{\$slidetitle}</a></li>",
+               tocbox: "<option value=\"#s{\$slideidx}\" title=\"{\$slidetitle}\">{\$slidetitle}</option>" },
+   keydown: function(evt) {
+      evt = evt || window.event;
+      var key = evt.keyCode || evt.which;
+      if (key && !evt.ctrlKey && !evt.altKey) {
+         switch (key) {
+            case 33: // page up  ... previous slide
+               Slideous.previous(false); evt.cancel = !Slideous.showall; break;
+            case 37: // left arrow ... previous item
+               Slideous.previous(true); evt.cancel = !Slideous.showall; break;
+            case 32: // space bar
+            case 39: // right arrow
+               Slideous.next(true); evt.cancel = !Slideous.showall; break;
+            case 13: // carriage return  ... next slide
+            case 34: // page down
+               Slideous.next(false); evt.cancel = !Slideous.showall; break;
+            case 35: // end  ... last slide (not recognised by opera)
+               Slideous.gotoslide(Slideous.count, true, true); evt.cancel = !Slideous.showall; break;
+            case 36: // home ... first slide (not recognised by opera)
+               Slideous.gotoslide(1, true, true); evt.cancel = !Slideous.showall; break;
+            case 65: // A ... show All
+            case 80: // P ... Print mode
+               Slideous.toggleshowall(!Slideous.showall); evt.cancel = true; break;
+            case 67: // C ... goto contents
+               Slideous.gotoslide(Slideous.tocidx, true, true); evt.cancel = true; break;
+            case 77: // M ... toggle mouse sensitivity
+               Slideous.mousenavigation(Slideous.mousesensitive = !Slideous.mousesensitive); evt.cancel = true; break;
+            case 83: // S ... toggle statusbar
+               Slideous.togglestatusbar(); evt.cancel = true; break;
+            case 61:  // + ... increase fontsize
+            case 107:
+               Slideous.changefontsize(+Slideous.fontdelta); evt.cancel = true; break;
+            case 109:  // - ... decrease fontsize
+               Slideous.changefontsize(-Slideous.fontdelta); evt.cancel = true; break;
+            default: break;
+         }
+         if (evt.cancel) evt.returnValue = false;
+      }
+      return !evt.cancel;
+   },
+
+   // == program logic ===
+   count: 0,                       // # of slides ..
+   curidx: 0,                      // current slide index ..
+   mousedownpos: null,             // last mouse down position ..
+   contentselected: false,         // indicates content selection ..
+   showall: true,
+   init: function() {
+      Slideous.curidx = 1;
+      Slideous.importproperties();
+      Slideous.registerslides();
+      document.body.innerHTML = Slideous.injectproperties(document.body.innerHTML);
+      Slideous.buildtocs();
+      Slideous.registeranchors();
+      Slideous.toggleshowall(false);
+      Slideous.updatestatus();
+      document.body.style.fontSize = Slideous.fontsize+"%";
+      document.getElementById("s1").style.display = "block";
+      document.onkeydown = Slideous.keydown;
+      Slideous.mousenavigation(Slideous.mousesensitive);
+      Slideous.registerbuttons();
+      if (window.location.hash)
+         Slideous.gotoslide(window.location.hash.substr(2), true, true);
+   },
+   registerslides: function() {
+      var div = document.getElementsByTagName("div");
+      Slideous.count = 0;
+      for (var i in div)
+         if (Slideous.hasclass(div[i], "slide"))
+            div[i].setAttribute("id", "s"+(++Slideous.count));
+   },
+   registeranchors: function() {
+      var a = document.getElementsByTagName("a"),
+          loc = (window.location.hostname+window.location.pathname).replace(/\\/g, "/");
+      for (var i in a) {
+         if (a[i].href && a[i].href.indexOf(loc) >= 0 && a[i].href.lastIndexOf("#") >= 0) {
+            a[i].href = "javascript:Slideous.gotoslide(" + a[i].href.substr(a[i].href.lastIndexOf("#")+2)+",true,true)";
+         }
+      }
+   },
+   registerbuttons: function() {
+      var button;
+      for (var b in Slideous.navbuttons)
+         if (button = document.getElementById(b))
+            button.onclick = Slideous.navbuttons[b];
+   },
+   importproperties: function() {  // from html meta section ..
+      var meta = document.getElementsByTagName("meta"), elem;
+      for (var i in meta)
+         if (meta[i].attributes && meta[i].attributes["name"] && meta[i].attributes["name"].value in Slideous)
+            switch (typeof(Slideous[meta[i].attributes["name"].value])) {
+               case "number": Slideous[meta[i].attributes["name"].value] = parseInt(meta[i].attributes["content"].value); break;
+               case "boolean": Slideous[meta[i].attributes["name"].value] = meta[i].attributes["content"].value == "true" ? true : false; break;
+               default: Slideous[meta[i].attributes["name"].value] = meta[i].attributes["content"].value; break;
+            }
+   },
+   injectproperties: function(str) {
+      var meta = document.getElementsByTagName("meta"), elem;
+      for (var i in meta) {
+         if (meta[i].attributes && meta[i].attributes["name"])
+            str = str.replace(new RegExp("{\\$"+meta[i].attributes["name"].value+"}","g"), meta[i].attributes["content"].value);
+      }
+      return str = str.replace(/{\$generator}/g, "Slideous")
+                      .replace(/{\$version}/g, Slideous.version)
+                      .replace(/{\$title}/g, document.title)
+                      .replace(/{\$slidecount}/g, Slideous.count);
+   },
+   buildtocs: function() {
+      var toc = document.getElementById("toc"), list = "",
+          tocbox = document.getElementById("tocbox");
+      if (toc) {
+         for (var i=0; i<Slideous.count; i++)
+            list += Slideous.tocitems.toc.replace(/{\$slideidx}/g, i+1).replace(/{\$slidetitle}/, document.getElementById("s"+(i+1)).getElementsByTagName("h1")[0].innerHTML);
+         toc.innerHTML = list;
+         while (toc && !Slideous.hasclass(toc, "slide")) toc = toc.parentNode;
+         if (toc) Slideous.tocidx = toc.getAttribute("id").substr(1);
+      }
+      if (tocbox) {
+         tocbox.innerHTML = "";
+         for (var i=0; i<Slideous.count; i++)
+            tocbox.options[tocbox.length] = new Option((i+1)+". "+document.getElementById("s"+(i+1)).getElementsByTagName("h1")[0].innerHTML, "#s"+(i+1));
+         tocbox.onchange = function() { Slideous.gotoslide(this.selectedIndex+1, true, true); };
+      }
+   },
+   next: function(deep) {
+      if (!Slideous.showall) {
+         var slide = document.getElementById("s"+Slideous.curidx),
+             item = Slideous.firstitem(slide, Slideous.isitemhidden);
+         if (deep) {  // next item
+            if (item)
+               Slideous.displayitem(item, true);
+            else
+               Slideous.gotoslide(Slideous.curidx+1, false, false);
+         }
+         else if (item)  // complete slide ..
+            while (item = Slideous.firstitem(slide, Slideous.isitemhidden))
+               Slideous.displayitem(item, true);
+         else           // next slide
+            Slideous.gotoslide(Slideous.curidx+1, true, false);
+         Slideous.updatestatus();
+      }
+   },
+   previous: function(deep) {
+      if (!Slideous.showall) {
+         var slide = document.getElementById("s"+Slideous.curidx);
+         if (deep) {
+            var item = Slideous.lastitem(slide, Slideous.isitemvisible);
+            if (item)
+               Slideous.displayitem(item, false);
+            else
+               Slideous.gotoslide(Slideous.curidx-1, true, false);
+         }
+         else
+            Slideous.gotoslide(Slideous.curidx-1, true, false);
+         Slideous.updatestatus();
+      }
+   },
+   gotoslide: function(i, showitems, updatestatus) {
+      if (!Slideous.showall && i > 0 && i <= Slideous.count && i != Slideous.curidx) {
+         document.getElementById("s"+Slideous.curidx).style.display = "none";
+         var slide = document.getElementById("s"+(Slideous.curidx=i)), item;
+         while (item = Slideous.firstitem(slide, showitems ? Slideous.isitemhidden : Slideous.isitemvisible))
+            Slideous.displayitem(item, showitems);
+         slide.style.display = "block";
+         if (updatestatus)
+            Slideous.updatestatus();
+      }
+   },
+   firstitem: function(root, filter) {
+      var found = filter(root);
+      for (var node=root.firstChild; node!=null && !found; node = node.nextSibling)
+         found = Slideous.firstitem(node, filter);
+      return found;
+   },
+   lastitem: function(root, filter) {
+      var found = null;
+      for (var node=root.lastChild; node!=null && !found; node = node.previousSibling)
+         found = Slideous.lastitem(node, filter);
+      return found || filter(root);
+   },
+   isitem: function(node, visible) {
+      var nodename;
+      return node && node.nodeType == 1   // elements only ..
+          && (nodename=node.nodeName.toLowerCase()) in Slideous.incrementables
+          && (   Slideous.incrementables[nodename].filter.match("\\bself\\b") && (Slideous.hasclass(node, "incremental") || (Slideous.autoincrement && nodename in Slideous.autoincrementables))
+              || Slideous.incrementables[nodename].filter.match("\\bparent\\b") && (Slideous.hasclass(node.parentNode, "incremental") || (Slideous.autoincrement && node.parentNode.nodeName.toLowerCase() in Slideous.autoincrementables))
+              || Slideous.incrementables[nodename].filter.match("\\bgrandparent\\b") && (Slideous.hasclass(node.parentNode.parentNode, "incremental") || (Slideous.autoincrement && node.parentNode.parentNode.nodeName.toLowerCase() in Slideous.autoincrementables))
+             )
+          && (visible ? (node.style.visibility != "hidden")
+                      : (node.style.visibility == "hidden"))
+          ? node : null;
+   },
+   isitemvisible: function(node) { return Slideous.isitem(node, true); },
+   isitemhidden: function(node) { return Slideous.isitem(node, false); },
+   displayitem: function(item, show) {
+      if (item) item.style.visibility = (show ? "visible" : "hidden");
+   },
+   updatestatus: function() {
+      if (Slideous.statusbar) {
+         var eos = document.getElementById("eos"), 
+             idx = document.getElementById("slideidx"),
+             tocbox = document.getElementById("tocbox");
+         if (eos) 
+            eos.style.visibility = Slideous.firstitem(document.getElementById("s"+Slideous.curidx), Slideous.isitemhidden) != null
+                                 ? "visible" : "hidden";
+         if (idx) 
+            idx.innerHTML = Slideous.curidx;
+         if (tocbox)
+            tocbox.selectedIndex = Slideous.curidx-1;
+      }
+   },
+   changefontsize: function(delta) {
+      document.body.style.fontSize = (Slideous.fontsize+=delta)+"%";
+   },
+   togglestatusbar: function() {
+      document.getElementById("statusbar").style.display = (Slideous.statusbar = !Slideous.statusbar) ? "block" : "none";
+   },
+   toggleshowall: function(showall) {
+      var slide, item;
+      for (var i=0; i<Slideous.count; i++) {
+         slide = document.getElementById("s"+(i+1));
+         slide.style.display = showall ? "block" : "none";
+         while (item = Slideous.firstitem(slide, showall ? Slideous.isitemhidden : Slideous.isitemvisible)) 
+            Slideous.displayitem(item, showall);
+         var divs = slide.getElementsByTagName("div");
+         for (var j in divs)
+            if (Slideous.hasclass(divs[j], "handout"))
+               divs[j].style.display = showall ? "block" : "none";
+      }
+      if (!showall)
+         document.getElementById("s"+Slideous.curidx).style.display = "block";
+      if (Slideous.statusbar) 
+         document.getElementById("statusbar").style.display = showall ? "none" : "block";
+      Slideous.showall = showall;
+   },
+   hasclass: function(elem, classname) {
+      var classattr = null;
+      return (classattr=(elem.attributes && elem.attributes["class"])) 
+          && classattr.nodeValue.match("\\b"+classname+"\\b");
+   },
+   selectedcontent: function() {
+      return window.getSelection ? window.getSelection().toString() 
+                                 : document.getSelection ? document.getSelection() 
+                                                         : document.selection ? document.selection.createRange().text
+                                                                              : "";
+   },
+   mousenavigation: function(on) {
+      if (on) {
+         document.onmousedown = Slideous.mousedown;
+         document.onmouseup = Slideous.mouseup;
+      }
+      else
+         document.onmousedown = document.onmouseup = null;
+   },
+   mousepos: function(e) {
+      return e.pageX ? {x: e.pageX, y: e.pageY} 
+                     : {x: e.x+document.body.scrollLeft, y: e.y+document.body.scrollTop};
+   },
+   mousedown: function(evt) {
+      evt = evt||window.event;
+      Slideous.mousedownpos = Slideous.mousepos(evt);
+      Slideous.contentselected = !!Slideous.selectedcontent() || ((evt.target || evt.srcElement).nodeName.toLowerCase() in Slideous.clickables);
+      return true;
+   },
+   mouseup: function(evt) {
+      evt = evt||window.event;
+      var pos = Slideous.mousepos(evt);
+      if (pos.x == Slideous.mousedownpos.x && pos.y == Slideous.mousedownpos.y && !Slideous.contentselected) {
+         Slideous.next(true);
+         return evt.returnValue = !(evt.cancel = true);
+      }
+      return false;
+   }
+};
+window.onload = Slideous.init;
diff --git a/src/Text/Pandoc.hs b/src/Text/Pandoc.hs
--- a/src/Text/Pandoc.hs
+++ b/src/Text/Pandoc.hs
@@ -187,6 +187,7 @@
                                                 writerHtml5 = True })
           ,("s5"           , writeHtmlString)
           ,("slidy"        , writeHtmlString)
+          ,("slideous"     , writeHtmlString)
           ,("dzslides"     , writeHtmlString)
           ,("docbook"      , writeDocbook)
           ,("opendocument" , writeOpenDocument)
diff --git a/src/Text/Pandoc/Biblio.hs b/src/Text/Pandoc/Biblio.hs
--- a/src/Text/Pandoc/Biblio.hs
+++ b/src/Text/Pandoc/Biblio.hs
@@ -53,43 +53,59 @@
                       Just f  -> readJsonAbbrevFile f
                       Nothing -> return []
         p'   <- bottomUpM setHash p
-        let (nts,grps) = if styleClass csl == "note"
-                         then let cits   = queryWith getCite p'
-                                  ncits  = map (queryWith getCite) $ queryWith getNote p'
-                                  needNt = cits \\ concat ncits
-                              in (,) needNt $ getNoteCitations needNt p'
-                         else (,) [] $ queryWith getCitation p'
+        let grps = queryWith getCitation p'
             style      = csl { styleAbbrevs = abbrevs }
             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 (procInlines $ processCite style cits_map) p'
-        return . generateNotes nts . Pandoc m $ b ++ biblioList
+            Pandoc m b = bottomUp (processCite style cits_map) p'
+            b' = bottomUp mvPunct $ deNote b
+        return $ Pandoc m $ b' ++ biblioList
 
 -- | Substitute 'Cite' elements with formatted citations.
-processCite :: Style -> M.Map [Citation] [FormattedOutput] -> [Inline] -> [Inline]
-processCite s cs (Cite t _ : rest) =
+processCite :: Style -> M.Map [Citation] [FormattedOutput] -> Inline -> Inline
+processCite s cs (Cite t _) =
    case M.lookup t cs of
-        Just (x:xs) ->
-                   if isTextualCitation t
-                   then renderPandoc s [x] ++
-                         if null xs
-                         then processCite s cs rest
-                         else [Space,  Cite t (renderPandoc s xs)]
-                            ++ processCite s cs rest
-                   else Cite t (renderPandoc s (x:xs)) : processCite s cs rest
-        _ -> Str ("Error processing " ++ show t) : processCite s cs rest
-processCite s cs (x:xs) = bottomUp (processCite s cs) x : processCite s cs xs
-processCite _ _ [] = []
+        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
 
-procInlines :: ([Inline] -> [Inline]) -> Block -> Block
-procInlines f b
-    | Plain    inls <- b = Plain    $ f inls
-    | Para     inls <- b = Para     $ f inls
-    | Header i inls <- b = Header i $ f inls
-    | otherwise          = b
+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
+
+sanitize :: [Inline] -> [Inline]
+sanitize xs | endWithPunct xs = toCapital xs
+            | otherwise       = toCapital (xs ++ [Str "."])
+
+deNote :: [Block] -> [Block]
+deNote = topDown go
+  where go (Note [Para xs]) = Note $ bottomUp go' [Para $ sanitize 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
+
 isTextualCitation :: [Citation] -> Bool
 isTextualCitation (c:_) = citationMode c == AuthorInText
 isTextualCitation _     = False
@@ -100,65 +116,9 @@
 getCitation i | Cite t _ <- i = [t]
               | otherwise     = []
 
-getNote :: Inline -> [Inline]
-getNote i | Note _ <- i = [i]
-          | otherwise   = []
-
-getCite :: Inline -> [Inline]
-getCite i | Cite _ _ <- i = [i]
-          | otherwise     = []
-
-getNoteCitations :: [Inline] -> Pandoc -> [[Citation]]
-getNoteCitations needNote
-    = let mvCite i = if i `elem` needNote then Note [Para [i]] else i
-          setNote  = bottomUp mvCite
-          getCits  = concat . flip (zipWith $ setCiteNoteNum) [1..] .
-                     map (queryWith getCite) . queryWith getNote . setNote
-      in  queryWith getCitation . getCits
-
 setHash :: Citation -> IO Citation
 setHash (Citation i p s cm nn _)
     = hashUnique `fmap` newUnique >>= return . Citation i p s cm nn
-
-generateNotes :: [Inline] -> Pandoc -> Pandoc
-generateNotes needNote = bottomUp (mvCiteInNote needNote)
-
-mvCiteInNote :: [Inline] -> Block -> Block
-mvCiteInNote is = procInlines mvCite
-    where
-      mvCite :: [Inline] -> [Inline]
-      mvCite inls
-          | x:i:xs <- inls, startWithPunct xs
-          , x == Space,   i `elem_` is = switch i xs ++ mvCite (tailFirstInlineStr xs)
-          | x:i:xs <- inls
-          , x == Space,   i `elem_` is = mvInNote i :   mvCite xs
-          | i:xs <- inls, i `elem_` is
-          , startWithPunct xs          = switch i xs ++ mvCite (tailFirstInlineStr xs)
-          | i:xs <- inls, Note _ <- i  = checkNt  i :   mvCite xs
-          | i:xs <- inls               = i          :   mvCite xs
-          | otherwise                  = []
-      elem_  x xs = case x of Cite cs _ -> (Cite cs []) `elem` xs; _ -> False
-      switch i xs = Str (headInline xs) : mvInNote i : []
-      mvInNote i
-          | Cite t o <- i = Note [Para [Cite t $ sanitize o]]
-          | otherwise     = Note [Para [i                  ]]
-      sanitize i
-          | endWithPunct   i = toCapital i
-          | otherwise        = toCapital (i ++ [Str "."])
-
-      checkPt i
-          | Cite c o : xs <- i , endWithPunct o, startWithPunct xs
-                           = Cite c (initInline o) : checkPt xs
-          | x:xs <- i      = x : checkPt xs
-          | otherwise      = []
-      checkNt  = bottomUp $ procInlines checkPt
-
-setCiteNoteNum :: [Inline] -> Int -> [Inline]
-setCiteNoteNum ((Cite cs o):xs) n = Cite (setCitationNoteNum n cs) o : setCiteNoteNum xs n
-setCiteNoteNum               _  _ = []
-
-setCitationNoteNum :: Int -> [Citation] -> [Citation]
-setCitationNoteNum i = map $ \c -> c { citationNoteNum = i}
 
 toCslCite :: Citation -> CSL.Cite
 toCslCite c
diff --git a/src/Text/Pandoc/Highlighting.hs b/src/Text/Pandoc/Highlighting.hs
--- a/src/Text/Pandoc/Highlighting.hs
+++ b/src/Text/Pandoc/Highlighting.hs
@@ -39,6 +39,7 @@
                                 , styleToCss
                                 , pygments
                                 , espresso
+                                , zenburn
                                 , tango
                                 , kate
                                 , monochrome
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs
--- a/src/Text/Pandoc/Readers/LaTeX.hs
+++ b/src/Text/Pandoc/Readers/LaTeX.hs
@@ -268,6 +268,7 @@
   , ("end", mzero)
   , ("item", skipopts *> loose_item)
   , ("documentclass", skipopts *> braced *> preamble)
+  , ("centerline", (para . trimInlines) <$> (skipopts *> tok))
   ] ++ map ignoreBlocks
   -- these commands will be ignored unless --parse-raw is specified,
   -- in which case they will appear as raw latex blocks
diff --git a/src/Text/Pandoc/Readers/RST.hs b/src/Text/Pandoc/Readers/RST.hs
--- a/src/Text/Pandoc/Readers/RST.hs
+++ b/src/Text/Pandoc/Readers/RST.hs
@@ -127,6 +127,7 @@
                , blockQuote
                , fieldList
                , imageBlock
+               , figureBlock
                , customCodeBlock
                , mathBlock
                , defaultRoleBlock
@@ -361,6 +362,20 @@
   blanklines
   result <- indentedBlock
   return $ CodeBlock ("", ["sourceCode", language], []) $ stripTrailingNewlines result
+
+
+figureBlock :: GenParser Char ParserState Block
+figureBlock = try $ do
+  string ".. figure::"
+  src <- removeLeadingTrailingSpace `fmap` manyTill anyChar newline
+  body <- indentedBlock
+  caption <- parseFromString extractCaption body
+  return $ Para [Image caption (src,"")]
+
+extractCaption :: GenParser Char ParserState [Inline]
+extractCaption = try $ do
+  manyTill anyLine blanklines
+  many inline
 
 -- | The 'math' directive (from Sphinx) for display math.
 mathBlock :: GenParser Char st Block
diff --git a/src/Text/Pandoc/Readers/Textile.hs b/src/Text/Pandoc/Readers/Textile.hs
--- a/src/Text/Pandoc/Readers/Textile.hs
+++ b/src/Text/Pandoc/Readers/Textile.hs
@@ -493,19 +493,12 @@
 escapedInline = escapedEqs <|> escapedTag
 
 escapedEqs :: GenParser Char ParserState Inline
-escapedEqs = Str <$> (try $ surrounded (string "==") anyChar)
-
--- -- | literal text escaped between == ... ==
--- escapedEqs :: GenParser Char ParserState Inline
--- escapedEqs = try $ do
---   string "=="
---   contents <- manyTill anyChar (try $ string "==")
---   return $ Str contents
+escapedEqs = Str <$> (try $ string "==" *> manyTill anyChar (try $ string "=="))
 
 -- | literal text escaped btw <notextile> tags
 escapedTag :: GenParser Char ParserState Inline
-escapedTag = try $ Str <$>
-  enclosed (string "<notextile>") (string "</notextile>") anyChar
+escapedTag = Str <$>
+  (try $ string "<notextile>" *> manyTill anyChar (try $ string "</notextile>"))
 
 -- | Any special symbol defined in wordBoundaries
 symbol :: GenParser Char ParserState Inline
@@ -533,7 +526,7 @@
 surrounded :: GenParser Char st t   -- ^ surrounding parser
 	    -> GenParser Char st a    -- ^ content parser (to be used repeatedly)
 	    -> GenParser Char st [a]
-surrounded border = enclosed border border
+surrounded border = enclosed border (try border)
 
 -- | Inlines are most of the time of the same form
 simpleInline :: GenParser Char ParserState t           -- ^ surrounding parser
diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs
--- a/src/Text/Pandoc/Shared.hs
+++ b/src/Text/Pandoc/Shared.hs
@@ -482,6 +482,7 @@
 -- | Varieties of HTML slide shows.
 data HTMLSlideVariant = S5Slides
                       | SlidySlides
+                      | SlideousSlides
                       | DZSlides
                       | NoSlides
                       deriving (Show, Read, Eq)
@@ -494,7 +495,7 @@
   , writerEPUBMetadata     :: String -- ^ Metadata to include in EPUB
   , writerTabStop          :: Int    -- ^ Tabstop for conversion btw spaces and tabs
   , writerTableOfContents  :: Bool   -- ^ Include table of contents
-  , writerSlideVariant     :: HTMLSlideVariant -- ^ Are we writing S5 or Slidy?
+  , writerSlideVariant     :: HTMLSlideVariant -- ^ Are we writing S5, Slidy or Slideous?
   , writerIncremental      :: Bool   -- ^ True if lists should be incremental
   , writerXeTeX            :: Bool   -- ^ Create latex suitable for use by xetex
   , writerHTMLMathMethod   :: HTMLMathMethod  -- ^ How to print math in HTML
diff --git a/src/Text/Pandoc/Slides.hs b/src/Text/Pandoc/Slides.hs
--- a/src/Text/Pandoc/Slides.hs
+++ b/src/Text/Pandoc/Slides.hs
@@ -26,7 +26,7 @@
    Portability : portable
 
 Utility functions for splitting documents into slides for slide
-show formats (dzslides, s5, slidy, beamer).
+show formats (dzslides, s5, slidy, slideous, beamer).
 -}
 module Text.Pandoc.Slides ( getSlideLevel, prepSlides ) where
 import Text.Pandoc.Definition
diff --git a/src/Text/Pandoc/Writers/ConTeXt.hs b/src/Text/Pandoc/Writers/ConTeXt.hs
--- a/src/Text/Pandoc/Writers/ConTeXt.hs
+++ b/src/Text/Pandoc/Writers/ConTeXt.hs
@@ -96,7 +96,7 @@
     '$'    -> "\\$"
     '|'    -> "\\letterbar{}"
     '^'    -> "\\letterhat{}"
-    '%'    -> "\\letterpercent "
+    '%'    -> "\\letterpercent{}"
     '~'    -> "\\lettertilde{}"
     '&'    -> "\\&"
     '#'    -> "\\#"
@@ -271,7 +271,7 @@
 inlineToConTeXt (Math InlineMath str) =
   return $ char '$' <> text str <> char '$'
 inlineToConTeXt (Math DisplayMath str) =
-  return $ text "\\startformula "  <> text str <> text " \\stopformula"
+  return $ text "\\startformula "  <> text str <> text " \\stopformula" <> space
 inlineToConTeXt (RawInline "context" str) = return $ text str
 inlineToConTeXt (RawInline "tex" str) = return $ text str
 inlineToConTeXt (RawInline _ _) = return empty
diff --git a/src/Text/Pandoc/Writers/Docx.hs b/src/Text/Pandoc/Writers/Docx.hs
--- a/src/Text/Pandoc/Writers/Docx.hs
+++ b/src/Text/Pandoc/Writers/Docx.hs
@@ -262,13 +262,13 @@
                                          ,show n)
           step = 720
           hang = 480
-          bulletFor 0 = "\8226"
-          bulletFor 1 = "\9702"
-          bulletFor 2 = "\8227"
-          bulletFor 3 = "\8259"
-          bulletFor 4 = "\8226"
-          bulletFor 5 = "\9702"
-          bulletFor _ = "\8227"
+          bulletFor 0 = "\x2022"  -- filled circle
+          bulletFor 1 = "\x2013"  -- en dash
+          bulletFor 2 = "\x2022"  -- hyphen bullet
+          bulletFor 3 = "\x2013"
+          bulletFor 4 = "\x2022"
+          bulletFor 5 = "\x2013"
+          bulletFor _ = "\x2022"
           styleFor UpperAlpha _ = "upperLetter"
           styleFor LowerAlpha _ = "lowerLetter"
           styleFor UpperRoman _ = "upperRoman"
diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs
--- a/src/Text/Pandoc/Writers/HTML.hs
+++ b/src/Text/Pandoc/Writers/HTML.hs
@@ -199,6 +199,7 @@
                     , ("date", date')
                     , ("idprefix", writerIdentifierPrefix opts)
                     , ("slidy-url", "http://www.w3.org/Talks/Tools/Slidy2")
+                    , ("slideous-url", "slideous")
                     , ("s5-url", "s5/default") ] ++
                     [ ("html5","true") | writerHtml5 opts ] ++
                     (case toc of
diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs
--- a/src/Text/Pandoc/Writers/LaTeX.hs
+++ b/src/Text/Pandoc/Writers/LaTeX.hs
@@ -117,7 +117,7 @@
                  else return blocks'
   body <- mapM (elementToLaTeX options) $ hierarchicalize blocks''
   biblioTitle <- liftM (render colwidth) $ inlineListToLaTeX lastHeader
-  let main = render colwidth $ vcat body
+  let main = render colwidth $ vsep body
   st <- get
   let biblioFiles = intercalate "," $ map dropExtension $  writerBiblioFiles options
       citecontext = case writerCiteMethod options of
@@ -170,7 +170,7 @@
 elementToLaTeX opts (Sec level _ id' title' elements) = do
   header' <- sectionHeader id' level title'
   innerContents <- mapM (elementToLaTeX opts) elements
-  return $ vcat (header' : innerContents)
+  return $ vsep (header' : innerContents)
 
 -- escape things as needed for LaTeX
 stringToLaTeX :: Bool -> String -> State WriterState String
@@ -265,23 +265,22 @@
   capt <- inlineListToLaTeX txt
   img <- inlineToLaTeX (Image txt (src,tit))
   return $ "\\begin{figure}[htbp]" $$ "\\centering" $$ img $$
-           ("\\caption{" <> capt <> char '}') $$ "\\end{figure}" $$ blankline
+           ("\\caption{" <> capt <> char '}') $$ "\\end{figure}"
 blockToLaTeX (Para lst) = do
   result <- inlineListToLaTeX lst
-  return $ result <> blankline
+  return result
 blockToLaTeX (BlockQuote lst) = do
   beamer <- writerBeamer `fmap` gets stOptions
   case lst of
        [b] | beamer && isListBlock b -> do
          oldIncremental <- gets stIncremental
-         modify $ \s -> s{ stIncremental = True }
+         modify $ \s -> s{ stIncremental = not oldIncremental }
          result <- blockToLaTeX b
          modify $ \s -> s{ stIncremental = oldIncremental }
          return result
        _ -> do
          contents <- blockListToLaTeX lst
-         return $ "\\begin{quote}" $$ chomp contents $$ "\\end{quote}"
-                  <> blankline
+         return $ "\\begin{quote}" $$ contents $$ "\\end{quote}"
 blockToLaTeX (CodeBlock (_,classes,keyvalAttr) str) = do
   opts <- gets stOptions
   case () of
@@ -300,11 +299,7 @@
                           return "Verbatim"
                      else return "verbatim"
            return $ flush (text ("\\begin{" ++ env ++ "}") $$ text str $$
-                    text ("\\end{" ++ env ++ "}")) <> text "\n" <> blankline
-                    -- note: we use 'text "\n"' instead of cr to make this
-                    -- resistant to the 'chomp' in footnotes; a footnote
-                    -- ending with a Verbatim environment must have a
-                    -- cr before the closing }
+                    text ("\\end{" ++ env ++ "}")) <> cr
          listingsCodeBlock = do
            st <- get
            let params = if writerListings (stOptions st)
@@ -339,14 +334,14 @@
                   Nothing -> rawCodeBlock
                   Just  h -> modify (\st -> st{ stHighlighting = True }) >>
                              return (flush $ text h)
-blockToLaTeX (RawBlock "latex" x) = return $ text x <> blankline
+blockToLaTeX (RawBlock "latex" x) = return $ text x
 blockToLaTeX (RawBlock _ _) = return empty
 blockToLaTeX (BulletList lst) = do
   incremental <- gets stIncremental
   let inc = if incremental then "[<+->]" else ""
   items <- mapM listItemToLaTeX lst
-  return $ text ("\\begin{itemize}" ++ inc) $$ chomp (vcat items) $$
-             "\\end{itemize}" <> blankline
+  return $ text ("\\begin{itemize}" ++ inc) $$ vcat items $$
+             "\\end{itemize}"
 blockToLaTeX (OrderedList (start, numstyle, numdelim) lst) = do
   st <- get
   let inc = if stIncremental st then "[<+->]" else ""
@@ -367,15 +362,15 @@
                              "}{" ++ show (start - 1) ++ "}"
                         else empty
   return $ text ("\\begin{enumerate}" ++ inc) <> exemplar $$ resetcounter $$
-           chomp (vcat items) $$ "\\end{enumerate}" <> blankline
+           vcat items $$ "\\end{enumerate}"
 blockToLaTeX (DefinitionList lst) = do
   incremental <- gets stIncremental
   let inc = if incremental then "[<+->]" else ""
   items <- mapM defListItemToLaTeX lst
-  return $ text ("\\begin{description}" ++ inc) $$ chomp (vcat items) $$
-               "\\end{description}" <> blankline
+  return $ text ("\\begin{description}" ++ inc) $$ vcat items $$
+               "\\end{description}"
 blockToLaTeX HorizontalRule = return $
-  "\\begin{center}\\rule{3in}{0.4pt}\\end{center}" $$ blankline
+  "\\begin{center}\\rule{3in}{0.4pt}\\end{center}"
 blockToLaTeX (Header level lst) = sectionHeader "" level lst
 blockToLaTeX (Table caption aligns widths heads rows) = do
   modify $ \s -> s{ stInTable = True, stTableNotes = [] }
@@ -401,7 +396,7 @@
          $$ braces (text "% rows" $$ "\\FL" $$
                      vcat (headers : rows'') $$ "\\LL" <> cr)
   modify $ \s -> s{ stTable = True, stInTable = False, stTableNotes = [] }
-  return $ tableBody $$ blankline
+  return $ tableBody
 
 toColDescriptor :: Alignment -> String
 toColDescriptor align =
@@ -412,7 +407,7 @@
          AlignDefault -> "l"
 
 blockListToLaTeX :: [Block] -> State WriterState Doc
-blockListToLaTeX lst = mapM blockToLaTeX lst >>= return . vcat
+blockListToLaTeX lst = vsep `fmap` mapM blockToLaTeX lst
 
 tableRowToLaTeX :: Bool
                 -> [Alignment]
@@ -473,7 +468,6 @@
                                 <> braces (lab <> text "\\label"
                                                <> braces (text ref))
                          else lab)
-                      $$ blankline
   let headerWith x y = refLabel $ text x <> y
   return $ case level' of
                 0  -> if writerBeamer opts
@@ -484,7 +478,7 @@
                 3  -> headerWith "\\subsubsection" stuffing
                 4  -> headerWith "\\paragraph" stuffing
                 5  -> headerWith "\\subparagraph" stuffing
-                _            -> txt $$ blankline
+                _            -> txt
 
 
 -- | Convert list of inline elements to LaTeX.
@@ -594,13 +588,16 @@
   contents' <- blockListToLaTeX contents
   modify (\s -> s {stInNote = False})
   inTable <- liftM stInTable get
+  let optnl = case reverse contents of
+                   (CodeBlock _ _ : _) -> cr
+                   _                   -> empty
   if inTable
      then do
        curnotes <- liftM stTableNotes get
        let marker = cycle ['a'..'z'] !! length curnotes
        modify $ \s -> s{ stTableNotes = (marker, contents') : curnotes }
        return $ "\\tmark" <> brackets (char marker) <> space
-     else return $ "\\footnote" <> braces (chomp $ nest 2 contents')
+     else return $ "\\footnote" <> braces (nest 2 contents' <> optnl)
      -- note: a \n before } needed when note ends with a Verbatim environment
 
 citationsToNatbib :: [Citation] -> State WriterState Doc
diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs
--- a/src/Text/Pandoc/Writers/Markdown.hs
+++ b/src/Text/Pandoc/Writers/Markdown.hs
@@ -218,7 +218,7 @@
   let esc = if (not (writerStrictMarkdown opts)) &&
                not (stPlain st) &&
                beginsWithOrderedListMarker (render Nothing contents)
-               then text "\\"
+               then text "\x200B" -- zero-width space, a hack
                else empty
   return $ esc <> contents <> blankline
 blockToMarkdown _ (RawBlock f str)
@@ -355,13 +355,13 @@
   labelText <- inlineListToMarkdown opts label
   let tabStop = writerTabStop opts
   st <- get
-  let leader  = if stPlain st then "   " else "  ~"
+  let leader  = if stPlain st then "   " else ":  "
   let sps = case writerTabStop opts - 3 of
                  n | n > 0   -> text $ replicate n ' '
                  _           -> text " "
   defs' <- mapM (mapM (blockToMarkdown opts)) defs
   let contents = vcat $ map (\d -> hang tabStop (leader <> sps) $ vcat d <> cr) defs'
-  return $ labelText <> cr <> contents <> cr
+  return $ nowrap labelText <> cr <> contents <> cr
 
 -- | Convert list of Pandoc block elements to markdown.
 blockListToMarkdown :: WriterOptions -- ^ Options
diff --git a/src/Text/Pandoc/Writers/Org.hs b/src/Text/Pandoc/Writers/Org.hs
--- a/src/Text/Pandoc/Writers/Org.hs
+++ b/src/Text/Pandoc/Writers/Org.hs
@@ -139,9 +139,9 @@
                     "ledger", "lisp", "matlab", "mscgen", "ocaml", "octave", 
                     "oz", "perl", "plantuml", "python", "R", "ruby", "sass", 
                     "scheme", "screen", "sh", "sql", "sqlite"]
-  let (beg, end) = if null at
-                      then ("#+BEGIN_EXAMPLE", "#+END_EXAMPLE")
-                      else ("#+BEGIN_SRC" ++ head at, "#+END_SRC")
+  let (beg, end) = case at of
+                      []    -> ("#+BEGIN_EXAMPLE", "#+END_EXAMPLE")
+                      (x:_) -> ("#+BEGIN_SRC " ++ x, "#+END_SRC")
   return $ text beg $$ nest tabstop (text str) $$ text end $$ blankline
 blockToOrg (BlockQuote blocks) = do
   contents <- blockListToOrg blocks 
diff --git a/src/pandoc.hs b/src/pandoc.hs
--- a/src/pandoc.hs
+++ b/src/pandoc.hs
@@ -37,7 +37,7 @@
 import Text.Pandoc.XML ( toEntities, fromEntities )
 import Text.Pandoc.SelfContained ( makeSelfContained )
 import Text.Pandoc.Highlighting ( languages, Style, tango, pygments,
-         espresso, kate, haddock, monochrome )
+         espresso, zenburn, kate, haddock, monochrome )
 import System.Environment ( getArgs, getProgName )
 import System.Exit ( exitWith, ExitCode (..) )
 import System.FilePath
@@ -101,7 +101,7 @@
     , optOutputFile        :: String  -- ^ Name of output file
     , optNumberSections    :: Bool    -- ^ Number sections in LaTeX
     , optSectionDivs       :: Bool    -- ^ Put sections in div tags in HTML
-    , optIncremental       :: Bool    -- ^ Use incremental lists in Slidy/S5
+    , optIncremental       :: Bool    -- ^ Use incremental lists in Slidy/Slideous/S5
     , optSelfContained     :: Bool    -- ^ Make HTML accessible offline
     , optSmart             :: Bool    -- ^ Use smart typography
     , optOldDashes         :: Bool    -- ^ Parse dashes like pandoc <=1.8.2.1
@@ -349,6 +349,7 @@
                                      "pygments"   -> return pygments
                                      "tango"      -> return tango
                                      "espresso"   -> return espresso
+                                     "zenburn"    -> return zenburn
                                      "kate"       -> return kate
                                      "monochrome" -> return monochrome
                                      "haddock"    -> return haddock
@@ -453,7 +454,7 @@
     , Option "i" ["incremental"]
                  (NoArg
                   (\opt -> return opt { optIncremental = True }))
-                 "" -- "Make list items display incrementally in Slidy/S5"
+                 "" -- "Make list items display incrementally in Slidy/Slideous/S5"
 
     , Option "" ["slide-level"]
                  (ReqArg
@@ -886,6 +887,7 @@
   let slideVariant = case writerName' of
                            "s5"       -> S5Slides
                            "slidy"    -> SlidySlides
+                           "slideous" -> SlideousSlides
                            "dzslides" -> DZSlides
                            _          -> NoSlides
 
@@ -1051,7 +1053,7 @@
           where result       = w writerOptions doc2 ++ ['\n' | not standalone']
                 htmlFormat = writerName' `elem`
                                ["html","html+lhs","html5","html5+lhs",
-                               "s5","slidy","dzslides"]
+                               "s5","slidy","slideous","dzslides"]
                 selfcontain = if selfContained && htmlFormat
                                  then makeSelfContained datadir
                                  else return
diff --git a/src/test-pandoc.hs b/src/test-pandoc.hs
--- a/src/test-pandoc.hs
+++ b/src/test-pandoc.hs
@@ -9,6 +9,7 @@
 import qualified Tests.Readers.Markdown
 import qualified Tests.Readers.RST
 import qualified Tests.Writers.ConTeXt
+import qualified Tests.Writers.LaTeX
 import qualified Tests.Writers.HTML
 import qualified Tests.Writers.Native
 import qualified Tests.Writers.Markdown
@@ -20,6 +21,7 @@
         , testGroup "Writers"
           [ testGroup "Native" Tests.Writers.Native.tests
           , testGroup "ConTeXt" Tests.Writers.ConTeXt.tests
+          , testGroup "LaTeX" Tests.Writers.LaTeX.tests
           , testGroup "HTML" Tests.Writers.HTML.tests
           , testGroup "Markdown" Tests.Writers.Markdown.tests
           ]
diff --git a/templates/default.latex b/templates/default.latex
--- a/templates/default.latex
+++ b/templates/default.latex
@@ -80,9 +80,6 @@
 \usepackage{ctable}
 \usepackage{float} % provides the H option for float placement
 $endif$
-$if(url)$
-\usepackage{url}
-$endif$
 $if(graphics)$
 \usepackage{graphicx}
 % We will generate all images so they have a width \maxwidth. This means
@@ -98,23 +95,20 @@
 \ifxetex
   \usepackage[setpagesize=false, % page size defined by xetex
               unicode=false, % unicode breaks when used with xetex
-              xetex,
-              bookmarks=true,
-              pdfauthor={$author-meta$},
-              pdftitle={$title-meta$},
-              colorlinks=true,
-              urlcolor=blue,
-              linkcolor=blue]{hyperref}
+              xetex]{hyperref}
 \else
-  \usepackage[unicode=true,
-              bookmarks=true,
-              pdfauthor={$author-meta$},
-              pdftitle={$title-meta$},
-              colorlinks=true,
-              urlcolor=blue,
-              linkcolor=blue]{hyperref}
+  \usepackage[unicode=true]{hyperref}
 \fi
-\hypersetup{breaklinks=true, pdfborder={0 0 0}}
+\hypersetup{breaklinks=true,
+            bookmarks=true,
+            pdfauthor={$author-meta$},
+            pdftitle={$title-meta$},
+            colorlinks=true,
+            urlcolor=blue,
+            linkcolor=black,
+            pdfborder={0 0 0}}
+% Uncomment next line if you want links as footnotes instead of hotlinks:
+% \renewcommand{\href}[2]{#2\footnote{\url{#1}}}
 $if(strikeout)$
 \usepackage[normalem]{ulem}
 % avoid problems with \sout in headers with hyperref:
diff --git a/templates/default.slideous b/templates/default.slideous
new file mode 100644
--- /dev/null
+++ b/templates/default.slideous
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"$if(lang)$ lang="$lang$" xml:lang="$lang$"$endif$>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  <meta http-equiv="Content-Style-Type" content="text/css" />
+  <meta name="generator" content="pandoc" />
+$for(author-meta)$
+  <meta name="author" content="$author-meta$" />
+$endfor$
+$if(date-meta)$
+  <meta name="date" content="$date-meta$" />
+$endif$
+  <title>$if(title-prefix)$$title-prefix$ - $endif$$if(pagetitle)$$pagetitle$$endif$</title>
+$if(highlighting-css)$
+  <style type="text/css">
+$highlighting-css$
+  </style>
+$endif$
+  <link rel="stylesheet" type="text/css" media="screen, projection, print"
+    href="$slideous-url$/slideous.css" />
+$for(css)$
+  <link rel="stylesheet" type="text/css" media="screen, projection, print"
+   href="$css$" />
+$endfor$
+$if(math)$
+  $math$
+$endif$
+$for(header-includes)$
+  $header-includes$
+$endfor$
+  <script src="$slideous-url$/slideous.js"
+    charset="utf-8" type="text/javascript"></script>
+$if(duration)$
+  <meta name="duration" content="$duration$" />
+$endif$
+</head>
+<body>
+$for(include-before)$
+$include-before$
+$endfor$
+<div id="statusbar">
+<span style="float:right;">
+<span style="margin-right:4em;font-weight:bold;"><span id="slideidx"></span> of {$$slidecount}</span>
+<button id="homebutton" title="first slide">1</button>
+<button id="prevslidebutton" title="previous slide">&laquo;</button>
+<button id="previtembutton" title="previous item">&lsaquo;</button>
+<button id="nextitembutton" title="next item">&rsaquo;</button>
+<button id="nextslidebutton" title="next slide">&raquo;</button>
+<button id="endbutton" title="last slide">{$$slidecount}</button>
+<button id="incfontbutton" title="content">A+</button>
+<button id="decfontbutton" title="first slide">A-</button>
+<select id="tocbox" size="1"><option></option></select>
+</span>
+<span id="eos">&frac12;</span>
+<span title="{$$location}, {$$date}">{$$title}, {$$author}</span>
+</div>
+$if(title)$
+<div class="slide titlepage">
+  <h1 class="title">$title$</h1>
+  <p class="author">
+$for(author)$$author$$sep$<br/>$endfor$
+  </p>
+$if(date)$
+  <p class="date">$date$</p>
+$endif$
+</div>
+$endif$
+$body$
+$for(include-after)$
+$include-after$
+$endfor$
+</body>
+</html>
diff --git a/templates/default.slidy b/templates/default.slidy
--- a/templates/default.slidy
+++ b/templates/default.slidy
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml"$if(lang)$ lang="$lang$" xml:lang="$lang$"$endif$>
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <meta http-equiv="Content-Style-Type" content="text/css" />
diff --git a/tests/lhs-test.latex b/tests/lhs-test.latex
--- a/tests/lhs-test.latex
+++ b/tests/lhs-test.latex
@@ -38,23 +38,20 @@
 \ifxetex
   \usepackage[setpagesize=false, % page size defined by xetex
               unicode=false, % unicode breaks when used with xetex
-              xetex,
-              bookmarks=true,
-              pdfauthor={},
-              pdftitle={},
-              colorlinks=true,
-              urlcolor=blue,
-              linkcolor=blue]{hyperref}
+              xetex]{hyperref}
 \else
-  \usepackage[unicode=true,
-              bookmarks=true,
-              pdfauthor={},
-              pdftitle={},
-              colorlinks=true,
-              urlcolor=blue,
-              linkcolor=blue]{hyperref}
+  \usepackage[unicode=true]{hyperref}
 \fi
-\hypersetup{breaklinks=true, pdfborder={0 0 0}}
+\hypersetup{breaklinks=true,
+            bookmarks=true,
+            pdfauthor={},
+            pdftitle={},
+            colorlinks=true,
+            urlcolor=blue,
+            linkcolor=black,
+            pdfborder={0 0 0}}
+% Uncomment next line if you want links as footnotes instead of hotlinks:
+% \renewcommand{\href}[2]{#2\footnote{\url{#1}}}
 \setlength{\parindent}{0pt}
 \setlength{\parskip}{6pt plus 2pt minus 1pt}
 \setlength{\emergencystretch}{3em}  % prevent overfull lines
@@ -75,6 +72,7 @@
           \CommentTok{-- arr (\textbackslash{}op (x,y) -> x `op` y) }
 \end{Highlighting}
 \end{Shaded}
+
 \texttt{(***)} combines two arrows into a new arrow by running the two arrows
 on a pair of values (one arrow on the first item of the pair and one arrow on
 the second item of the pair).
diff --git a/tests/lhs-test.latex+lhs b/tests/lhs-test.latex+lhs
--- a/tests/lhs-test.latex+lhs
+++ b/tests/lhs-test.latex+lhs
@@ -20,23 +20,20 @@
 \ifxetex
   \usepackage[setpagesize=false, % page size defined by xetex
               unicode=false, % unicode breaks when used with xetex
-              xetex,
-              bookmarks=true,
-              pdfauthor={},
-              pdftitle={},
-              colorlinks=true,
-              urlcolor=blue,
-              linkcolor=blue]{hyperref}
+              xetex]{hyperref}
 \else
-  \usepackage[unicode=true,
-              bookmarks=true,
-              pdfauthor={},
-              pdftitle={},
-              colorlinks=true,
-              urlcolor=blue,
-              linkcolor=blue]{hyperref}
+  \usepackage[unicode=true]{hyperref}
 \fi
-\hypersetup{breaklinks=true, pdfborder={0 0 0}}
+\hypersetup{breaklinks=true,
+            bookmarks=true,
+            pdfauthor={},
+            pdftitle={},
+            colorlinks=true,
+            urlcolor=blue,
+            linkcolor=black,
+            pdfborder={0 0 0}}
+% Uncomment next line if you want links as footnotes instead of hotlinks:
+% \renewcommand{\href}[2]{#2\footnote{\url{#1}}}
 \setlength{\parindent}{0pt}
 \setlength{\parskip}{6pt plus 2pt minus 1pt}
 \setlength{\emergencystretch}{3em}  % prevent overfull lines
@@ -55,6 +52,7 @@
 unsplit = arr . uncurry       
           -- arr (\op (x,y) -> x `op` y) 
 \end{code}
+
 \texttt{(***)} combines two arrows into a new arrow by running the two arrows
 on a pair of values (one arrow on the first item of the pair and one arrow on
 the second item of the pair).
diff --git a/tests/markdown-citations.chicago-author-date.txt b/tests/markdown-citations.chicago-author-date.txt
--- a/tests/markdown-citations.chicago-author-date.txt
+++ b/tests/markdown-citations.chicago-author-date.txt
@@ -38,7 +38,7 @@
 
 Doe, John, and Jenny Roe. 2007. “Why Water Is Wet.” In *Third Book*, ed. Sam Smith. Oxford: Oxford University Press.
 
-[^1]: A citation without locators (Doe and Roe 2007).
+[^1]: A citation without locators (Doe and Roe 2007), and inline: Doe and Roe (2007, 12).
 
 [^2]: Some citations (see Doe 2005, chap. 3; Doe and Roe 2007; Doe 2006).
 
diff --git a/tests/markdown-citations.ieee.txt b/tests/markdown-citations.ieee.txt
--- a/tests/markdown-citations.ieee.txt
+++ b/tests/markdown-citations.ieee.txt
@@ -38,7 +38,7 @@
 
 [3] J. Doe and J. Roe, “Why Water Is Wet,” in *Third Book*, S. Smith, Ed. Oxford: Oxford University Press, 2007.
 
-[^1]: A citation without locators [3].
+[^1]: A citation without locators [3], and inline: Reference 3.
 
 [^2]: Some citations [1–3].
 
diff --git a/tests/markdown-citations.mhra.txt b/tests/markdown-citations.mhra.txt
--- a/tests/markdown-citations.mhra.txt
+++ b/tests/markdown-citations.mhra.txt
@@ -46,7 +46,7 @@
 
 [^4]: *First Book*; ‘Article’, *Journal of Generic Studies*, 6 (2006), 33–34 (p. 30); see also John Doe and Jenny Roe, ‘Why Water Is Wet’, in *Third Book*, ed. by Sam Smith (Oxford: Oxford University Press, 2007).
 
-[^5]: A citation without locators Doe and Roe.
+[^5]: A citation without locators Doe and Roe, and inline: Doe and Roe, p. 12.
 
 [^6]: See Doe, *First Book*, chap. 3; also Doe and Roe, pp. 34–35.
 
diff --git a/tests/markdown-citations.txt b/tests/markdown-citations.txt
--- a/tests/markdown-citations.txt
+++ b/tests/markdown-citations.txt
@@ -32,7 +32,7 @@
 References
 ==========
 
-[^1]: A citation without locators [@пункт3].
+[^1]: A citation without locators [@пункт3], and inline: @пункт3 [p. 12].
 
 [^2]: Some citations [see @item1 chap. 3; @пункт3; @item2].
 
diff --git a/tests/tables.latex b/tests/tables.latex
--- a/tests/tables.latex
+++ b/tests/tables.latex
@@ -173,4 +173,3 @@
 }
 \LL
 }
-
diff --git a/tests/textile-reader.native b/tests/textile-reader.native
--- a/tests/textile-reader.native
+++ b/tests/textile-reader.native
@@ -27,6 +27,10 @@
 ,CodeBlock ("",[],[]) "        this code block is indented by two tabs\n\n    These should not be escaped:  \\$ \\\\ \\> \\[ \\{"
 ,CodeBlock ("",[],[]) "Code block with .bc\n        continued\n    @</\\\n"
 ,Para [Str "Inline",Space,Str "code",Str ":",Space,Code ("",[],[]) "<tt>",Str ",",Space,Code ("",[],[]) "@",Str "."]
+,Header 1 [Str "Notextile"]
+,Para [Str "A",Space,Str "block",Space,Str "of",Space,Str "text",Space,Str "can",Space,Str "be",Space,Str "protected",Space,Str "with",Space,Str "notextile",Space,Str ":"]
+,Para [Str "\nNo *bold* and\n* no bullet\n"]
+,Para [Str "and",Space,Str "inlines",Space,Str "can",Space,Str "be",Space,Str "protected",Space,Str "with",Space,Str "double *equals (=)* markup",Str "."]
 ,Header 1 [Str "Lists"]
 ,Header 2 [Str "Unordered"]
 ,Para [Str "Asterisks",Space,Str "tight",Str ":"]
diff --git a/tests/textile-reader.textile b/tests/textile-reader.textile
--- a/tests/textile-reader.textile
+++ b/tests/textile-reader.textile
@@ -70,6 +70,17 @@
 
 Inline code: @<tt>@, <tt>@</tt>.
 
+h1. Notextile
+
+A block of text can be protected with notextile :
+
+<notextile>
+No *bold* and
+* no bullet
+</notextile>
+
+and inlines can be protected with ==double *equals (=)* markup==.
+
 h1. Lists
 
 h2. Unordered
diff --git a/tests/writer.latex b/tests/writer.latex
--- a/tests/writer.latex
+++ b/tests/writer.latex
@@ -23,7 +23,6 @@
     {\setlength{\labelwidth}{4em}}
 }\makeatother
 \usepackage{enumerate}
-\usepackage{url}
 \usepackage{graphicx}
 % We will generate all images so they have a width \maxwidth. This means
 % that they will get their normal width if they fit onto the page, but
@@ -37,23 +36,20 @@
 \ifxetex
   \usepackage[setpagesize=false, % page size defined by xetex
               unicode=false, % unicode breaks when used with xetex
-              xetex,
-              bookmarks=true,
-              pdfauthor={John MacFarlane; Anonymous},
-              pdftitle={Pandoc Test Suite},
-              colorlinks=true,
-              urlcolor=blue,
-              linkcolor=blue]{hyperref}
+              xetex]{hyperref}
 \else
-  \usepackage[unicode=true,
-              bookmarks=true,
-              pdfauthor={John MacFarlane; Anonymous},
-              pdftitle={Pandoc Test Suite},
-              colorlinks=true,
-              urlcolor=blue,
-              linkcolor=blue]{hyperref}
+  \usepackage[unicode=true]{hyperref}
 \fi
-\hypersetup{breaklinks=true, pdfborder={0 0 0}}
+\hypersetup{breaklinks=true,
+            bookmarks=true,
+            pdfauthor={John MacFarlane; Anonymous},
+            pdftitle={Pandoc Test Suite},
+            colorlinks=true,
+            urlcolor=blue,
+            linkcolor=black,
+            pdfborder={0 0 0}}
+% Uncomment next line if you want links as footnotes instead of hotlinks:
+% \renewcommand{\href}[2]{#2\footnote{\url{#1}}}
 \usepackage[normalem]{ulem}
 % avoid problems with \sout in headers with hyperref:
 \pdfstringdefDisableCommands{\renewcommand{\sout}{}}
@@ -314,9 +310,11 @@
 \begin{itemize}
 \item
   Tab
+
   \begin{itemize}
   \item
     Tab
+
     \begin{itemize}
     \item
       Tab
@@ -331,6 +329,7 @@
   First
 \item
   Second:
+
   \begin{itemize}
   \item
     Fee
@@ -396,6 +395,7 @@
     sublist with roman numerals, starting with 4
   \item
     more items
+
     \begin{enumerate}[(A)]
     \item
       a subsublist
@@ -410,13 +410,16 @@
 \begin{enumerate}[A.]
 \item
   Upper Alpha
+
   \begin{enumerate}[I.]
   \item
     Upper Roman.
+
     \begin{enumerate}[(1)]
     \setcounter{enumiii}{5}
     \item
       Decimal start with 6
+
       \begin{enumerate}[a)]
       \setcounter{enumiv}{2}
       \item
@@ -433,6 +436,7 @@
   Autonumber.
 \item
   More.
+
   \begin{enumerate}
   \item
     Nested.
@@ -476,10 +480,8 @@
 \begin{description}
 \item[apple]
 red fruit
-
 \item[orange]
 orange fruit
-
 \item[banana]
 yellow fruit
 \end{description}
@@ -491,7 +493,6 @@
 red fruit
 
 contains seeds, crisp, pleasant to taste
-
 \item[\emph{orange}]
 orange fruit
 
@@ -524,7 +525,6 @@
 red fruit
 
 computer
-
 \item[orange]
 orange fruit
 
@@ -538,7 +538,6 @@
 red fruit
 
 computer
-
 \item[orange]
 orange fruit
 
@@ -555,17 +554,23 @@
 Simple block on one line:
 
 foo
+
 And nested without indentation:
 
 foo
+
 bar
+
 Interpreted markdown in a table:
 
 This is \emph{emphasized}
+
 And this is \textbf{strong}
+
 Here's a simple block:
 
 foo
+
 This should be a code block, though:
 
 \begin{verbatim}
@@ -583,6 +588,7 @@
 Now, nested:
 
 foo
+
 This should just be an HTML comment:
 
 Multiline:
diff --git a/tests/writer.markdown b/tests/writer.markdown
--- a/tests/writer.markdown
+++ b/tests/writer.markdown
@@ -272,41 +272,41 @@
 Tight using spaces:
 
 apple
-  ~ red fruit
+:   red fruit
 orange
-  ~ orange fruit
+:   orange fruit
 banana
-  ~ yellow fruit
+:   yellow fruit
 
 Tight using tabs:
 
 apple
-  ~ red fruit
+:   red fruit
 orange
-  ~ orange fruit
+:   orange fruit
 banana
-  ~ yellow fruit
+:   yellow fruit
 
 Loose:
 
 apple
-  ~ red fruit
+:   red fruit
 
 orange
-  ~ orange fruit
+:   orange fruit
 
 banana
-  ~ yellow fruit
+:   yellow fruit
 
 Multiple blocks with italics:
 
 *apple*
-  ~ red fruit
+:   red fruit
 
     contains seeds, crisp, pleasant to taste
 
 *orange*
-  ~ orange fruit
+:   orange fruit
 
         { orange code block }
 
@@ -315,33 +315,33 @@
 Multiple definitions, tight:
 
 apple
-  ~ red fruit
-  ~ computer
+:   red fruit
+:   computer
 orange
-  ~ orange fruit
-  ~ bank
+:   orange fruit
+:   bank
 
 Multiple definitions, loose:
 
 apple
-  ~ red fruit
+:   red fruit
 
-  ~ computer
+:   computer
 
 orange
-  ~ orange fruit
+:   orange fruit
 
-  ~ bank
+:   bank
 
 Blank line after term, indented marker, alternate markers:
 
 apple
-  ~ red fruit
+:   red fruit
 
-  ~ computer
+:   computer
 
 orange
-  ~ orange fruit
+:   orange fruit
 
     1.  sublist
     2.  sublist
