diff --git a/src/Text/ParserCombinators/UU/CHANGELOG.hs b/src/Text/ParserCombinators/UU/CHANGELOG.hs
--- a/src/Text/ParserCombinators/UU/CHANGELOG.hs
+++ b/src/Text/ParserCombinators/UU/CHANGELOG.hs
@@ -2,6 +2,10 @@
 --
 -- export of constructors of LineCol and LineColPos exported
 --
+-- Version 2.7.4
+--
+-- Made some abstrcat interpretation a bit simpler, and made comparing lengths less trict. Some times the abstrcat interpretation would <<loop>>
+--
 -- Version 2.7.3.3
 --
 -- cured a problem with loosing priority information when applying semantic actions, final cure is probably to intrduce a real priority mechanism
diff --git a/src/Text/ParserCombinators/UU/Core.hs b/src/Text/ParserCombinators/UU/Core.hs
--- a/src/Text/ParserCombinators/UU/Core.hs
+++ b/src/Text/ParserCombinators/UU/Core.hs
@@ -215,7 +215,9 @@
 
 instance Alternative (P   state) where 
   P ap np  pe pl <|> P aq nq qe ql 
-    =  let (rl, b) = trace' "calling natMin from <|>" (nat_min pl ql 0)
+    =  let pl' = maybe pl (const (Zero pl)) pe
+           ql' = maybe ql (const (Zero ql)) qe
+           (rl, b) = trace' "calling natMin from <|>" (nat_min pl' ql' 0)
            Nothing `alt` q  = q
            p       `alt` Nothing = p
            Just p  `alt` Just q  = Just (p <|>q)
@@ -305,7 +307,7 @@
     in mkParser nnp pe pl
 
 -- |  For the precise functioning of the `amb` combinators see the paper cited in the "Text.ParserCombinators.UU.README";
---    it converts an ambiguous parser into a parser which returns a list of possible recognitions,
+--    it converts an ambiguous parser into a parser which returns a list of all possible recognitions,
 amb :: P st a -> P st [a]
 amb (P _  np  pe pl) 
  = let  combinevalues  :: Steps [(a,r)] -> Steps ([a],r)
@@ -606,15 +608,10 @@
 nat_add :: Nat -> Nat -> Nat
 nat_add (Zero _)        r           = trace' "Zero in add\n"        r
 nat_add (Succ l)        r           = trace' "Succ in add\n"        (Succ (nat_add l r))
-nat_add l               (Zero _)    = trace' "Zero in right operand of add" l
-nat_add l               (Succ r)    = trace' "Succ in right operand of add" (Succ (nat_add l r))
 nat_add Infinite        _           = trace' "Infinite in add\n"    Infinite
-nat_add l               Infinite    = trace' "Infinite in add\n"    Infinite
 nat_add Hole            _           = Hole
-nat_add _               Hole        = Hole
-nat_add Unspecified     Unspecified = Unspecified
-nat_add Unspecified     r           = trace' "Unspecified in add\n" (nat_add r Unspecified)
-
+nat_add Unspecified     r           = trace' "Unspecified in add\n" Unspecified
+ 
 
 
 trace' :: String -> b -> b
diff --git a/src/Text/ParserCombinators/UU/Demo/MergeAndPermute.hs b/src/Text/ParserCombinators/UU/Demo/MergeAndPermute.hs
--- a/src/Text/ParserCombinators/UU/Demo/MergeAndPermute.hs
+++ b/src/Text/ParserCombinators/UU/Demo/MergeAndPermute.hs
@@ -46,7 +46,7 @@
 -- 
 -- The 'a' at the right hand side can b any of the three 'a'-s in the input:
 --
--- >>>   run ((,)    <$> pAtLeast 3 pA <||> pAtMost 3 pB)                              "aabbbb"
+-- >>>   run ((,)    <$> pAtLeast 3 pA <||> pAtMost 3 pB)                              "ababbb"
 --  Result: (["a","a","a"],["b","b","b"])
 --  Correcting steps: 
 --    Deleted   'b' at position LineColPos 0 5 5 expecting 'a'
@@ -82,15 +82,15 @@
 --  Result: (["a","a"],["b","b"])
 -- 
 
-run_demos :: IO ()
-run_demos =  do DEMOG (((,,) <$> two pA <||> three pB <||> pBetween 2 4 pC ), "cababbcccc")
+show_demos :: IO ()
+show_demos = do DEMOG (((,,) <$> two pA <||> three pB <||> pBetween 2 4 pC ), "cababbcccc")
                 DEMO  ((amb (mkParserM ((,) <$> pmMany ((,) <$>  pA <*> pC) <||> pmMany pB)))  , "aabbcaabbccc")
                 DEMOG ((pmMany(pABC))                                                          , "a2a1b1b2c2a3b3c1c3")
                 DEMOG (((,)    <$> pBetween 2 3 pA <||> pBetween 1 2 pB)                       , "abba")  
                 DEMOG (((,)    <$> pBetween 2 3 pA <||> pBetween 1 2 pB)                       , "bba")
                 DEMO ((amb (mkParserM( ((,)    <$> pBetween 2 3 pA <||> pBetween 1 2 pA))))    , "aaa")
                 putStr "-- The 'a' at the right hand side can b any of the three 'a'-s in the input\n"
-                DEMOG (((,)    <$> pAtLeast 3 pA <||> pAtMost 3 pB)                            , "aabbbb")  
+                DEMOG (((,)    <$> pAtLeast 3 pA <||> pAtMost 3 pB)                            , "ababbb")  
                 DEMOG (((,)    <$> pSome pA <||> pMany pB)                                     , "abba")       
                 DEMOG (((,)    <$> pSome pA <||> pMany pB)                                     , "abba")           
                 DEMOG (((,)    <$> pSome pA <||> pMany pB)                                     , "")         
diff --git a/uu-parsinglib.cabal b/uu-parsinglib.cabal
--- a/uu-parsinglib.cabal
+++ b/uu-parsinglib.cabal
@@ -1,5 +1,5 @@
 Name:                uu-parsinglib
-Version:             2.7.3.4
+Version:             2.7.4
 Build-Type:          Simple
 License:             MIT
 Copyright:           S Doaitse Swierstra 
