diff --git a/BlogLiterately-diagrams.cabal b/BlogLiterately-diagrams.cabal
--- a/BlogLiterately-diagrams.cabal
+++ b/BlogLiterately-diagrams.cabal
@@ -1,5 +1,5 @@
 name:                BlogLiterately-diagrams
-version:             0.3
+version:             0.3.1
 synopsis:            Include images in blog posts with inline diagrams code
 description:         A plugin for @BlogLiterately@ (<http://hackage.haskell.org/package/BlogLiterately>) which turns inline diagrams
                      code into images.
@@ -67,7 +67,7 @@
 category:            Web
 build-type:          Simple
 cabal-version:       1.18
-tested-with:         GHC ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.1
+tested-with:         GHC ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.7 || ==9.4.5
 
 source-repository head
   type:     git
@@ -76,7 +76,7 @@
 library
   default-language:    Haskell2010
   exposed-modules:     Text.BlogLiterately.Diagrams
-  build-depends:       base >= 4.3 && < 4.17,
+  build-depends:       base >= 4.3 && < 4.18,
                        containers,
                        filepath,
                        directory,
@@ -85,7 +85,7 @@
                        JuicyPixels         >= 3.2 && < 3.4,
                        diagrams-builder    >= 0.5 && < 0.9,
                        BlogLiterately      >= 0.8.7 && < 0.9,
-                       pandoc              >= 2.8 && < 2.19,
+                       pandoc              >= 2.19.1 && < 3.2,
                        safe                ==0.3.*,
                        split               >= 0.2 && < 0.3,
                        text                >= 1.2 && < 2.1
diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,9 @@
+* 0.3.1 (22 Aug 2023)
+
+  - allow `base-4.17` / GHC 9.4
+  - Update to work with `pandoc` up through 3.1
+  - Require at least `pandoc` 2.19.1
+
 * 0.3 (24 May 2022)
 
   - allow `base-4.16`
diff --git a/src/Text/BlogLiterately/Diagrams.hs b/src/Text/BlogLiterately/Diagrams.hs
--- a/src/Text/BlogLiterately/Diagrams.hs
+++ b/src/Text/BlogLiterately/Diagrams.hs
@@ -152,29 +152,28 @@
     diaDir = fromMaybe "diagrams" mdir
     mkFile base = diaDir </> base <.> "png"
 
-renderBlockDiagram :: Maybe FilePath -> Maybe (SizeSpec V2 Double) -> [Text] -> Block -> IO Block
-renderBlockDiagram ximgDir ximgSize defs c@(CodeBlock attr@(_, cls, fields) s)
-    | "dia-def" `elem` classTags = return Null
+renderBlockDiagram :: Maybe FilePath -> Maybe (SizeSpec V2 Double) -> [Text] -> [Block] -> IO [Block]
+renderBlockDiagram ximgDir ximgSize defs blocks = concat <$> mapM renderOne blocks
+ where
+  renderOne c@(CodeBlock attr@(_, cls, fields) s)
+    | "dia-def" `elem` classTags = return []
     | "dia"     `elem` classTags = do
         res <- renderDiagram True (src : defs) "dia" (attrToSize fields) Nothing
         case res of
-          Left  err      -> return (CodeBlock attr (T.append s err))
+          Left  err      -> return [CodeBlock attr (T.append s err)]
           Right fileName -> do
             case (ximgDir, ximgSize) of
               (Just _, Just sz) -> do
                 _ <- renderDiagram True (src : defs) "dia" sz ximgDir
                 return ()
               _                 -> return ()
-            return $ Para [Image nullAttr [] (T.pack fileName, "")]
-
-    | otherwise = return c
-
-  where
-    (tag, src)        = unTag s
-    classTags         = (maybe id (:) tag) cls
-
+            return [Para [Image nullAttr [] (T.pack fileName, "")]]
+    | otherwise = return [c]
 
-renderBlockDiagram _ _ _ b = return b
+    where
+      (tag, src) = unTag s
+      classTags  = (maybe id (:) tag) cls
+  renderOne b = return [b]
 
 renderInlineDiagram :: [Text] -> Inline -> IO Inline
 renderInlineDiagram defs c@(Code attr@(_, cls, fields) expr)
