diff --git a/tests.py b/tests.py
index a27ec82ff60d4bb7af972cbfec64d897f3950662..d376249d0395cb0861f12d47417dde3dd6c85993 100644
--- a/tests.py
+++ b/tests.py
@@ -3,6 +3,7 @@ import numpy as np
 import os
 import shutil
 import pyfstat
+import lalpulsar
 
 
 class Test(unittest.TestCase):
@@ -25,14 +26,16 @@ class TestWriter(Test):
     def test_make_cff(self):
         Writer = pyfstat.Writer(self.label, outdir=self.outdir)
         Writer.make_cff()
-        self.assertTrue(os.path.isfile('./TestData/{}.cff'.format(self.label)))
+        self.assertTrue(os.path.isfile(
+            './{}/{}.cff'.format(self.outdir, self.label)))
 
     def test_run_makefakedata(self):
         Writer = pyfstat.Writer(self.label, outdir=self.outdir, duration=86400)
         Writer.make_cff()
         Writer.run_makefakedata()
         self.assertTrue(os.path.isfile(
-            './TestData/H-48_H1_1800SFT_TestWriter-700000000-86400.sft'))
+            './{}/H-48_H1_1800SFT_TestWriter-700000000-86400.sft'
+            .format(self.outdir)))
 
     def test_makefakedata_usecached(self):
         Writer = pyfstat.Writer(self.label, outdir=self.outdir, duration=86400)
@@ -56,7 +59,7 @@ class TestBunch(Test):
         self.assertTrue(b.x == 10)
 
 
-class TestPar(Test):
+class Test_par(Test):
     label = 'TestPar'
 
     def test(self):
@@ -73,7 +76,7 @@ class TestPar(Test):
                                     return_type='dict')
         self.assertTrue(par['x'] == 100)
         self.assertTrue(par['y'] == 10)
-        os.system('rm -r TestData')
+        os.system('rm -r {}'.format(self.outdir))
 
 
 class TestBaseSearchClass(Test):
@@ -120,17 +123,25 @@ class TestComputeFstat(Test):
 
     def test_run_computefstatistic_single_point(self):
         Writer = pyfstat.Writer(self.label, outdir=self.outdir, duration=86400,
-                                h0=1, sqrtSX=1)
+                                h0=1, sqrtSX=1, detectors='H1,L1')
         Writer.make_data()
         predicted_FS = Writer.predict_fstat()
 
-        search = pyfstat.ComputeFstat(
-            tref=Writer.tref,
+        search_H1 = pyfstat.ComputeFstat(
+            tref=Writer.tref, detectors='H1',
+            sftfilepattern='{}/*{}*sft'.format(Writer.outdir, Writer.label),
+            SSBprec=lalpulsar.SSBPREC_RELATIVISTIC)
+        FS = search_H1.get_fullycoherent_twoF(
+            Writer.tstart, Writer.tend, Writer.F0, Writer.F1, Writer.F2,
+            Writer.Alpha, Writer.Delta)
+        self.assertTrue(np.abs(predicted_FS-FS)/FS < 0.2)
+
+        search_H1L1 = pyfstat.ComputeFstat(
+            tref=Writer.tref, detectors='H1,L1',
             sftfilepattern='{}/*{}*sft'.format(Writer.outdir, Writer.label))
-        FS = search.get_fullycoherent_twoF(
+        FS = search_H1L1.get_fullycoherent_twoF(
             Writer.tstart, Writer.tend, Writer.F0, Writer.F1, Writer.F2,
             Writer.Alpha, Writer.Delta)
-        print predicted_FS, FS
         self.assertTrue(np.abs(predicted_FS-FS)/FS < 0.2)
 
     def run_computefstatistic_single_point_no_noise(self):
@@ -148,7 +159,7 @@ class TestComputeFstat(Test):
         print predicted_FS, FS
         self.assertTrue(np.abs(predicted_FS-FS)/FS < 0.2)
 
-    def test_injectSources_from_file(self):
+    def test_injectSources(self):
         Writer = pyfstat.Writer(self.label, outdir=self.outdir, add_noise=False,
                                 duration=86400, h0=1, sqrtSX=1)
         Writer.make_cff()
@@ -159,13 +170,79 @@ class TestComputeFstat(Test):
             minCoverFreq=28, maxCoverFreq=32, minStartTime=Writer.tstart,
             maxStartTime=Writer.tstart+Writer.duration,
             detectors=Writer.detectors)
-        FS = search.get_fullycoherent_twoF(
+        FS_from_file = search.get_fullycoherent_twoF(
             Writer.tstart, Writer.tend, Writer.F0, Writer.F1, Writer.F2,
             Writer.Alpha, Writer.Delta)
         Writer.make_data()
         predicted_FS = Writer.predict_fstat()
-        print predicted_FS, FS
-        self.assertTrue(np.abs(predicted_FS-FS)/FS < 0.2)
+        self.assertTrue(np.abs(predicted_FS-FS_from_file)/FS_from_file < 0.2)
+
+        injectSourcesdict = pyfstat.core.read_par(Writer.config_file_name)
+        injectSourcesdict['F0'] = injectSourcesdict['Freq']
+        injectSourcesdict['F1'] = injectSourcesdict['f1dot']
+        injectSourcesdict['F2'] = injectSourcesdict['f2dot']
+        search = pyfstat.ComputeFstat(
+            tref=Writer.tref, assumeSqrtSX=1, injectSources=injectSourcesdict,
+            minCoverFreq=28, maxCoverFreq=32, minStartTime=Writer.tstart,
+            maxStartTime=Writer.tstart+Writer.duration,
+            detectors=Writer.detectors)
+        FS_from_dict = search.get_fullycoherent_twoF(
+            Writer.tstart, Writer.tend, Writer.F0, Writer.F1, Writer.F2,
+            Writer.Alpha, Writer.Delta)
+        self.assertTrue(FS_from_dict == FS_from_file)
+
+
+class TestSemiCoherentSearch(Test):
+    label = "TestSemiCoherentSearch"
+
+    def test_get_semicoherent_twoF(self):
+        duration = 10*86400
+        Writer = pyfstat.Writer(
+            self.label, outdir=self.outdir, duration=duration, h0=1, sqrtSX=1)
+        Writer.make_data()
+
+        search = pyfstat.SemiCoherentSearch(
+            label=self.label, outdir=self.outdir, nsegs=2,
+            sftfilepattern='{}/*{}*sft'.format(Writer.outdir, Writer.label),
+            tref=Writer.tref, minStartTime=Writer.tstart,
+            maxStartTime=Writer.tend)
+
+        search.get_semicoherent_twoF(
+            Writer.F0, Writer.F1, Writer.F2, Writer.Alpha, Writer.Delta,
+            record_segments=True)
+
+        # Compute the predicted semi-coherent Fstat
+        minStartTime = Writer.tstart
+        maxStartTime = Writer.tend
+
+        Writer.maxStartTime = minStartTime + duration / 2.0
+        FSA = Writer.predict_fstat()
+
+        Writer.tstart = minStartTime + duration / 2.0
+        Writer.tend = maxStartTime
+        FSB = Writer.predict_fstat()
+
+        FSs = np.array([FSA, FSB])
+        diffs = (np.array(search.detStat_per_segment) - FSs) / FSs
+        self.assertTrue(np.all(diffs < 0.3))
+
+    def test_get_semicoherent_BSGL(self):
+        duration = 10*86400
+        Writer = pyfstat.Writer(
+            self.label, outdir=self.outdir, duration=duration,
+            detectors='H1,L1')
+        Writer.make_data()
+
+        search = pyfstat.SemiCoherentSearch(
+            label=self.label, outdir=self.outdir, nsegs=2,
+            sftfilepattern='{}/*{}*sft'.format(Writer.outdir, Writer.label),
+            tref=Writer.tref, minStartTime=Writer.tstart,
+            maxStartTime=Writer.tend, BSGL=True)
+
+        BSGL = search.get_semicoherent_twoF(
+            Writer.F0, Writer.F1, Writer.F2, Writer.Alpha, Writer.Delta,
+            record_segments=True)
+        self.assertTrue(BSGL > 0)
 
 
 class TestSemiCoherentGlitchSearch(Test):