diff --git a/hysop/domain/domain.py b/hysop/domain/domain.py
index d08620a8583e450ae7624e5f1a3c19628560e91d..e8eabd80102c1d5647df602d8c01f3e7afc2e84e 100644
--- a/hysop/domain/domain.py
+++ b/hysop/domain/domain.py
@@ -264,8 +264,11 @@ class Domain(RegisteredObject):
         proc_tasks = proc_tasks or [(HYSOP_DEFAULT_TASK_ID,)] * parent_comm.Get_size()
         assert len(proc_tasks) == parent_comm.Get_size(), "{}".format(proc_tasks)
         assert all([type(_) is type(proc_tasks[0]) for _ in proc_tasks])
-        # Flatten if single task per proc.
+        # Sort tasks and flatten if single task per proc.
         try:
+            # Tasks are sorted on each proc according to task size
+            proc_tasks = npw.asarray([tuple(sorted(pt, key=lambda t:sum([t in _ for _ in proc_tasks]), reverse=True))
+                                      for pt in proc_tasks])
             if all([len(_) == 1 for _ in proc_tasks]):
                 proc_tasks = [_[0] for _ in proc_tasks]
         except TypeError: