--- a/util/GenerateManpage.hs
+++ b/util/GenerateManpage.hs
@@ -27,6 +27,9 @@
 import Text.Regex.Posix
 import Data.Char
 import Data.List
+import Control.Monad.IO.Class (liftIO)
+import qualified Data.Text as T
+import qualified Data.Text.IO as TIO
 
 import Distribution.PackageDescription.Parse
 import Distribution.Verbosity
@@ -35,7 +38,7 @@
 import Text.PrettyPrint.HughesPJ
 import Distribution.Text
 
-import Text.Pandoc -- works with 1.15.x
+import Text.Pandoc -- works with 2.1
 
 releaseDate = "31 December 2012"
 
@@ -68,31 +71,34 @@
     keybindings <- (intercalate "\n\n" . map markdownDefn . allBindings)
                     `liftM` readFile "./src/XMonad/Config.hs"
 
-    let manHeader = unwords [".TH xmonad 1","\""++releaseDate++"\"",releaseName,"\"xmonad manual\""]
-
-    Right parsed <- readMarkdown def
-        . unlines
-        . replace "___KEYBINDINGS___" keybindings
-        . lines
-        <$> readFile "./man/xmonad.1.markdown"
-
-    Right template <- getDefaultTemplate Nothing "man"
-    writeFile "./man/xmonad.1"
-        . (manHeader ++)
-        . writeMan def{ writerTemplate = Just template }
-        $ parsed
-    putStrLn "Documentation created: man/xmonad.1"
-
-    Right template <- getDefaultTemplate Nothing "html"
-    writeFile "./man/xmonad.1.html"
-        . writeHtmlString def
-            { writerVariables =
-                        [("include-before"
-                            ,"<h1>"++releaseName++"</h1>"++
-                             "<p>Section: xmonad manual (1)<br/>"++
-                             "Updated: "++releaseDate++"</p>"++
-                             "<hr/>")]
-            , writerTemplate = Just template
-            , writerTableOfContents = True }
-        $ parsed
-    putStrLn "Documentation created: man/xmonad.1.html"
+    let manHeader = T.pack .
+                    unwords
+                    $ [".TH xmonad 1","\""++releaseDate++"\"",releaseName,"\"xmonad manual\""]
+
+    markdownSource <- readFile "./man/xmonad.1.markdown"
+
+    runIOorExplode $ do
+        parsed <- readMarkdown def
+            . T.pack
+            . unlines
+            . replace "___KEYBINDINGS___" keybindings
+            . lines
+            $ markdownSource
+
+        manTemplate <- getDefaultTemplate "man"
+        manBody <- writeMan def { writerTemplate = Just manTemplate } parsed
+        liftIO $ TIO.writeFile "./man/xmonad.1" $ T.append manHeader manBody
+        liftIO $ putStrLn "Documentation created: man/xmonad.1"
+
+        htmltemplate <- getDefaultTemplate "html"
+        htmlBody <- writeHtml5String def
+                { writerVariables =
+                            [("include-before"
+                                ,"<h1>"++releaseName++"</h1>"++
+                                 "<p>Section: xmonad manual (1)<br/>"++
+                                 "Updated: "++releaseDate++"</p>"++
+                                 "<hr/>")]
+                , writerTemplate = Just htmltemplate
+                , writerTableOfContents = True } parsed
+        liftIO $ TIO.writeFile "./man/xmonad.1.html" htmlBody
+        liftIO $ putStrLn "Documentation created: man/xmonad.1.html"
--- a/xmonad.cabal
+++ b/xmonad.cabal
@@ -113,7 +113,7 @@
     if flag(generatemanpage)
         build-depends: base,
                        Cabal,
-                       pandoc,
+                       pandoc >= 2,
                        pretty,
                        regex-posix
     else
