1. Now error scoring of the expression is not evaluated by the worst score of one of its parts. I changed algorithm to "clever" behavior - i.e. while "Abraham" does not match "Ibragim", anyway "(Abraham,Lincoln)" matches "Ibragim Lincoln" because second part gives "compensation" due to perfect fitting and threshold for first part is raised.
Speaking technically, if there are consecutive elements (expr1,expr2...exprN), and they match with scores result1,result2...resultN, then total result is:
1 - ((1-result1)*(1-result2)*...*(resultN))^(1/N)
(it is just "geometric mean" of errors, if error is 1-result)
2. "Follow" now more correctly works with inner "Optional":
(harry,(?s),truman)
in sense that it checks what would be better - to include optional element or not (earlier it was included if its result was under threshold).
3. Also I changed "Both" element (=expr1,exrp2) so that it uses "Follow" element i.e. is equal to (^(expr1,expr2),(expr2,expr1)). It was important so that "Both" would use all changes made for "Follow".