                     let intersectionInChildCoordinates = NSRange(location: intersection.location - offset, length: intersection.length)
 
                     if let childElement = child as? ElementNode
-                        where checkCondition(element: childElement) {
+                        where !bailCondition(element: childElement) {
                         
                         childElement.enumerateLowestElements(
                             intersectingRange: intersectionInChildCoordinates,
-                            fulfillingCondition: checkCondition,
+                            bailIf: bailCondition,
                             onMatchNotFound: { (range) in
 
                                 if let previousRangeWithoutMatch = rangeWithoutMatch {

                                }

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

        /// - Returns: an array of child nodes and their intersection.  The intersection range is in
        ///         child coordinates.
        ///
        private func enumerateLowestElements(intersectingRange targetRange: NSRange, bailIf bailCondition: (element: ElementNode) -> Bool, onMatchNotFound matchNotFound: (range: NSRange) -> Void, onMatchFound matchFound: (element: ElementNode, intersection: NSRange) -> Void ) {
            
            var rangeWithoutMatch: NSRange?
            var offset = Int(0)
