diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,9 +2,21 @@
 
 `pandoc-lua-marshal` uses [PVP Versioning][].
 
+## 0.1.6
+
+Released 2022-06-03.
+
+-   Fix `applyFully`: the function always traversed the document
+    type-wise, never topdown.
+
+-   Avoid shadowing of a function name that was added in
+    hslua-2.2.
+
+-   Support concatenating of Pandoc values with the `..` operator.
+
 ## 0.1.5.1
 
-Release pending.
+Released 2022-02-19.
 
 -   Relax upper bound for lua and hslua.
 
diff --git a/pandoc-lua-marshal.cabal b/pandoc-lua-marshal.cabal
--- a/pandoc-lua-marshal.cabal
+++ b/pandoc-lua-marshal.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.4
 name:                pandoc-lua-marshal
-version:             0.1.5.1
+version:             0.1.6
 synopsis:            Use pandoc types in Lua
 description:         This package provides functions to marshal and unmarshal
                      pandoc document types to and from Lua.
@@ -27,8 +27,8 @@
 tested-with:         GHC == 8.6.5
                      GHC == 8.8.4
                      GHC == 8.10.7
-                     GHC == 9.0.1
-                     GHC == 9.2.1
+                     GHC == 9.0.2
+                     GHC == 9.2.2
 extra-source-files:  test/test-attr.lua
                    , test/test-block.lua
                    , test/test-cell.lua
diff --git a/src/Text/Pandoc/Lua/Marshal/Pandoc.hs b/src/Text/Pandoc/Lua/Marshal/Pandoc.hs
--- a/src/Text/Pandoc/Lua/Marshal/Pandoc.hs
+++ b/src/Text/Pandoc/Lua/Marshal/Pandoc.hs
@@ -20,12 +20,10 @@
   ) where
 
 import Control.Applicative (optional)
-import Control.Monad ((<$!>), (>=>))
+import Control.Monad ((<$!>))
 import Data.Maybe (fromMaybe)
 import HsLua
-import Text.Pandoc.Lua.Marshal.Block
-  (peekBlocksFuzzy, pushBlocks, walkBlockSplicing, walkBlocksStraight)
-import Text.Pandoc.Lua.Marshal.Inline (walkInlineSplicing, walkInlinesStraight)
+import Text.Pandoc.Lua.Marshal.Block (peekBlocksFuzzy, pushBlocks)
 import Text.Pandoc.Lua.Marshal.Filter
 import Text.Pandoc.Lua.Marshal.MetaValue (peekMetaValue, pushMetaValue)
 import Text.Pandoc.Lua.Marshal.Shared (walkBlocksAndInlines)
@@ -43,7 +41,12 @@
 -- | Pandoc object type.
 typePandoc :: LuaError e => DocumentedType e Pandoc
 typePandoc = deftype "Pandoc"
-  [ operation Eq $ defun "__eq"
+  [ operation Concat $ lambda
+     ### liftPure2 (<>)
+     <#> parameter peekPandoc "Pandoc" "a" ""
+     <#> parameter peekPandoc "Pandoc" "b" ""
+     =#> functionResult pushPandoc "Pandoc" "combined documents"
+  , operation Eq $ defun "__eq"
      ### liftPure2 (\a b -> fromMaybe False ((==) <$> a <*> b))
      <#> parameter (optional . peekPandoc) "doc1" "pandoc" ""
      <#> parameter (optional . peekPandoc) "doc2" "pandoc" ""
@@ -61,13 +64,7 @@
       (peekMeta, \(Pandoc _ blks) meta -> Pandoc meta blks)
 
   , method $ defun "walk"
-    ### (\doc filter' -> case filterWalkingOrder filter' of
-            WalkForEachType -> walkBlocksAndInlines filter' doc
-                           >>= applyMetaFunction filter'
-                           >>= applyPandocFunction filter'
-            WalkTopdown     -> applyPandocFunction filter' doc
-                           >>= applyMetaFunction filter'
-                           >>= walkBlocksAndInlines filter')
+    ### flip applyFully
     <#> parameter peekPandoc "Pandoc" "self" ""
     <#> parameter peekFilter "Filter" "lua_filter" "table of filter functions"
     =#> functionResult pushPandoc "Pandoc" "modified element"
@@ -134,10 +131,10 @@
 applyFully :: LuaError e
            => Filter
            -> Pandoc -> LuaE e Pandoc
-applyFully filter' =
-      walkInlineSplicing filter'
-  >=> walkInlinesStraight filter'
-  >=> walkBlockSplicing filter'
-  >=> walkBlocksStraight filter'
-  >=> applyMetaFunction filter'
-  >=> applyPandocFunction filter'
+applyFully filter' doc = case filterWalkingOrder filter' of
+  WalkForEachType -> walkBlocksAndInlines filter' doc
+                 >>= applyMetaFunction filter'
+                 >>= applyPandocFunction filter'
+  WalkTopdown     -> applyPandocFunction filter' doc
+                 >>= applyMetaFunction filter'
+                 >>= walkBlocksAndInlines filter'
diff --git a/src/Text/Pandoc/Lua/Marshal/TableParts.hs b/src/Text/Pandoc/Lua/Marshal/TableParts.hs
--- a/src/Text/Pandoc/Lua/Marshal/TableParts.hs
+++ b/src/Text/Pandoc/Lua/Marshal/TableParts.hs
@@ -99,7 +99,7 @@
 
 -- | Add a value to the table at the top of the stack at a string-index.
 addField :: LuaError e => Name -> LuaE e () -> LuaE e ()
-addField key pushValue = do
+addField key pushFieldValue = do
   pushName key
-  pushValue
+  pushFieldValue
   rawset (nth 3)
diff --git a/test/test-pandoc.lua b/test/test-pandoc.lua
--- a/test/test-pandoc.lua
+++ b/test/test-pandoc.lua
@@ -35,6 +35,16 @@
       assert.are_same(meta.zahlen, {'eins', 'zwei', 'drei'})
     end),
   },
+  group 'operations' {
+    test('concatenation', function ()
+      local doc1 = Pandoc({Para 'Lovely'}, {title='first'})
+      local doc2 = Pandoc({Para 'Day'}, {title='second'})
+      assert.are_equal(
+        Pandoc({Para 'Lovely', Para 'Day'}, {title='second'}),
+        doc1 .. doc2
+      )
+    end)
+  },
   group 'walk' {
     test('uses `Meta` function', function ()
       local meta = {
