diff --git a/src/load_balance_general.c b/src/load_balance_general.c
index eb9b300676ce9688c9de7baa5b7319eaef4fe953..e056d6d967729e81c123d252325a0c269b1197b9 100644
--- a/src/load_balance_general.c
+++ b/src/load_balance_general.c
@@ -243,6 +243,7 @@ void worker_handle_request(thread_struct* thread_args_ptr) {
 
                     // Load has been split. Immediately attempt to update main processor of change.
                     worker_send_status(thread_args_ptr->thread_num, thread_args_ptr->remaining_loads);
+                    worker_send_status(index, work_send_value);
                 } else {
                     // Worker has exactly 0 or 1 loads. Not enough to send. Reject request instead.
                     work_send_value = -1;
diff --git a/src/load_balance_schemes.c b/src/load_balance_schemes.c
index 68b0072cbe76347e779050a6bd1ff7fafa8b1b4e..ee51fc85f0da099b1797c938767c3e3a43398023 100644
--- a/src/load_balance_schemes.c
+++ b/src/load_balance_schemes.c
@@ -82,7 +82,7 @@ void arr_main(thread_struct* thread_args_ptr) {
 
         // Check if message present from respective process.
         MPI_Iprobe(index, tag_status_update, MPI_COMM_WORLD, &msg_status_flag, MPI_STATUS_IGNORE);
-        if (msg_status_flag == 1) {
+        while (msg_status_flag == 1) {
             msg_recieved = 1;
 
             // Message present. Retrieve and handle.
@@ -90,6 +90,8 @@ void arr_main(thread_struct* thread_args_ptr) {
             MPI_Recv(recv_array, 2, MPI_INT, index, tag_status_update, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
             main_display_status(thread_args_ptr, recv_array[0], recv_array[1], init_run);
             free(recv_array);
+
+            MPI_Iprobe(index, tag_status_update, MPI_COMM_WORLD, &msg_status_flag, MPI_STATUS_IGNORE);
         }
 
         // Increment for next thread.