diff --git a/include/internal/fmpi_mpi.h b/include/internal/fmpi_mpi.h
index cfeadf1bdaf89c34edaa3ce94936953b63cd807e..520262592b65e2a6df0c89e766a1a017bc811152 100644
--- a/include/internal/fmpi_mpi.h
+++ b/include/internal/fmpi_mpi.h
@@ -230,6 +230,13 @@ int fmpi_mpi_reduce_in_place(
     const struct fmpi_mpi_ctx * ctx, void * buf, size_t cnt, MPI_Datatype type,
     MPI_Op op, int root, MPI_Comm comm
 );
+/*------------------------------------------------------------------------------
+    fmpi_mpi_world_reduce_in_place()
+------------------------------------------------------------------------------*/
+int fmpi_mpi_world_reduce_in_place(
+    const struct fmpi_mpi_ctx * ctx, void * buf, size_t cnt, MPI_Datatype type,
+    MPI_Op op
+);
 /*==============================================================================
     GUARD
 ==============================================================================*/
diff --git a/src/fmpi_mpi.c b/src/fmpi_mpi.c
index 83dacda40e0bbbeb5ca143a7cbcaa979633cc16a..3eb7f107da485fadf077b05445a6026e7f66f80a 100644
--- a/src/fmpi_mpi.c
+++ b/src/fmpi_mpi.c
@@ -293,3 +293,24 @@ int fmpi_mpi_reduce_in_place(
     }
     return fmpi_mpi_check_error(ctx, err, "MPI_Reduce");
 }
+/*------------------------------------------------------------------------------
+    fmpi_mpi_world_reduce_in_place()
+------------------------------------------------------------------------------*/
+int fmpi_mpi_world_reduce_in_place(
+    const struct fmpi_mpi_ctx * const ctx, void * const buf, const size_t cnt,
+    MPI_Datatype type, MPI_Op op
+){
+    assert(ctx != NULL);
+    assert(buf != NULL);
+    assert(cnt <= INT_MAX);
+
+    const int err = fmpi_mpi_reduce_in_place(
+        ctx, buf, cnt, type, op, ctx->root, ctx->world
+    );
+    if(err != FMPI_SUCCESS) {
+        FMPI_RAISE_ERROR(ctx->err_handler, "FMPI",
+            "fmpi_mpi_reduce_in_place() failed!"
+        );
+    }
+    return err;
+}
diff --git a/src/fmpi_task.c b/src/fmpi_task.c
index cfc1ef6f7010a3b0c46880963b32b41b873aaf8b..66c017845f85067d8133af8c2acc3111ceffb9bd 100644
--- a/src/fmpi_task.c
+++ b/src/fmpi_task.c
@@ -180,22 +180,19 @@ int fmpi_task_finalize(
     assert(ctx != NULL);
     assert(task != NULL);
     if(op == FMPI_TASK_OP_NONE) {
-        return 0;
+        return FMPI_SUCCESS;
     }
     if(op == FMPI_TASK_OP_SUM) {
-        if(fmpi_mpi_is_root(ctx->mpi)) {
-            MPI_Reduce(
-                MPI_IN_PLACE, task->args.out.raw, (int)task->args.out.cnt,
-                fmpi_mpi_type(task->args.out.type.base), MPI_SUM,
-                ctx->mpi->root, ctx->mpi->world
-            );
-        } else {
-            MPI_Reduce(
-                task->args.out.raw, task->args.out.raw, (int)task->args.out.cnt,
-                fmpi_mpi_type(task->args.out.type.base), MPI_SUM,
-                ctx->mpi->root, ctx->mpi->world
+        const int err = fmpi_mpi_world_reduce_in_place(
+            ctx->mpi, task->args.out.raw, task->args.out.cnt,
+            fmpi_mpi_type(task->args.out.type.base), MPI_SUM
+        );
+        if(err != FMPI_SUCCESS) {
+            FMPI_RAISE_ERROR(ctx->err_handler, "FMPI",
+                "fmpi_mpi_world_reduce_in_place() failed!"
             );
         }
+        return err;
     }
-    return 0;
+    return FMPI_SUCCESS;
 }