This is the proposal to replace those "CharProperty constant nodes" with the lambda function. We were hoping having closure back then when working on those CharProperty classes, which ended up with those make()/clone(). Now it might be the time to replace it with what we wanted at the beginning. Here are the notes about the changes (1) pulled out the "broken" printNodeTree (for debugging) from the Pattern. This one does not work as expected for a while . I do have a working copy and have to put it in every time I need debug the engine. So now I replaced the printNoteTree with working one and putting it at a separate class j.u.regex.PrintPattern, which now can print out the clean and complete node tree of the pattern. For example, Pattern: [a-z0-9]+|ABCDEFG 0: 1: 2: 3: 4: 5: <-branch.separator-> 6: 7: 8: (2) the optimization for the greedy repetition of a "CharProperty", which parse the greedy repetition on a single "CharProperty", such as \p{IsGreek}+, or the most commonly used .* into a single/smooth loop node. from Pattern: \p{IsGreek}+ 0: 1: 2: