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.1.3.1
+version:             0.1.4
 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.
@@ -50,6 +50,13 @@
                      this:
                      .
                      <<http://projects.haskell.org/diagrams/hosted/BLD-post-result.png>>
+                     .
+                     In addition to simple diagrams, @IO@ actions
+                     producing diagrams may also be used.  In that
+                     case the @IO@ action will simply be run, and the
+                     resulting diagram rendered.  This can be useful,
+                     for example, when producing a diagram built from
+                     some external data or using randomness.
 license:             BSD3
 license-file:        LICENSE
 extra-source-files:  CHANGES
@@ -73,7 +80,7 @@
                        filepath,
                        directory,
                        diagrams-cairo >= 1.0 && < 1.1,
-                       diagrams-builder >= 0.4.2 && < 0.5,
+                       diagrams-builder >= 0.5 && < 0.6,
                        diagrams-lib >= 1.0 && < 1.1,
                        BlogLiterately >= 0.6 && < 0.8,
                        pandoc >= 1.9 && < 1.13,
diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,8 @@
+* 0.1.4: 27 January 2014
+
+  - Require diagrams-builder-0.5, which really actually adds support
+    for IO actions producing diagrams.
+
 * 0.1.3.1: 29 November 2013
 
   - Update documentation: doesn't actually support IO actions yet
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
@@ -28,7 +28,8 @@
 import           Diagrams.Backend.Cairo
 import           Diagrams.Backend.Cairo.Internal
 import qualified Diagrams.Builder                as DB
-import           Diagrams.Prelude                (R2, zeroV, (&), (.~))
+import           Diagrams.Prelude                (centerXY, pad, zeroV, (&),
+                                                  (.~))
 import           Diagrams.TwoD.Size              (mkSizeSpec)
 import           Text.BlogLiterately
 import           Text.Pandoc
@@ -93,24 +94,26 @@
 -- | Given some code with declarations, some attributes, and an
 --   expression to render, render it and return the filename of the
 --   generated image (or an error message).
-renderDiagram :: [String]     -- ^ Declarations
+renderDiagram :: Bool         -- ^ Apply padding automatically?
+              -> [String]     -- ^ Declarations
               -> String       -- ^ Expression to render
               -> Attr         -- ^ Code attributes
               -> IO (Either String FilePath)
-renderDiagram decls expr attr@(_ident, _cls, fields) = do
+renderDiagram shouldPad decls expr (_ident, _cls, fields) = do
     createDirectoryIfMissing True diaDir
-    res <- DB.buildDiagram
-           Cairo
-           (zeroV :: R2)
-           (CairoOptions "default.png" size PNG False)
-           decls
-           expr
-           []
-           ["Diagrams.Backend.Cairo"]
-           (DB.hashedRegenerate
-             (\hash opts -> opts & cairoFileName .~ mkFile hash)
-             diaDir
-           )
+
+    let bopts = DB.mkBuildOpts Cairo zeroV (CairoOptions "default.png" size PNG False)
+                  & DB.snippets .~ decls
+                  & DB.imports  .~ ["Diagrams.Backend.Cairo"]
+                  & DB.diaExpr  .~ expr
+                  & DB.postProcess .~ (if shouldPad then pad 1.1 . centerXY else id)
+                  & DB.decideRegen .~
+                      (DB.hashedRegenerate
+                        (\hash opts -> opts & cairoFileName .~ mkFile hash)
+                        diaDir
+                      )
+    res <- DB.buildDiagram bopts
+
     case res of
       DB.ParseErr err    -> do
         let errStr = "\nParse error:\n" ++ err
@@ -120,8 +123,8 @@
         let errStr = "\nInterpreter error:\n" ++ DB.ppInterpError ierr
         putErrLn errStr
         return (Left errStr)
-      DB.Skipped hash    ->        return (Right $ mkFile hash)
-      DB.OK hash (act,_) -> act >> return (Right $ mkFile hash)
+      DB.Skipped hash    ->        return (Right $ mkFile (DB.hashToHexStr hash))
+      DB.OK hash (act,_) -> act >> return (Right $ mkFile (DB.hashToHexStr hash))
 
   where
     size        = mkSizeSpec
@@ -133,7 +136,7 @@
 renderBlockDiagram defs c@(CodeBlock attr@(_, cls, _) s)
     | "dia-def" `elem` classTags = return Null
     | "dia"     `elem` classTags = do
-        res <- renderDiagram (src : defs) "pad 1.1 dia" attr
+        res <- renderDiagram True (src : defs) "dia" attr
         case res of
           Left  err      -> return (CodeBlock attr (s ++ err))
           Right fileName -> return $ Para [Image [] (fileName, "")]
@@ -149,7 +152,7 @@
 renderInlineDiagram :: [String] -> Inline -> IO Inline
 renderInlineDiagram defs c@(Code attr@(_, cls, _) expr)
     | "dia" `elem` cls = do
-        res <- renderDiagram defs expr attr
+        res <- renderDiagram False defs expr attr
         case res of
           Left err       -> return (Code attr (expr ++ err))
           Right fileName -> return $ Image [] (fileName, "")
