                                 }
 
                                 if let previousRangeWithoutMatch = rangeWithoutMatch {
-                                    if checkCondition(element: strongSelf) {
+                                    if !bailCondition(element: strongSelf) {
                                         matchFound(element: strongSelf, intersection: previousRangeWithoutMatch)
                                         rangeWithoutMatch = nil
                                     } else {

            }

            if let previousRangeWithoutMatch = rangeWithoutMatch {
                if checkCondition(element: self) {
                    matchFound(element: self, intersection: previousRangeWithoutMatch)
                    rangeWithoutMatch = nil
                } else {

                    let intersectionInChildCoordinates = NSRange(location: intersection.location - offset, length: intersection.length)

                    if let childElement = child as? ElementNode
                        where !bailCondition(element: childElement) {
                        
                        childElement.enumerateLowestElements(
                            intersectingRange: intersectionInChildCoordinates,
                            bailIf: bailCondition,
                            onMatchNotFound: { (range) in

                                if let previousRangeWithoutMatch = rangeWithoutMatch {
