diff --git a/bilby/core/likelihood.py b/bilby/core/likelihood.py
index 2f7933a392080d540106abb1811e5f2376f4e801..efc8d580cf9567d876e5f2de198e333635efc054 100644
--- a/bilby/core/likelihood.py
+++ b/bilby/core/likelihood.py
@@ -73,7 +73,7 @@ class ZeroLikelihood(Likelihood):
     """
 
     def __init__(self, likelihood):
-        Likelihood.__init__(self, dict.fromkeys(likelihood.parameters))
+        super(ZeroLikelihood, self).__init__(dict.fromkeys(likelihood.parameters))
         self.parameters = likelihood.parameters
         self._parent = likelihood
 
@@ -105,7 +105,7 @@ class Analytical1DLikelihood(Likelihood):
 
     def __init__(self, x, y, func):
         parameters = infer_parameters_from_function(func)
-        Likelihood.__init__(self, dict.fromkeys(parameters))
+        super(Analytical1DLikelihood, self).__init__(dict.fromkeys(parameters))
         self.x = x
         self.y = y
         self._func = func
@@ -185,7 +185,7 @@ class GaussianLikelihood(Analytical1DLikelihood):
             to that for `x` and `y`.
         """
 
-        Analytical1DLikelihood.__init__(self, x=x, y=y, func=func)
+        super(GaussianLikelihood, self).__init__(x=x, y=y, func=func)
         self.sigma = sigma
 
         # Check if sigma was provided, if not it is a parameter
@@ -246,7 +246,7 @@ class PoissonLikelihood(Analytical1DLikelihood):
             fixed value is given).
         """
 
-        Analytical1DLikelihood.__init__(self, x=x, y=y, func=func)
+        super(PoissonLikelihood, self).__init__(x=x, y=y, func=func)
 
     def log_likelihood(self):
         rate = self.func(self.x, **self.model_parameters)
@@ -297,7 +297,7 @@ class ExponentialLikelihood(Analytical1DLikelihood):
             value is given). The model should return the expected mean of
             the exponential distribution for each data point.
         """
-        Analytical1DLikelihood.__init__(self, x=x, y=y, func=func)
+        super(ExponentialLikelihood, self).__init__(x=x, y=y, func=func)
 
     def log_likelihood(self):
         mu = self.func(self.x, **self.model_parameters)
@@ -352,7 +352,7 @@ class StudentTLikelihood(Analytical1DLikelihood):
             Set the scale of the distribution. If not given then this defaults
             to 1, which specifies a standard (central) Student's t-distribution
         """
-        Analytical1DLikelihood.__init__(self, x=x, y=y, func=func)
+        super(StudentTLikelihood, self).__init__(x=x, y=y, func=func)
 
         self.nu = nu
         self.sigma = sigma
@@ -413,7 +413,7 @@ class JointLikelihood(Likelihood):
             likelihoods to be combined parsed as arguments
         """
         self.likelihoods = likelihoods
-        Likelihood.__init__(self, parameters={})
+        super(JointLikelihood, self).__init__(parameters={})
         self.__sync_parameters()
 
     def __sync_parameters(self):
diff --git a/bilby/core/prior.py b/bilby/core/prior.py
index 20e3185cce0e82058a198e50a318de12791b1de0..87337d2959e0b32eb55f14c7166adca75d1e5344 100644
--- a/bilby/core/prior.py
+++ b/bilby/core/prior.py
@@ -38,7 +38,7 @@ class PriorDict(OrderedDict):
             Function to convert between sampled parameters and constraints.
             Default is no conversion.
         """
-        OrderedDict.__init__(self)
+        super(PriorDict, self).__init__()
         if isinstance(dictionary, dict):
             self.from_dictionary(dictionary)
         elif type(dictionary) is str:
@@ -886,8 +886,8 @@ class Constraint(Prior):
 
     def __init__(self, minimum, maximum, name=None, latex_label=None,
                  unit=None):
-        Prior.__init__(self, minimum=minimum, maximum=maximum, name=name,
-                       latex_label=latex_label, unit=unit)
+        super(Constraint, self).__init__(minimum=minimum, maximum=maximum, name=name,
+                                         latex_label=latex_label, unit=unit)
 
     def prob(self, val):
         return (val > self.minimum) & (val < self.maximum)
@@ -913,8 +913,8 @@ class DeltaFunction(Prior):
             See superclass
 
         """
-        Prior.__init__(self, name=name, latex_label=latex_label, unit=unit,
-                       minimum=peak, maximum=peak)
+        super(DeltaFunction, self).__init__(name=name, latex_label=latex_label, unit=unit,
+                                            minimum=peak, maximum=peak)
         self.peak = peak
 
     def rescale(self, val):
@@ -973,9 +973,9 @@ class PowerLaw(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, latex_label=latex_label,
-                       minimum=minimum, maximum=maximum, unit=unit,
-                       boundary=boundary)
+        super(PowerLaw, self).__init__(name=name, latex_label=latex_label,
+                                       minimum=minimum, maximum=maximum, unit=unit,
+                                       boundary=boundary)
         self.alpha = alpha
 
     def rescale(self, val):
@@ -1041,14 +1041,11 @@ class PowerLaw(Prior):
 
     def cdf(self, val):
         if self.alpha == -1:
-            _cdf = (
-                np.log(val / self.minimum) /
-                np.log(self.maximum / self.minimum))
+            _cdf = (np.log(val / self.minimum) /
+                    np.log(self.maximum / self.minimum))
         else:
-            _cdf = np.atleast_1d(
-                val**(self.alpha + 1) - self.minimum**(self.alpha + 1)
-            ) / (
-                self.maximum**(self.alpha + 1) - self.minimum**(self.alpha + 1))
+            _cdf = np.atleast_1d(val ** (self.alpha + 1) - self.minimum ** (self.alpha + 1)) / \
+                (self.maximum ** (self.alpha + 1) - self.minimum ** (self.alpha + 1))
         _cdf = np.minimum(_cdf, 1)
         _cdf = np.maximum(_cdf, 0)
         return _cdf
@@ -1075,9 +1072,9 @@ class Uniform(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, latex_label=latex_label,
-                       minimum=minimum, maximum=maximum, unit=unit,
-                       boundary=boundary)
+        super(Uniform, self).__init__(name=name, latex_label=latex_label,
+                                      minimum=minimum, maximum=maximum, unit=unit,
+                                      boundary=boundary)
 
     def rescale(self, val):
         """
@@ -1153,8 +1150,8 @@ class LogUniform(PowerLaw):
         boundary: str
             See superclass
         """
-        PowerLaw.__init__(self, name=name, latex_label=latex_label, unit=unit,
-                          minimum=minimum, maximum=maximum, alpha=-1, boundary=boundary)
+        super(LogUniform, self).__init__(name=name, latex_label=latex_label, unit=unit,
+                                         minimum=minimum, maximum=maximum, alpha=-1, boundary=boundary)
         if self.minimum <= 0:
             logger.warning('You specified a uniform-in-log prior with minimum={}'.format(self.minimum))
 
@@ -1185,9 +1182,9 @@ class SymmetricLogUniform(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, latex_label=latex_label,
-                       minimum=minimum, maximum=maximum, unit=unit,
-                       boundary=boundary)
+        super(SymmetricLogUniform, self).__init__(name=name, latex_label=latex_label,
+                                                  minimum=minimum, maximum=maximum, unit=unit,
+                                                  boundary=boundary)
 
     def rescale(self, val):
         """
@@ -1223,9 +1220,8 @@ class SymmetricLogUniform(Prior):
         -------
         float: Prior probability of val
         """
-        return (
-            np.nan_to_num(0.5 / np.abs(val) / np.log(self.maximum / self.minimum)) *
-            self.is_in_prior_range(val))
+        return (np.nan_to_num(0.5 / np.abs(val) / np.log(self.maximum / self.minimum)) *
+                self.is_in_prior_range(val))
 
     def ln_prob(self, val):
         """Return the logarithmic prior probability of val
@@ -1263,8 +1259,8 @@ class Cosine(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, latex_label=latex_label, unit=unit,
-                       minimum=minimum, maximum=maximum, boundary=boundary)
+        super(Cosine, self).__init__(name=name, latex_label=latex_label, unit=unit,
+                                     minimum=minimum, maximum=maximum, boundary=boundary)
 
     def rescale(self, val):
         """
@@ -1318,8 +1314,8 @@ class Sine(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, latex_label=latex_label, unit=unit,
-                       minimum=minimum, maximum=maximum, boundary=boundary)
+        super(Sine, self).__init__(name=name, latex_label=latex_label, unit=unit,
+                                   minimum=minimum, maximum=maximum, boundary=boundary)
 
     def rescale(self, val):
         """
@@ -1372,7 +1368,7 @@ class Gaussian(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, latex_label=latex_label, unit=unit, boundary=boundary)
+        super(Gaussian, self).__init__(name=name, latex_label=latex_label, unit=unit, boundary=boundary)
         self.mu = mu
         self.sigma = sigma
 
@@ -1417,31 +1413,11 @@ class Gaussian(Prior):
         return -0.5 * ((self.mu - val) ** 2 / self.sigma ** 2 + np.log(2 * np.pi * self.sigma ** 2))
 
     def cdf(self, val):
-        return (1 - erf((self.mu - val) / 2**0.5 / self.sigma)) / 2
+        return (1 - erf((self.mu - val) / 2 ** 0.5 / self.sigma)) / 2
 
 
 class Normal(Gaussian):
-
-    def __init__(self, mu, sigma, name=None, latex_label=None, unit=None, boundary=None):
-        """A synonym for the Gaussian distribution.
-
-        Parameters
-        ----------
-        mu: float
-            Mean of the Gaussian prior
-        sigma: float
-            Width/Standard deviation of the Gaussian prior
-        name: str
-            See superclass
-        latex_label: str
-            See superclass
-        unit: str
-            See superclass
-        boundary: str
-            See superclass
-        """
-        Gaussian.__init__(self, mu=mu, sigma=sigma, name=name, latex_label=latex_label,
-                          unit=unit, boundary=boundary)
+    """A synonym for the  Gaussian distribution. """
 
 
 class TruncatedGaussian(Prior):
@@ -1471,8 +1447,8 @@ class TruncatedGaussian(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, latex_label=latex_label, unit=unit,
-                       minimum=minimum, maximum=maximum, boundary=boundary)
+        super(TruncatedGaussian, self).__init__(name=name, latex_label=latex_label, unit=unit,
+                                                minimum=minimum, maximum=maximum, boundary=boundary)
         self.mu = mu
         self.sigma = sigma
 
@@ -1508,8 +1484,8 @@ class TruncatedGaussian(Prior):
         -------
         float: Prior probability of val
         """
-        return np.exp(-(self.mu - val) ** 2 / (2 * self.sigma ** 2)) / \
-            (2 * np.pi) ** 0.5 / self.sigma / self.normalisation * self.is_in_prior_range(val)
+        return np.exp(-(self.mu - val) ** 2 / (2 * self.sigma ** 2)) / (2 * np.pi) ** 0.5 \
+            / self.sigma / self.normalisation * self.is_in_prior_range(val)
 
     def cdf(self, val):
         _cdf = (erf((val - self.mu) / 2 ** 0.5 / self.sigma) - erf(
@@ -1520,33 +1496,7 @@ class TruncatedGaussian(Prior):
 
 
 class TruncatedNormal(TruncatedGaussian):
-
-    def __init__(self, mu, sigma, minimum, maximum, name=None,
-                 latex_label=None, unit=None, boundary=None):
-        """A synonym for the TruncatedGaussian distribution.
-
-        Parameters
-        ----------
-        mu: float
-            Mean of the Gaussian prior
-        sigma:
-            Width/Standard deviation of the Gaussian prior
-        minimum: float
-            See superclass
-        maximum: float
-            See superclass
-        name: str
-            See superclass
-        latex_label: str
-            See superclass
-        unit: str
-            See superclass
-        boundary: str
-            See superclass
-        """
-        TruncatedGaussian.__init__(self, mu=mu, sigma=sigma, minimum=minimum,
-                                   maximum=maximum, name=name, latex_label=latex_label,
-                                   unit=unit, boundary=boundary)
+    """A synonym for the TruncatedGaussian distribution."""
 
 
 class HalfGaussian(TruncatedGaussian):
@@ -1566,31 +1516,13 @@ class HalfGaussian(TruncatedGaussian):
         boundary: str
             See superclass
         """
-        TruncatedGaussian.__init__(self, 0., sigma, minimum=0., maximum=np.inf,
-                                   name=name, latex_label=latex_label,
-                                   unit=unit, boundary=boundary)
+        super(HalfGaussian, self).__init__(mu=0., sigma=sigma, minimum=0., maximum=np.inf,
+                                           name=name, latex_label=latex_label,
+                                           unit=unit, boundary=boundary)
 
 
 class HalfNormal(HalfGaussian):
-    def __init__(self, sigma, name=None, latex_label=None, unit=None, boundary=None):
-        """A synonym for the HalfGaussian distribution.
-
-        Parameters
-        ----------
-        sigma: float
-            See superclass
-        name: str
-            See superclass
-        latex_label: str
-            See superclass
-        unit: str
-            See superclass
-        boundary: str
-            See superclass
-        """
-        HalfGaussian.__init__(self, sigma=sigma, name=name,
-                              latex_label=latex_label, unit=unit,
-                              boundary=boundary)
+    """A synonym for the HalfGaussian distribution."""
 
 
 class LogNormal(Prior):
@@ -1614,8 +1546,8 @@ class LogNormal(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, minimum=0., latex_label=latex_label,
-                       unit=unit, boundary=boundary)
+        super(LogNormal, self).__init__(name=name, minimum=0., latex_label=latex_label,
+                                        unit=unit, boundary=boundary)
 
         if sigma <= 0.:
             raise ValueError("For the LogGaussian prior the standard deviation must be positive")
@@ -1665,28 +1597,7 @@ class LogNormal(Prior):
 
 
 class LogGaussian(LogNormal):
-    def __init__(self, mu, sigma, name=None, latex_label=None, unit=None, boundary=None):
-        """Synonym of LogNormal prior
-
-        https://en.wikipedia.org/wiki/Log-normal_distribution
-
-        Parameters
-        ----------
-        mu: float
-            Mean of the Gaussian prior
-        sigma:
-            Width/Standard deviation of the Gaussian prior
-        name: str
-            See superclass
-        latex_label: str
-            See superclass
-        unit: str
-            See superclass
-        boundary: str
-            See superclass
-        """
-        LogNormal.__init__(self, mu=mu, sigma=sigma, name=name,
-                           latex_label=latex_label, unit=unit, boundary=boundary)
+    """Synonym of LogNormal prior."""
 
 
 class Exponential(Prior):
@@ -1706,8 +1617,8 @@ class Exponential(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, minimum=0., latex_label=latex_label,
-                       unit=unit, boundary=boundary)
+        super(Exponential, self).__init__(name=name, minimum=0., latex_label=latex_label,
+                                          unit=unit, boundary=boundary)
         self.mu = mu
 
     def rescale(self, val):
@@ -1776,7 +1687,7 @@ class StudentT(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, latex_label=latex_label, unit=unit, boundary=boundary)
+        super(StudentT, self).__init__(name=name, latex_label=latex_label, unit=unit, boundary=boundary)
 
         if df <= 0. or scale <= 0.:
             raise ValueError("For the StudentT prior the number of degrees of freedom and scale must be positive")
@@ -1863,8 +1774,8 @@ class Beta(Prior):
         self._beta = beta
         self._minimum = minimum
         self._maximum = maximum
-        Prior.__init__(self, minimum=minimum, maximum=maximum, name=name,
-                       latex_label=latex_label, unit=unit, boundary=boundary)
+        super(Beta, self).__init__(minimum=minimum, maximum=maximum, name=name,
+                                   latex_label=latex_label, unit=unit, boundary=boundary)
         self._set_dist()
 
     def rescale(self, val):
@@ -1991,7 +1902,7 @@ class Logistic(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, latex_label=latex_label, unit=unit, boundary=boundary)
+        super(Logistic, self).__init__(name=name, latex_label=latex_label, unit=unit, boundary=boundary)
 
         if scale <= 0.:
             raise ValueError("For the Logistic prior the scale must be positive")
@@ -2062,7 +1973,7 @@ class Cauchy(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, latex_label=latex_label, unit=unit, boundary=boundary)
+        super(Cauchy, self).__init__(name=name, latex_label=latex_label, unit=unit, boundary=boundary)
 
         if beta <= 0.:
             raise ValueError("For the Cauchy prior the scale must be positive")
@@ -2112,28 +2023,7 @@ class Cauchy(Prior):
 
 
 class Lorentzian(Cauchy):
-    def __init__(self, alpha, beta, name=None, latex_label=None, unit=None, boundary=None):
-        """Synonym for the Cauchy distribution
-
-        https://en.wikipedia.org/wiki/Cauchy_distribution
-
-        Parameters
-        ----------
-        alpha: float
-            Location parameter
-        beta: float
-            Scale parameter
-        name: str
-            See superclass
-        latex_label: str
-            See superclass
-        unit: str
-            See superclass
-        boundary: str
-            See superclass
-        """
-        Cauchy.__init__(self, alpha=alpha, beta=beta, name=name,
-                        latex_label=latex_label, unit=unit, boundary=boundary)
+    """Synonym for the Cauchy distribution"""
 
 
 class Gamma(Prior):
@@ -2157,8 +2047,8 @@ class Gamma(Prior):
         boundary: str
             See superclass
         """
-        Prior.__init__(self, name=name, minimum=0., latex_label=latex_label,
-                       unit=unit, boundary=boundary)
+        super(Gamma, self).__init__(name=name, minimum=0., latex_label=latex_label,
+                                    unit=unit, boundary=boundary)
 
         if k <= 0 or theta <= 0:
             raise ValueError("For the Gamma prior the shape and scale must be positive")
@@ -2232,8 +2122,8 @@ class ChiSquared(Gamma):
         if nu <= 0 or not isinstance(nu, int):
             raise ValueError("For the ChiSquared prior the number of degrees of freedom must be a positive integer")
 
-        Gamma.__init__(self, name=name, k=nu / 2., theta=2.,
-                       latex_label=latex_label, unit=unit, boundary=boundary)
+        super(ChiSquared, self).__init__(name=name, k=nu / 2., theta=2.,
+                                         latex_label=latex_label, unit=unit, boundary=boundary)
 
     @property
     def nu(self):
@@ -2290,8 +2180,8 @@ class Interped(Prior):
         self.__all_interpolated = interp1d(x=xx, y=yy, bounds_error=False, fill_value=0)
         minimum = float(np.nanmax(np.array((min(xx), minimum))))
         maximum = float(np.nanmin(np.array((max(xx), maximum))))
-        Prior.__init__(self, name=name, latex_label=latex_label, unit=unit,
-                       minimum=minimum, maximum=maximum, boundary=boundary)
+        super(Interped, self).__init__(name=name, latex_label=latex_label, unit=unit,
+                                       minimum=minimum, maximum=maximum, boundary=boundary)
         self._update_instance()
 
     def __eq__(self, other):
@@ -2411,9 +2301,9 @@ class FromFile(Interped):
         try:
             self.id = file_name
             xx, yy = np.genfromtxt(self.id).T
-            Interped.__init__(self, xx=xx, yy=yy, minimum=minimum,
-                              maximum=maximum, name=name, latex_label=latex_label,
-                              unit=unit, boundary=boundary)
+            super(FromFile, self).__init__(xx=xx, yy=yy, minimum=minimum,
+                                           maximum=maximum, name=name, latex_label=latex_label,
+                                           unit=unit, boundary=boundary)
         except IOError:
             logger.warning("Can't load {}.".format(self.id))
             logger.warning("Format should be:")
@@ -2450,7 +2340,7 @@ class FermiDirac(Prior):
         .. [1] M. Pitkin, M. Isi, J. Veitch & G. Woan, `arXiv:1705.08978v1
            <https:arxiv.org/abs/1705.08978v1>`_, 2017.
         """
-        Prior.__init__(self, name=name, latex_label=latex_label, unit=unit, minimum=0.)
+        super(FermiDirac, self).__init__(name=name, latex_label=latex_label, unit=unit, minimum=0.)
 
         self.sigma = sigma
 
@@ -2488,8 +2378,8 @@ class FermiDirac(Prior):
         """
         self.test_valid_for_rescaling(val)
 
-        inv = (-np.exp(-1. * self.r) + (1. + np.exp(self.r))**-val +
-               np.exp(-1. * self.r) * (1. + np.exp(self.r))**-val)
+        inv = (-np.exp(-1. * self.r) + (1. + np.exp(self.r)) ** -val +
+               np.exp(-1. * self.r) * (1. + np.exp(self.r)) ** -val)
 
         # if val is 1 this will cause inv to be negative (due to numerical
         # issues), so return np.inf
@@ -2720,7 +2610,7 @@ class MultivariateGaussianDist(object):
         """
 
         return not np.any([val is None for val in
-                          self.requested_parameters.values()])
+                           self.requested_parameters.values()])
 
     def reset_request(self):
         """
@@ -2736,7 +2626,7 @@ class MultivariateGaussianDist(object):
         """
 
         return not np.any([val is None for val in
-                          self.rescale_parameters.values()])
+                           self.rescale_parameters.values()])
 
     def reset_rescale(self):
         """
@@ -3062,51 +2952,7 @@ class MultivariateGaussianDist(object):
 
 
 class MultivariateNormalDist(MultivariateGaussianDist):
-
-    def __init__(self, names, nmodes=1, mus=None, sigmas=None, corrcoefs=None,
-                 covs=None, weights=None, bounds=None):
-        """
-        A synonym for the :class:`~bilby.core.prior.MultivariateGaussianDist`
-        distribution.
-
-        Parameters
-        ----------
-        names: list
-            A list of the parameter names in the multivariate Gaussian. The
-            listed parameters must have the same order that they appear in
-            the lists of means, standard deviations, and the correlation
-            coefficient, or covariance, matrices.
-        nmodes: int
-            The number of modes for the mixture model. This defaults to 1,
-            which will be checked against the shape of the other inputs.
-        mus: array_like
-            A list of lists of means of each mode in a multivariate Gaussian
-            mixture model. A single list can be given for a single mode. If
-            this is None then means at zero will be assumed.
-        sigmas: array_like
-            A list of lists of the standard deviations of each mode of the
-            multivariate Gaussian. If supplying a correlation coefficient
-            matrix rather than a covariance matrix these values must be given.
-            If this is None unit variances will be assumed.
-        corrcoefs: array
-            A list of square matrices containing the correlation coefficients
-            of the parameters for each mode. If this is None it will be assumed
-            that the parameters are uncorrelated.
-        covs: array
-            A list of square matrices containing the covariance matrix of the
-            multivariate Gaussian.
-        weights: list
-            A list of weights (relative probabilities) for each mode of the
-            multivariate Gaussian. This will default to equal weights for each
-            mode.
-        bounds: list
-            A list of bounds on each parameter. The defaults are for bounds at
-            +/- infinity.
-        """
-        MultivariateGaussianDist.__init__(self, names, nmodes=nmodes,
-                                          mus=mus, sigmas=sigmas,
-                                          corrcoefs=corrcoefs, covs=covs,
-                                          weights=weights, bounds=bounds)
+    """ A synonym for the :class:`~bilby.core.prior.MultivariateGaussianDist` distribution."""
 
 
 class MultivariateGaussian(Prior):
@@ -3140,9 +2986,9 @@ class MultivariateGaussian(Prior):
                              "Gaussian")
         self.mvg = mvg
 
-        Prior.__init__(self, name=name, latex_label=latex_label, unit=unit,
-                       minimum=mvg.bounds[name][0],
-                       maximum=mvg.bounds[name][1])
+        super(MultivariateGaussian, self).__init__(name=name, latex_label=latex_label, unit=unit,
+                                                   minimum=mvg.bounds[name][0],
+                                                   maximum=mvg.bounds[name][1])
 
     def rescale(self, val, mode=None):
         """
@@ -3292,24 +3138,5 @@ class MultivariateGaussian(Prior):
 
 
 class MultivariateNormal(MultivariateGaussian):
-
-    def __init__(self, mvg, name=None, latex_label=None, unit=None):
-        """A synonym for the :class:`bilby.core.prior.MultivariateGaussian`
-        prior distribution.
-
-        Parameters
-        ----------
-        mvg: MultivariateGaussianDist
-            A :class:`bilby.core.prior.MultivariateGaussianDist` object
-            defining the multivariate Gaussian distribution. This object is not
-            copied, as it needs to be shared across multiple priors, and as
-            such its contents will be altered by the prior.
-        name: str
-            See superclass
-        latex_label: str
-            See superclass
-        unit: str
-            See superclass
-        """
-        MultivariateGaussian.__init__(self, mvg, name=name,
-                                      latex_label=latex_label, unit=unit)
+    """ A synonym for the :class:`bilby.core.prior.MultivariateGaussian`
+        prior distribution."""
diff --git a/bilby/core/result.py b/bilby/core/result.py
index 5ac7615e78e8a6f1204fd138c5ec0728e86b0a8c..bb79faf1a458598fea0c4e93c616bdd1edf2150a 100644
--- a/bilby/core/result.py
+++ b/bilby/core/result.py
@@ -1318,7 +1318,7 @@ class ResultList(list):
         results: list
             A list of `:class:`bilby.core.result.Result`.
         """
-        list.__init__(self)
+        super(ResultList, self).__init__()
         for result in results:
             self.append(result)
 
diff --git a/bilby/core/sampler/dynamic_dynesty.py b/bilby/core/sampler/dynamic_dynesty.py
index 6b12301914b9623d9eb9059db10a3f3a52e0e947..3e5f38bd6e32097637af548f9b07611f25f157db 100644
--- a/bilby/core/sampler/dynamic_dynesty.py
+++ b/bilby/core/sampler/dynamic_dynesty.py
@@ -91,10 +91,9 @@ class DynamicDynesty(Dynesty):
     def __init__(self, likelihood, priors, outdir='outdir', label='label', use_ratio=False, plot=False,
                  skip_import_verification=False, check_point=True, n_check_point=None, check_point_delta_t=600,
                  resume=True, **kwargs):
-        Dynesty.__init__(self, likelihood=likelihood, priors=priors, outdir=outdir, label=label,
-                         use_ratio=use_ratio, plot=plot,
-                         skip_import_verification=skip_import_verification,
-                         **kwargs)
+        super(DynamicDynesty, self).__init__(self, likelihood=likelihood, priors=priors, outdir=outdir, label=label,
+                                             use_ratio=use_ratio, plot=plot,
+                                             skip_import_verification=skip_import_verification, **kwargs)
         self.n_check_point = n_check_point
         self.check_point = check_point
         self.resume = resume
diff --git a/bilby/core/sampler/dynesty.py b/bilby/core/sampler/dynesty.py
index b601dcbf79c0ec65ae588e2abc7aa338d26e17bd..4bcafd423b0f6b9b700cb8f73eb29ab6c232d5b5 100644
--- a/bilby/core/sampler/dynesty.py
+++ b/bilby/core/sampler/dynesty.py
@@ -93,11 +93,10 @@ class Dynesty(NestedSampler):
                  use_ratio=False, plot=False, skip_import_verification=False,
                  check_point=True, check_point_plot=True, n_check_point=None,
                  check_point_delta_t=600, resume=True, **kwargs):
-        NestedSampler.__init__(self, likelihood=likelihood, priors=priors,
-                               outdir=outdir, label=label, use_ratio=use_ratio,
-                               plot=plot,
-                               skip_import_verification=skip_import_verification,
-                               **kwargs)
+        super(Dynesty, self).__init__(likelihood=likelihood, priors=priors,
+                                      outdir=outdir, label=label, use_ratio=use_ratio,
+                                      plot=plot, skip_import_verification=skip_import_verification,
+                                      **kwargs)
         self.n_check_point = n_check_point
         self.check_point = check_point
         self.check_point_plot = check_point_plot
diff --git a/bilby/core/sampler/emcee.py b/bilby/core/sampler/emcee.py
index a03dda0b0bfaac0b9a5e3db31f2d4bb45e80af80..c2fc9a6f5baf352bdd06a49cd1ab653d82fda458 100644
--- a/bilby/core/sampler/emcee.py
+++ b/bilby/core/sampler/emcee.py
@@ -61,8 +61,8 @@ class Emcee(MCMCSampler):
             self.prerelease = True
         else:
             self.prerelease = False
-        MCMCSampler.__init__(
-            self, likelihood=likelihood, priors=priors, outdir=outdir,
+        super(Emcee, self).__init__(
+            likelihood=likelihood, priors=priors, outdir=outdir,
             label=label, use_ratio=use_ratio, plot=plot,
             skip_import_verification=skip_import_verification, **kwargs)
         self.resume = resume
diff --git a/bilby/core/sampler/fake_sampler.py b/bilby/core/sampler/fake_sampler.py
index 4d4acf818c37ad2402454915a4541efeb991d809..8033958ddbc043ca3ae03cfa9327a9789022736b 100644
--- a/bilby/core/sampler/fake_sampler.py
+++ b/bilby/core/sampler/fake_sampler.py
@@ -24,10 +24,10 @@ class FakeSampler(Sampler):
                  label='label', use_ratio=False, plot=False,
                  injection_parameters=None, meta_data=None, result_class=None,
                  **kwargs):
-        Sampler.__init__(self, likelihood, priors, outdir=outdir, label=label,
-                         use_ratio=False, plot=False, skip_import_verification=True,
-                         injection_parameters=None, meta_data=None, result_class=None,
-                         **kwargs)
+        super(FakeSampler, self).__init__(likelihood=likelihood, priors=priors, outdir=outdir, label=label,
+                                          use_ratio=False, plot=False, skip_import_verification=True,
+                                          injection_parameters=None, meta_data=None, result_class=None,
+                                          **kwargs)
         self._read_parameter_list_from_file(sample_file)
         self.result.outdir = outdir
         self.result.label = label
diff --git a/bilby/core/sampler/ptemcee.py b/bilby/core/sampler/ptemcee.py
index 9b2472aaa7ce38f02e2702d9b776f79f2405afd4..78b88c3fe5d48b7950ece9c4f255f71aa15c1f19 100644
--- a/bilby/core/sampler/ptemcee.py
+++ b/bilby/core/sampler/ptemcee.py
@@ -40,8 +40,8 @@ class Ptemcee(Emcee):
                  use_ratio=False, plot=False, skip_import_verification=False,
                  nburn=None, burn_in_fraction=0.25, burn_in_act=3, resume=True,
                  **kwargs):
-        Emcee.__init__(
-            self, likelihood=likelihood, priors=priors, outdir=outdir,
+        super(Ptemcee, self).__init__(
+            likelihood=likelihood, priors=priors, outdir=outdir,
             label=label, use_ratio=use_ratio, plot=plot,
             skip_import_verification=skip_import_verification,
             nburn=nburn, burn_in_fraction=burn_in_fraction,
diff --git a/bilby/core/sampler/ptmcmc.py b/bilby/core/sampler/ptmcmc.py
index 7a0276bedece22f3fc0a7e661d41d5dc2097350c..3f90711057b4bfa392c6d7d1717929289dda2757 100644
--- a/bilby/core/sampler/ptmcmc.py
+++ b/bilby/core/sampler/ptmcmc.py
@@ -40,8 +40,8 @@ class PTMCMCSampler(MCMCSampler):
 
     """
 
-    default_kwargs = {'p0': None, 'Niter': 2 * 10**4 + 1, 'neff': 10**4,
-                      'burn': 5 * 10**3, 'verbose': True,
+    default_kwargs = {'p0': None, 'Niter': 2 * 10 ** 4 + 1, 'neff': 10 ** 4,
+                      'burn': 5 * 10 ** 3, 'verbose': True,
                       'ladder': None, 'Tmin': 1, 'Tmax': None, 'Tskip': 100,
                       'isave': 1000, 'thin': 1, 'covUpdate': 1000,
                       'SCAMweight': 1, 'AMweight': 1, 'DEweight': 1,
@@ -56,11 +56,11 @@ class PTMCMCSampler(MCMCSampler):
                  use_ratio=False, plot=False, skip_import_verification=False,
                  pos0=None, burn_in_fraction=0.25, **kwargs):
 
-        MCMCSampler.__init__(self, likelihood=likelihood, priors=priors,
-                             outdir=outdir, label=label, use_ratio=use_ratio,
-                             plot=plot,
-                             skip_import_verification=skip_import_verification,
-                             **kwargs)
+        super(PTMCMCSampler, self).__init__(likelihood=likelihood, priors=priors,
+                                            outdir=outdir, label=label, use_ratio=use_ratio,
+                                            plot=plot,
+                                            skip_import_verification=skip_import_verification,
+                                            **kwargs)
 
         self.p0 = self.get_random_draw_from_prior()
         self.likelihood = likelihood
diff --git a/bilby/core/sampler/pymc3.py b/bilby/core/sampler/pymc3.py
index dbbe872133efcdc65a30f7e86386d1033e9c8ce9..95a47bba07f41e40789b41642ceee743fab4d8c0 100644
--- a/bilby/core/sampler/pymc3.py
+++ b/bilby/core/sampler/pymc3.py
@@ -6,7 +6,7 @@ import numpy as np
 
 from ..utils import derivatives, infer_args_from_method
 from ..prior import DeltaFunction, Sine, Cosine, PowerLaw, MultivariateGaussian
-from .base_sampler import Sampler, MCMCSampler
+from .base_sampler import MCMCSampler
 from ..likelihood import GaussianLikelihood, PoissonLikelihood, ExponentialLikelihood, \
     StudentTLikelihood
 from ...gw.likelihood import BasicGravitationalWaveTransient, GravitationalWaveTransient
@@ -63,9 +63,9 @@ class Pymc3(MCMCSampler):
     def __init__(self, likelihood, priors, outdir='outdir', label='label',
                  use_ratio=False, plot=False,
                  skip_import_verification=False, **kwargs):
-        Sampler.__init__(self, likelihood, priors, outdir=outdir, label=label,
-                         use_ratio=use_ratio, plot=plot,
-                         skip_import_verification=skip_import_verification, **kwargs)
+        super(Pymc3, self).__init__(likelihood=likelihood, priors=priors, outdir=outdir, label=label,
+                                    use_ratio=use_ratio, plot=plot,
+                                    skip_import_verification=skip_import_verification, **kwargs)
         self.draws = self._kwargs['draws']
         self.chains = self._kwargs['chains']
 
diff --git a/bilby/core/sampler/pymultinest.py b/bilby/core/sampler/pymultinest.py
index 988c5d9a75b22325d8045f9ab970e0707e32294c..e33c6cf0d29fac9d143ad06c6670eac671d08716 100644
--- a/bilby/core/sampler/pymultinest.py
+++ b/bilby/core/sampler/pymultinest.py
@@ -48,10 +48,10 @@ class Pymultinest(NestedSampler):
 
     def __init__(self, likelihood, priors, outdir='outdir', label='label', use_ratio=False, plot=False,
                  skip_import_verification=False, **kwargs):
-        NestedSampler.__init__(self, likelihood=likelihood, priors=priors, outdir=outdir, label=label,
-                               use_ratio=use_ratio, plot=plot,
-                               skip_import_verification=skip_import_verification,
-                               **kwargs)
+        super(Pymultinest, self).__init__(likelihood=likelihood, priors=priors, outdir=outdir, label=label,
+                                          use_ratio=use_ratio, plot=plot,
+                                          skip_import_verification=skip_import_verification,
+                                          **kwargs)
         self._apply_multinest_boundaries()
 
     def _translate_kwargs(self, kwargs):
diff --git a/bilby/core/utils.py b/bilby/core/utils.py
index 6f53601f79d80a942c6317720c838583d2c9c979..ea66c5614d4eb3aaad0950dd6052096209470a4c 100644
--- a/bilby/core/utils.py
+++ b/bilby/core/utils.py
@@ -879,7 +879,7 @@ class UnsortedInterp2d(interp2d):
 
         """
         unsorted_idxs = np.argsort(np.argsort(x))
-        return interp2d.__call__(self, x, y, dx=dx, dy=dy, assume_sorted=False)[unsorted_idxs]
+        return super(UnsortedInterp2d, self).__call__(x, y, dx=dx, dy=dy, assume_sorted=False)[unsorted_idxs]
 
 
 #  Instantiate the default argument parser at runtime
diff --git a/bilby/gw/detector/calibration.py b/bilby/gw/detector/calibration.py
index cf4fc7d9392e35f369edb31d2379b5430b65a058..74b25127f0bad233301df272537e0da1f4dd85f3 100644
--- a/bilby/gw/detector/calibration.py
+++ b/bilby/gw/detector/calibration.py
@@ -77,7 +77,7 @@ class CubicSpline(Recalibrate):
         n_points: int
             number of spline points
         """
-        Recalibrate.__init__(self, prefix=prefix)
+        super(CubicSpline, self).__init__(prefix=prefix)
         if n_points < 4:
             raise ValueError('Cubic spline calibration requires at least 4 spline nodes.')
         self.n_points = n_points
diff --git a/bilby/gw/detector/networks.py b/bilby/gw/detector/networks.py
index f1c3a9f43113cfeceedca381d7f0a813e94dba03..12c268d2a6d181400900c37f4a65bce0a8201ce4 100644
--- a/bilby/gw/detector/networks.py
+++ b/bilby/gw/detector/networks.py
@@ -27,7 +27,7 @@ class InterferometerList(list):
             The list of interferometers
         """
 
-        list.__init__(self)
+        super(InterferometerList, self).__init__()
         if type(interferometers) == str:
             raise TypeError("Input must not be a string")
         for ifo in interferometers:
@@ -246,7 +246,7 @@ class TriangularInterferometer(InterferometerList):
     def __init__(self, name, power_spectral_density, minimum_frequency, maximum_frequency,
                  length, latitude, longitude, elevation, xarm_azimuth, yarm_azimuth,
                  xarm_tilt=0., yarm_tilt=0.):
-        InterferometerList.__init__(self, [])
+        super(TriangularInterferometer, self).__init__([])
         self.name = name
         # for attr in ['power_spectral_density', 'minimum_frequency', 'maximum_frequency']:
         if isinstance(power_spectral_density, PowerSpectralDensity):
diff --git a/bilby/gw/likelihood.py b/bilby/gw/likelihood.py
index 72c9bc9c1542413d73d35921ac69033037c31cfe..3741f536cb4443533385c03be726e9bc875a31ba 100644
--- a/bilby/gw/likelihood.py
+++ b/bilby/gw/likelihood.py
@@ -101,7 +101,7 @@ class GravitationalWaveTransient(likelihood.Likelihood):
                  jitter_time=True):
 
         self.waveform_generator = waveform_generator
-        likelihood.Likelihood.__init__(self, dict())
+        super(GravitationalWaveTransient, self).__init__(dict())
         self.interferometers = InterferometerList(interferometers)
         self.time_marginalization = time_marginalization
         self.distance_marginalization = distance_marginalization
@@ -730,7 +730,7 @@ class BasicGravitationalWaveTransient(likelihood.Likelihood):
             given some set of parameters
 
         """
-        likelihood.Likelihood.__init__(self, dict())
+        super(BasicGravitationalWaveTransient, self).__init__(dict())
         self.interferometers = interferometers
         self.waveform_generator = waveform_generator
 
@@ -838,8 +838,8 @@ class ROQGravitationalWaveTransient(GravitationalWaveTransient):
                  roq_params=None,
                  distance_marginalization=False, phase_marginalization=False,
                  distance_marginalization_lookup_table=None):
-        GravitationalWaveTransient.__init__(
-            self, interferometers=interferometers,
+        super(ROQGravitationalWaveTransient, self).__init__(
+            interferometers=interferometers,
             waveform_generator=waveform_generator, priors=priors,
             distance_marginalization=distance_marginalization,
             phase_marginalization=phase_marginalization,
diff --git a/bilby/gw/prior.py b/bilby/gw/prior.py
index 890659561bda732a96e1b01d5798eea159612ead..fba24ef356ec3c5a4fe1908fd2138b2137c4456c 100644
--- a/bilby/gw/prior.py
+++ b/bilby/gw/prior.py
@@ -58,8 +58,8 @@ class Cosmological(Interped):
             xx, yy = self._get_luminosity_distance_arrays()
         else:
             raise ValueError('Name {} not recognized.'.format(name))
-        Interped.__init__(self, xx=xx, yy=yy, minimum=minimum, maximum=maximum,
-                          boundary=boundary, **label_args)
+        super(Cosmological, self).__init__(xx=xx, yy=yy, minimum=minimum, maximum=maximum,
+                                           boundary=boundary, **label_args)
 
     @property
     def minimum(self):
@@ -232,9 +232,9 @@ class AlignedSpin(Interped):
         aas = np.linspace(a_prior.minimum, a_prior.maximum, 1000)
         yy = [np.trapz(np.nan_to_num(a_prior.prob(aas) / aas *
                                      z_prior.prob(x / aas)), aas) for x in xx]
-        Interped.__init__(self, xx=xx, yy=yy, name=name,
-                          latex_label=latex_label, unit=unit,
-                          boundary=boundary)
+        super(AlignedSpin, self).__init__(xx=xx, yy=yy, name=name,
+                                          latex_label=latex_label, unit=unit,
+                                          boundary=boundary)
 
 
 class BBHPriorDict(PriorDict):
@@ -264,8 +264,8 @@ class BBHPriorDict(PriorDict):
         elif filename is not None:
             if not os.path.isfile(filename):
                 filename = os.path.join(os.path.dirname(__file__), 'prior_files', filename)
-        PriorDict.__init__(self, dictionary=dictionary, filename=filename,
-                           conversion_function=conversion_function)
+        super(BBHPriorDict, self).__init__(dictionary=dictionary, filename=filename,
+                                           conversion_function=conversion_function)
 
     def default_conversion_function(self, sample):
         """
@@ -370,8 +370,8 @@ class BNSPriorDict(PriorDict):
         elif filename is not None:
             if not os.path.isfile(filename):
                 filename = os.path.join(os.path.dirname(__file__), 'prior_files', filename)
-        PriorDict.__init__(self, dictionary=dictionary, filename=filename,
-                           conversion_function=conversion_function)
+        super(BNSPriorDict, self).__init__(dictionary=dictionary, filename=filename,
+                                           conversion_function=conversion_function)
 
     def default_conversion_function(self, sample):
         """
@@ -477,7 +477,7 @@ class CalibrationPriorDict(PriorDict):
         if dictionary is None and filename is not None:
             filename = os.path.join(os.path.dirname(__file__),
                                     'prior_files', filename)
-        PriorDict.__init__(self, dictionary=dictionary, filename=filename)
+        super(CalibrationPriorDict, self).__init__(dictionary=dictionary, filename=filename)
         self.source = None
 
     def to_file(self, outdir, label):
diff --git a/bilby/hyper/likelihood.py b/bilby/hyper/likelihood.py
index 6b457ea9c2180d1c3026098859ddab9d33340ecd..bc037be3cb4789c56a3fea8b79fe20d126b82539 100644
--- a/bilby/hyper/likelihood.py
+++ b/bilby/hyper/likelihood.py
@@ -52,7 +52,7 @@ class HyperparameterLikelihood(Likelihood):
         self.hyper_prior = hyper_prior
         self.sampling_prior = sampling_prior
         self.max_samples = max_samples
-        Likelihood.__init__(self, hyper_prior.parameters)
+        super(HyperparameterLikelihood, self).__init__(hyper_prior.parameters)
 
         self.data = self.resample_posteriors()
         self.n_posteriors = len(self.posteriors)