diff --git a/tupak/__init__.py b/tupak/__init__.py
index 8e0fd6a27cdee23f3676bd0da0930d5cd9f96d66..2dca9e6f1f44e7829c10c3e7842a622bb2d7e1d7 100644
--- a/tupak/__init__.py
+++ b/tupak/__init__.py
@@ -16,12 +16,10 @@ https://monash.docs.ligo.org/tupak/installation.html.
 """
 
 
-from __future__ import print_function, division, absolute_import
+from __future__ import absolute_import
 
-import tupak.core
-import tupak.gw
-import tupak.hyper
+from . import core, gw, hyper
 
-from tupak.core import utils, likelihood, prior, result, sampler
-from tupak.core.sampler import run_sampler
-from tupak.core.likelihood import Likelihood
+from .core import utils, likelihood, prior, result, sampler
+from .core.sampler import run_sampler
+from .core.likelihood import Likelihood
diff --git a/tupak/core/__init__.py b/tupak/core/__init__.py
index 94d3b3b2ffc7020e9f38eba6f7f4d031078bb56a..daa0c453de731ff0581c863b58b599d7b37e9d26 100644
--- a/tupak/core/__init__.py
+++ b/tupak/core/__init__.py
@@ -1,6 +1,2 @@
 from __future__ import absolute_import
-import tupak.core.likelihood
-import tupak.core.prior
-import tupak.core.result
-import tupak.core.sampler
-import tupak.core.utils
\ No newline at end of file
+from . import likelihood, prior, result, sampler, utils
diff --git a/tupak/core/likelihood.py b/tupak/core/likelihood.py
index f743ecb3262b9e0bcb8b155deea277dcb687f3f5..0b184cefa9c4c96cdd392ef16107fb5d0e5dce0f 100644
--- a/tupak/core/likelihood.py
+++ b/tupak/core/likelihood.py
@@ -1,9 +1,9 @@
 from __future__ import division, print_function
 
+import copy
 import numpy as np
 from scipy.special import gammaln
-from tupak.core.utils import infer_parameters_from_function
-import copy
+from .utils import infer_parameters_from_function
 
 
 class Likelihood(object):
diff --git a/tupak/core/prior.py b/tupak/core/prior.py
index 3cc6f12f6b85150e52a358444c91477893b25ca7..68fa8ba9102b8d7538c56487c57da63b65cf57a7 100644
--- a/tupak/core/prior.py
+++ b/tupak/core/prior.py
@@ -9,8 +9,8 @@ import os
 from collections import OrderedDict
 from future.utils import iteritems
 
-from tupak.core.utils import logger
-from tupak.core import utils
+from .utils import logger
+from . import utils
 import tupak  # noqa
 import inspect
 
diff --git a/tupak/core/result.py b/tupak/core/result.py
index 018c9a120299b3abd4c3af51bc1a7d34fa2bd77e..2617aff8a5121a3d87175c9eb74e8c66d5fe088e 100644
--- a/tupak/core/result.py
+++ b/tupak/core/result.py
@@ -8,9 +8,9 @@ import matplotlib
 import matplotlib.pyplot as plt
 from collections import OrderedDict
 
-from tupak.core import utils
-from tupak.core.utils import logger
-from tupak.core.prior import PriorSet, DeltaFunction
+from . import utils
+from .utils import logger
+from .prior import PriorSet, DeltaFunction
 
 
 def result_file_name(outdir, label):
diff --git a/tupak/gw/__init__.py b/tupak/gw/__init__.py
index 47063bf1e2790e5ef41ad096f9723905994e9cd9..3273cbd3e8358d2d91a3a44249c6dac3d00db287 100644
--- a/tupak/gw/__init__.py
+++ b/tupak/gw/__init__.py
@@ -1,13 +1,5 @@
-from __future__ import absolute_import
-import tupak.gw.conversion
-import tupak.gw.detector
-import tupak.gw.likelihood
-import tupak.gw.prior
-import tupak.gw.source
-import tupak.gw.utils
-import tupak.gw.waveform_generator
-from . import calibration
+from . import (calibration, conversion, detector, likelihood, prior, source,
+               utils, waveform_generator)
 
-
-from tupak.gw.waveform_generator import WaveformGenerator
-from tupak.gw.likelihood import GravitationalWaveTransient
+from .waveform_generator import WaveformGenerator
+from .likelihood import GravitationalWaveTransient
diff --git a/tupak/gw/conversion.py b/tupak/gw/conversion.py
index 5f78db028e631ec5d6e0daf2ac8ffb221a48c9aa..8c24eb8f3bc4a9db0e21850c785c7e8fd2af0e12 100644
--- a/tupak/gw/conversion.py
+++ b/tupak/gw/conversion.py
@@ -1,9 +1,9 @@
 from __future__ import division
-import tupak
 import numpy as np
 import pandas as pd
 
-from tupak.core.utils import logger
+from ..core.utils import logger, solar_mass
+from ..core.prior import DeltaFunction
 
 try:
     from astropy.cosmology import z_at_value, Planck15
@@ -535,7 +535,7 @@ def fill_from_fixed_priors(sample, priors):
     output_sample = sample.copy()
     if priors is not None:
         for name in priors:
-            if isinstance(priors[name], tupak.core.prior.DeltaFunction):
+            if isinstance(priors[name], DeltaFunction):
                 output_sample[name] = priors[name].peak
     return output_sample
 
@@ -610,8 +610,8 @@ def generate_component_spins(sample):
                 output_sample['tilt_1'], output_sample['tilt_2'],
                 output_sample['phi_12'], output_sample['a_1'],
                 output_sample['a_2'],
-                output_sample['mass_1'] * tupak.core.utils.solar_mass,
-                output_sample['mass_2'] * tupak.core.utils.solar_mass,
+                output_sample['mass_1'] * solar_mass,
+                output_sample['mass_2'] * solar_mass,
                 output_sample['reference_frequency'], output_sample['phase'])
 
         output_sample['phi_1'] =\
@@ -637,8 +637,8 @@ def generate_component_spins(sample):
                     output_sample['tilt_1'][ii], output_sample['tilt_2'][ii],
                     output_sample['phi_12'][ii], output_sample['a_1'][ii],
                     output_sample['a_2'][ii],
-                    output_sample['mass_1'][ii] * tupak.core.utils.solar_mass,
-                    output_sample['mass_2'][ii] * tupak.core.utils.solar_mass,
+                    output_sample['mass_1'][ii] * solar_mass,
+                    output_sample['mass_2'][ii] * solar_mass,
                     output_sample['reference_frequency'][ii],
                     output_sample['phase'][ii])
 
diff --git a/tupak/gw/detector.py b/tupak/gw/detector.py
index 924e8a8782149439c956381d431edd0114ac80dd..1755ab484d4c1f17c5278f050dc471ca71650a68 100644
--- a/tupak/gw/detector.py
+++ b/tupak/gw/detector.py
@@ -7,9 +7,9 @@ import numpy as np
 from scipy.signal.windows import tukey
 from scipy.interpolate import interp1d
 
-from tupak.gw import utils as gwutils
-from tupak.core import utils
-from tupak.core.utils import logger
+from . import utils as gwutils
+from ..core import utils
+from ..core.utils import logger
 from .calibration import Recalibrate
 
 try:
diff --git a/tupak/gw/likelihood.py b/tupak/gw/likelihood.py
index 3d7a77197c89cde2caa64042dd663ab7567ddb1d..8965678ce40ace58af4c0722ae4c184fc6a04d29 100644
--- a/tupak/gw/likelihood.py
+++ b/tupak/gw/likelihood.py
@@ -8,11 +8,14 @@ except ImportError:
     from scipy.misc import logsumexp
 from scipy.special import i0e
 
-import tupak
-from tupak.core import likelihood as likelihood
-from tupak.core.utils import logger
-from tupak.gw.prior import BBHPriorSet
-from tupak.core.prior import Uniform
+from ..core import likelihood
+from ..core.utils import logger
+from ..core.prior import Prior, Uniform
+from .detector import InterferometerList
+from .prior import BBHPriorSet
+from .source import lal_binary_black_hole
+from .utils import noise_weighted_inner_product
+from .waveform_generator import WaveformGenerator
 
 
 class GravitationalWaveTransient(likelihood.Likelihood):
@@ -57,7 +60,7 @@ class GravitationalWaveTransient(likelihood.Likelihood):
 
         self.waveform_generator = waveform_generator
         likelihood.Likelihood.__init__(self, dict())
-        self.interferometers = tupak.gw.detector.InterferometerList(interferometers)
+        self.interferometers = InterferometerList(interferometers)
         self.time_marginalization = time_marginalization
         self.distance_marginalization = distance_marginalization
         self.phase_marginalization = phase_marginalization
@@ -111,7 +114,7 @@ class GravitationalWaveTransient(likelihood.Likelihood):
 
     def _check_prior_is_set(self, key):
         if key not in self.prior or not isinstance(
-                self.prior[key], tupak.core.prior.Prior):
+                self.prior[key], Prior):
             logger.warning(
                 'Prior not provided for {}, using the BBH default.'.format(key))
             if key == 'geocent_time':
@@ -138,7 +141,7 @@ class GravitationalWaveTransient(likelihood.Likelihood):
     def noise_log_likelihood(self):
         log_l = 0
         for interferometer in self.interferometers:
-            log_l -= tupak.gw.utils.noise_weighted_inner_product(
+            log_l -= noise_weighted_inner_product(
                 interferometer.frequency_domain_strain,
                 interferometer.frequency_domain_strain,
                 interferometer.power_spectral_density_array,
@@ -381,8 +384,10 @@ def get_binary_black_hole_likelihood(interferometers):
     tupak.GravitationalWaveTransient: The likelihood to pass to `run_sampler`
 
     """
-    waveform_generator = tupak.gw.waveform_generator.WaveformGenerator(
-        duration=interferometers.duration, sampling_frequency=interferometers.sampling_frequency,
-        frequency_domain_source_model=tupak.gw.source.lal_binary_black_hole,
-        waveform_arguments={'waveform_approximant': 'IMRPhenomPv2', 'reference_frequency': 50})
-    return tupak.gw.likelihood.GravitationalWaveTransient(interferometers, waveform_generator)
+    waveform_generator = WaveformGenerator(
+        duration=interferometers.duration,
+        sampling_frequency=interferometers.sampling_frequency,
+        frequency_domain_source_model=lal_binary_black_hole,
+        waveform_arguments={'waveform_approximant': 'IMRPhenomPv2',
+                            'reference_frequency': 50})
+    return GravitationalWaveTransient(interferometers, waveform_generator)
diff --git a/tupak/gw/prior.py b/tupak/gw/prior.py
index eaa0eb561617253f448cacf9720932180b233299..0907e49b6addf30dc77abb8008fa5f105a88bbad 100644
--- a/tupak/gw/prior.py
+++ b/tupak/gw/prior.py
@@ -1,9 +1,9 @@
 import os
+import numpy as np
+from scipy.interpolate import UnivariateSpline
 from ..core.prior import (PriorSet, Uniform, FromFile, Prior, DeltaFunction,
                           Gaussian, Interped)
 from ..core.utils import logger
-import numpy as np
-from scipy.interpolate import UnivariateSpline
 
 
 class UniformComovingVolume(FromFile):
diff --git a/tupak/gw/source.py b/tupak/gw/source.py
index 85641ab26d61b7fc8963e5dda18c4045bc4279de..6ea32a002b47d9db62b0e1faf2ed77ca0af6662b 100644
--- a/tupak/gw/source.py
+++ b/tupak/gw/source.py
@@ -2,8 +2,8 @@ from __future__ import division, print_function
 
 import numpy as np
 
-from tupak.core.utils import logger
-from tupak.core import utils
+from ..core import utils
+from ..core.utils import logger
 
 try:
     import lalsimulation as lalsim
diff --git a/tupak/gw/utils.py b/tupak/gw/utils.py
index 60fb7d150270bb7130f6f93d8605e3d632aca32c..6bc9d061fcf6f03c5542bff3bca45e04fd8844a1 100644
--- a/tupak/gw/utils.py
+++ b/tupak/gw/utils.py
@@ -3,7 +3,8 @@ import os
 
 import numpy as np
 
-from ..core.utils import (gps_time_to_gmst, ra_dec_to_theta_phi, speed_of_light, logger)
+from ..core.utils import (gps_time_to_gmst, ra_dec_to_theta_phi,
+                          speed_of_light, logger)
 
 try:
     from gwpy.timeseries import TimeSeries
diff --git a/tupak/gw/waveform_generator.py b/tupak/gw/waveform_generator.py
index 0134ffbb5f0c7ae6caeffbb830a4308ff5086c50..b9f00c76aaa0ccdb12cc385f1f1be4a7192cb5b4 100644
--- a/tupak/gw/waveform_generator.py
+++ b/tupak/gw/waveform_generator.py
@@ -1,5 +1,5 @@
-from tupak.core import utils
 import numpy as np
+from ..core import utils
 
 
 class WaveformGenerator(object):
diff --git a/tupak/hyper/__init__.py b/tupak/hyper/__init__.py
index 45ec4869a0c81d87d975e9171cf5da6a52c08926..b25e08c4f8e1e6f317063eb26e5d3512011f6e65 100644
--- a/tupak/hyper/__init__.py
+++ b/tupak/hyper/__init__.py
@@ -1,3 +1 @@
-from __future__ import absolute_import
-import tupak.hyper.likelihood
-import tupak.hyper.model
+from . import likelihood, model