diff --git a/pyfstat/mcmc_based_searches.py b/pyfstat/mcmc_based_searches.py
index c03960500ded2331a7457d85166c80a3615bd174..41826f7c0d8f945b6dc8525b85ecfeedbfd7896e 100644
--- a/pyfstat/mcmc_based_searches.py
+++ b/pyfstat/mcmc_based_searches.py
@@ -110,7 +110,6 @@ class MCMCSearch(core.BaseSearchClass):
         asini='', period='s', ecc='', tp='', argp='')
     transform_dictionary = {}
 
-    @helper_functions.initializer
     def __init__(self, theta_prior, tref, label, outdir='data',
                  minStartTime=None, maxStartTime=None, sftfilepattern=None,
                  detectors=None, nsteps=[100, 100], nwalkers=100, ntemps=1,
@@ -120,6 +119,30 @@ class MCMCSearch(core.BaseSearchClass):
                  injectSources=None, assumeSqrtSX=None,
                  transientWindowType=None, tCWFstatMapVersion='lal'):
 
+        self.theta_prior = theta_prior
+        self.tref = tref
+        self.label = label
+        self.outdir = outdir
+        self.minStartTime = minStartTime
+        self.maxStartTime = maxStartTime
+        self.sftfilepattern = sftfilepattern
+        self.detectors = detectors
+        self.nsteps = nsteps
+        self.nwalkers = nwalkers
+        self.ntemps = ntemps
+        self.log10beta_min = log10beta_min
+        self.theta_initial = theta_initial
+        self.rhohatmax = rhohatmax
+        self.binary = binary
+        self.BSGL = BSGL
+        self.SSBprec = SSBprec
+        self.minCoverFreq = minCoverFreq
+        self.maxCoverFreq = maxCoverFreq
+        self.injectSources = injectSources
+        self.assumeSqrtSX = assumeSqrtSX
+        self.transientWindowType = transientWindowType
+        self.tCWFstatMapVersion = tCWFstatMapVersion
+
         if os.path.isdir(outdir) is False:
             os.mkdir(outdir)
         self._add_log_file()
@@ -1889,17 +1912,63 @@ class MCMCGlitchSearch(MCMCSearch):
 class MCMCSemiCoherentSearch(MCMCSearch):
     """ MCMC search for a signal using the semi-coherent ComputeFstat
 
-    See parent MCMCSearch for a list of all additional parameters, here we list
-    only the additional init parameters of this class.
-
     Parameters
     ----------
+    theta_prior: dict
+        Dictionary of priors and fixed values for the search parameters.
+        For each parameters (key of the dict), if it is to be held fixed
+        the value should be the constant float, if it is be searched, the
+        value should be a dictionary of the prior.
+    tref, minStartTime, maxStartTime: int
+        GPS seconds of the reference time, start time and end time. While tref
+        is requirede, minStartTime and maxStartTime default to None in which
+        case all available data is used.
+    label, outdir: str
+        A label and output directory (optional, defaults is `'data'`) to
+        name files
+    sftfilepattern: str, optional
+        Pattern to match SFTs using wildcards (*?) and ranges [0-9];
+        mutiple patterns can be given separated by colons.
+    detectors: str, optional
+        Two character reference to the detectors to use, specify None for no
+        contraint and comma separate for multiple references.
+    nsteps: list (2,), optional
+        Number of burn-in and production steps to take, [nburn, nprod]. See
+        `pyfstat.MCMCSearch.setup_initialisation()` for details on adding
+        initialisation steps.
+    nwalkers, ntemps: int, optional
+        The number of walkers and temperates to use in the parallel
+        tempered PTSampler.
+    log10beta_min float < 0, optional
+        The  log_10(beta) value, if given the set of betas passed to PTSampler
+        are generated from `np.logspace(0, log10beta_min, ntemps)` (given
+        in descending order to ptemcee).
+    theta_initial: dict, array, optional
+        A dictionary of distribution about which to distribute the
+        initial walkers about
+    rhohatmax: float, optional
+        Upper bound for the SNR scale parameter (required to normalise the
+        Bayes factor) - this needs to be carefully set when using the
+        evidence.
+    binary: bool, optional
+        If true, search over binary parameters
+    BSGL: bool, optional
+        If true, use the BSGL statistic
+    SSBPrec: int, optional
+        SSBPrec (SSB precision) to use when calling ComputeFstat
+    minCoverFreq, maxCoverFreq: float, optional
+        Minimum and maximum instantaneous frequency which will be covered
+        over the SFT time span as passed to CreateFstatInput
+    injectSources: dict, optional
+        If given, inject these properties into the SFT files before running
+        the search
+    assumeSqrtSX: float, optional
+        Don't estimate noise-floors, but assume (stationary) per-IFO sqrt{SX}
     nsegs: int
         The number of segments
 
     """
 
-    @helper_functions.initializer
     def __init__(self, theta_prior, tref, label, outdir='data',
                  minStartTime=None, maxStartTime=None, sftfilepattern=None,
                  detectors=None, nsteps=[100, 100], nwalkers=100, ntemps=1,
@@ -1909,6 +1978,29 @@ class MCMCSemiCoherentSearch(MCMCSearch):
                  injectSources=None, assumeSqrtSX=None,
                  nsegs=None):
 
+        self.theta_prior = theta_prior
+        self.tref = tref
+        self.label = label
+        self.outdir = outdir
+        self.minStartTime = minStartTime
+        self.maxStartTime = maxStartTime
+        self.sftfilepattern = sftfilepattern
+        self.detectors = detectors
+        self.nsteps = nsteps
+        self.nwalkers = nwalkers
+        self.ntemps = ntemps
+        self.log10beta_min = log10beta_min
+        self.theta_initial = theta_initial
+        self.rhohatmax = rhohatmax
+        self.binary = binary
+        self.BSGL = BSGL
+        self.SSBprec = SSBprec
+        self.minCoverFreq = minCoverFreq
+        self.maxCoverFreq = maxCoverFreq
+        self.injectSources = injectSources
+        self.assumeSqrtSX = assumeSqrtSX
+        self.nsegs = nsegs
+
         if os.path.isdir(outdir) is False:
             os.mkdir(outdir)
         self._add_log_file()
@@ -1975,10 +2067,128 @@ class MCMCSemiCoherentSearch(MCMCSearch):
 class MCMCFollowUpSearch(MCMCSemiCoherentSearch):
     """ A follow up procudure increasing the coherence time in a zoom
 
-    See parent MCMCSemiCoherentSearch for a list of all additional parameters
+    Parameters
+    ----------
+    theta_prior: dict
+        Dictionary of priors and fixed values for the search parameters.
+        For each parameters (key of the dict), if it is to be held fixed
+        the value should be the constant float, if it is be searched, the
+        value should be a dictionary of the prior.
+    tref, minStartTime, maxStartTime: int
+        GPS seconds of the reference time, start time and end time. While tref
+        is requirede, minStartTime and maxStartTime default to None in which
+        case all available data is used.
+    label, outdir: str
+        A label and output directory (optional, defaults is `'data'`) to
+        name files
+    sftfilepattern: str, optional
+        Pattern to match SFTs using wildcards (*?) and ranges [0-9];
+        mutiple patterns can be given separated by colons.
+    detectors: str, optional
+        Two character reference to the detectors to use, specify None for no
+        contraint and comma separate for multiple references.
+    nsteps: list (2,), optional
+        Number of burn-in and production steps to take, [nburn, nprod]. See
+        `pyfstat.MCMCSearch.setup_initialisation()` for details on adding
+        initialisation steps.
+    nwalkers, ntemps: int, optional
+        The number of walkers and temperates to use in the parallel
+        tempered PTSampler.
+    log10beta_min float < 0, optional
+        The  log_10(beta) value, if given the set of betas passed to PTSampler
+        are generated from `np.logspace(0, log10beta_min, ntemps)` (given
+        in descending order to ptemcee).
+    theta_initial: dict, array, optional
+        A dictionary of distribution about which to distribute the
+        initial walkers about
+    rhohatmax: float, optional
+        Upper bound for the SNR scale parameter (required to normalise the
+        Bayes factor) - this needs to be carefully set when using the
+        evidence.
+    binary: bool, optional
+        If true, search over binary parameters
+    BSGL: bool, optional
+        If true, use the BSGL statistic
+    SSBPrec: int, optional
+        SSBPrec (SSB precision) to use when calling ComputeFstat
+    minCoverFreq, maxCoverFreq: float, optional
+        Minimum and maximum instantaneous frequency which will be covered
+        over the SFT time span as passed to CreateFstatInput
+    injectSources: dict, optional
+        If given, inject these properties into the SFT files before running
+        the search
+    assumeSqrtSX: float, optional
+        Don't estimate noise-floors, but assume (stationary) per-IFO sqrt{SX}
+ 
+    Attributes
+    ----------
+    symbol_dictionary: dict
+        Key, val pairs of the parameters (i.e. `F0`, `F1`), to Latex math
+        symbols for plots
+    unit_dictionary: dict
+        Key, val pairs of the parameters (i.e. `F0`, `F1`), and the
+        units (i.e. `Hz`)
+    transform_dictionary: dict
+        Key, val pairs of the parameters (i.e. `F0`, `F1`), where the key is
+        itself a dictionary which can item `multiplier`, `subtractor`, or
+        `unit` by which to transform by and update the units.
 
     """
 
+    def __init__(self, theta_prior, tref, label, outdir='data',
+                 minStartTime=None, maxStartTime=None, sftfilepattern=None,
+                 detectors=None, nsteps=[100, 100], nwalkers=100, ntemps=1,
+                 log10beta_min=-5, theta_initial=None,
+                 rhohatmax=1000, binary=False, BSGL=False,
+                 SSBprec=None, minCoverFreq=None, maxCoverFreq=None,
+                 injectSources=None, assumeSqrtSX=None):
+
+        self.theta_prior = theta_prior
+        self.tref = tref
+        self.label = label
+        self.outdir = outdir
+        self.minStartTime = minStartTime
+        self.maxStartTime = maxStartTime
+        self.sftfilepattern = sftfilepattern
+        self.detectors = detectors
+        self.nsteps = nsteps
+        self.nwalkers = nwalkers
+        self.ntemps = ntemps
+        self.log10beta_min = log10beta_min
+        self.theta_initial = theta_initial
+        self.rhohatmax = rhohatmax
+        self.binary = binary
+        self.BSGL = BSGL
+        self.SSBprec = SSBprec
+        self.minCoverFreq = minCoverFreq
+        self.maxCoverFreq = maxCoverFreq
+        self.injectSources = injectSources
+        self.assumeSqrtSX = assumeSqrtSX
+        self.nsegs = None
+
+        if os.path.isdir(outdir) is False:
+            os.mkdir(outdir)
+        self._add_log_file()
+        logging.info(('Set-up MCMC semi-coherent search for model {} on data'
+                      '{}').format(
+            self.label, self.sftfilepattern))
+        self.pickle_path = '{}/{}_saved_data.p'.format(self.outdir, self.label)
+        self._unpack_input_theta()
+        self.ndim = len(self.theta_keys)
+        if self.log10beta_min:
+            self.betas = np.logspace(0, self.log10beta_min, self.ntemps)
+        else:
+            self.betas = None
+        if args.clean and os.path.isfile(self.pickle_path):
+            os.rename(self.pickle_path, self.pickle_path+".old")
+
+        self._log_input()
+
+        if self.nsegs:
+            self._set_likelihoodcoef()
+        else:
+            logging.info('Value `nsegs` not yet provided')
+
     def _get_data_dictionary_to_save(self):
         d = dict(nwalkers=self.nwalkers, ntemps=self.ntemps,
                  theta_keys=self.theta_keys, theta_prior=self.theta_prior,