diff --git a/src/Text/HTML/Tagchup/Parser/Combinator.hs b/src/Text/HTML/Tagchup/Parser/Combinator.hs
--- a/src/Text/HTML/Tagchup/Parser/Combinator.hs
+++ b/src/Text/HTML/Tagchup/Parser/Combinator.hs
@@ -1,9 +1,9 @@
 module Text.HTML.Tagchup.Parser.Combinator (
    Parser.T, Full, Emitting, Fallible, Plain,
-   char, dropSpaces, getPos,
+   char, voidChar, dropSpaces, getPos,
    many, many1, manyS, many1S, manyNull, many1Null, many0toN, many1toN,
    many1Satisfy, manySatisfy, readUntil,
-   satisfy, string,
+   satisfy, string, voidString,
    emit, modifyEmission,
    eval, run, write, gets,
    withDefault, allowFail, allowEmit,
@@ -145,6 +145,17 @@
    (Monoid output, Stream.C input) =>
    String -> Parser.T input output Maybe String
 string = allowEmit . mapM char
+
+
+voidChar ::
+   (Monoid output, Stream.C input) =>
+   Char -> Parser.T input output Maybe ()
+voidChar c = fmap (const ()) $ char c
+
+voidString ::
+   (Monoid output, Stream.C input) =>
+   String -> Parser.T input output Maybe ()
+voidString = allowEmit . mapM_ voidChar
 
 
 readUntil ::
diff --git a/src/Text/HTML/Tagchup/Parser/Tag.hs b/src/Text/HTML/Tagchup/Parser/Tag.hs
--- a/src/Text/HTML/Tagchup/Parser/Tag.hs
+++ b/src/Text/HTML/Tagchup/Parser/Tag.hs
@@ -2,10 +2,10 @@
 
 import Text.HTML.Tagchup.Parser.Combinator
    (allowFail, withDefault,
-    char, dropSpaces, getPos,
+    voidChar, dropSpaces, getPos,
     many, many0toN, many1toN,
     many1Satisfy, readUntil,
-    satisfy, string,
+    satisfy, voidString,
     emit, modifyEmission, )
 
 import qualified Text.HTML.Tagchup.Parser.Combinator as Parser
@@ -68,7 +68,7 @@
        omitClose = liftM (\t -> (t, Nothing))
    pos <- getPos
    mplus
-      (do char '<'
+      (do voidChar '<'
           allowFail $ withDefault
              (msum $
                 omitClose (parseSpecialTag pos) :
@@ -108,7 +108,7 @@
                modifyEmission (restrictWarnings 10) $ many parseAttribute
             liftM ((,) tag) $ withDefault
                (do closePos <- getPos
-                   string "/>"
+                   voidString "/>"
                    allowFail $ liftM Just $ returnTag closePos (Tag.Close name))
                (do junkPos <- getPos
                    readUntilTerm
@@ -123,7 +123,7 @@
    (Stream.C source, Name.Tag name) =>
    Position.T -> Parser source (PosTag.T name sink)
 parseCloseTag pos =
-   do char '/'
+   do voidChar '/'
       name <- parseName
       allowFail $
          do tag <- returnTag pos (Tag.Close name)
@@ -141,13 +141,13 @@
    (Stream.C source, Name.Tag name) =>
    Position.T -> Parser source (PosTag.T name sink)
 parseSpecialTag pos =
-   do char '!'
+   do voidChar '!'
       msum $
-       (do string "--"
+       (do voidString "--"
            allowFail $ readUntilTerm
               (\ cmt -> returnTag pos (Tag.Comment cmt))
               "Unterminated comment" "-->") :
-       (do string TagName.cdataString
+       (do voidString TagName.cdataString
            allowFail $ readUntilTerm
               (\ cdata -> returnTag pos (Tag.cdata cdata))
               "Unterminated cdata" "]]>") :
@@ -164,7 +164,7 @@
     Name.Attribute name, Name.Tag name) =>
    Position.T -> Parser source (PosTag.T name sink)
 parseProcessingTag pos =
-   do char '?'
+   do voidChar '?'
       name <- parseName
       allowFail $
          do dropSpaces
@@ -199,7 +199,7 @@
    do dropSpaces
       value <-
          withDefault
-            (string "=" >> allowFail (dropSpaces >> parseValue))
+            (voidString "=" >> allowFail (dropSpaces >> parseValue))
             (return mempty)
       dropSpaces
       return $ Attr.Cons name value
@@ -266,11 +266,11 @@
    (Stream.C source, StringType sink) =>
    String -> Char -> Parser source sink
 parseQuoted termMsg quote =
-   char quote >>
+   voidChar quote >>
    (allowFail $
     do str <- parseString (quote/=)
        withDefault
-          (char quote >> return ())
+          (voidChar quote)
           (do termPos <- getPos
               emitWarning termPos termMsg)
        return str)
@@ -379,7 +379,7 @@
             withDefault
               (do ent <-
                      mplus
-                        (do char '#'
+                        (do voidChar '#'
                             digits <- allowFail $ many0toN 10 (satisfy isAlphaNum)
                                -- exclude ';', '"', '<'
                                -- include 'x'
@@ -391,7 +391,7 @@
                                (HTMLEntity.numberToChar digits))
                         (liftM ((:[]) . HTMLChar.EntityRef) $
                          many1toN 10 (satisfy isAlphaNum))
-                  char ';'
+                  voidChar ';'
                   return ent)
               (emitWarning pos "Non-terminated entity reference" >>
                return [HTMLChar.Unicode '&'])
@@ -421,13 +421,13 @@
             withDefault
               (do ent <-
                      mplus
-                        (char '#' >>
+                        (voidChar '#' >>
                          liftM HTMLChar.CharRef
                             (mplus
-                               (char 'x' >> liftM readHex (many1toN 8 (satisfy isHexDigit)))
+                               (voidChar 'x' >> liftM readHex (many1toN 8 (satisfy isHexDigit)))
                                (liftM read (many1toN 10 (satisfy isDigit)))))
                         (liftM HTMLChar.EntityRef $ many1toN 10 (satisfy isAlphaNum))
-                  char ';'
+                  voidChar ';'
                   return [ent])
               (emitWarning pos "Ill formed entity" >>
                return [HTMLChar.Unicode '&'])
diff --git a/src/Text/HTML/Tagchup/Process.hs b/src/Text/HTML/Tagchup/Process.hs
--- a/src/Text/HTML/Tagchup/Process.hs
+++ b/src/Text/HTML/Tagchup/Process.hs
@@ -24,7 +24,6 @@
 import Control.Monad.Trans.State (State, put, get, evalState, )
 import Data.Traversable (traverse, )
 
-import qualified Data.Char as Char
 import           Data.List.HT (viewL, )
 import           Data.Maybe (fromMaybe, mapMaybe, )
 import           Control.Monad.HT ((<=<), )
diff --git a/tagchup.cabal b/tagchup.cabal
--- a/tagchup.cabal
+++ b/tagchup.cabal
@@ -1,5 +1,5 @@
 Name:           tagchup
-Version:        0.4.0.1
+Version:        0.4.0.2
 License:        GPL
 License-File:   LICENSE
 Author:         Henning Thielemann <tagchup@henning-thielemann.de>
@@ -38,7 +38,7 @@
 Source-Repository this
    Type:     darcs
    Location: http://code.haskell.org/~thielema/tagchup/
-   Tag:      0.4.0.1
+   Tag:      0.4.0.2
 
 Flag buildExamples
    description: Build example executables
@@ -55,7 +55,7 @@
       transformers >=0.2 && <0.3,
       explicit-exception >=0.1 && <0.2,
       bytestring >=0.9.0.1 && <0.10,
-      containers >=0.1 && <0.4,
+      containers >=0.1 && <0.5,
       data-accessor >=0.2 && <0.3,
       utility-ht >=0.0.1 && <0.1,
       base >=3 && <5
@@ -80,6 +80,8 @@
 Executable tagchuptest
    If !flag(buildTests)
      Buildable: False
+   If impl(ghc >= 6.12)
+     GHC-Options: -rtsopts
    GHC-Options:    -Wall
    Hs-Source-Dirs: src, example
    Other-Modules:  Text.HTML.Tagchup.Test
