diff --git a/BlogLiterately.cabal b/BlogLiterately.cabal
--- a/BlogLiterately.cabal
+++ b/BlogLiterately.cabal
@@ -1,5 +1,5 @@
 Name:           BlogLiterately
-Version:        0.5
+Version:        0.5.1
 Synopsis:       A tool for posting Haskelly articles to blogs
 Description:    Write blog posts in Markdown format, then use BlogLiterately
                 to do syntax highlighting, format ghci sessions, and upload
@@ -26,7 +26,7 @@
                 But if pandoc is already installed against
                 blaze-html-0.4 you may need to reinstall it with the
                 blaze_html_0_5 flag explicitly set.
-Cabal-Version:  >= 1.8
+Cabal-Version:  >= 1.10
 Homepage:       http://byorgey.wordpress.com/blogliterately/
 License:        GPL
 License-file:   LICENSE
@@ -41,6 +41,8 @@
                     doc/BlogLiteratelyDoc.lhs
                     style/*.css
                     style/hs-style
+Bug-reports:    http://code.google.com/p/byorgey/issues/list?q=Project:BlogLiterately
+
 Source-repository head
   type:     darcs
   location: http://patch-tag.com/r/byorgey/BlogLiterately
@@ -71,7 +73,15 @@
                    Text.BlogLiterately.Post
                    Text.BlogLiterately.Run
                    Text.BlogLiterately.Transform
+  Other-modules:   Paths_BlogLiterately
   hs-source-dirs:  src
+  Other-extensions: DeriveDataTypeable
+                    FlexibleContexts
+                    PatternGuards
+                    RecordWildCards
+                    TypeOperators
+                    ViewPatterns
+  Default-language: Haskell2010
 
 Executable BlogLiterately
   Build-Depends:   base,
@@ -81,3 +91,4 @@
   Main-Is:        BlogLiterately.hs
   hs-source-dirs: main
   Ghc-Options:    -fwarn-unused-imports
+  Default-language: Haskell2010
diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,20 @@
+0.5.1: 30 July 2012
+
+  * Escape < and > characters in ghci output
+
+  * Supress vertical whitespace following ghci commands that produce
+    no output
+
+  * add centerImagesXF transform (disabled by default)
+
+  * create bug tracker and add Bug-reports: field to .cabal file
+
+  * re-export Text.BlogLiterately.Run from Text.BlogLiterately
+
+  * improved documentation
+
+  * fix output of --version
+
 0.5: 7 July 2012
 
   * expose internals as a library, and create framework for adding
diff --git a/doc/BlogLiteratelyDoc.lhs b/doc/BlogLiteratelyDoc.lhs
--- a/doc/BlogLiteratelyDoc.lhs
+++ b/doc/BlogLiteratelyDoc.lhs
@@ -244,6 +244,14 @@
   images).  Once you're confident everything looks good, do a final
   upload with `--upload-images` (and perhaps `--publish`) set.
 
+Customization
+-------------
+
+It is possible to create your own variants of `BlogLiterately` which
+include custom processing steps.  See the [`Text.BlogLiterately.Run`
+module](http://hackage.haskell.org/packages/archive/BlogLiterately/latest/doc/html/Text-BlogLiterately-Run.html)
+to get started.
+
 Command-line options
 --------------------
 
@@ -314,7 +322,8 @@
 
 For questions, support, feature suggestions, etc., feel free to
 contact me (Brent Yorgey): `byorgey` on IRC (freenode), or `byorgey`
-at gmail.
+at gmail.  There is also a [bug tracker][] where you can file bugs and
+feature requests.
 
 [`BlogLiterately`]: http://hackage.haskell.org/package/BlogLiterately
 [markdown]: http://daringfireball.net/projects/markdown/
@@ -326,3 +335,4 @@
 [Hackage]: http://hackage.haskell.org/
 [MathML]: http://www.w3.org/Math/
 [MathJax]: http://www.mathjax.org/
+[bug tracker]: http://code.google.com/p/byorgey/issues/list?q=Project:BlogLiterately
diff --git a/src/Text/BlogLiterately.hs b/src/Text/BlogLiterately.hs
--- a/src/Text/BlogLiterately.hs
+++ b/src/Text/BlogLiterately.hs
@@ -19,6 +19,7 @@
     , module Text.BlogLiterately.LaTeX
     , module Text.BlogLiterately.Options
     , module Text.BlogLiterately.Post
+    , module Text.BlogLiterately.Run
     , module Text.BlogLiterately.Transform
     ) where
 
@@ -29,4 +30,5 @@
 import Text.BlogLiterately.LaTeX
 import Text.BlogLiterately.Options
 import Text.BlogLiterately.Post
+import Text.BlogLiterately.Run
 import Text.BlogLiterately.Transform
diff --git a/src/Text/BlogLiterately/Ghci.hs b/src/Text/BlogLiterately/Ghci.hs
--- a/src/Text/BlogLiterately/Ghci.hs
+++ b/src/Text/BlogLiterately/Ghci.hs
@@ -218,10 +218,20 @@
 ghciPrompt = colored "gray" "ghci&gt; "
 
 formatGhciResult (GhciLine (GhciInput input _) (OK output))
-  = ghciPrompt ++ input ++ "\n" ++ indent 2 output ++ "\n"
+  | all isSpace output
+    = ghciPrompt ++ esc input
+  | otherwise
+    = ghciPrompt ++ esc input ++ "\n" ++ indent 2 (esc output) ++ "\n"
 formatGhciResult (GhciLine (GhciInput input _) (Unexpected output exp))
-  = ghciPrompt ++ input ++ "\n" ++ indent 2 (coloredBlock "red" output)
-                        ++ "\n" ++ indent 2 (coloredBlock "blue" exp)
-                        ++ "\n"
+  = ghciPrompt ++ esc input ++ "\n" ++ indent 2 (coloredBlock "red" (esc output))
+                            ++ "\n" ++ indent 2 (coloredBlock "blue" (esc exp))
+                            ++ "\n"
 
     -- XXX the styles above should be configurable...
+
+esc :: String -> String
+esc = concatMap escapeOne
+  where
+    escapeOne '<' = "&lt;"
+    escapeOne '>' = "&gt;"
+    escapeOne  c  = [c]
diff --git a/src/Text/BlogLiterately/Options.hs b/src/Text/BlogLiterately/Options.hs
--- a/src/Text/BlogLiterately/Options.hs
+++ b/src/Text/BlogLiterately/Options.hs
@@ -17,6 +17,9 @@
     )
     where
 
+import Paths_BlogLiterately (version)
+import Data.Version
+
 import System.Console.CmdArgs
 
 import Text.BlogLiterately.Highlight
@@ -104,5 +107,5 @@
      , file     = def &= argPos 0 &= typ "FILE"
   }
   &= program "BlogLiterately"
-  &= summary ("BlogLierately v0.4, (c) Robert Greayer 2008-2010, Brent Yorgey 2012\n" ++
+  &= summary ("BlogLierately v" ++ showVersion version ++ ", (c) Robert Greayer 2008-2010, Brent Yorgey 2012\n" ++
               "This program comes with ABSOLUTELY NO WARRANTY\n")
diff --git a/src/Text/BlogLiterately/Run.hs b/src/Text/BlogLiterately/Run.hs
--- a/src/Text/BlogLiterately/Run.hs
+++ b/src/Text/BlogLiterately/Run.hs
@@ -15,11 +15,14 @@
 -- 'blogLiteratelyWith' or 'blogLiteratelyCustom'.  For example:
 --
 -- > module Main where
+-- > import Text.BlogLiterately
+-- >
 -- > myCustomXF = Transform ...
--- > main = blogLiteratelyWith [myCustomXF]
+-- > main = blogLiteratelyWith [myCustomXF, centerImagesXF]
 --
--- See "Text.BlogLiterately.Transform" for examples of transforms and
--- help in creating your own.
+-- See "Text.BlogLiterately.Transform" for examples of transforms,
+-- additional transforms which are not enabled by default, and help in
+-- creating your own.
 --
 -----------------------------------------------------------------------------
 
@@ -44,15 +47,15 @@
 blogLiterately :: IO ()
 blogLiterately = blogLiteratelyCustom standardTransforms
 
--- | Like 'blogLiterately', but with the ability to specify custom
+-- | Like 'blogLiterately', but with the ability to specify additional
 -- 'Transform's which will be applied /after/ the standard ones.
 blogLiteratelyWith :: [Transform] -> IO ()
 blogLiteratelyWith ts = blogLiteratelyCustom (standardTransforms ++ ts)
 
 -- | Like 'blogLiterately', but with the ability to /replace/ the
---   standard 'Transform's with your own.  Use this to implement
---   custom interleaving orders of the standard transforms and your
---   own, to exclude some or all of the standard transforms, etc.
+--   standard 'Transform's.  Use this to implement custom interleaving
+--   orders of the standard transforms and your own, to exclude some
+--   or all of the standard transforms, etc.
 blogLiteratelyCustom :: [Transform] -> IO ()
 blogLiteratelyCustom ts = do
     bl <- cmdArgs blOpts
diff --git a/src/Text/BlogLiterately/Transform.hs b/src/Text/BlogLiterately/Transform.hs
--- a/src/Text/BlogLiterately/Transform.hs
+++ b/src/Text/BlogLiterately/Transform.hs
@@ -18,12 +18,19 @@
       Transform(..), runTransform, runTransforms
 
       -- * Standard transforms
+      -- $standard
+
     , wptexifyXF
     , ghciXF
     , imagesXF
     , highlightXF
     , standardTransforms
 
+      -- * Other transforms
+      -- $other
+
+    , centerImagesXF
+
       -- * Transforming documents
     , xformDoc
 
@@ -84,6 +91,14 @@
 runTransforms :: [Transform] -> BlogLiterately -> Kleisli IO Pandoc Pandoc
 runTransforms ts = foldr (>>>) (C.id) . T.traverse runTransform ts
 
+--------------------------------------------------
+-- Standard transforms
+--------------------------------------------------
+
+-- $standard
+-- These transforms are enabled by default in the standard
+-- BlogLiterately executable.
+
 -- | Format embedded LaTeX for WordPress (if the @wplatex@ flag is set).
 wptexifyXF :: Transform
 wptexifyXF = Transform (const (arr wpTeXify)) wplatex
@@ -107,6 +122,30 @@
 --   'wptexifyXF', 'ghciXF', 'imagesXF', 'highlightXF'.
 standardTransforms :: [Transform]
 standardTransforms = [wptexifyXF, ghciXF, imagesXF, highlightXF]
+
+--------------------------------------------------
+-- Other transforms
+--------------------------------------------------
+
+-- $other
+-- These transforms are not enabled by default.  To use them, see
+-- "Text.BlogLiterately.Run".
+
+-- | Center any images which occur in a paragraph by themselves.
+--   Inline images are not affected.
+centerImagesXF :: Transform
+centerImagesXF = Transform (const . arr $ centerImages) (const True)
+
+centerImages :: Pandoc -> Pandoc
+centerImages = bottomUp centerImage
+  where
+    centerImage :: [Block] -> [Block]
+    centerImage (img@(Para [Image altText (imgUrl, imgTitle)]) : bs) =
+        RawBlock "html" "<div style=\"text-align: center;\">"
+      : img
+      : RawBlock "html" "</div>"
+      : bs
+    centerImage bs = bs
 
 -- | Transform a complete input document string to an HTML output
 --   string, given a list of transformation passes.
