diff --git a/hxt-regex-xmlschema.cabal b/hxt-regex-xmlschema.cabal
--- a/hxt-regex-xmlschema.cabal
+++ b/hxt-regex-xmlschema.cabal
@@ -1,5 +1,5 @@
 Name:                hxt-regex-xmlschema
-Version:             9.2.0.3
+Version:             9.2.0.7
 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.
@@ -61,7 +61,7 @@
 
   build-depends:     base               >= 4     && < 5
                    , bytestring         >= 0.10
-                   , hxt-charproperties >= 9     && < 10
+                   , hxt-charproperties >= 9
                    , parsec             >= 2.1   && < 4
                    , text               >= 0.10
 
diff --git a/src/Text/Regex/XMLSchema/Generic/Matching.hs b/src/Text/Regex/XMLSchema/Generic/Matching.hs
--- a/src/Text/Regex/XMLSchema/Generic/Matching.hs
+++ b/src/Text/Regex/XMLSchema/Generic/Matching.hs
@@ -244,7 +244,7 @@
     token1''    = token' re1 fcs
 
     -- token'   :: StringLike s => GenRegex s -> CharSet -> (s, Int) -> s -> [Either s s]
-    token' re' fcs' (uns, ! n) inp
+    token' re' fcs' (uns, !n) inp
       | nullS inp     = addUnmatched []
       | otherwise     = evalRes . splitWithRegexCS re' fcs' $ inp
       where
diff --git a/src/Text/Regex/XMLSchema/Generic/Regex.hs b/src/Text/Regex/XMLSchema/Generic/Regex.hs
--- a/src/Text/Regex/XMLSchema/Generic/Regex.hs
+++ b/src/Text/Regex/XMLSchema/Generic/Regex.hs
@@ -1,4 +1,5 @@
-{-# LANGUAGE ViewPatterns #-}
+{-# LANGUAGE CPP               #-}
+{-# LANGUAGE ViewPatterns      #-}
 {-# LANGUAGE FlexibleInstances #-}
 
 
@@ -22,7 +23,7 @@
 
 module Text.Regex.XMLSchema.Generic.Regex
     ( GenRegex
-      
+
     , mkZero
     , mkZero'
     , mkUnit
@@ -69,10 +70,15 @@
 where
 
 import Data.List        (intercalate)
-import Data.Monoid      ((<>))
 import Data.Set.CharSet
 import Data.String      (IsString(..))
 
+#if MIN_VERSION_base(4,13,0)
+#else
+import           Data.Monoid         ((<>))
+#endif
+
+
 import Text.Regex.XMLSchema.Generic.StringLike
 
 {-
@@ -109,7 +115,7 @@
                                       -- see splitWithRegex
 type SubexResults s
   = [(Label s, s)]
-    
+
 type Nullable s
   = (Bool, SubexResults s)
 
@@ -427,7 +433,7 @@
 mkCbr ss  e                             = Cbr ss e
 
 -- ------------------------------------------------------------
-                                  
+
 instance (StringLike s) => Show (GenRegex s) where
     show (Zero e)               = "{" ++ toString e ++ "}"
     show Unit                   = "()"
@@ -471,7 +477,7 @@
     show (Intl e1 e2)           = "(" ++ show e1 ++ "{:}" ++ show e2 ++ ")"
     show (Br  l     e)          = "({" ++ showL l ++ "}" ++ show e ++ ")"
     show (Obr l s n e)          = "({" ++ showL l ++ "=" ++ toString (takeS n s) ++ "}" ++ show e ++ ")"
-    show (Cbr ss e)             = "([" ++ intercalate "," (map (\ (l, s) -> showL l ++ "=" ++ toString s) ss) ++ "]"
+    show (Cbr ss e)             = "([" ++ intercalate "," (map (\ (l, s) -> showL l ++ "=" ++ (show $ toString s)) ss) ++ "]"
                                   ++ show e ++
                                   ")"
 
@@ -594,6 +600,11 @@
     d' e@(Star e1)          = mkSeq  (d' e1) e
     d' (Alt e1 e2)          = mkAlt  (d' e1) (d' e2)
     d' (Else e1 e2)         = mkElse (d' e1) (d' e2)
+
+    d' (Seq e1@(Br  l     e1') e2)
+      | nullable e1'        = mkAlt (mkSeq (d' e1) e2)  -- longest submatch first
+                                    (mkCbr [(l, emptyS)] (d' e2))
+
     d' (Seq e1@(Obr l s n e1') e2)
       | nu                  = mkAlt (mkSeq (d' e1) e2)
                                     (mkCbr ((l, takeS n s) : ws) (d' e2))
@@ -610,7 +621,7 @@
     d' (Exor e1 e2)         = mkExor  (d' e1) (d' e2)
     d' (Intl e1 e2)         = mkAlt   (mkInterleave (d' e1)     e2 )
                                       (mkInterleave     e1  (d' e2))
-                              
+
     d' (Br  l     e)        = d' (mkObr l inp 0 e)        -- a subex parse starts
     d' (Obr l s n e)        = mkObr l s (n + 1) (d' e)    -- a subex parse cont.
     d' (Cbr ss e)           = mkCbr ss (d' e)             -- the results of a subex parse
@@ -623,7 +634,7 @@
   where
     d' e@(Zero _)   = e   -- don't process whole input, parse has failed
     d' e@(Star Dot) = e   -- don't process input, derivative does not change
-    d' e            = delta inp' ( -- trc "delta1=" $
+    d' e            = delta inp' ( -- trc ("delta(" ++ show c ++ ")=") $
                                    delta1 c inp e)
 
 delta _empty e
@@ -726,4 +737,3 @@
   | otherwise = Nothing
 
 -- ------------------------------------------------------------
-
diff --git a/test/Date.hs b/test/Date.hs
--- a/test/Date.hs
+++ b/test/Date.hs
@@ -218,23 +218,23 @@
 
 -- must be extended for weekday or semester, if neccessay
 
-data DateVal       = DT  { _year   :: ! Int
-                         , _month  :: ! Int
-                         , _day    :: ! Int
-                         , _hour   :: ! Int
-                         , _min    :: ! Int
+data DateVal       = DT  { _year   :: !Int
+                         , _month  :: !Int
+                         , _day    :: !Int
+                         , _hour   :: !Int
+                         , _min    :: !Int
                          }
                      deriving (Eq, Show)
 
-data DateParse     = DP { _pre    ::   StringFct
-                        , _rep    ::   StringFct
-                        , _dat    :: ! DateVal
+data DateParse     = DP { _pre    ::  StringFct
+                        , _rep    ::  StringFct
+                        , _dat    :: !DateVal
                         }
 
 -- just a helper for result output
-data DateRep       = DR { _p ::   String
-                        , _r ::   String
-                        , _d :: ! DateVal
+data DateRep       = DR { _p ::  String
+                        , _r ::  String
+                        , _d :: !DateVal
                         }
                      deriving (Eq, Show)
 
