     
     fileprivate func findFissionAlpha2Back(_ position: Int) {
         let directions: Set<SearchDirection> = [.forward, .backward]
+        let byFact = self.criteria.searchFissionAlphaBack2ByFact
         search(directions: directions, startTime: secondEventTime, minDeltaTime: 0, maxDeltaTime: criteria.fissionAlphaMaxTime, maxDeltaTimeBackward: criteria.fissionAlphaBackBackwardMaxTime, useCycleTime: false, updateCycle: false) { (event: Event, time: CUnsignedLongLong, deltaTime: CLongLong, stop: UnsafeMutablePointer<Bool>, position: Int) in
             let t = self.criteria.secondParticleBackType
             let isBack = self.isBack(event, type: t)
             if isBack {
-                var store = self.criteria.searchFissionAlphaBack2ByFact
+                var store = byFact
                 if !store {
                     let energy = self.getEnergy(event, type: t)
                     if self.isEventStripNearToFirstFissionAlpha(event, maxDelta: Int(self.criteria.fissionAlpha2MaxDeltaStrips), side: .back) && (energy >= self.criteria.fissionAlpha2BackMinEnergy && energy <= self.criteria.fissionAlpha2BackMaxEnergy) {

                if store {
                    let item = self.focalDetectorMatchItemFrom(event, type: type, deltaTime: deltaTime, side: side)
                    items.append(item)
                }
            }
        }
        
        fseek(self.file, Int(position), SEEK_SET)
        
        if let item = DetectorMatch.getItemWithMaxEnergy(items) {
            recoilsPerAct.append(item, side: side)
            return true

        let match = fissionsAlphaPerAct
        let type = criteria.startParticleBackType
        let directions: Set<SearchDirection> = [.backward, .forward]
        let byFact = self.criteria.searchFissionAlphaBackByFact
        search(directions: directions, startTime: startEventTime, minDeltaTime: 0, maxDeltaTime: criteria.fissionAlphaMaxTime, maxDeltaTimeBackward: criteria.fissionAlphaBackBackwardMaxTime, useCycleTime: false, updateCycle: false) { (event: Event, time: CUnsignedLongLong, deltaTime: CLongLong, stop: UnsafeMutablePointer<Bool>, _) in
            if self.isBack(event, type: type) {
                var store = byFact
                if !store {
                    let energy = self.getEnergy(event, type: type)
                    if energy >= self.criteria.fissionAlphaBackMinEnergy && energy <= self.criteria.fissionAlphaBackMaxEnergy {
                        store = true
                    }
                }
                if store {
                    self.storeFissionAlphaBack(event, match: match, type: type, deltaTime: deltaTime)
                    if byFact { // just stop on first one
                        stop.initialize(to: true)
                    }
                }
            }
        }
        if !byFact {
            match.matchFor(side: .back).filterItemsByMaxEnergy(maxStripsDelta: criteria.recoilBackMaxDeltaStrips)
        }
    }
    
    fileprivate func findRecoil() {
