diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -7,6 +7,13 @@
 The following is information about what major changes have gone into
 each release.
 
+Changes in 2999.15.0.1
+----------------------
+
+* Fixed bug where `canonicalise` and related functions did not
+  properly deal with attributes of a single node or edge within a
+  sub-graph.
+
 Changes in 2999.15.0.0
 ----------------------
 
diff --git a/Data/GraphViz/Algorithms.hs b/Data/GraphViz/Algorithms.hs
--- a/Data/GraphViz/Algorithms.hs
+++ b/Data/GraphViz/Algorithms.hs
@@ -209,7 +209,6 @@
                 then commonAttrs f
                 else const []
 
-
 -- Same as compare for lists, except shorter lists are GT
 compLists :: (Ord a) => [a] -> [a] -> Ordering
 compLists []     []     = EQ
@@ -225,7 +224,7 @@
 -- Return all attributes found in every value.
 commonAttrs         :: (a -> Attributes) -> [a] -> Attributes
 commonAttrs _ []  = []
-commonAttrs _ [_] = []
+commonAttrs f [a] = f a
 commonAttrs f xs  = Set.toList . foldr1 Set.intersection
                     $ map (Set.fromList . f) xs
 
diff --git a/Data/GraphViz/Attributes/Complete.hs b/Data/GraphViz/Attributes/Complete.hs
--- a/Data/GraphViz/Attributes/Complete.hs
+++ b/Data/GraphViz/Attributes/Complete.hs
@@ -1987,8 +1987,8 @@
 
 -- -----------------------------------------------------------------------------
 
--- | How to treat a node whose name is of the form @|edgelabel|*@" as a
---   special node representing an edge label.
+-- | How to treat a node whose name is of the form \"@|edgelabel|*@\"
+--   as a special node representing an edge label.
 data LabelScheme = NotEdgeLabel        -- ^ No effect
                  | CloseToCenter       -- ^ Make node close to center of neighbor
                  | CloseToOldCenter    -- ^ Make node close to old center of neighbor
diff --git a/graphviz.cabal b/graphviz.cabal
--- a/graphviz.cabal
+++ b/graphviz.cabal
@@ -1,5 +1,5 @@
 Name:               graphviz
-Version:            2999.15.0.0
+Version:            2999.15.0.1
 Stability:          Beta
 Synopsis:           Bindings to Graphviz for graph visualisation.
 Description: {
diff --git a/tests/Data/GraphViz/Testing/Instances/Canonical.hs b/tests/Data/GraphViz/Testing/Instances/Canonical.hs
--- a/tests/Data/GraphViz/Testing/Instances/Canonical.hs
+++ b/tests/Data/GraphViz/Testing/Instances/Canonical.hs
@@ -32,10 +32,10 @@
 instance (Eq n, Arbitrary n) => Arbitrary (DotStatements n) where
   arbitrary = sized (arbDS gaGraph True)
 
-  shrink ds@(DotStmts gas sgs ns es) = do gas' <- shrinkL gas
-                                          sgs' <- shrinkL sgs
-                                          ns' <- shrinkL ns
-                                          es' <- shrinkL es
+  shrink ds@(DotStmts gas sgs ns es) = do gas' <- shrink gas
+                                          sgs' <- shrink sgs
+                                          ns' <- shrink ns
+                                          es' <- shrink es
                                           returnCheck ds
                                             $ DotStmts gas' sgs' ns' es'
 
