diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,10 @@
+Version 0.7.1 released 02 Jan 2010
+
+* Updated exports to work with pandoc 1.4.
+
+* Began updating to work with GHC 6.12. (Still untested; there may
+  be further issues involving filestore.)
+
 Version 0.7 released 20 Dec 2009
 
 * Updated cabal file to allow happstack 0.4.
diff --git a/Network/Gitit/Config.hs b/Network/Gitit/Config.hs
--- a/Network/Gitit/Config.hs
+++ b/Network/Gitit/Config.hs
@@ -38,8 +38,13 @@
 import Data.List (intercalate)
 import Data.Char (toLower, toUpper, isDigit)
 import Paths_gitit (getDataFileName)
+-- Note: ghc >= 6.12 (base >=4.2) supports unicode through iconv
+-- So we use System.IO.UTF8 only if we have an earlier version
+#if MIN_VERSION_base(4,2,0)
+#else
 import Prelude hiding (readFile)
 import System.IO.UTF8
+#endif
 import System.FilePath ((</>))
 import Control.Monad (liftM)
 import Text.Pandoc
diff --git a/Network/Gitit/Export.hs b/Network/Gitit/Export.hs
--- a/Network/Gitit/Export.hs
+++ b/Network/Gitit/Export.hs
@@ -22,6 +22,7 @@
 module Network.Gitit.Export ( exportFormats )
 where
 import Text.Pandoc
+import Text.Pandoc.Writers.S5 (s5HeaderIncludes)
 import Text.Pandoc.ODT (saveOpenDocumentAsODT)
 import Network.Gitit.Server
 import Network.Gitit.Util (withTempDir)
@@ -31,6 +32,7 @@
 import Text.XHtml (noHtml)
 import qualified Data.ByteString.Lazy as B
 import System.FilePath ((<.>), (</>))
+import Control.Exception (throwIO)
 
 defaultRespOptions :: WriterOptions
 defaultRespOptions = defaultWriterOptions { writerStandalone = True
@@ -46,52 +48,69 @@
   (if null ext then id else setFilename (page ++ "." ++ ext)) .
   toResponse . fn
 
+respondX :: String -> String -> String -> (WriterOptions -> Pandoc -> String)
+         -> WriterOptions -> String -> Pandoc -> Handler
+respondX templ mimetype ext fn opts page doc = do
+  template' <- liftIO $ getDefaultTemplate templ
+  template <- case template' of
+                  Right t  -> return t
+                  Left e   -> liftIO $ throwIO e
+  respond mimetype ext (fn opts{writerTemplate = template}) page doc 
+
 respondLaTeX :: String -> Pandoc -> Handler
-respondLaTeX = respond "application/x-latex" "tex" $
-  writeLaTeX (defaultRespOptions {writerHeader = defaultLaTeXHeader})
+respondLaTeX = respondX "latex" "application/x-latex" "tex"
+  writeLaTeX defaultRespOptions
 
 respondConTeXt :: String -> Pandoc -> Handler
-respondConTeXt = respond "application/x-context" "tex" $
-  writeConTeXt (defaultRespOptions {writerHeader = defaultConTeXtHeader})
+respondConTeXt = respondX "context" "application/x-context" "tex"
+  writeConTeXt defaultRespOptions
 
 respondRTF :: String -> Pandoc -> Handler
-respondRTF = respond "application/rtf" "rtf" $
-  writeRTF (defaultRespOptions {writerHeader = defaultRTFHeader})
+respondRTF = respondX "rtf" "application/rtf" "rtf"
+  writeRTF defaultRespOptions
 
 respondRST :: String -> Pandoc -> Handler
-respondRST = respond "text/plain; charset=utf-8" "" $
-  writeRST (defaultRespOptions {writerHeader = "", writerReferenceLinks = True})
+respondRST = respondX "rst" "text/plain; charset=utf-8" ""
+  writeRST defaultRespOptions{writerReferenceLinks = True}
 
 respondMan :: String -> Pandoc -> Handler
-respondMan = respond "text/plain; charset=utf-8" "" $
-  writeMan (defaultRespOptions {writerHeader = ""})
+respondMan = respondX "man" "text/plain; charset=utf-8" ""
+  writeMan defaultRespOptions
 
 respondS5 :: String -> Pandoc -> Handler
-respondS5 _ = ok . toResponse .
-  writeS5 (defaultRespOptions {writerHeader = defaultS5Header,
-            writerS5 = True, writerIncremental = True})
+respondS5 pg doc = do
+  inc <- liftIO $ s5HeaderIncludes
+  respondX "s5" "text/html; charset=utf-8" ""
+    writeS5String
+    defaultRespOptions{writerS5 = True, writerIncremental = True,
+                       writerVariables = [("header-includes",inc)]}
+    pg doc
 
 respondTexinfo :: String -> Pandoc -> Handler
-respondTexinfo = respond "application/x-texinfo" "texi" $
-  writeTexinfo (defaultRespOptions {writerHeader = ""})
+respondTexinfo = respondX "texinfo" "application/x-texinfo" "texi"
+  writeTexinfo defaultRespOptions
 
 respondDocbook :: String -> Pandoc -> Handler
-respondDocbook = respond "application/docbook+xml" "xml" $
-  writeDocbook (defaultRespOptions {writerHeader = defaultDocbookHeader})
+respondDocbook = respondX "docbook" "application/docbook+xml" "xml"
+  writeDocbook defaultRespOptions
 
 respondMediaWiki :: String -> Pandoc -> Handler
-respondMediaWiki = respond "text/plain; charset=utf-8" "" $
-  writeMediaWiki (defaultRespOptions {writerHeader = ""})
+respondMediaWiki = respondX "mediawiki" "text/plain; charset=utf-8" ""
+  writeMediaWiki defaultRespOptions
 
 respondODT :: String -> Pandoc -> Handler
 respondODT page doc = do
+  template' <- liftIO $ getDefaultTemplate "odt"
+  template <-  case template' of
+                  Right t  -> return t
+                  Left e   -> liftIO $ throwIO e
   let openDoc = writeOpenDocument
-                (defaultRespOptions {writerHeader = defaultOpenDocumentHeader})
+                defaultRespOptions{writerTemplate = template}
                 doc
   conf <- getConfig
   contents <- liftIO $ withTempDir "gitit-temp-odt" $ \tempdir -> do
                 let tempfile = tempdir </> page <.> "odt"
-                saveOpenDocumentAsODT tempfile (repositoryPath conf) openDoc
+                saveOpenDocumentAsODT tempfile (repositoryPath conf) Nothing openDoc
                 B.readFile tempfile
   ok $ setContentType "application/vnd.oasis.opendocument.text" $
        setFilename (page ++ ".odt") $ (toResponse noHtml) {rsBody = contents}
diff --git a/Network/Gitit/Handlers.hs b/Network/Gitit/Handlers.hs
--- a/Network/Gitit/Handlers.hs
+++ b/Network/Gitit/Handlers.hs
@@ -68,11 +68,17 @@
         exportPage, showHighlightedSource, preview, applyPreCommitPlugins)
 import Network.Gitit.Page (extractCategories)
 import Control.Exception (throwIO, catch, try)
-import Prelude hiding (writeFile, readFile, catch)
 import Data.ByteString.UTF8 (toString)
 import System.Time
 import System.FilePath
-import System.IO.UTF8 (readFile)
+import Prelude hiding (readFile, writeFile, catch)
+-- Note: ghc >= 6.12 (base >=4.2) supports unicode through iconv
+-- So we use System.IO.UTF8 only if we have an earlier version
+#if MIN_VERSION_base(4,2,0)
+import Prelude (readFile, writeFile)
+#else
+import System.IO.UTF8
+#endif
 import Network.Gitit.State
 import Text.XHtml hiding ( (</>), dir, method, password, rev )
 import qualified Text.XHtml as X ( method )
diff --git a/Network/Gitit/Initialize.hs b/Network/Gitit/Initialize.hs
--- a/Network/Gitit/Initialize.hs
+++ b/Network/Gitit/Initialize.hs
@@ -34,8 +34,13 @@
 import Control.Exception (throwIO, try)
 import System.Directory (copyFile, createDirectoryIfMissing, doesDirectoryExist, doesFileExist)
 import Control.Monad (unless, forM_, liftM)
+-- Note: ghc >= 6.12 (base >=4.2) supports unicode through iconv
+-- So we use System.IO.UTF8 only if we have an earlier version
+#if MIN_VERSION_base(4,2,0)
+#else
 import Prelude hiding (readFile)
 import System.IO.UTF8
+#endif
 import Text.Pandoc
 import Text.Pandoc.Shared (HTMLMathMethod(..))
 import System.Log.Logger (logM, Priority(..))
diff --git a/gitit.cabal b/gitit.cabal
--- a/gitit.cabal
+++ b/gitit.cabal
@@ -1,10 +1,10 @@
 name:                gitit
-version:             0.7
+version:             0.7.1
 Cabal-version:       >= 1.2
 build-type:          Simple
 synopsis:            Wiki using happstack, git or darcs, and pandoc.
-description:         Gitit is a wiki backed by a git, darcs, or mercurial
-                     filestore.  Pages and uploaded files can be modified either
+description:         Gitit is a wiki backed by a git or darcs filestore.
+                     Pages and uploaded files can be modified either
                      directly via the VCS's command-line tools or through
                      the wiki's web interface. Pandoc is used for markup
                      processing, so pages may be written in
@@ -41,7 +41,7 @@
 maintainer:          jgm@berkeley.edu
 bug-reports:         http://code.google.com/p/gitit/issues/list
 homepage:            http://github.com/jgm/gitit/tree/master
-stability:           experimental
+stability:           experimental 
 data-files:          data/static/css/screen.css, data/static/css/print.css,
                      data/static/css/ie.css, data/static/css/hk-pyg.css,
                      data/static/css/reset-fonts-grids.css,
@@ -98,8 +98,12 @@
     exposed-modules: Network.Gitit.Interface
     build-depends:   ghc, ghc-paths
     cpp-options:     -D_PLUGINS
-  build-depends:     base >= 3, pandoc >= 1.3, filepath, safe
-  ghc-options:       -Wall
+  build-depends:     base >= 3, pandoc >= 1.4, filepath, safe
+  extensions:        CPP
+  if impl(ghc >= 6.12)
+    ghc-options:     -Wall -fno-warn-unused-do-bind
+  else
+    ghc-options:     -Wall
   ghc-prof-options:  -auto-all -caf-all
 
 Executable           gitit
@@ -119,7 +123,11 @@
   if flag(plugins)
     build-depends:   ghc, ghc-paths
     cpp-options:     -D_PLUGINS
-  ghc-options:       -Wall -threaded
+  extensions:        CPP
+  if impl(ghc >= 6.12)
+    ghc-options:     -Wall -threaded -fno-warn-unused-do-bind
+  else
+    ghc-options:     -Wall -threaded
   ghc-prof-options:  -auto-all -caf-all
 
 Executable           expireGititCache
diff --git a/gitit.hs b/gitit.hs
--- a/gitit.hs
+++ b/gitit.hs
@@ -35,8 +35,13 @@
 import System.IO (stdout, stderr)
 import System.Console.GetOpt
 import Data.Version (showVersion)
+-- Note: ghc >= 6.12 (base >=4.2) supports unicode through iconv
+-- So we use System.IO.UTF8 only if we have an earlier version
+#if MIN_VERSION_base(4,2,0)
+#else
 import Prelude hiding (readFile)
 import System.IO.UTF8
+#endif
 import Paths_gitit (version, getDataFileName)
 
 main :: IO ()
