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.0.1
+version:             0.5.0.2
 build-type:          Simple
 license:             GPL-2.0-or-later
 license-file:        COPYING.md
@@ -111,7 +111,7 @@
   build-depends:       aeson
                      , bytestring            >= 0.9     && < 0.13
                      , crypton               >= 0.30    && < 1.1
-                     , citeproc              >= 0.8     && < 0.12
+                     , citeproc              >= 0.8     && < 0.13
                      , containers            >= 0.6.0.1 && < 0.9
                      , data-default          >= 0.4     && < 0.9
                      , doclayout             >= 0.5     && < 0.6
diff --git a/src/Text/Pandoc/Lua/Custom.hs b/src/Text/Pandoc/Lua/Custom.hs
--- a/src/Text/Pandoc/Lua/Custom.hs
+++ b/src/Text/Pandoc/Lua/Custom.hs
@@ -148,12 +148,19 @@
 writerField :: Name
 writerField = "Pandoc Writer function"
 
--- | Runs a Lua action in a continueable environment.
-inLua :: MonadIO m => GCManagedState -> LuaE PandocError a -> m a
-inLua st = liftIO . withGCManagedState @PandocError st
+-- | Runs a Lua action in a continuable environment and transfers the common
+-- state after the Lua action has finished.
+inLua :: (PandocMonad m, MonadIO m)
+  => GCManagedState -> LuaE PandocError a -> m a
+inLua st luaAction = do
+  let inLua' = liftIO . withGCManagedState @PandocError st
+  result <- inLua' luaAction
+  cstate <- inLua' (unPandocLua PandocMonad.getCommonState)
+  PandocMonad.putCommonState cstate
+  return result
 
 -- | Returns the ByteStringReader function
-byteStringReader :: MonadIO m => GCManagedState -> Reader m
+byteStringReader :: (PandocMonad m, MonadIO m) => GCManagedState -> Reader m
 byteStringReader st = ByteStringReader $ \ropts input -> inLua st $ do
   getfield registryindex readerField
   push input
@@ -163,12 +170,12 @@
     _ -> throwErrorAsException
 
 -- | Returns the TextReader function
-textReader :: MonadIO m => GCManagedState -> Reader m
+textReader :: (PandocMonad m, MonadIO m) => GCManagedState -> Reader m
 textReader st = TextReader $ \ropts srcs -> inLua st $ do
   let input = toSources srcs
   getfield registryindex readerField
   push input
   push ropts
   pcallTrace 2 1 >>= \case
-    OK -> forcePeek $ peekPandoc top
+    OK -> forcePeek (peekPandoc top)
     _ -> throwErrorAsException
