diff --git a/INSTALL b/INSTALL
--- a/INSTALL
+++ b/INSTALL
@@ -94,6 +94,37 @@
     generate a script that can be run to register the package at
     install time.
 
+Creating a relocatable Windows binary
+-------------------------------------
+
+On Windows it is possible to compile pandoc such that it
+(and its data files) are "relocatable."  You can put the relocatable
+binary in any directory (even on a USB drive), and it will look for its
+data files there.
+
+    cabal install --flags="embed_data_files" citeproc-hs
+    cabal install --flags="executable -library" --datasubdir=
+
+You can find `pandoc.exe` in `dist/build/pandoc`.  Copy this wherever
+you please, and copy the following data files to the same place:
+
+    README
+    COPYRIGHT
+    COPYING
+    reference.odt
+    reference.docx
+    epub.css
+    default.csl
+    templates/
+    data/
+    s5/
+    slidy/
+    dzslides/
+    pcre-license.txt
+    pcre3.dll
+
+This is essentially what the binary installer does.
+
 [zip-archive]: http://hackage.haskell.org/package/zip-archive
 [highlighting-kate]: http://hackage.haskell.org/package/highlighting-kate
 [blaze-html]: http://hackage.haskell.org/package/blaze-html
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,37 @@
+pandoc (1.9.1.1)
+
+  * Better handling of raw latex environments in markdown.  Now
+
+        \begin{equation}
+        a_1
+        \end{equation}
+
+    turns into a raw latex block as expected.
+
+  * Improvements to LaTeX reader:
+
+    + Skip options after block commands.
+    + Correctly handle `{\\}` in braced.
+    + Added a needed 'try'.
+    + Citations: add `, ` to suffix if it doesn't start with space or
+      punctuation. Otherwise we get no space between the year and the
+      suffix in author-date styles.
+
+  * Added two needed data files for S5.  This fixes a problem with
+    `pandoc -t s5 --self-contained`.  Also removed `slides.min.js`,
+    which was no longer being used.
+
+  * Fixed some minor problems in `reference.docx`:
+    name on "Date" style, `xCs` instead of `xIs`.
+
+  * Fixed a problem creating docx files using a reference docx
+    modified using Word.  The problem seems to be that Word
+    modifies `_rels/.rels`, changing the Type of the Relationship to
+    `docProps/core.xml`. Pandoc now changes this back to the correct
+    value if it has been altered, fixing the problem.
+
+  * Fixed html5 template so it works properly with highlighting.
+
 pandoc (1.9.1)
 
   * LaTeX reader:
diff --git a/pandoc.cabal b/pandoc.cabal
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -1,5 +1,5 @@
 Name:            pandoc
-Version:         1.9.1
+Version:         1.9.1.1
 Cabal-Version:   >= 1.10
 Build-Type:      Custom
 License:         GPL
@@ -59,7 +59,6 @@
                  data/LaTeXMathML.js,
                  data/MathMLinHTML.js,
                  -- data for S5 writer
-                 s5/default/slides.min.js,
                  s5/default/slides.js,
                  s5/default/s5-core.css,
                  s5/default/framing.css,
@@ -69,6 +68,8 @@
                  s5/default/print.css,
                  s5/default/slides.css,
                  s5/default/iepngfix.htc,
+                 s5/default/blank.gif,
+                 s5/default/bodybg.gif,
                  -- data for slidy writer
                  slidy/styles/slidy.css,
                  slidy/scripts/slidy.js.gz,
diff --git a/reference.docx b/reference.docx
Binary files a/reference.docx and b/reference.docx differ
diff --git a/s5/default/blank.gif b/s5/default/blank.gif
new file mode 100644
Binary files /dev/null and b/s5/default/blank.gif differ
diff --git a/s5/default/bodybg.gif b/s5/default/bodybg.gif
new file mode 100644
Binary files /dev/null and b/s5/default/bodybg.gif differ
diff --git a/s5/default/slides.min.js b/s5/default/slides.min.js
deleted file mode 100644
--- a/s5/default/slides.min.js
+++ /dev/null
@@ -1,1 +0,0 @@
-var undef;var slideCSS="";var snum=0;var smax=1;var incpos=0;var number=undef;var s5mode=true;var defaultView="slideshow";var controlVis="visible";var isIE=navigator.appName=="Microsoft Internet Explorer"&&navigator.userAgent.indexOf("Opera")<1?1:0;var isOp=navigator.userAgent.indexOf("Opera")>-1?1:0;var isGe=navigator.userAgent.indexOf("Gecko")>-1&&navigator.userAgent.indexOf("Safari")<1?1:0;function hasClass(a,b){if(!a.className){return false}return(a.className.search("(^|\\s)"+b+"(\\s|$)")!=-1)}function hasValue(a,b){if(!a){return false}return(a.search("(^|\\s)"+b+"(\\s|$)")!=-1)}function removeClass(a,b){if(!a){return}a.className=a.className.replace(new RegExp("(^|\\s)"+b+"(\\s|$)"),RegExp.$1+RegExp.$2)}function addClass(a,b){if(!a||hasClass(a,b)){return}if(a.className){a.className+=" "+b}else{a.className=b}}function GetElementsWithClassName(a,c){var d=document.getElementsByTagName(a);var e=new Array();for(var b=0;b<d.length;b++){if(hasClass(d[b],c)){e[e.length]=d[b]}}return e}function isParentOrSelf(a,b){if(a==null||a.nodeName=="BODY"){return false}else{if(a.id==b){return true}else{return isParentOrSelf(a.parentNode,b)}}}function nodeValue(d){var a="";if(d.nodeType==1){var c=d.childNodes;for(var b=0;b<c.length;++b){a+=nodeValue(c[b])}}else{if(d.nodeType==3){a=d.nodeValue}}return(a)}function slideLabel(){var f=GetElementsWithClassName("*","slide");var g=document.getElementById("jumplist");smax=f.length;for(var c=0;c<smax;c++){var e=f[c];var i="slide"+c.toString();e.setAttribute("id",i);if(isOp){continue}var d="";var b=e.firstChild;if(!b){continue}while(b&&b.nodeType==3){b=b.nextSibling}if(!b){continue}var h=b.childNodes;for(var a=0;a<h.length;a++){d+=nodeValue(h[a])}g.options[g.length]=new Option(c+" : "+d,c)}}function currentSlide(){var a;if(document.getElementById){a=document.getElementById("currentSlide")}else{a=document.currentSlide}a.innerHTML='<span id="csHere">'+snum+'</span> <span id="csSep">/</span> <span id="csTotal">'+(smax-1)+"</span>";if(snum==0){a.style.visibility="hidden"}else{a.style.visibility="visible"}}function go(c){if(document.getElementById("slideProj").disabled||c==0){return}var b=document.getElementById("jumplist");var g="slide"+snum;var e=document.getElementById(g);if(incrementals[snum].length>0){for(var a=0;a<incrementals[snum].length;a++){removeClass(incrementals[snum][a],"current");removeClass(incrementals[snum][a],"incremental")}}if(c!="j"){snum+=c;lmax=smax-1;if(snum>lmax){snum=lmax}if(snum<0){snum=0}}else{snum=parseInt(b.value)}var f="slide"+snum;var d=document.getElementById(f);if(!d){d=document.getElementById("slide0");snum=0}if(c<0){incpos=incrementals[snum].length}else{incpos=0}if(incrementals[snum].length>0&&incpos==0){for(var a=0;a<incrementals[snum].length;a++){if(hasClass(incrementals[snum][a],"current")){incpos=a+1}else{addClass(incrementals[snum][a],"incremental")}}}if(incrementals[snum].length>0&&incpos>0){addClass(incrementals[snum][incpos-1],"current")}e.style.visibility="hidden";d.style.visibility="visible";b.selectedIndex=snum;currentSlide();number=0}function goTo(a){if(a>=smax||a==snum){return}go(a-snum)}function subgo(a){if(a>0){removeClass(incrementals[snum][incpos-1],"current");removeClass(incrementals[snum][incpos],"incremental");addClass(incrementals[snum][incpos],"current");incpos++}else{incpos--;removeClass(incrementals[snum][incpos],"current");addClass(incrementals[snum][incpos],"incremental");addClass(incrementals[snum][incpos-1],"current")}}function toggle(){var b=GetElementsWithClassName("*","slide");var d=document.getElementById("slideProj");var c=document.getElementById("outlineStyle");if(!d.disabled){d.disabled=true;c.disabled=false;s5mode=false;fontSize("1em");for(var e=0;e<smax;e++){var a=b[e];a.style.visibility="visible"}}else{d.disabled=false;c.disabled=true;s5mode=true;fontScale();for(var e=0;e<smax;e++){var a=b[e];a.style.visibility="hidden"}b[snum].style.visibility="visible"}}function showHide(a){var b=GetElementsWithClassName("*","hideme")[0];switch(a){case"s":b.style.visibility="visible";break;case"h":b.style.visibility="hidden";break;case"k":if(b.style.visibility!="visible"){b.style.visibility="visible"}else{b.style.visibility="hidden"}break}}function keys(a){if(!a){a=event;a.which=a.keyCode}if(a.which==84){toggle();return}if(s5mode){switch(a.which){case 10:case 13:if(window.event&&isParentOrSelf(window.event.srcElement,"controls")){return}if(a.target&&isParentOrSelf(a.target,"controls")){return}if(number!=undef){goTo(number);break}case 32:case 34:case 39:case 40:if(number!=undef){go(number)}else{if(!incrementals[snum]||incpos>=incrementals[snum].length){go(1)}else{subgo(1)}}break;case 33:case 37:case 38:if(number!=undef){go(-1*number)}else{if(!incrementals[snum]||incpos<=0){go(-1)}else{subgo(-1)}}break;case 36:goTo(0);break;case 35:goTo(smax-1);break;case 67:showHide("k");break}if(a.which<48||a.which>57){number=undef}else{if(window.event&&isParentOrSelf(window.event.srcElement,"controls")){return}if(a.target&&isParentOrSelf(a.target,"controls")){return}number=(((number!=undef)?number:0)*10)+(a.which-48)}}return false}function clicker(b){number=undef;var a;if(window.event){a=window.event.srcElement;b=window.event}else{a=b.target}if(a.getAttribute("href")!=null||hasValue(a.rel,"external")||isParentOrSelf(a,"controls")||isParentOrSelf(a,"embed")||isParentOrSelf(a,"object")){return true}if(!b.which||b.which==1){if(!incrementals[snum]||incpos>=incrementals[snum].length){go(1)}else{subgo(1)}}}function findSlide(d){var c=null;var b=GetElementsWithClassName("*","slide");for(var a=0;a<b.length;a++){var e=b[a];if((e.name&&e.name==d)||(e.id&&e.id==d)){c=e;break}}while(c!=null&&c.nodeName!="BODY"){if(hasClass(c,"slide")){return parseInt(c.id.slice(5))}c=c.parentNode}return null}function slideJump(){if(window.location.hash==null){return}var b=/^#slide(\d+)$/;var c=b.exec(window.location.hash);var a=null;if(c!=null){a=parseInt(c[1])}else{a=findSlide(window.location.hash.slice(1))}if(a!=null){go(a-snum)}}function fixLinks(){var f=window.location.href;f=f.slice(0,f.length-window.location.hash.length);var g=document.getElementsByTagName("A");for(var e=0;e<g.length;e++){var b=g[e].href;var d=b.match("#slide[0-9]{1,2}");if((d)&&(d[0].slice(0,1)=="#")){var c=findSlide(d[0].slice(1));if(c!=null){if(g[e].addEventListener){g[e].addEventListener("click",new Function("e","if (document.getElementById('slideProj').disabled) return;go("+c+" - snum); if (e.preventDefault) e.preventDefault();"),true)}else{if(g[e].attachEvent){g[e].attachEvent("onclick",new Function("","if (document.getElementById('slideProj').disabled) return;go("+c+" - snum); event.returnValue = false;"))}}}}}}function externalLinks(){if(!document.getElementsByTagName){return}var c=document.getElementsByTagName("a");for(var b=0;b<c.length;b++){var a=c[b];if(a.getAttribute("href")&&hasValue(a.rel,"external")){a.target="_blank";addClass(a,"external")}}}function createControls(){var e=document.getElementById("controls");if(!e){return}var c=" onmouseover=\"showHide('s');\" onmouseout=\"showHide('h');\"";var d,a="";if(controlVis=="hidden"){d=c}else{a=c}e.innerHTML='<form action="#" id="controlForm"'+d+'><div id="navLinks"><a accesskey="t" id="toggle" href="javascript:toggle();">&#216;</a><a accesskey="z" id="prev" href="javascript:go(-1);">&laquo;</a><a accesskey="x" id="next" href="javascript:go(1);">&raquo;</a><div id="navList"'+a+'><select id="jumplist" onchange="go(\'j\');"></select></div></div></form>';if(controlVis=="hidden"){var b=document.getElementById("navLinks")}else{var b=document.getElementById("jumplist")}addClass(b,"hideme")}function fontScale(){if(!s5mode){return false}var f=22;var a=32;if(window.innerHeight){var c=window.innerHeight;var e=window.innerWidth}else{if(document.documentElement.clientHeight){var c=document.documentElement.clientHeight;var e=document.documentElement.clientWidth}else{if(document.body.clientHeight){var c=document.body.clientHeight;var e=document.body.clientWidth}else{var c=700;var e=1024}}}var b=Math.min(Math.round(c/f),Math.round(e/a));fontSize(b+"px");if(isGe){var d=document.getElementsByTagName("body")[0];d.style.display="none";d.style.display="block"}}function fontSize(a){if(!(s5ss=document.getElementById("s5ss"))){if(!isIE){document.getElementsByTagName("head")[0].appendChild(s5ss=document.createElement("style"));s5ss.setAttribute("media","screen, projection");s5ss.setAttribute("id","s5ss")}else{document.createStyleSheet();document.s5ss=document.styleSheets[document.styleSheets.length-1]}}if(!isIE){while(s5ss.lastChild){s5ss.removeChild(s5ss.lastChild)}s5ss.appendChild(document.createTextNode("body {font-size: "+a+" !important;}"))}else{document.s5ss.addRule("body","font-size: "+a+" !important;")}}function notOperaFix(){slideCSS=document.getElementById("slideProj").href;var b=document.getElementById("slideProj");var a=document.getElementById("outlineStyle");b.setAttribute("media","screen");a.disabled=true;if(isGe){b.setAttribute("href","null");b.setAttribute("href",slideCSS)}if(isIE&&document.styleSheets&&document.styleSheets[0]){document.styleSheets[0].addRule("img","behavior: url(ui/default/iepngfix.htc)");document.styleSheets[0].addRule("div","behavior: url(ui/default/iepngfix.htc)");document.styleSheets[0].addRule(".slide","behavior: url(ui/default/iepngfix.htc)")}}function getIncrementals(e){var d=new Array();if(!e){return d}var c=e.childNodes;for(var b=0;b<c.length;b++){var f=c[b];if(hasClass(f,"incremental")){if(f.nodeName=="OL"||f.nodeName=="UL"){removeClass(f,"incremental");for(var a=0;a<f.childNodes.length;a++){if(f.childNodes[a].nodeType==1){addClass(f.childNodes[a],"incremental")}}}else{d[d.length]=f;removeClass(f,"incremental")}}if(hasClass(f,"show-first")){if(f.nodeName=="OL"||f.nodeName=="UL"){removeClass(f,"show-first");if(f.childNodes[isGe].nodeType==1){removeClass(f.childNodes[isGe],"incremental")}}else{d[d.length]=f}}d=d.concat(getIncrementals(f))}return d}function createIncrementals(){var b=new Array();for(var a=0;a<smax;a++){b[a]=getIncrementals(document.getElementById("slide"+a))}return b}function defaultCheck(){var a=document.getElementsByTagName("meta");for(var b=0;b<a.length;b++){if(a[b].name=="defaultView"){defaultView=a[b].content}if(a[b].name=="controlVis"){controlVis=a[b].content}}}function trap(a){if(!a){a=event;a.which=a.keyCode}try{modifierKey=a.ctrlKey||a.altKey||a.metaKey}catch(a){modifierKey=false}return modifierKey||a.which==0}function startup(){defaultCheck();if(!isOp){createControls()}slideLabel();fixLinks();externalLinks();fontScale();if(!isOp){notOperaFix();incrementals=createIncrementals();slideJump();if(defaultView=="outline"){toggle()}document.onkeyup=keys;document.onkeypress=trap;document.onclick=clicker}}window.onload=startup;window.onresize=function(){setTimeout("fontScale()",50)};
diff --git a/src/Tests/Helpers.hs b/src/Tests/Helpers.hs
--- a/src/Tests/Helpers.hs
+++ b/src/Tests/Helpers.hs
@@ -69,15 +69,13 @@
 
 vividize :: (DI,String) -> String
 vividize (B,s) = s
-vividize (_,s) = vivid s
+vividize (F,s) = s
+vividize (S,s) = setSGRCode [SetColor Background Dull Red
+                         , SetColor Foreground Vivid White] ++ s
+                 ++ setSGRCode [Reset]
 
 property :: QP.Testable a => TestName -> a -> Test
 property = testProperty
-
-vivid :: String -> String
-vivid s = setSGRCode [SetColor Background Dull Red
-                     , SetColor Foreground Vivid White] ++ s
-          ++ setSGRCode [Reset]
 
 infix 5 =?>
 (=?>) :: a -> b -> (a,b)
diff --git a/src/Tests/Readers/LaTeX.hs b/src/Tests/Readers/LaTeX.hs
--- a/src/Tests/Readers/LaTeX.hs
+++ b/src/Tests/Readers/LaTeX.hs
@@ -78,14 +78,14 @@
     =?> para (cite [baseCitation] (rt "\\citet{item1}"))
   , "suffix" =: "\\citet[p.~30]{item1}"
     =?> para
-        (cite [baseCitation{ citationSuffix = toList $ text "p.\160\&30" }] (rt "\\citet[p.~30]{item1}"))
+        (cite [baseCitation{ citationSuffix = toList $ text ", p.\160\&30" }] (rt "\\citet[p.~30]{item1}"))
   , "suffix long" =: "\\citet[p.~30, with suffix]{item1}"
     =?> para (cite [baseCitation{ citationSuffix =
-                       toList $ text "p.\160\&30, with suffix" }] (rt "\\citet[p.~30, with suffix]{item1}"))
+                       toList $ text ", p.\160\&30, with suffix" }] (rt "\\citet[p.~30, with suffix]{item1}"))
   , "multiple" =: "\\citeauthor{item1} \\citetext{\\citeyear{item1}; \\citeyear[p.~30]{item2}; \\citealp[see also][]{item3}}"
     =?> para (cite [baseCitation{ citationMode = AuthorInText }
                    ,baseCitation{ citationMode = SuppressAuthor
-                                , citationSuffix = [Str "p.\160\&30"]
+                                , citationSuffix = [Str ",",Space,Str "p.\160\&30"]
                                 , citationId = "item2" }
                    ,baseCitation{ citationId = "item3"
                                 , citationPrefix = [Str "see",Space,Str "also"]
@@ -94,28 +94,28 @@
   , "group" =: "\\citetext{\\citealp[see][p.~34--35]{item1}; \\citealp[also][chap. 3]{item3}}"
     =?> para (cite [baseCitation{ citationMode = NormalCitation
                                 , citationPrefix = [Str "see"]
-                                , citationSuffix = [Str "p.\160\&34\8211\&35"] }
+                                , citationSuffix = [Str ",",Space,Str "p.\160\&34\8211\&35"] }
                    ,baseCitation{ citationMode = NormalCitation
                                 , citationId = "item3"
                                 , citationPrefix = [Str "also"]
-                                , citationSuffix = [Str "chap.",Space,Str "3"] }
+                                , citationSuffix = [Str ",",Space,Str "chap.",Space,Str "3"] }
                    ] (rt "\\citetext{\\citealp[see][p.~34--35]{item1}; \\citealp[also][chap. 3]{item3}}"))
   , "suffix and locator" =: "\\citep[pp.~33, 35--37, and nowhere else]{item1}"
     =?> para (cite [baseCitation{ citationMode = NormalCitation
-                                , citationSuffix = [Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\citep[pp.~33, 35--37, and nowhere else]{item1}"))
+                                , citationSuffix = [Str ",",Space,Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\citep[pp.~33, 35--37, and nowhere else]{item1}"))
   , "suffix only" =: "\\citep[and nowhere else]{item1}"
     =?> para (cite [baseCitation{ citationMode = NormalCitation
-                                , citationSuffix = toList $ text "and nowhere else" }] (rt "\\citep[and nowhere else]{item1}"))
+                                , citationSuffix = toList $ text ", and nowhere else" }] (rt "\\citep[and nowhere else]{item1}"))
   , "no author" =: "\\citeyearpar{item1}, and now Doe with a locator \\citeyearpar[p.~44]{item2}"
     =?> para (cite [baseCitation{ citationMode = SuppressAuthor }] (rt "\\citeyearpar{item1}") <>
               text ", and now Doe with a locator " <>
               cite [baseCitation{ citationMode = SuppressAuthor
-                                , citationSuffix = [Str "p.\160\&44"]
+                                , citationSuffix = [Str ",",Space,Str "p.\160\&44"]
                                 , citationId = "item2" }] (rt "\\citeyearpar[p.~44]{item2}"))
   , "markup" =: "\\citep[\\emph{see}][p. \\textbf{32}]{item1}"
     =?> para (cite [baseCitation{ citationMode = NormalCitation
                                 , citationPrefix = [Emph [Str "see"]]
-                                , citationSuffix = [Str "p.",Space,
+                                , citationSuffix = [Str ",",Space,Str "p.",Space,
                                     Strong [Str "32"]] }] (rt "\\citep[\\emph{see}][p. \\textbf{32}]{item1}"))
   ]
 
@@ -125,14 +125,14 @@
     =?> para (cite [baseCitation] (rt "\\textcite{item1}"))
   , "suffix" =: "\\textcite[p.~30]{item1}"
     =?> para
-        (cite [baseCitation{ citationSuffix = toList $ text "p.\160\&30" }] (rt "\\textcite[p.~30]{item1}"))
+        (cite [baseCitation{ citationSuffix = toList $ text ", p.\160\&30" }] (rt "\\textcite[p.~30]{item1}"))
   , "suffix long" =: "\\textcite[p.~30, with suffix]{item1}"
     =?> para (cite [baseCitation{ citationSuffix =
-                       toList $ text "p.\160\&30, with suffix" }] (rt "\\textcite[p.~30, with suffix]{item1}"))
+                       toList $ text ", p.\160\&30, with suffix" }] (rt "\\textcite[p.~30, with suffix]{item1}"))
   , "multiple" =: "\\textcites{item1}[p.~30]{item2}[see also][]{item3}"
     =?> para (cite [baseCitation{ citationMode = AuthorInText }
                    ,baseCitation{ citationMode = NormalCitation
-                                , citationSuffix = [Str "p.\160\&30"]
+                                , citationSuffix = [Str ",",Space,Str "p.\160\&30"]
                                 , citationId = "item2" }
                    ,baseCitation{ citationId = "item3"
                                 , citationPrefix = [Str "see",Space,Str "also"]
@@ -141,28 +141,28 @@
   , "group" =: "\\autocites[see][p.~34--35]{item1}[also][chap. 3]{item3}"
     =?> para (cite [baseCitation{ citationMode = NormalCitation
                                 , citationPrefix = [Str "see"]
-                                , citationSuffix = [Str "p.\160\&34\8211\&35"] }
+                                , citationSuffix = [Str ",",Space,Str "p.\160\&34\8211\&35"] }
                    ,baseCitation{ citationMode = NormalCitation
                                 , citationId = "item3"
                                 , citationPrefix = [Str "also"]
-                                , citationSuffix = [Str "chap.",Space,Str "3"] }
+                                , citationSuffix = [Str ",",Space,Str "chap.",Space,Str "3"] }
                    ] (rt "\\autocites[see][p.~34--35]{item1}[also][chap. 3]{item3}"))
   , "suffix and locator" =: "\\autocite[pp.~33, 35--37, and nowhere else]{item1}"
     =?> para (cite [baseCitation{ citationMode = NormalCitation
-                                , citationSuffix = [Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\autocite[pp.~33, 35--37, and nowhere else]{item1}"))
+                                , citationSuffix = [Str ",",Space,Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\autocite[pp.~33, 35--37, and nowhere else]{item1}"))
   , "suffix only" =: "\\autocite[and nowhere else]{item1}"
     =?> para (cite [baseCitation{ citationMode = NormalCitation
-                                , citationSuffix = toList $ text "and nowhere else" }] (rt "\\autocite[and nowhere else]{item1}"))
+                                , citationSuffix = toList $ text ", and nowhere else" }] (rt "\\autocite[and nowhere else]{item1}"))
   , "no author" =: "\\autocite*{item1}, and now Doe with a locator \\autocite*[p.~44]{item2}"
     =?> para (cite [baseCitation{ citationMode = SuppressAuthor }] (rt "\\autocite*{item1}") <>
               text ", and now Doe with a locator " <>
               cite [baseCitation{ citationMode = SuppressAuthor
-                                , citationSuffix = [Str "p.\160\&44"]
+                                , citationSuffix = [Str ",",Space,Str "p.\160\&44"]
                                 , citationId = "item2" }] (rt "\\autocite*[p.~44]{item2}"))
   , "markup" =: "\\autocite[\\emph{see}][p. \\textbf{32}]{item1}"
     =?> para (cite [baseCitation{ citationMode = NormalCitation
                                 , citationPrefix = [Emph [Str "see"]]
-                                , citationSuffix = [Str "p.",Space,
+                                , citationSuffix = [Str ",",Space,Str "p.",Space,
                                     Strong [Str "32"]] }] (rt "\\autocite[\\emph{see}][p. \\textbf{32}]{item1}"))
   , "parencite" =: "\\parencite{item1}"
     =?> para (cite [baseCitation{ citationMode = NormalCitation }] (rt "\\parencite{item1}"))
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
@@ -41,7 +41,7 @@
 import Data.Char ( chr, ord )
 import Control.Monad
 import Text.Pandoc.Builder
-import Data.Char (isLetter)
+import Data.Char (isLetter, isPunctuation, isSpace)
 import Control.Applicative
 import Data.Monoid
 import System.FilePath (replaceExtension)
@@ -120,6 +120,7 @@
          (  many1 (satisfy (\c -> c /= '\\' && c /= '}' && c /= '{'))
         <|> try (string "\\}")
         <|> try (string "\\{")
+        <|> try (string "\\\\")
         <|> ((\x -> "{" ++ x ++ "}") <$> braced)
         <|> count 1 anyChar
          ) (char '}'))
@@ -172,6 +173,7 @@
      <|> (str <$> count 1 tildeEscape)
      <|> (str <$> string "]")
      <|> (str <$> string "#") -- TODO print warning?
+     <|> (str <$> string "&") -- TODO print warning?
      -- <|> (str <$> count 1 (satisfy (\c -> c /= '\\' && c /='\n' && c /='}' && c /='{'))) -- eat random leftover characters
 
 inlines :: LP Inlines
@@ -208,28 +210,28 @@
 -- eat an optional argument and one or more arguments in braces
 ignoreInlines :: String -> (String, LP Inlines)
 ignoreInlines name = (name, doraw <|> (mempty <$ optargs))
-  where optargs = optional opt *> skipMany (optional sp *> braced)
+  where optargs = skipopts *> skipMany (try $ optional sp *> braced)
         contseq = '\\':name
         doraw = (rawInline "latex" . (contseq ++) . snd) <$>
                  (getState >>= guard . stateParseRaw >> (withRaw optargs))
 
 ignoreBlocks :: String -> (String, LP Blocks)
 ignoreBlocks name = (name, doraw <|> (mempty <$ optargs))
-  where optargs = optional opt *> skipMany (optional sp *> braced)
+  where optargs = skipopts *> skipMany (try $ optional sp *> braced)
         contseq = '\\':name
         doraw = (rawBlock "latex" . (contseq ++) . snd) <$>
                  (getState >>= guard . stateParseRaw >> (withRaw optargs))
 
 blockCommands :: M.Map String (LP Blocks)
 blockCommands = M.fromList $
-  [ ("par", pure mempty)
-  , ("title", mempty <$ (tok >>= addTitle))
-  , ("subtitle", mempty <$ (tok >>= addSubtitle))
-  , ("author", mempty <$ authors)
-  -- in letter class, temp. store address & sig as title, author
-  , ("address", mempty <$ (tok >>= addTitle))
-  , ("signature", mempty <$ authors)
-  , ("date", mempty <$ (tok >>= addDate))
+  [ ("par", mempty <$ skipopts)
+  , ("title", mempty <$ (skipopts *> tok >>= addTitle))
+  , ("subtitle", mempty <$ (skipopts *> tok >>= addSubtitle))
+  , ("author", mempty <$ (skipopts *> authors))
+  -- -- in letter class, temp. store address & sig as title, author
+  , ("address", mempty <$ (skipopts *> tok >>= addTitle))
+  , ("signature", mempty <$ (skipopts *> authors))
+  , ("date", mempty <$ (skipopts *> tok >>= addDate))
   -- sectioning
   , ("chapter", updateState (\s -> s{ stateHasChapters = True }) *> section 0)
   , ("section", section 1)
@@ -241,14 +243,14 @@
   , ("frametitle", section 3)
   , ("framesubtitle", section 4)
   -- letters
-  , ("opening", (para . trimInlines) <$> tok)
-  , ("closing", closing)
+  , ("opening", (para . trimInlines) <$> (skipopts *> tok))
+  , ("closing", skipopts *> closing)
   --
-  , ("rule", optional opt *> tok *> tok *> pure horizontalRule)
+  , ("rule", skipopts *> tok *> tok *> pure horizontalRule)
   , ("begin", mzero)   -- these are here so they won't be interpreted as inline
   , ("end", mzero)
-  , ("item", loose_item)
-  , ("documentclass", optional opt *> braced *> preamble)
+  , ("item", skipopts *> loose_item)
+  , ("documentclass", skipopts *> braced *> preamble)
   ] ++ map ignoreBlocks
   -- these commands will be ignored unless --parse-raw is specified,
   -- in which case they will appear as raw latex blocks
@@ -291,8 +293,7 @@
 section lvl = do
   hasChapters <- stateHasChapters `fmap` getState
   let lvl' = if hasChapters then lvl + 1 else lvl
-  optional sp
-  optional opt
+  skipopts
   contents <- grouped inline
   return $ header lvl' contents
 
@@ -310,7 +311,7 @@
                            Nothing
                              | parseRaw  ->
                                 (rawInline "latex" . (('\\':name') ++)) <$>
-                                 (withRaw (optional opt *> many braced)
+                                 (withRaw (skipopts *> many braced)
                                       >>= applyMacros' . snd)
                              | otherwise -> return mempty
 
@@ -399,7 +400,7 @@
   , ("href", (unescapeURL <$> braced <* optional sp) >>= \url ->
        tok >>= \lab ->
          pure (link url "" lab))
-  , ("includegraphics", optional opt *> (unescapeURL <$> braced) >>=
+  , ("includegraphics", skipopts *> (unescapeURL <$> braced) >>=
        (\src -> pure (image src "" (str "image"))))
   , ("cite", citation "cite" NormalCitation False)
   , ("citep", citation "citep" NormalCitation False)
@@ -573,6 +574,9 @@
 opt :: LP Inlines
 opt = bracketed inline <* optional sp
 
+skipopts :: LP ()
+skipopts = skipMany opt
+
 inlineText :: LP Inlines
 inlineText = str <$> many1 inlineChar
 
@@ -619,7 +623,7 @@
 include :: LP ([FilePath], String)
 include = do
   name <- controlSeq "include" <|> controlSeq "usepackage"
-  optional opt
+  skipopts
   fs <- (splitBy (==',')) <$> braced
   rest <- getInput
   let fs' = if name == "include"
@@ -648,15 +652,7 @@
   return (r,rest)
 
 rawLaTeXBlock :: GenParser Char ParserState String
-rawLaTeXBlock =
-  (rawLaTeXEnvironment <|> (snd <$> withRaw blockCommand)) >>= applyMacros'
-
-rawLaTeXEnvironment :: GenParser Char ParserState String
-rawLaTeXEnvironment = try $ do
-  controlSeq "begin"
-  name <- braced
-  let addBegin x = "\\begin{" ++ name ++ "}" ++ x
-  addBegin <$> (withRaw (env name blocks) >>= applyMacros' . snd)
+rawLaTeXBlock = snd <$> withRaw (environment <|> blockCommand)
 
 rawLaTeXInline :: GenParser Char ParserState Inline
 rawLaTeXInline = do
@@ -720,7 +716,7 @@
   return $ para (trimInlines contents) <> sigs
 
 item :: LP Blocks
-item = blocks *> controlSeq "item" *> optional opt *> blocks
+item = blocks *> controlSeq "item" *> skipopts *> blocks
 
 loose_item :: LP Blocks
 loose_item = do
@@ -758,7 +754,7 @@
 
 verbEnv :: String -> LP String
 verbEnv name = do
-  optional opt
+  skipopts
   optional blankline
   let endEnv = try $ controlSeq "end" *> braced >>= guard . (== name)
   res <- manyTill anyChar endEnv
@@ -804,20 +800,24 @@
 
 -- citations
 
-addPrefix :: Inlines -> [Citation] -> [Citation]
-addPrefix p (k:ks)   = k {citationPrefix = toList p ++ citationPrefix k} : ks
+addPrefix :: [Inline] -> [Citation] -> [Citation]
+addPrefix p (k:ks)   = k {citationPrefix = p ++ citationPrefix k} : ks
 addPrefix _ _ = []
 
-addSuffix :: Inlines -> [Citation] -> [Citation]
+addSuffix :: [Inline] -> [Citation] -> [Citation]
 addSuffix s ks@(_:_) =
-  let k = last ks
-  in  init ks ++ [k {citationSuffix = citationSuffix k ++ toList s}]
+  let k  = last ks
+      s' = case s of
+                (Str (c:_):_)
+                  | not (isPunctuation c || isSpace c) -> Str "," : Space : s
+                _                                      -> s
+  in  init ks ++ [k {citationSuffix = citationSuffix k ++ s'}]
 addSuffix _ _ = []
 
 simpleCiteArgs :: LP [Citation]
 simpleCiteArgs = try $ do
-  first  <- optionMaybe opt
-  second <- optionMaybe opt
+  first  <- optionMaybe $ toList <$> opt
+  second <- optionMaybe $ toList <$> opt
   char '{'
   keys <- manyTill citationLabel (char '}')
   let (pre, suf) = case (first  , second ) of
@@ -854,7 +854,7 @@
 
 complexNatbibCitation :: CitationMode -> LP Inlines
 complexNatbibCitation mode = try $ do
-  let ils = (trimInlines . mconcat) <$>
+  let ils = (toList . trimInlines . mconcat) <$>
               many (notFollowedBy (oneOf "\\};") >> inline)
   let parseOne = try $ do
                    skipSpaces
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
@@ -166,8 +166,17 @@
           : mknode "dcterms:modified" [("xsi:type","dcterms:W3CDTF")] () -- put current time here
           : map (mknode "dc:creator" [] . stringify) auths
   let docPropsEntry = toEntry docPropsPath epochtime $ fromString $ showTopElement' docProps
+  let relsPath = "_rels/.rels"
+  rels <- case findEntryByPath relsPath refArchive of
+                   Just e  -> return $ toString $ fromEntry e
+                   Nothing -> err 57 "could not find .rels/_rels in reference docx"
+  -- fix .rels/_rels, which can get screwed up when reference.docx is edited by Word
+  let rels' = substitute "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"
+                  "http://schemas.openxmlformats.org/officedocument/2006/relationships/metadata/core-properties"
+                  rels
+  let relsEntry = toEntry relsPath epochtime $ fromString rels'
   let archive = foldr addEntryToArchive refArchive $
-                  contentEntry : relEntry : numEntry : styleEntry : docPropsEntry : imageEntries
+                  relsEntry : contentEntry : relEntry : numEntry : styleEntry : docPropsEntry : imageEntries
   return $ fromArchive archive
 
 styleToOpenXml :: Style -> [Element]
diff --git a/src/pandoc.hs b/src/pandoc.hs
--- a/src/pandoc.hs
+++ b/src/pandoc.hs
@@ -67,8 +67,8 @@
 
 compileInfo :: String
 compileInfo =
-  "\nCompiled with citeproc-hs " ++ VERSION_citeproc_hs ++ " and " ++
-   "highlighting-kate " ++ VERSION_highlighting_kate ++
+  "\nCompiled with citeproc-hs " ++ VERSION_citeproc_hs ++ ", texmath " ++
+  VERSION_texmath ++ ", highlighting-kate " ++ VERSION_highlighting_kate ++
    ".\nSyntax highlighting is supported for the following languages:\n    " ++
        wrapWords 4 78 languages
 
diff --git a/templates/default.html5 b/templates/default.html5
--- a/templates/default.html5
+++ b/templates/default.html5
@@ -14,7 +14,9 @@
     <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
   <![endif]-->
 $if(highlighting-css)$
+  <style type="text/css">
 $highlighting-css$
+  </style>
 $endif$
 $for(css)$
   <link rel="stylesheet" href="$css$">
diff --git a/tests/latex-reader.native b/tests/latex-reader.native
--- a/tests/latex-reader.native
+++ b/tests/latex-reader.native
@@ -259,7 +259,7 @@
 ,HorizontalRule
 ,Header 1 [Str "LaTeX"]
 ,BulletList
- [[Para [Cite [Citation {citationId = "smith.1899", citationPrefix = [], citationSuffix = [Str "22-23"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [RawInline "latex" "\\cite[22-23]{smith.1899}"]]]
+ [[Para [Cite [Citation {citationId = "smith.1899", citationPrefix = [], citationSuffix = [Str ",",Space,Str "22-23"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [RawInline "latex" "\\cite[22-23]{smith.1899}"]]]
  ,[Para [RawInline "latex" "\\doublespacing"]]
  ,[Para [Math InlineMath "2+2=4"]]
  ,[Para [Math InlineMath "x \\in y"]]
