diff --git a/src/runner_doiact.h b/src/runner_doiact.h
index cf8174e485503427d0622e2457895797a82de4bc..8d98a254292c31e3f2ff941f4a0a935b9717e9a7 100644
--- a/src/runner_doiact.h
+++ b/src/runner_doiact.h
@@ -461,7 +461,7 @@ void DOPAIR_SUBSET_NAIVE(struct runner *r, struct cell *restrict ci,
 
   struct engine *e = r->e;
 
-  error("Don't use in actual runs ! Slow code !");
+// error("Don't use in actual runs ! Slow code !");
 
 #ifdef WITH_OLD_VECTORIZATION
   int icount = 0;
@@ -3165,13 +3165,14 @@ void DOSUB_SUBSET(struct runner *r, struct cell *ci, struct part *parts,
                        : (cj->loc[k] - ci->loc[k] + shift[k] > 0) ? 2 : 1);
       new_sid = sortlistID[new_sid];
 
-      /* Do any of the cells need to be drifted or sorted first? */
+      /* Do any of the cells need to be drifted first? */
       if (!cell_is_drifted(cj, e)) cell_drift_particles(cj, e);
-      if (!(cj->sorted & (1 << new_sid)))
-        runner_do_sort(r, cj, (1 << new_sid), 1);
 
-      /* Compute the interactions. */
-      DOPAIR_SUBSET(r, ci, parts, ind, count, cj);
+      /* If the cell is not sorted, don't re-generate the sort indices. */
+      if (!(cj->sorted & (1 << new_sid)))
+        DOPAIR_SUBSET_NAIVE(r, ci, parts, ind, count, cj);
+      else
+        DOPAIR_SUBSET(r, ci, parts, ind, count, cj);
     }
 
   } /* otherwise, pair interaction. */