diff --git a/examples/test/Main.hs b/examples/test/Main.hs
--- a/examples/test/Main.hs
+++ b/examples/test/Main.hs
@@ -46,6 +46,7 @@
 	    , ("[\0-\1114111]",		"\\a")
 	    , ("[\0-\1114111]|[0-9]",	"\\a")
 	    , ("[\0-\1114110]",		"[&#0;-&#1114110;]"	)
+            , ("[abc-[b]]",             "[ac]" )
 	    , ("a|b|c|d",		"[a-d]"	)
 	    , ("(a|b)|c",		"[a-c]"	)
 	    , ("a|(b|c)",		"[a-c]"	)
diff --git a/regex-xmlschema.cabal b/regex-xmlschema.cabal
--- a/regex-xmlschema.cabal
+++ b/regex-xmlschema.cabal
@@ -1,17 +1,25 @@
-name:          regex-xmlschema
-version:       0.1.3
-license:       BSD3
-license-file:  LICENSE
-maintainer:    Uwe Schmidt <uwe@fh-wedel.de>
-stability:     experimental
-category:      Text
-synopsis:      A regular expression library for W3C XML Schema regular expressions
-description:   This library supports full W3C XML Schema regular expressions inclusive all Unicode character sets and blocks. The complete grammar can be found under <http://www.w3.org/TR/xmlschema11-2/#regexs>. It is implemented by the technique of derivations of regular expressions. The W3C syntax is extended to support not only union of regular sets, but also intersection, set difference, exor. Matching of subexpressions is also supported. The library can be used for constricting lightweight scanners and tokenizers. It is a standalone library, no external regex libraries are used.
-homepage:      http://www.haskell.org/haskellwiki/Regular_expressions_for_XML_Schema
-copyright:     Copyright (c) 2009 Uwe Schmidt
-build-type:    Simple
-cabal-version: >=1.6
-tested-with:   GHC
+Name:          regex-xmlschema
+Version:       0.1.4
+Synopsis:      A regular expression library for W3C XML Schema regular expressions
+Description:   This library supports full W3C XML Schema regular expressions
+               inclusive all Unicode character sets and blocks.
+               The complete grammar can be found under <http://www.w3.org/TR/xmlschema11-2/#regexs>.
+               It is implemented by the technique of derivations of regular expressions.
+               The W3C syntax is extended to support not only union of regular sets,
+               but also intersection, set difference, exor.
+               Matching of subexpressions is also supported.
+               The library can be used for constricting lightweight scanners and tokenizers.
+               It is a standalone library, no external regex libraries are used.
+License:       BSD3
+License-file:  LICENSE
+Author:        Uwe Schmidt
+Maintainer:    Uwe Schmidt <uwe@fh-wedel.de>
+Stability:     experimental
+Category:      Text
+Homepage:      http://www.haskell.org/haskellwiki/Regular_expressions_for_XML_Schema
+Copyright:     Copyright (c) 2010 Uwe Schmidt
+Build-type:    Simple
+Cabal-version: >=1.6
 
 extra-source-files:
   examples/test/Main.hs
diff --git a/src/Text/Regex/XMLSchema/String/RegexParser.hs b/src/Text/Regex/XMLSchema/String/RegexParser.hs
--- a/src/Text/Regex/XMLSchema/String/RegexParser.hs
+++ b/src/Text/Regex/XMLSchema/String/RegexParser.hs
@@ -151,15 +151,15 @@
 quantifier      :: Regex -> Parser Regex
 quantifier r
     = ( do
-        char '?'
+        _ <- char '?'
         return $ mkOpt r )
       <|>
       ( do
-        char '*'
+        _ <- char '*'
         return $ mkStar r )
       <|>
       ( do
-        char '+'
+        _ <- char '+'
         return $ mkRep 1 r )
       <|>
       try ( do
@@ -180,7 +180,7 @@
 quantityRest    :: Regex -> Int -> Parser Regex
 quantityRest r lb
     = ( do
-        char ','
+        _ <- char ','
         ub <- many digit
         return ( if null ub
                  then mkRep lb r
@@ -227,7 +227,7 @@
 charClassEsc    :: Parser Regex
 charClassEsc
     = do
-      char '\\'
+      _ <- char '\\'
       ( singleCharEsc
         <|>
         multiCharEsc
@@ -297,7 +297,7 @@
 isBlock         :: Parser CharSet
 isBlock
     = do
-      string "Is"
+      _ <- string "Is"
       name <- many1 (satisfy legalChar)
       case lookup name codeBlocks of
         Just b  -> return $ uncurry rangeCS b
@@ -369,7 +369,7 @@
     where
     prop c1 cs2
         = do
-          char c1
+          _ <- char c1
           s2 <- option ""
                 ( do
                   c2 <- satisfy (`elem` cs2)
@@ -379,7 +379,7 @@
 complEsc        :: Parser Regex
 complEsc
     = do
-      char 'P'
+      _ <- char 'P'
       s <- between (char '{') (char '}') charProp
       return $ mkSym $ compCS s
 
@@ -396,7 +396,7 @@
            )
       s <- option (mkZero "")   -- charClassSub
            ( do
-             char '-'
+             _ <- char '-'
              charClassExpr
            )
       return $ mkDiff r s
@@ -417,26 +417,36 @@
 seRange
     = do
       c1 <- charOrEsc'
-      char '-'
+      _ <- char '-'
       c2 <- charOrEsc'
       return $ mkSymRng c1 c2
 
 charOrEsc'      :: Parser Char
 charOrEsc'
-    = satisfy (`notElem` "\\-[]")
+    = ( do
+        _ <- char '\\'
+        singleCharEsc'
+      )
       <|>
-      singleCharEsc'
+      satisfy (`notElem` "\\-[]")
 
 xmlCharIncDash  :: Parser Regex
 xmlCharIncDash
-    = do
-      c <- satisfy (`notElem` "\\[]")
-      return $ mkSym1 c
+    = try ( do				-- dash is only allowed if not followed by a [, else charGroup differences do not parse correctly
+            _ <- char '-'
+            notFollowedBy (char '[')
+            return $ mkSym1 '-'
+          )
+      <|>
+      ( do
+        c <- satisfy (`notElem` "-\\[]")
+        return $ mkSym1 c
+      )
 
 negCharGroup    :: Parser Regex
 negCharGroup
     = do
-      char '^'
+      _ <- char '^'
       r <- posCharGroup
       return $ mkDiff mkDot r
 
