diff --git a/pyfstat/core.py b/pyfstat/core.py
index 23652e098730448948bcb74bddeba02049e0b4bb..95dd66b4a680e91eb8520dfad6c82affd4fb16ad 100755
--- a/pyfstat/core.py
+++ b/pyfstat/core.py
@@ -917,39 +917,45 @@ class SemiCoherentSearch(BaseSearchClass, ComputeFstat):
         detStat = 0
         if record_segments:
             self.detStat_per_segment = []
-        for tstart, tend in zip(self.tboundaries[:-1], self.tboundaries[1:]):
-            self.windowRange.t0 = int(tstart)  # TYPE UINT4
-            self.windowRange.tau = int(tend - tstart)  # TYPE UINT4
 
-            FS = lalpulsar.ComputeTransientFstatMap(
-                self.FstatResults.multiFatoms[0], self.windowRange, False)
-
-            if self.BSGL is False:
-                d_detStat = 2*FS.F_mn.data[0][0]
-            else:
-                FstatResults_single = copy.copy(self.FstatResults)
-                FstatResults_single.lenth = 1
-                FstatResults_single.data = self.FstatResults.multiFatoms[0].data[0]
-                FS0 = lalpulsar.ComputeTransientFstatMap(
-                    FstatResults_single.multiFatoms[0], self.windowRange, False)
-                FstatResults_single.data = self.FstatResults.multiFatoms[0].data[1]
-                FS1 = lalpulsar.ComputeTransientFstatMap(
-                    FstatResults_single.multiFatoms[0], self.windowRange, False)
-
-                self.twoFX[0] = 2*FS0.F_mn.data[0][0]
-                self.twoFX[1] = 2*FS1.F_mn.data[0][0]
-                log10_BSGL = lalpulsar.ComputeBSGL(
-                        2*FS.F_mn.data[0][0], self.twoFX, self.BSGLSetup)
-                d_detStat = log10_BSGL/np.log10(np.exp(1))
-            if np.isnan(d_detStat):
-                logging.debug('NaNs in semi-coherent twoF treated as zero')
-                d_detStat = 0
+        self.windowRange.tau = int(self.Tcoh)  # TYPE UINT4
+        for tstart in self.tboundaries[:-1]:
+            d_detStat = self._get_per_segment_det_stat(tstart)
             detStat += d_detStat
             if record_segments:
                 self.detStat_per_segment.append(d_detStat)
 
         return detStat
 
+    def _get_per_segment_det_stat(self, tstart):
+        self.windowRange.t0 = int(tstart)  # TYPE UINT4
+
+        FS = lalpulsar.ComputeTransientFstatMap(
+            self.FstatResults.multiFatoms[0], self.windowRange, False)
+
+        if self.BSGL is False:
+            d_detStat = 2*FS.F_mn.data[0][0]
+        else:
+            FstatResults_single = copy.copy(self.FstatResults)
+            FstatResults_single.lenth = 1
+            FstatResults_single.data = self.FstatResults.multiFatoms[0].data[0]
+            FS0 = lalpulsar.ComputeTransientFstatMap(
+                FstatResults_single.multiFatoms[0], self.windowRange, False)
+            FstatResults_single.data = self.FstatResults.multiFatoms[0].data[1]
+            FS1 = lalpulsar.ComputeTransientFstatMap(
+                FstatResults_single.multiFatoms[0], self.windowRange, False)
+
+            self.twoFX[0] = 2*FS0.F_mn.data[0][0]
+            self.twoFX[1] = 2*FS1.F_mn.data[0][0]
+            log10_BSGL = lalpulsar.ComputeBSGL(
+                    2*FS.F_mn.data[0][0], self.twoFX, self.BSGLSetup)
+            d_detStat = log10_BSGL/np.log10(np.exp(1))
+        if np.isnan(d_detStat):
+            logging.debug('NaNs in semi-coherent twoF treated as zero')
+            d_detStat = 0
+
+        return d_detStat
+
 
 class SemiCoherentGlitchSearch(BaseSearchClass, ComputeFstat):
     """ A semi-coherent glitch search