diff --git a/src/engine.c b/src/engine.c
index 44dd3f1f6274f96e293d241de3ccfe19b736bf8d..98f5cba933158c4f202377e270a6ac51b6541de3 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -926,16 +926,19 @@ void engine_repartition_trigger(struct engine *e) {
                    MPI_DOUBLE, 0, MPI_COMM_WORLD);
         if (e->nodeID == 0) {
 
-          /* Get the range of cputimes. */
+          /* Get the range and mean of cputimes. */
           double mintime = elapsed_cputimes[0];
           double maxtime = elapsed_cputimes[0];
+          double sum = elapsed_cputimes[0];
           for (int k = 1; k < e->nr_nodes; k++) {
             if (elapsed_cputimes[k] > maxtime) maxtime = elapsed_cputimes[k];
             if (elapsed_cputimes[k] < mintime) mintime = elapsed_cputimes[k];
+            sum += elapsed_cputimes[k];
           }
+          double mean = sum / (double)e->nr_nodes;
 
           /* Are we out of balance? */
-          if (((maxtime - mintime) / mintime) > e->reparttype->trigger) {
+          if (((maxtime - mintime) / mean) > e->reparttype->trigger) {
             if (e->verbose)
               message("trigger fraction %.3f exceeds %.3f will repartition",
                       (maxtime - mintime) / mintime, e->reparttype->trigger);