     
     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) {

        var items = [DetectorMatchItem]()
        let side: StripsSide = .back
        let directions: Set<SearchDirection> = [.backward, .forward]
        
        search(directions: directions, startTime: timeRecoilFront, minDeltaTime: 0, maxDeltaTime: criteria.recoilBackMaxTime, maxDeltaTimeBackward: criteria.recoilBackBackwardMaxTime, useCycleTime: false, updateCycle: false) { (event: Event, time: CUnsignedLongLong, deltaTime: CLongLong, stop: UnsafeMutablePointer<Bool>, _) in
            // Note: 'recoil' type must be always
            let type: SearchType = .recoil
            if self.isBack(event, type: type) {
                var store = self.criteria.searchRecoilBackByFact
                if !store {
                    let energy = self.getEnergy(event, type: type)
                    if energy >= self.criteria.recoilBackMinEnergy && energy <= self.criteria.recoilBackMaxEnergy {

                }
                if store {
                    self.storeFissionAlphaBack(event, match: self.fissionsAlpha2PerAct, type: t, deltaTime: deltaTime)
                    if byFact { // just stop on first one
                        stop.initialize(to: true)
                    }
                }
            }
        }
        fseek(file, position, SEEK_SET)
        if !byFact {
            fissionsAlpha2PerAct.matchFor(side: .back).filterItemsByMaxEnergy(maxStripsDelta: criteria.fissionAlpha2MaxDeltaStrips)
        }
    }
    
    // MARK: - Storage
