diff --git a/Util/BlazeFromHtml.hs b/Util/BlazeFromHtml.hs
--- a/Util/BlazeFromHtml.hs
+++ b/Util/BlazeFromHtml.hs
@@ -36,7 +36,7 @@
 data CombinatorType = ParentCombinator
                     | LeafCombinator
                     | UnknownCombinator
-                    deriving (Show)
+                    deriving (Eq, Show)
 
 -- | Traverse the list of tags to produce an intermediate representation of the
 -- HTML tree.
@@ -58,11 +58,20 @@
                     _ -> makeTree variant ignore (tag' : stack) xs
                  p = Parent tag' (map (first toLower') attrs) inner
              in addHtml p t
-    -- The closing tag must match the stack.
-    TagClose tag -> if listToMaybe stack == Just (toLower' tag) || ignore
-        then (Block [], xs)
-        else error $  "Line " ++ show row ++ ": " ++ show tag ++ " closed but "
-                   ++ show stack ++ " should be closed instead."
+    -- The closing tag must match the stack. If it is a closing leaf, we can
+    -- ignore it
+    TagClose tag ->
+        let isLeafCombinator = combinatorType variant tag == LeafCombinator
+            matchesStack = listToMaybe stack == Just (toLower' tag)
+        in case (isLeafCombinator, matchesStack, ignore) of
+            -- It's a leaf combinator, don't care about this element
+            (True, _, _)          -> makeTree variant ignore stack xs
+            -- It's a parent and the stack doesn't match
+            (False, False, False) -> error $
+                "Line " ++ show row ++ ": " ++ show tag ++ " closed but "
+                        ++ show stack ++ " should be closed instead."
+            -- Stack might not match but we ignore it anyway
+            (False, _, _)         -> (Block [], xs)
     TagText text -> addHtml (Text text) xs
     TagComment comment -> addHtml (Comment comment) xs
     _ -> makeTree variant ignore stack xs
diff --git a/Util/GenerateHtmlCombinators.hs b/Util/GenerateHtmlCombinators.hs
--- a/Util/GenerateHtmlCombinators.hs
+++ b/Util/GenerateHtmlCombinators.hs
@@ -208,7 +208,7 @@
     , "--"
     , function        ++ " :: Html  -- ^ Inner HTML."
     , spaces function ++ " -> Html  -- ^ Resulting HTML."
-    , function        ++ " = Parent \"<" ++ tag
+    , function        ++ " = Parent \"" ++ tag ++ "\" \"<" ++ tag
                       ++ "\" \"</" ++ tag ++ ">\"" ++ modifier
     , "{-# INLINE " ++ function ++ " #-}"
     ]
@@ -234,7 +234,7 @@
     , "-- > <" ++ tag ++ " />"
     , "--"
     , function ++ " :: Html  -- ^ Resulting HTML."
-    , function ++ " = Leaf \"<" ++ tag ++ "\" " ++ end
+    , function ++ " = Leaf \"" ++ tag ++ "\" \"<" ++ tag ++ "\" " ++ end
     , "{-# INLINE " ++ function ++ " #-}"
     ]
   where
@@ -258,7 +258,8 @@
     , "--"
     , function        ++ " :: AttributeValue  -- ^ Attribute value."
     , spaces function ++ " -> Attribute       -- ^ Resulting attribute."
-    , function        ++ " = attribute \" " ++ name ++ "=\\\"\""
+    , function        ++ " = attribute \"" ++ name ++ "\" \" "
+                      ++ name ++ "=\\\"\""
     , "{-# INLINE " ++ function ++ " #-}"
     ]
   where
diff --git a/blaze-from-html.cabal b/blaze-from-html.cabal
--- a/blaze-from-html.cabal
+++ b/blaze-from-html.cabal
@@ -1,5 +1,5 @@
 Name:                blaze-from-html
-Version:             0.3.0.0
+Version:             0.3.1.0
 Synopsis:            Tool to convert HTML to BlazeHtml code.
 Description:         Tool that converts HTML files to Haskell code, ready to be
                      used with the BlazeHtml library.
