         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) {
-                let energy = self.getEnergy(event, type: type)
-                if self.criteria.searchFissionAlphaBackByFact || (energy >= self.criteria.fissionAlphaBackMinEnergy && energy <= self.criteria.fissionAlphaBackMaxEnergy) {
+                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)
-                }
-            }
-        }
-        match.matchFor(side: .back).filterItemsByMaxEnergy(maxStripsDelta: criteria.recoilBackMaxDeltaStrips)
+                    if byFact { // just stop on first one
+                        stop.initialize(to: true)
+                    }
+                }
+            }
+        }
+        if !byFact {
+            match.matchFor(side: .back).filterItemsByMaxEnergy(maxStripsDelta: criteria.recoilBackMaxDeltaStrips)
+        }
     }
     
     fileprivate func findRecoil() {

                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

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