diff --git a/roofit/roostats/src/ToyMCImportanceSampler.cxx b/roofit/roostats/src/ToyMCImportanceSampler.cxx
index c608027849414786e11ac998afaecbca6447894d..44860ef90bc6d32b069900187f5534319de393a9 100644
--- a/roofit/roostats/src/ToyMCImportanceSampler.cxx
+++ b/roofit/roostats/src/ToyMCImportanceSampler.cxx
@@ -74,13 +74,13 @@ RooDataSet* ToyMCImportanceSampler::GetSamplingDistributionsSingleWorker(RooArgS
       // apply strategy for how to distribute the #toys between the distributions
       if( fToysStrategy == EQUALTOYSPERDENSITY ) {
          // assuming alltoys = one null + N imp densities. And round up.
-         fNToys = ceil(  allToys/(fImportanceDensities.size()+1)  ); 
+         fNToys = ceil(  double(allToys)/(fImportanceDensities.size()+1)  ); 
       }else if(fToysStrategy == EXPONENTIALTOYDISTRIBUTION ) {
          // for N densities, split the toys into (2^(N+1))-1 parts, and assign 2^0 parts to the first
          // density (which is the null), 2^1 to the second (first imp dens), etc, up to 2^N
-         fNToys = ceil(  allToys * pow( 2, i+1 )  /  (pow( 2, fImportanceDensities.size()+1 )-1)  );
+         fNToys = ceil(  double(allToys) * pow( double(2) , i+1 )  /  (pow( double(2), int(fImportanceDensities.size()+1) )-1)  );
          
-         int largestNToys = ceil(  allToys * pow( 2, fImportanceDensities.size() )  /  (pow( 2, fImportanceDensities.size()+1 )-1)  );
+         int largestNToys = ceil(  allToys * pow( double(2), int(fImportanceDensities.size()) )  /  (pow( double(2), int(fImportanceDensities.size()+1) )-1)  );
          reweight.setVal( ((double)largestNToys) / fNToys );
       }