diff --git a/Changelog b/Changelog
--- a/Changelog
+++ b/Changelog
@@ -7,6 +7,13 @@
 The following is information about what major changes have gone into
 each release.
 
+Changes in 2999.12.0.3
+----------------------
+
+* Fixes various mistakes in the Haddock documentation that slipped
+  through (either in the `String -> Text` conversion or adding new
+  modules and not checking their documentation thoroughly enough).
+
 Changes in 2999.12.0.2
 ----------------------
 
diff --git a/Data/GraphViz.hs b/Data/GraphViz.hs
--- a/Data/GraphViz.hs
+++ b/Data/GraphViz.hs
@@ -128,17 +128,17 @@
      > checkDirectednessVis :: (Graph gr, Ord el) => gr nl el -> DotGraph Node
      > checkDirectednessVis = setDirectedness graphToDot nonClusteredParams
 
-   * Clustering nodes based upon whether they are even or odd.  We have
-     the option of either constructing a @GraphvizParams@ directly, or
-     using @'blankParams'@.  Going with the latter to avoid setting
-     @'isDirected'@.
+   * Clustering nodes based upon whether they are even or odd.  We
+     have the option of either constructing a @GraphvizParams@
+     directly, or using @'blankParams'@.  Using the latter to avoid
+     setting @'isDirected'@:
 
      > evenOdd :: (Graph gr, Ord el) => gr Int el -> DotGraph Node
      > evenOdd = setDirectedness graphToDot params
      >   where
      >     params = blankParams { globalAttributes = []
      >                          , clusterBy        = clustBy
-     >                          , clusterID        = Just . Int
+     >                          , clusterID        = Int
      >                          , fmtCluster       = clFmt
      >                          , fmtNode          = const []
      >                          , fmtEdge          = const []
@@ -158,9 +158,10 @@
 --   after clustering the nodes have a label of type @l@ (which may or
 --   may not be the same as @nl@).
 --
---   The tuples ins the function types represent labelled nodes (for
+--   The tuples in the function types represent labelled nodes (for
 --   @(n,nl)@ and @(n,l)@) and labelled edges (@(n,n,el)@; the value
 --   @(f,t,ftl)@ is an edge from @f@ to @l@ with a label of @ftl@).
+--   These correspond to 'LNode' and 'LEdge' in FGL graphs.
 --
 --   The clustering in 'clusterBy' can be to arbitrary depth.
 data GraphvizParams n nl el cl l
diff --git a/Data/GraphViz/Attributes.hs b/Data/GraphViz/Attributes.hs
--- a/Data/GraphViz/Attributes.hs
+++ b/Data/GraphViz/Attributes.hs
@@ -291,7 +291,7 @@
 arrowTo = ArrowHead
 
 -- | How to draw the arrow at the node the edge is coming from.
---   Requires either @'edgeEnds' 'Back'@ or @'EdgeEnds' 'Both'@.
+--   Requires either @'edgeEnds' 'Back'@ or @'edgeEnds' 'Both'@.
 arrowFrom :: Arrow -> Attribute
 arrowFrom = ArrowTail
 
diff --git a/Data/GraphViz/Attributes/ColorScheme.hs b/Data/GraphViz/Attributes/ColorScheme.hs
--- a/Data/GraphViz/Attributes/ColorScheme.hs
+++ b/Data/GraphViz/Attributes/ColorScheme.hs
@@ -16,14 +16,13 @@
 
 -- -----------------------------------------------------------------------------
 
--- | This represents the color schemes that Graphviz accepts.  As
---   mentioned above, these are /not/ used for actual parsing or
---   printing.
+-- | This represents the color schemes that Graphviz accepts.
 data ColorScheme = X11
                  | Brewer BrewerScheme
                  deriving (Eq, Ord, Show, Read)
 
--- | The value of the depends on the name.
+-- | Specify which colour pallete and how many colours it has.  Note
+--   the allowed values for the different 'BrewerName's.
 data BrewerScheme = BScheme BrewerName Word8
                   deriving (Eq, Ord, Show, Read)
 
diff --git a/Data/GraphViz/Attributes/Colors.hs b/Data/GraphViz/Attributes/Colors.hs
--- a/Data/GraphViz/Attributes/Colors.hs
+++ b/Data/GraphViz/Attributes/Colors.hs
@@ -1973,9 +1973,9 @@
                           ]
 
 -- | Attempt to convert a 'Color' into a 'Colour' value with an alpha
---   channel.  The use of 'Maybe' is because 'BrewerColor' values
---   cannot be converted without knowing which actual 'BrewerName' and
---   level color scheme is being used.
+--   channel.  The use of 'Maybe' is because the RGB values of the
+--   'BrewerColor's haven't been stored here (primarily for licensing
+--   reasons).
 toColour                :: Color -> Maybe (AlphaColour Double)
 toColour (RGB r g b)    = Just . opaque $ sRGB24 r g b
 toColour (RGBA r g b a) = Just . withOpacity (sRGB24 r g b) $ toOpacity a
diff --git a/Data/GraphViz/Commands/IO.hs b/Data/GraphViz/Commands/IO.hs
--- a/Data/GraphViz/Commands/IO.hs
+++ b/Data/GraphViz/Commands/IO.hs
@@ -136,7 +136,7 @@
 runCommand :: (PrintDotRepr dg n)
               => String           -- ^ Command to run
               -> [String]         -- ^ Command-line arguments
-              -> (Handle -> IO a) -- ^ Obtaining the output
+              -> (Handle -> IO a) -- ^ Obtaining the output; should be strict.
               -> dg n
               -> IO a
 runCommand cmd args hf dg
diff --git a/Data/GraphViz/PreProcessing.hs b/Data/GraphViz/PreProcessing.hs
--- a/Data/GraphViz/PreProcessing.hs
+++ b/Data/GraphViz/PreProcessing.hs
@@ -5,7 +5,7 @@
    License     : 3-Clause BSD-style
    Maintainer  : Ivan.Miljenovic@gmail.com
 
-   "Real life" Dot code contains various items that are not directly
+   \"Real life\" Dot code contains various items that are not directly
    parseable by this library.  This module defines the 'preProcess'
    function to remove these components, which include:
 
@@ -16,8 +16,8 @@
      * Split lines (by inserting a @\\@ the rest of that \"line\" is
        continued on the next line).
 
-     * 'String's concatenated together using @\"...\" + \"...\"@;
-       these are concatenated into one big 'String'.
+     * 'Text's concatenated together using @\"...\" + \"...\"@; these
+       are concatenated into one big 'Text'.
 -}
 module Data.GraphViz.PreProcessing(preProcess) where
 
diff --git a/Data/GraphViz/Printing.hs b/Data/GraphViz/Printing.hs
--- a/Data/GraphViz/Printing.hs
+++ b/Data/GraphViz/Printing.hs
@@ -22,13 +22,16 @@
    The Dot language specification specifies that any identifier is in
    one of four forms:
 
-       * Any string of alphabetic ([a-zA-Z\200-\377]) characters, underscores ('_') or digits ([0-9]), not beginning with a digit;
+       * Any string of alphabetic ([a-zA-Z\\200-\\377]) characters,
+         underscores ('_') or digits ([0-9]), not beginning with a
+         digit;
 
        * a number [-]?(.[0-9]+ | [0-9]+(.[0-9]*)? );
 
-       * any double-quoted string (\"...\") possibly containing escaped quotes (\\\");
+       * any double-quoted string (\"...\") possibly containing
+         escaped quotes (\\\");
 
-       * an HTML string (<...>).
+       * an HTML string (\<...\>).
 
    (Note that the first restriction is referring to a byte-by-byte
    comparison using octal values; when using UTF-8 this corresponds to
diff --git a/Data/GraphViz/Types/Canonical.hs b/Data/GraphViz/Types/Canonical.hs
--- a/Data/GraphViz/Types/Canonical.hs
+++ b/Data/GraphViz/Types/Canonical.hs
@@ -37,7 +37,7 @@
    >                                                                                                                   , color LightGray
    >                                                                                                                   , textLabel "process #1"]
    >                                                                                                      , NodeAttrs [style filled, color White]]}
-   >                                                                                       , subGraphs = []
+   >                                                                                        , subGraphs = []
    >                                                                                        , nodeStmts = [ DotNode "a0" []
    >                                                                                                      , DotNode "a1" []
    >                                                                                                      , DotNode "a2" []
diff --git a/Data/GraphViz/Types/Graph.hs b/Data/GraphViz/Types/Graph.hs
--- a/Data/GraphViz/Types/Graph.hs
+++ b/Data/GraphViz/Types/Graph.hs
@@ -32,21 +32,21 @@
    converting existing Dot graphs (via 'fromDotRepr').  However, one
    way of constructing the sample graph would be:
 
-setID (Str "G")
-. setStrictness False
-. setIsDirected True
-. setClusterAttributes (Int 0) [GraphAttrs [style filled, color LightGray, textLabel "process #1"], NodeAttrs [style filled, color White]]
-. setClusterAttributes (Int 1) [ GraphAttrs [textLabel "process #2", color Blue], NodeAttrs [style filled]]
-$ composeList [ Cntxt "a0"    (Just $ Int 0)   []               [("a3",[]),("start",[])] [("a1",[])]
-              , Cntxt "a1"    (Just $ Int 0)   []               []                       [("a2",[]),("b3",[])]
-              , Cntxt "a2"    (Just $ Int 0)   []               []                       [("a3",[])]
-              , Cntxt "a3"    (Just $ Int 0)   []               [("b2",[])]              [("end",[])]
-              , Cntxt "b0"    (Just $ Int 1)   []               [("start",[])]           [("b1",[])]
-              , Cntxt "b1"    (Just $ Int 1)   []               []                       [("b2",[])]
-              , Cntxt "b2"    (Just $ Int 1)   []               []                       [("b3",[])]
-              , Cntxt "b3"    (Just $ Int 1)   []               []                       [("end",[])]
-              , Cntxt "end"   Nothing          [shape MSquare]  []                       []
-              , Cntxt "start" Nothing          [shape MDiamond] []                       []]
+   > setID (Str "G")
+   > . setStrictness False
+   > . setIsDirected True
+   > . setClusterAttributes (Int 0) [GraphAttrs [style filled, color LightGray, textLabel "process #1"], NodeAttrs [style filled, color White]]
+   > . setClusterAttributes (Int 1) [ GraphAttrs [textLabel "process #2", color Blue], NodeAttrs [style filled]]
+   > $ composeList [ Cntxt "a0"    (Just $ Int 0)   []               [("a3",[]),("start",[])] [("a1",[])]
+   >               , Cntxt "a1"    (Just $ Int 0)   []               []                       [("a2",[]),("b3",[])]
+   >               , Cntxt "a2"    (Just $ Int 0)   []               []                       [("a3",[])]
+   >               , Cntxt "a3"    (Just $ Int 0)   []               [("b2",[])]              [("end",[])]
+   >               , Cntxt "b0"    (Just $ Int 1)   []               [("start",[])]           [("b1",[])]
+   >               , Cntxt "b1"    (Just $ Int 1)   []               []                       [("b2",[])]
+   >               , Cntxt "b2"    (Just $ Int 1)   []               []                       [("b3",[])]
+   >               , Cntxt "b3"    (Just $ Int 1)   []               []                       [("end",[])]
+   >               , Cntxt "end"   Nothing          [shape MSquare]  []                       []
+   >               , Cntxt "start" Nothing          [shape MDiamond] []                       []]
 
  -}
 module Data.GraphViz.Types.Graph
@@ -593,13 +593,21 @@
 
 -- | Convert a canonical Dot graph to a graph-based one.  This assumes
 --   that the canonical graph is the same format as returned by
---   'toCanonical'.  The \"unsafeness\" is that all nodes are assumed
---   to be explicitly listed precisely once, and that only edges found
---   in the root graph are considered.  If this isn't the case, use
---   'fromCanonical' instead.
+--   'toCanonical'.  The \"unsafeness\" is that:
 --
---   The 'graphToDot' function from "Data.GraphViz" produces output
---   suitable for this function.
+--   * All clusters must have a unique identifier ('unAnonymise' can
+--     be used to make sure all clusters /have/ an identifier, but it
+--     doesn't ensure uniqueness).
+--
+--   * All nodes are assumed to be explicitly listed precisely once
+--
+--   * Only edges found in the root graph are considered.
+--
+--   If this isn't the case, use 'fromCanonical' instead.
+--
+--   The 'graphToDot' and 'graphElemsToDot' functions from
+--   "Data.GraphViz" produces output suitable for this function
+--   (assuming all clusters are provided with a unique identifier).
 unsafeFromCanonical :: (Ord n) => C.DotGraph n -> DotGraph n
 unsafeFromCanonical dg = DG { strictGraph   = C.strictGraph dg
                             , directedGraph = dirGraph
diff --git a/graphviz.cabal b/graphviz.cabal
--- a/graphviz.cabal
+++ b/graphviz.cabal
@@ -1,5 +1,5 @@
 Name:               graphviz
-Version:            2999.12.0.2
+Version:            2999.12.0.3
 Stability:          Beta
 Synopsis:           Bindings to Graphviz for graph visualisation.
 Description: {
