diff --git a/pandoc-lua-engine.cabal b/pandoc-lua-engine.cabal
--- a/pandoc-lua-engine.cabal
+++ b/pandoc-lua-engine.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.4
 name:                pandoc-lua-engine
-version:             0.5.4.1
+version:             0.5.4.2
 build-type:          Simple
 license:             GPL-2.0-or-later
 license-file:        COPYING.md
@@ -125,7 +125,7 @@
                      , hslua-module-zip      >= 1.1.5   && < 1.3
                      , lpeg                  >= 1.1     && < 1.2
                      , mtl                   >= 2.2     && < 2.4
-                     , pandoc                >= 3.11    && < 3.13
+                     , pandoc                >= 3.11    && < 3.14
                      , pandoc-lua-marshal    >= 0.3     && < 0.4
                      , pandoc-types          >= 1.22    && < 1.24
                      , parsec                >= 3.1     && < 3.2
diff --git a/src/Text/Pandoc/Lua/Marshal/ReaderOptions.hs b/src/Text/Pandoc/Lua/Marshal/ReaderOptions.hs
--- a/src/Text/Pandoc/Lua/Marshal/ReaderOptions.hs
+++ b/src/Text/Pandoc/Lua/Marshal/ReaderOptions.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP                  #-}
 {-# LANGUAGE LambdaCase           #-}
 {-# LANGUAGE OverloadedStrings    #-}
 {-# LANGUAGE ScopedTypeVariables  #-}
diff --git a/src/Text/Pandoc/Lua/Marshal/WriterOptions.hs b/src/Text/Pandoc/Lua/Marshal/WriterOptions.hs
--- a/src/Text/Pandoc/Lua/Marshal/WriterOptions.hs
+++ b/src/Text/Pandoc/Lua/Marshal/WriterOptions.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP                  #-}
 {-# LANGUAGE LambdaCase           #-}
 {-# LANGUAGE OverloadedStrings    #-}
 {-# LANGUAGE ScopedTypeVariables  #-}
diff --git a/src/Text/Pandoc/Lua/Module/JSON.hs b/src/Text/Pandoc/Lua/Module/JSON.hs
--- a/src/Text/Pandoc/Lua/Module/JSON.hs
+++ b/src/Text/Pandoc/Lua/Module/JSON.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-|
 Module      : Text.Pandoc.Lua.Module.JSON
diff --git a/src/Text/Pandoc/Lua/Writer/Classic.hs b/src/Text/Pandoc/Lua/Writer/Classic.hs
--- a/src/Text/Pandoc/Lua/Writer/Classic.hs
+++ b/src/Text/Pandoc/Lua/Writer/Classic.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP                 #-}
 {-# LANGUAGE FlexibleContexts    #-}
 {-# LANGUAGE FlexibleInstances   #-}
 {-# LANGUAGE OverloadedStrings   #-}
@@ -25,9 +24,6 @@
 import qualified Data.Text as T
 import Data.Text (Text, pack)
 import HsLua as Lua hiding (Operation (Div))
-#if !MIN_VERSION_hslua(2,2,0)
-import HsLua.Aeson (peekViaJSON)
-#endif
 import Text.DocLayout (literal, render)
 import Text.DocTemplates (Context)
 import Text.Pandoc.Definition
diff --git a/src/Text/Pandoc/Lua/Writer/Scaffolding.hs b/src/Text/Pandoc/Lua/Writer/Scaffolding.hs
--- a/src/Text/Pandoc/Lua/Writer/Scaffolding.hs
+++ b/src/Text/Pandoc/Lua/Writer/Scaffolding.hs
@@ -22,18 +22,17 @@
 import Data.String (IsString (fromString))
 import HsLua
 import HsLua.Module.DocLayout (peekDoc, pushDoc)
-import Text.DocLayout (Doc, blankline, render)
+import Text.DocLayout (Doc, blankline)
 import Text.DocTemplates (Context)
 import Text.Pandoc.Definition
 import Text.Pandoc.Error (PandocError (..))
-import Text.Pandoc.Options (WriterOptions (..), WrapOption(..))
+import Text.Pandoc.Options (WriterOptions (..))
 import Text.Pandoc.Lua.PandocLua ()
 import Text.Pandoc.Lua.Marshal.AST
 import Text.Pandoc.Lua.Marshal.Context (peekContext)
 import Text.Pandoc.Lua.Marshal.WriterOptions ( peekWriterOptions
                                              , pushWriterOptions)
-import Text.Pandoc.Templates (renderTemplate)
-import Text.Pandoc.Writers.Shared (metaToContext, setField)
+import Text.Pandoc.Writers.Shared (metaToContext, renderWithTemplate, setField)
 import qualified Data.Text as T
 import qualified Text.Pandoc.UTF8 as UTF8
 
@@ -161,14 +160,7 @@
   let context = setField "body" body
               $ fromMaybe defaultContext mcontext
 
-  let colwidth = if writerWrapText opts == WrapAuto
-                    then Just $ writerColumns opts
-                    else Nothing
-
-  return $ render colwidth $
-    case writerTemplate opts of
-       Nothing  -> body
-       Just tpl -> renderTemplate tpl context
+  return $ renderWithTemplate opts context body
 
 -- | Keep exactly one traceback and clean it up. This wouldn't be
 -- necessary if the @pcallTrace@ function would do nothing whenever the
