diff --git a/tupak/core/sampler.py b/tupak/core/sampler.py
index 58fd9d6fd717e8cd7f9aef96439c996cfee0de7e..06412bf7584a2b4fffada00c37d6d2706b684a30 100644
--- a/tupak/core/sampler.py
+++ b/tupak/core/sampler.py
@@ -190,9 +190,7 @@ class Sampler(object):
         return self.priors.rescale(self.__search_parameter_keys, theta)
 
     def log_prior(self, theta):
-        return np.sum(
-            [np.log(self.priors[key].prob(t)) for key, t in
-                zip(self.__search_parameter_keys, theta)])
+        return self.priors.ln_prob({key: t for key, t in zip(self.__search_parameter_keys, theta)})
 
     def log_likelihood(self, theta):
         for i, k in enumerate(self.__search_parameter_keys):
@@ -212,8 +210,7 @@ class Sampler(object):
 
         """
 
-        draw = np.array([self.priors[key].sample()
-                        for key in self.__search_parameter_keys])
+        draw = np.array(self.priors.sample_subset(self.__search_parameter_keys).items())
         if np.isinf(self.log_likelihood(draw)):
             logging.info('Prior draw {} has inf likelihood'.format(draw))
         if np.isinf(self.log_prior(draw)):