diff --git a/compute/pzbuild.c b/compute/pzbuild.c
index 2dc7586d7e68eb0712c222475f089a994e553f88..1b8d361a45ae0c91a6844576fe2b4ee74782bfd7 100644
--- a/compute/pzbuild.c
+++ b/compute/pzbuild.c
@@ -86,6 +86,6 @@ void morse_pzbuild( MORSE_enum uplo, MORSE_desc_t *A, void *user_data, void* use
     }
   }
 
-  RUNTIME_options_finalize(&options, morse);
-  MORSE_TASK_dataflush_all();
+  MORSE_TASK_flush_desc( &options, uplo, A );
+  RUNTIME_options_finalize( &options, morse);
 }
diff --git a/compute/pzgelqf.c b/compute/pzgelqf.c
index 14b8d1c94eb0db12fc8e76d29552edf93c5d3a70..3821a120983f2a5cda5082eaeeb0321d5c419e93 100644
--- a/compute/pzgelqf.c
+++ b/compute/pzgelqf.c
@@ -152,8 +152,11 @@ void morse_pzgelqf(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D,
 
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpper, T );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzgelqf_param.c b/compute/pzgelqf_param.c
index 4ab23160fb6e5b6ced1d4cc67bcd8fadcd58019a..88588051e1ef4e3d3baac9b254aefe02ee841d07 100644
--- a/compute/pzgelqf_param.c
+++ b/compute/pzgelqf_param.c
@@ -196,9 +196,12 @@ void morse_pzgelqf_param( const libhqr_tree_t *qrtree, MORSE_desc_t *A,
         RUNTIME_iteration_pop(morse);
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpper, TS );
+    MORSE_TASK_flush_desc( &options, MorseUpper, TT );
     free(tiles);
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzgelqfrh.c b/compute/pzgelqfrh.c
index 5f906d0acdb21db271991315cf2ae60f1ad2d368..141d94195d1800aa0e9158d3e4a97f97f78e26ff 100644
--- a/compute/pzgelqfrh.c
+++ b/compute/pzgelqfrh.c
@@ -180,8 +180,11 @@ void morse_pzgelqfrh(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D, int BS,
         }
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpper, T );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzgemm.c b/compute/pzgemm.c
index e661dbf642ea345b1be6781ceada5e83a41f1a4c..e001af357c58b8938c74085a7ce89c4d2204020f 100644
--- a/compute/pzgemm.c
+++ b/compute/pzgemm.c
@@ -134,20 +134,19 @@ void morse_pzgemm(MORSE_enum transA, MORSE_enum transB,
                     }
                 }
             }
+            MORSE_TASK_flush_data( &options, C(m, n) );
         }
         if (transA == MorseNoTrans) {
             for (k = 0; k < A->nt; k++) {
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
             }
         } else {
             for (k = 0; k < A->mt; k++) {
-                MORSE_TASK_dataflush( &options, A(k, m) );
+                MORSE_TASK_flush_data( &options, A(k, m) );
             }
         }
-        for (n = 0; n < C->nt; n++) {
-            MORSE_TASK_dataflush( &options, C(m, n) );
-        }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzgeqrf.c b/compute/pzgeqrf.c
index 1944e03d80ab5f6d50e23dd9c754d0146a584a91..1ccd8bb99dae30fec44fe4a3e150a368b21c6fe2 100644
--- a/compute/pzgeqrf.c
+++ b/compute/pzgeqrf.c
@@ -146,8 +146,11 @@ void morse_pzgeqrf(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D,
 
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseLower, T );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzgeqrf_param.c b/compute/pzgeqrf_param.c
index 945a07029ea0865a843836704f59d5c5c12e0e88..2382953a802dab0a2f219ad1941dc1c659c29092 100644
--- a/compute/pzgeqrf_param.c
+++ b/compute/pzgeqrf_param.c
@@ -195,9 +195,12 @@ void morse_pzgeqrf_param( const libhqr_tree_t *qrtree, MORSE_desc_t *A,
         RUNTIME_iteration_pop(morse);
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseLower, TS );
+    MORSE_TASK_flush_desc( &options, MorseLower, TT );
     free(tiles);
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzgeqrfrh.c b/compute/pzgeqrfrh.c
index 0176d8c19cd42dbb84b5ad1d8103ba6b665d1f34..aeec53fabbb299ca258319ef5c5f25baa8635dd6 100644
--- a/compute/pzgeqrfrh.c
+++ b/compute/pzgeqrfrh.c
@@ -177,11 +177,13 @@ void morse_pzgeqrfrh(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D, int BS,
                 }
             }
         }
-
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseLower, T );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzgetrf_incpiv.c b/compute/pzgetrf_incpiv.c
index 83efd149d6d53fffe8b3f87459877b46b0cd57ea..9b01a7552c952aed98a79bda85af22545d81efa1 100644
--- a/compute/pzgetrf_incpiv.c
+++ b/compute/pzgetrf_incpiv.c
@@ -135,9 +135,12 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
 
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseLower, L );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 
     morse_desc_mat_free(DIAG);
     free(DIAG);
diff --git a/compute/pzgetrf_nopiv.c b/compute/pzgetrf_nopiv.c
index 16150478f64d448bb67f7d94cb2be277aab78f7c..1385462496fec63ad7c1286fd2d5f2c936a15fc9 100644
--- a/compute/pzgetrf_nopiv.c
+++ b/compute/pzgetrf_nopiv.c
@@ -103,6 +103,8 @@ void morse_pzgetrf_nopiv(MORSE_desc_t *A,
 
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzhemm.c b/compute/pzhemm.c
index 1b00663ec1b9bda53002bde4e138d0986eb2f324..a8582ee597f84c26b237e4b83fad0fffb1917e85 100644
--- a/compute/pzhemm.c
+++ b/compute/pzhemm.c
@@ -226,6 +226,9 @@ void morse_pzhemm(MORSE_enum side, MORSE_enum uplo,
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, C );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzher2k.c b/compute/pzher2k.c
index 87778f4eb8a16cb90c5b453caca98f65c982fb4c..9bde1020aaf3c705ac60b6378804ba787ec7fd23 100644
--- a/compute/pzher2k.c
+++ b/compute/pzher2k.c
@@ -214,6 +214,9 @@ void morse_pzher2k(MORSE_enum uplo, MORSE_enum trans,
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, C );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzherk.c b/compute/pzherk.c
index dcb567fcf4e40576ae09b3f2a46a8c025d7d0424..e3dd914f372242d87ac4037e6b524b9575b65ccc 100644
--- a/compute/pzherk.c
+++ b/compute/pzherk.c
@@ -173,6 +173,7 @@ void morse_pzherk(MORSE_enum uplo, MORSE_enum trans,
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, uplo, C );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzhetrd_he2hb.c b/compute/pzhetrd_he2hb.c
index 090f185fb6431225d8a1a884f4f4650a9231ceb7..0d8ed1d2f3160e9b5e008f0081a56cdebb8c538c 100644
--- a/compute/pzhetrd_he2hb.c
+++ b/compute/pzhetrd_he2hb.c
@@ -435,9 +435,11 @@ void morse_pzhetrd_he2hb(MORSE_enum uplo,
                           A(k, k), ldak);
     }
 
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 
     MORSE_Sequence_Wait(sequence);
     morse_desc_mat_free(D);
diff --git a/compute/pzlacpy.c b/compute/pzlacpy.c
index 1f88ed10aa4b60d0e13f8421e6a369d2ce8fdda8..220c8b9dbdd6c12e94afcb23a12ac58413a5ffd8 100644
--- a/compute/pzlacpy.c
+++ b/compute/pzlacpy.c
@@ -129,6 +129,7 @@ void morse_pzlacpy(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B,
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzlag2c.c b/compute/pzlag2c.c
index 191526ee61f087ab8442a756d38dd91b8eec4fce..ec193214e4aa00e0391f2e4d51f4516499f92a78 100644
--- a/compute/pzlag2c.c
+++ b/compute/pzlag2c.c
@@ -67,6 +67,7 @@ void morse_pclag2z(MORSE_desc_t *SA, MORSE_desc_t *B,
                 B(m, n), ldbm);
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, SA );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzlange.c b/compute/pzlange.c
index ff9ccd9fc0395241b006e5330280556300406242..83eee09a6c8511743c0e15b7a6118dcc8cc80e78 100644
--- a/compute/pzlange.c
+++ b/compute/pzlange.c
@@ -412,5 +412,5 @@ void morse_pzlange(MORSE_enum norm, MORSE_desc_t *A, double *result,
     MORSE_Desc_Destroy( &(RESULT) );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzlanhe.c b/compute/pzlanhe.c
index 8e0bb19e0b97e449ebe76e1bbe268c3d2839a1dd..a637a283d648f92a4c760ccb87d636cd9b41acec 100644
--- a/compute/pzlanhe.c
+++ b/compute/pzlanhe.c
@@ -456,5 +456,5 @@ void morse_pzlanhe(MORSE_enum norm, MORSE_enum uplo, MORSE_desc_t *A, double *re
     }
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzlansy.c b/compute/pzlansy.c
index 4fc9c6bdee52e7b563b778eabd452272e41b4d78..cdb4c1dcab6d3c545f8d43052e294cc391609e5c 100644
--- a/compute/pzlansy.c
+++ b/compute/pzlansy.c
@@ -465,5 +465,5 @@ void morse_pzlansy(MORSE_enum norm, MORSE_enum uplo, MORSE_desc_t *A, double *re
     }
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzlantr.c b/compute/pzlantr.c
index c9dc86e776ed8c4b0773deb3a8ed57fb45fa6eaa..7f6ded725d09a4913259ba0a65da32d6a3359bc2 100644
--- a/compute/pzlantr.c
+++ b/compute/pzlantr.c
@@ -665,5 +665,5 @@ void morse_pzlantr(MORSE_enum norm, MORSE_enum uplo, MORSE_enum diag,
     }
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzlascal.c b/compute/pzlascal.c
index 9829782dcdab832516b73cd4e484d8ae6783b26e..2659c3d7e9c43cb131b75a1c59bbd26f10996da5 100644
--- a/compute/pzlascal.c
+++ b/compute/pzlascal.c
@@ -97,7 +97,6 @@ void morse_pzlascal(MORSE_enum uplo, MORSE_Complex64_t alpha, MORSE_desc_t *A,
             }
         }
     }
-    RUNTIME_options_ws_free(&options);
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzlaset.c b/compute/pzlaset.c
index 314acf23f64c7bac143e56915f40af63849a4fb4..a14ba24f0906bd491d0e16ccb6f41e1e42e63857 100644
--- a/compute/pzlaset.c
+++ b/compute/pzlaset.c
@@ -118,6 +118,6 @@ void morse_pzlaset(MORSE_enum uplo,
                A(j, j), ldaj);
        }
     }
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzlaset2.c b/compute/pzlaset2.c
index 7c0ce6306653431cae8832cd054f5e731771568a..c56661594e293db4fb28ececedaedc9c28e19dc3 100644
--- a/compute/pzlaset2.c
+++ b/compute/pzlaset2.c
@@ -107,7 +107,7 @@ void morse_pzlaset2(MORSE_enum uplo, MORSE_Complex64_t alpha,
                    A(i, j), ldai);
            }
        }
-    } 
+    }
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzlauum.c b/compute/pzlauum.c
index 1dbba64e53c75bd192715dfd222fb71961413645..9ff23bebea324af581de9af2c7bd96ca5841e9b9 100644
--- a/compute/pzlauum.c
+++ b/compute/pzlauum.c
@@ -76,7 +76,7 @@ void morse_pzlauum(MORSE_enum uplo, MORSE_desc_t *A,
                 }
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
                 MORSE_TASK_ztrmm(
                     &options,
                     MorseLeft, uplo, MorseConjTrans, MorseNonUnit,
@@ -84,7 +84,7 @@ void morse_pzlauum(MORSE_enum uplo, MORSE_desc_t *A,
                     1.0, A(k, k), ldak,
                          A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_zlauum(
                 &options,
                 uplo, tempkm, A->mb,
@@ -121,7 +121,7 @@ void morse_pzlauum(MORSE_enum uplo, MORSE_desc_t *A,
             }
             for (m = 0; m < k; m++) {
                 ldam = BLKLDD(A, m);
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
                 MORSE_TASK_ztrmm(
                     &options,
                     MorseRight, uplo, MorseConjTrans, MorseNonUnit,
@@ -129,13 +129,13 @@ void morse_pzlauum(MORSE_enum uplo, MORSE_desc_t *A,
                     1.0, A(k, k), ldak,
                          A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_zlauum(
                 &options,
                 uplo, tempkn, A->mb,
                 A(k, k), ldak);
         }
     }
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzplghe.c b/compute/pzplghe.c
index 068ca66cbd6b5a4d189bda0bc069c8b3b60a20b8..d0b0d16e0f4a66f7fc98a6b3a432fc2e22792f69 100644
--- a/compute/pzplghe.c
+++ b/compute/pzplghe.c
@@ -36,7 +36,7 @@
  *  morse_pzplghe - Generate a random hermitian (positive definite if 'bump' is large enough) half-matrix by tiles.
  **/
 void morse_pzplghe( double bump, MORSE_enum uplo, MORSE_desc_t *A,
-		            unsigned long long int seed,
+                    unsigned long long int seed,
                     MORSE_sequence_t *sequence, MORSE_request_t *request )
 {
     MORSE_context_t *morse;
@@ -55,48 +55,48 @@ void morse_pzplghe( double bump, MORSE_enum uplo, MORSE_desc_t *A,
     	tempmm = m == A->mt-1 ? A->m-m*A->mb : A->mb;
     	ldam = BLKLDD(A, m);
 
-		/*
-		 *  MorseLower
-		 */
-		if (uplo == MorseLower) {
-			for (n = 0; n <= m; n++) {
-				tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
+        /*
+         *  MorseLower
+         */
+        if (uplo == MorseLower) {
+            for (n = 0; n <= m; n++) {
+                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
 
-				options.priority = m + n;
-				MORSE_TASK_zplghe(
-					&options,
-					bump, tempmm, tempnn, A(m, n), ldam,
-					A->m, m*A->mb, n*A->nb, seed );
-			}
-		}
-		/*
-		 * MorseUpper
-		 */
-		else if (uplo == MorseUpper) {
-			for (n = m; n < A->nt; n++) {
-				tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
+                options.priority = m + n;
+                MORSE_TASK_zplghe(
+                    &options,
+                    bump, tempmm, tempnn, A(m, n), ldam,
+                    A->m, m*A->mb, n*A->nb, seed );
+            }
+        }
+        /*
+         * MorseUpper
+         */
+        else if (uplo == MorseUpper) {
+            for (n = m; n < A->nt; n++) {
+                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
 
-				options.priority = m + n;
-				MORSE_TASK_zplghe(
-					&options,
-					bump, tempmm, tempnn, A(m, n), ldam,
-					A->m, m*A->mb, n*A->nb, seed );
-			}
-		}
-		/*
-		 * MorseUpperLower
-		 */
-		else {
-			for (n = 0; n < A->nt; n++) {
-				tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
+                options.priority = m + n;
+                MORSE_TASK_zplghe(
+                    &options,
+                    bump, tempmm, tempnn, A(m, n), ldam,
+                    A->m, m*A->mb, n*A->nb, seed );
+            }
+        }
+        /*
+         * MorseUpperLower
+         */
+        else {
+            for (n = 0; n < A->nt; n++) {
+                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
 
-				MORSE_TASK_zplghe(
-					&options,
-					bump, tempmm, tempnn, A(m, n), ldam,
-					A->m, m*A->mb, n*A->nb, seed );
-			}
-		}
+                MORSE_TASK_zplghe(
+                    &options,
+                    bump, tempmm, tempnn, A(m, n), ldam,
+                    A->m, m*A->mb, n*A->nb, seed );
+            }
+        }
     }
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzplgsy.c b/compute/pzplgsy.c
index 9e0ae59de58446b7f88f3cf2b80ef9778f98db07..3c8c288bf80a57c30b3e992bcc2857634ab5870d 100644
--- a/compute/pzplgsy.c
+++ b/compute/pzplgsy.c
@@ -87,16 +87,16 @@ void morse_pzplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, MORSE_desc_t *A,
          * MorseUpperLower
          */
         else {
-			for (n = 0; n < A->nt; n++) {
-				tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
+            for (n = 0; n < A->nt; n++) {
+                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
 
-				MORSE_TASK_zplgsy(
-					&options,
-					bump, tempmm, tempnn, A(m, n), ldam,
-					A->m, m*A->mb, n*A->nb, seed );
-			}
+                MORSE_TASK_zplgsy(
+                    &options,
+                    bump, tempmm, tempnn, A(m, n), ldam,
+                    A->m, m*A->mb, n*A->nb, seed );
+            }
         }
     }
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzplrnt.c b/compute/pzplrnt.c
index 29ff7e47efaa760894bf5d2511af85d0a449fd5d..1e2fc8c61d8d45778549a08e326e184969e9c6a9 100644
--- a/compute/pzplrnt.c
+++ b/compute/pzplrnt.c
@@ -60,6 +60,6 @@ void morse_pzplrnt( MORSE_desc_t *A, unsigned long long int seed,
                 A->m, m*A->mb, n*A->nb, seed );
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzpotrf.c b/compute/pzpotrf.c
index bc648c74cc5e60867dae15ac5c6d32594a358742..662c96fd1050671274d6db890c692104720a445b 100644
--- a/compute/pzpotrf.c
+++ b/compute/pzpotrf.c
@@ -84,7 +84,7 @@ void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
                     zone, A(k, k), ldak,
                           A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
 
             for (n = k+1; n < A->nt; n++) {
                 tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
@@ -111,7 +111,7 @@ void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
                                A(n, k), ldan,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(n, k) );
+                MORSE_TASK_flush_data( &options, A(n, k) );
             }
             RUNTIME_iteration_pop(morse);
         }
@@ -144,7 +144,7 @@ void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
                     zone, A(k, k), ldak,
                           A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
 
             for (m = k+1; m < A->mt; m++) {
                 tempmm = m == A->mt-1 ? A->m - m*A->mb : A->mb;
@@ -170,13 +170,12 @@ void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
                                A(k, n), ldak,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(k, m) );
+                MORSE_TASK_flush_data( &options, A(k, m) );
             }
 
             RUNTIME_iteration_pop(morse);
         }
     }
-
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pzpotrimm.c b/compute/pzpotrimm.c
index a9d779b3049f23beaf128bd0bea2fadeb74f016b..abbbd1d03bd6c2e6d618c39ccdf42d9d12c03adc 100644
--- a/compute/pzpotrimm.c
+++ b/compute/pzpotrimm.c
@@ -85,7 +85,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                     zone, A(k, k), ldak,
                           A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
 
             for (n = k+1; n < A->nt; n++) {
                 tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
@@ -108,7 +108,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                                A(n, k), ldan,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(n, k) );
+                MORSE_TASK_flush_data( &options, A(n, k) );
             }
 
             RUNTIME_iteration_pop(morse);
@@ -143,10 +143,10 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                               A(k, n), ldak,
                         zone, A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
                 MORSE_TASK_ztrsm(
                     &options,
                     MorseLeft, uplo, MorseNoTrans, MorseNonUnit,
@@ -154,7 +154,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                     zone, A(k, k), ldak,
                           A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_ztrtri(
                 &options,
                 uplo, MorseNonUnit,
@@ -192,7 +192,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                 }
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
                 MORSE_TASK_ztrmm(
                     &options,
                     MorseLeft, uplo, MorseConjTrans, MorseNonUnit,
@@ -200,7 +200,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                     1.0, A(k, k), ldak,
                          A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_zlauum(
                 &options,
                 uplo, tempkm, A->mb,
@@ -257,10 +257,10 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                         }
                     }
                 }
-                MORSE_TASK_dataflush( &options, B(m, k) );
+                MORSE_TASK_flush_data( &options, B(m, k) );
             }
             for (n = 0; n <= k; n++) {
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
             }
 
             RUNTIME_iteration_pop(morse);
@@ -293,7 +293,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                     zone, A(k, k), ldak,
                           A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
 
             for (m = k+1; m < A->mt; m++) {
                 tempmm = m == A->mt-1 ? A->m - m*A->mb : A->mb;
@@ -317,7 +317,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                                A(k, n), ldak,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(k, m) );
+                MORSE_TASK_flush_data( &options, A(k, m) );
             }
 
             RUNTIME_iteration_pop(morse);
@@ -351,11 +351,11 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                               A(k, n), ldak,
                         zone, A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
             }
             for (m = 0; m < k; m++) {
                 ldam = BLKLDD(A, m);
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
                 MORSE_TASK_ztrsm(
                     &options,
                     MorseRight, uplo, MorseNoTrans, MorseNonUnit,
@@ -363,7 +363,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                     zone, A(k, k), ldak,
                           A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_ztrtri(
                 &options,
                 uplo, MorseNonUnit,
@@ -403,7 +403,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
             }
             for (m = 0; m < k; m++) {
                 ldam = BLKLDD(A, m);
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
                 MORSE_TASK_ztrmm(
                     &options,
                     MorseRight, uplo, MorseConjTrans, MorseNonUnit,
@@ -411,7 +411,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                     1.0, A(k, k), ldak,
                          A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_zlauum(
                 &options,
                 uplo, tempkn, A->mb,
@@ -468,10 +468,10 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                         }
                     }
                 }
-                MORSE_TASK_dataflush( &options, B(m, k) );
+                MORSE_TASK_flush_data( &options, B(m, k) );
             }
             for (m = 0; m <= k; m++) {
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
             }
 
             RUNTIME_iteration_pop(morse);
@@ -479,4 +479,5 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
     }
 
     RUNTIME_options_finalize(&options, morse);
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzsymm.c b/compute/pzsymm.c
index eda68c35c9538f4c8935e2c8730b661cdc4a1a75..71b95895790cd969316790ce7f871b51da7cb46d 100644
--- a/compute/pzsymm.c
+++ b/compute/pzsymm.c
@@ -141,16 +141,16 @@ void morse_pzsymm(MORSE_enum side, MORSE_enum uplo,
                         }
                     }
                 }
-                MORSE_TASK_dataflush( &options, B(k, n) );
+                MORSE_TASK_flush_data( &options, B(k, n) );
             }
             if (uplo == MorseLower) {
                 for (n = 0; n <= k; n++) {
-                    MORSE_TASK_dataflush( &options, A(k, n) );
+                    MORSE_TASK_flush_data( &options, A(k, n) );
                 }
             }
             else {
                 for (m = 0; m <= k; m++) {
-                    MORSE_TASK_dataflush( &options, A(m, k) );
+                    MORSE_TASK_flush_data( &options, A(m, k) );
                 }
             }
         }
@@ -242,20 +242,20 @@ void morse_pzsymm(MORSE_enum side, MORSE_enum uplo,
                         }
                     }
                 }
-                MORSE_TASK_dataflush( &options, B(m, k) );
+                MORSE_TASK_flush_data( &options, B(m, k) );
             }
             if (uplo == MorseLower) {
                 for (n = 0; n <= k; n++) {
-                    MORSE_TASK_dataflush( &options, A(k, n) );
+                    MORSE_TASK_flush_data( &options, A(k, n) );
                 }
             }
             else {
                 for (m = 0; m <= k; m++) {
-                    MORSE_TASK_dataflush( &options, A(m, k) );
+                    MORSE_TASK_flush_data( &options, A(m, k) );
                 }
             }
         }
     }
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzsyr2k.c b/compute/pzsyr2k.c
index ada387ab22f3f56ab52d855585847bec8a2e002c..68e4d6ee10c6f207e25a2087dd4b301eac21be44 100644
--- a/compute/pzsyr2k.c
+++ b/compute/pzsyr2k.c
@@ -213,6 +213,9 @@ void morse_pzsyr2k(MORSE_enum uplo, MORSE_enum trans,
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, uplo, C );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzsyrk.c b/compute/pzsyrk.c
index 3312af9fff7c75a3d91b0acaeb267e15494f382f..49508895c5aabd53caa555efff8b967757febb7f 100644
--- a/compute/pzsyrk.c
+++ b/compute/pzsyrk.c
@@ -172,6 +172,7 @@ void morse_pzsyrk(MORSE_enum uplo, MORSE_enum trans,
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, uplo, C );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzsytrf.c b/compute/pzsytrf.c
index 818ba9625ef8424915d8f1d614712e804d7298b3..2ea509a512d9ed1afd16da1ad445bd8d496e84da 100644
--- a/compute/pzsytrf.c
+++ b/compute/pzsytrf.c
@@ -80,7 +80,7 @@ void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
                     zone, A(k, k), ldak,
                           A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
 
             for (n = k+1; n < A->nt; n++) {
                 tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
@@ -103,7 +103,7 @@ void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
                                A(n, k), ldan,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(n, k) );
+                MORSE_TASK_flush_data( &options, A(n, k) );
             }
 
             RUNTIME_iteration_pop(morse);
@@ -133,7 +133,7 @@ void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
                     zone, A(k, k), ldak,
                           A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
 
             for (m = k+1; m < A->mt; m++) {
                 tempmm = m == A->mt-1 ? A->m - m*A->mb : A->mb;
@@ -157,14 +157,14 @@ void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
                                A(k, n), ldak,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(k, m) );
+                MORSE_TASK_flush_data( &options, A(k, m) );
             }
 
             RUNTIME_iteration_pop(morse);
         }
     }
 
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pztile.c b/compute/pztile.c
index 1732f5bd0534e0c435734cfefc296578ab5a5c25..c5222001063655c1d9e706b715101c53a759fd32 100644
--- a/compute/pztile.c
+++ b/compute/pztile.c
@@ -74,7 +74,7 @@ void morse_pzlapack_to_tile(MORSE_Complex64_t *Af77, int ldaf77, MORSE_desc_t *A
 
     RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     RUNTIME_desc_getoncpu( &B );
     RUNTIME_desc_destroy( &B );
 }
@@ -122,9 +122,9 @@ void morse_pztile_to_lapack(MORSE_desc_t *A, MORSE_Complex64_t *Af77, int ldaf77
         }
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
     RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
-    MORSE_TASK_dataflush_all();
     RUNTIME_desc_getoncpu( &B );
     RUNTIME_desc_destroy( &B );
 }
@@ -160,5 +160,4 @@ void morse_pztile_zero(MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_reques
 
     RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pztile2band.c b/compute/pztile2band.c
index a5efb27771ac4c206f53ea1f03f659e50eb8b07c..22b8ca68fea6be025cc4df1e59b58df84c68f785 100644
--- a/compute/pztile2band.c
+++ b/compute/pztile2band.c
@@ -118,7 +118,7 @@ void morse_pztile2band(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B,
        }
     }
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
 #undef B
 #undef A
diff --git a/compute/pztpgqrt.c b/compute/pztpgqrt.c
index 6abd4af7a86c5c439d6c2a6d962a99cbd20b2840..fe4b413eae2c407fe39e804c6d7aaa53cdee9e3c 100644
--- a/compute/pztpgqrt.c
+++ b/compute/pztpgqrt.c
@@ -162,9 +162,14 @@ void morse_pztpgqrt( int L,
         RUNTIME_iteration_pop(morse);
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, V1 );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, V2 );
+    MORSE_TASK_flush_desc( &options, MorseLower,      T1 );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, T2 );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q1 );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q2 );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D  );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
-
     (void)D;
 }
diff --git a/compute/pztpqrt.c b/compute/pztpqrt.c
index d20512803bd4d269d2cb28a0e77800d26f9d9e0a..6101c0934b551cc1a2d5cba6388ad6e68353e7da 100644
--- a/compute/pztpqrt.c
+++ b/compute/pztpqrt.c
@@ -110,7 +110,10 @@ void morse_pztpqrt( int L, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *T,
 
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseLower,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pztradd.c b/compute/pztradd.c
index 152960e9a5811f25c581a9e4f405959e07d24b90..8d121b7e9d1b916129c3de29d30803993e552633 100644
--- a/compute/pztradd.c
+++ b/compute/pztradd.c
@@ -193,4 +193,8 @@ void morse_pztradd(MORSE_enum uplo, MORSE_enum trans,
             }
         }
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, uplo, B );
+    RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pztrmm.c b/compute/pztrmm.c
index 1d9b20c0a5eaa6853fa461c4463487da17984f60..b9f6cb0063da5bfba8a0dbd20257d0b5fcf53363 100644
--- a/compute/pztrmm.c
+++ b/compute/pztrmm.c
@@ -310,6 +310,8 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
             }
         }
     }
+
+    MORSE_TASK_flush_desc( &options, uplo, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pztrsm.c b/compute/pztrsm.c
index f981f68bb282d0bb1ea941ca5e496956a66a951e..c861890ccdee3d1e3995cabedf8ddc8d27091737 100644
--- a/compute/pztrsm.c
+++ b/compute/pztrsm.c
@@ -75,7 +75,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             lalpha, A(B->mt-1-k, B->mt-1-k), ldak,  /* lda * tempkm */
                                     B(B->mt-1-k,        n), ldbk); /* ldb * tempnn */
                     }
-                    MORSE_TASK_dataflush( &options, A(B->mt-1-k, B->mt-1-k) );
+                    MORSE_TASK_flush_data( &options, A(B->mt-1-k, B->mt-1-k) );
                     for (m = k+1; m < B->mt; m++) {
                         ldam = BLKLDD(A, B->mt-1-m);
                         ldbm = BLKLDD(B, B->mt-1-m);
@@ -89,10 +89,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                         B(B->mt-1-k, n       ), ldbk,
                                 lalpha, B(B->mt-1-m, n       ), ldbm);
                         }
-                        MORSE_TASK_dataflush( &options, A(B->mt-1-m, B->mt-1-k) );
+                        MORSE_TASK_flush_data( &options, A(B->mt-1-m, B->mt-1-k) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, B(B->mt-1-k, n) );
+                        MORSE_TASK_flush_data( &options, B(B->mt-1-k, n) );
                     }
                 }
             }
@@ -114,7 +114,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             lalpha, A(k, k), ldak,
                                     B(k, n), ldbk);
                     }
-                    MORSE_TASK_dataflush( &options, A(k, k) );
+                    MORSE_TASK_flush_data( &options, A(k, k) );
                     for (m = k+1; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
                         ldbm = BLKLDD(B, m);
@@ -128,10 +128,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                         B(k, n), ldbk,
                                 lalpha, B(m, n), ldbm);
                         }
-                        MORSE_TASK_dataflush( &options, A(k, m) );
+                        MORSE_TASK_flush_data( &options, A(k, m) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, B(k, n) );
+                        MORSE_TASK_flush_data( &options, B(k, n) );
                     }
 
                 }
@@ -156,7 +156,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             lalpha, A(k, k), ldak,
                                     B(k, n), ldbk);
                     }
-                    MORSE_TASK_dataflush( &options, A(k, k) );
+                    MORSE_TASK_flush_data( &options, A(k, k) );
                     for (m = k+1; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
                         ldam = BLKLDD(A, m);
@@ -171,10 +171,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                         B(k, n), ldbk,
                                 lalpha, B(m, n), ldbm);
                         }
-                        MORSE_TASK_dataflush( &options, A(m, k) );
+                        MORSE_TASK_flush_data( &options, A(m, k) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, B(k, n) );
+                        MORSE_TASK_flush_data( &options, B(k, n) );
                     }
                 }
             }
@@ -196,7 +196,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             lalpha, A(B->mt-1-k, B->mt-1-k), ldak,
                                     B(B->mt-1-k,        n), ldbk);
                     }
-                    MORSE_TASK_dataflush( &options, A(B->mt-1-k, B->mt-1-k) );
+                    MORSE_TASK_flush_data( &options, A(B->mt-1-k, B->mt-1-k) );
                     for (m = k+1; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
                         ldbm = BLKLDD(B, B->mt-1-m);
@@ -210,10 +210,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                         B(B->mt-1-k, n       ), ldbk,
                                 lalpha, B(B->mt-1-m, n       ), ldbm);
                         }
-                        MORSE_TASK_dataflush( &options, A(B->mt-1-k, B->mt-1-m) );
+                        MORSE_TASK_flush_data( &options, A(B->mt-1-k, B->mt-1-m) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, B(B->mt-1-k, n) );
+                        MORSE_TASK_flush_data( &options, B(B->mt-1-k, n) );
                     }
                 }
             }
@@ -239,7 +239,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             lalpha, A(k, k), ldak,  /* lda * tempkn */
                                     B(m, k), ldbm); /* ldb * tempkn */
                     }
-                    MORSE_TASK_dataflush( &options, A(k, k) );
+                    MORSE_TASK_flush_data( &options, A(k, k) );
                     for (m = 0; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
                         ldbm = BLKLDD(B, m);
@@ -253,10 +253,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                         A(k, n), ldak,  /* lda * tempnn */
                                 lalpha, B(m, n), ldbm); /* ldb * tempnn */
                         }
-                        MORSE_TASK_dataflush( &options, B(m, k) );
+                        MORSE_TASK_flush_data( &options, B(m, k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, A(k, n) );
+                        MORSE_TASK_flush_data( &options, A(k, n) );
                     }
                 }
             }
@@ -276,7 +276,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             tempmm, tempkn, A->mb,
                             alpha, A(B->nt-1-k, B->nt-1-k), ldak,  /* lda * tempkn */
                                    B(       m, B->nt-1-k), ldbm); /* ldb * tempkn */
-                        MORSE_TASK_dataflush( &options, A(B->nt-1-k, B->nt-1-k) );
+                        MORSE_TASK_flush_data( &options, A(B->nt-1-k, B->nt-1-k) );
 
                         for (n = k+1; n < B->nt; n++) {
                             ldan = BLKLDD(A, B->nt-1-n);
@@ -288,10 +288,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                            A(B->nt-1-n, B->nt-1-k), ldan, /* A->mb * tempkn (Never last row) */
                                 zone,      B(m,        B->nt-1-n), ldbm); /* ldb  * B->nb   */
                         }
-                        MORSE_TASK_dataflush( &options, B(m,        B->nt-1-k) );
+                        MORSE_TASK_flush_data( &options, B(m,        B->nt-1-k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, A(B->nt-1-n, B->nt-1-k) );
+                        MORSE_TASK_flush_data( &options, A(B->nt-1-n, B->nt-1-k) );
                     }
                 }
             }
@@ -314,7 +314,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             tempmm, tempkn, A->mb,
                             lalpha, A(B->nt-1-k, B->nt-1-k), ldak,  /* lda * tempkn */
                                     B(       m, B->nt-1-k), ldbm); /* ldb * tempkn */
-                        MORSE_TASK_dataflush( &options, A(B->nt-1-k, B->nt-1-k) );
+                        MORSE_TASK_flush_data( &options, A(B->nt-1-k, B->nt-1-k) );
 
                         for (n = k+1; n < B->nt; n++) {
                             MORSE_TASK_zgemm(
@@ -325,10 +325,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                         A(B->nt-1-k, B->nt-1-n), ldak,  /* lda * B->nb   */
                                 lalpha, B(m,        B->nt-1-n), ldbm); /* ldb * B->nb   */
                         }
-                        MORSE_TASK_dataflush( &options, B(m,        B->nt-1-k) );
+                        MORSE_TASK_flush_data( &options, B(m,        B->nt-1-k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, A(B->nt-1-k, B->nt-1-n) );
+                        MORSE_TASK_flush_data( &options, A(B->nt-1-k, B->nt-1-n) );
                     }
                 }
             }
@@ -348,7 +348,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             tempmm, tempkn, A->mb,
                             alpha, A(k, k), ldak,  /* lda * tempkn */
                                    B(m, k), ldbm); /* ldb * tempkn */
-                        MORSE_TASK_dataflush( &options, A(k, k) );
+                        MORSE_TASK_flush_data( &options, A(k, k) );
 
                         for (n = k+1; n < B->nt; n++) {
                             tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
@@ -361,10 +361,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                            A(n, k), ldan, /* ldan * tempkn */
                                 zone,      B(m, n), ldbm); /* ldb  * tempnn */
                         }
-                        MORSE_TASK_dataflush( &options, B(m, k) );
+                        MORSE_TASK_flush_data( &options, B(m, k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, A(n, k) );
+                        MORSE_TASK_flush_data( &options, A(n, k) );
                     }
 
                 }
diff --git a/compute/pztrsmpl.c b/compute/pztrsmpl.c
index 4c8631b3d2f9d1fed197a8bdb4e074091b35fd6d..4c51e7a5eef96cee0880901ce9277b8a9459461b 100644
--- a/compute/pztrsmpl.c
+++ b/compute/pztrsmpl.c
@@ -87,6 +87,7 @@ void morse_pztrsmpl(MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *L, int *IPIV
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseLower, L );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pztrtri.c b/compute/pztrtri.c
index 7326596561695d2b9f44a090454b3fdc814830f9..fbea4fe03db5e43c968f9bbc90cc767520b185c8 100644
--- a/compute/pztrtri.c
+++ b/compute/pztrtri.c
@@ -82,10 +82,10 @@ void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
                               A(k, n), ldak,
                         zone, A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
                 MORSE_TASK_ztrsm(
                     &options,
                     MorseLeft, uplo, MorseNoTrans, diag,
@@ -93,7 +93,7 @@ void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
                     zone, A(k, k), ldak,
                           A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_ztrtri(
                 &options,
                 uplo, diag,
@@ -133,11 +133,11 @@ void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
                               A(k, n), ldak,
                         zone, A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
             }
             for (m = 0; m < k; m++) {
                 ldam = BLKLDD(A, m);
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
                 MORSE_TASK_ztrsm(
                     &options,
                     MorseRight, uplo, MorseNoTrans, diag,
@@ -145,7 +145,7 @@ void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
                     zone, A(k, k), ldak,
                           A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_ztrtri(
                 &options,
                 uplo, diag,
@@ -155,6 +155,6 @@ void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
             RUNTIME_iteration_pop(morse);
         }
     }
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzunglq.c b/compute/pzunglq.c
index 3ae06f9cdf6a8db447c1917a518fdaa592e50e50..d764b3a71b19b785f06eaecad117c8827eafc467 100644
--- a/compute/pzunglq.c
+++ b/compute/pzunglq.c
@@ -141,8 +141,12 @@ void morse_pzunglq(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T, MORSE_desc
 
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
     (void)D;
 }
diff --git a/compute/pzunglq_param.c b/compute/pzunglq_param.c
index 4a5d7c21c60ea1bdf92997eb166cb630c612057e..6da5c30702d06b7db6a3d7cf928a953ddbeab1df 100644
--- a/compute/pzunglq_param.c
+++ b/compute/pzunglq_param.c
@@ -169,9 +169,14 @@ void morse_pzunglq_param(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_des
         RUNTIME_iteration_pop(morse);
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A  );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q  );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      TS );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      TT );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D  );
     free(tiles);
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzunglqrh.c b/compute/pzunglqrh.c
index ae0bd1f35e2b435f77393b75b89f6db8352cac53..bd76fe5be8ce970c6aa6a202a8b21ce0b368adec 100644
--- a/compute/pzunglqrh.c
+++ b/compute/pzunglqrh.c
@@ -161,11 +161,14 @@ void morse_pzunglqrh(MORSE_desc_t *A, MORSE_desc_t *Q,
                     Q(m, N), ldqm);
             }
         }
-
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
     (void)D;
 }
diff --git a/compute/pzungqr.c b/compute/pzungqr.c
index 15d2d6a553aaac143be6a8c9d830a3ff29a02a27..c2e0829d166aca1856a11a8a7789b1e6f022dbaa 100644
--- a/compute/pzungqr.c
+++ b/compute/pzungqr.c
@@ -139,11 +139,14 @@ void morse_pzungqr(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T, MORSE_desc
                 T(k, k), T->mb,
                 Q(k, n), ldqk);
         }
-
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q );
+    MORSE_TASK_flush_desc( &options, MorseLower,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
     (void)D;
 }
diff --git a/compute/pzungqr_param.c b/compute/pzungqr_param.c
index 5c9df7ac554cf33d3b176fdaf36a9e983b1e9534..13b1be1c6a3f910b1062cbeafcf019c7bb219403 100644
--- a/compute/pzungqr_param.c
+++ b/compute/pzungqr_param.c
@@ -175,9 +175,14 @@ void morse_pzungqr_param(const libhqr_tree_t *qrtree,
         RUNTIME_iteration_pop(morse);
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A  );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q  );
+    MORSE_TASK_flush_desc( &options, MorseLower,      TS );
+    MORSE_TASK_flush_desc( &options, MorseLower,      TT );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D  );
     free(tiles);
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzungqrrh.c b/compute/pzungqrrh.c
index 46d4412a183ea73b07ba3f5c36f3fa5e77ea4bbd..c383858d2313afdb47ad6a4820752542b95d50d1 100644
--- a/compute/pzungqrrh.c
+++ b/compute/pzungqrrh.c
@@ -166,11 +166,15 @@ void morse_pzungqrrh(MORSE_desc_t *A, MORSE_desc_t *Q,
                     Q(M, n), ldqM);
             }
         }
-
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q );
+    MORSE_TASK_flush_desc( &options, MorseLower,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzunmlq.c b/compute/pzunmlq.c
index 572ac0254d9c0c58e3a865808c91e284f328ca30..c6547f3dc0720bc747d7cdccc2b48afc4035cdf3 100644
--- a/compute/pzunmlq.c
+++ b/compute/pzunmlq.c
@@ -312,8 +312,12 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
             }
         }
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
     (void)D;
 }
diff --git a/compute/pzunmlq_param.c b/compute/pzunmlq_param.c
index 10731ba0534956c130c39c442850cb7e5e365084..0b5ef65f8c77cd1fddb726cf2ec672d060c48d9f 100644
--- a/compute/pzunmlq_param.c
+++ b/compute/pzunmlq_param.c
@@ -432,10 +432,15 @@ void morse_pzunmlq_param(const libhqr_tree_t *qrtree,
         }
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A  );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B  );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      TS );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      TT );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D  );
     free(tiles);
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 
     (void)D;
 }
diff --git a/compute/pzunmlqrh.c b/compute/pzunmlqrh.c
index 7d7c142ebc7a20f5e4963ae756ee970c831a96f9..ac288111c5c74ee1c8e4b52a14790e2eb7df2a32 100644
--- a/compute/pzunmlqrh.c
+++ b/compute/pzunmlqrh.c
@@ -407,8 +407,13 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
             }
         }
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzunmqr.c b/compute/pzunmqr.c
index da5d917970a954d2077197bdf7b384bec5c2fad4..86dc63bd780ea02071078ebe6aa836c70645a169 100644
--- a/compute/pzunmqr.c
+++ b/compute/pzunmqr.c
@@ -317,8 +317,12 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
             }
         }
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, MorseLower,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
     (void)D;
 }
diff --git a/compute/pzunmqr_param.c b/compute/pzunmqr_param.c
index 6dc3e7dacb25e2516d2c8f887a0f79243216e253..5f7b20032020d22c7dea3bdfef1b78a74ccca9dd 100644
--- a/compute/pzunmqr_param.c
+++ b/compute/pzunmqr_param.c
@@ -431,10 +431,15 @@ void morse_pzunmqr_param(const libhqr_tree_t *qrtree,
         }
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A  );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B  );
+    MORSE_TASK_flush_desc( &options, MorseLower,      TS );
+    MORSE_TASK_flush_desc( &options, MorseLower,      TT );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D  );
     free(tiles);
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 
     (void)D;
 }
diff --git a/compute/pzunmqrrh.c b/compute/pzunmqrrh.c
index f077cac7544b6e2c222487f2d8f93181c91c3bb0..80f9879db09d4fe3162794f99b11b23a445ed599 100644
--- a/compute/pzunmqrrh.c
+++ b/compute/pzunmqrrh.c
@@ -412,8 +412,12 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
             }
         }
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, MorseLower,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
     (void)D;
 }
diff --git a/control/control.c b/control/control.c
index 587a24ae1dfbd22dc7ffb93cac8c91005b260b2b..4a9dff466b7dcc8061573678991a07194a0b2de7 100644
--- a/control/control.c
+++ b/control/control.c
@@ -134,7 +134,7 @@ int MORSE_Finalize(void)
         morse_error("MORSE_Finalize()", "MORSE not initialized");
         return MORSE_ERR_NOT_INITIALIZED;
     }
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 #  if !defined(CHAMELEON_SIMULATION)
     RUNTIME_barrier(morse);
 #  endif
diff --git a/include/chameleon/morse_tasks.h b/include/chameleon/morse_tasks.h
index a2fc5efe6ebaa02ed55a1f08ae920b1c6f00ea11..82abf2c7853cbf5269d8b1887386dbd48440762a 100644
--- a/include/chameleon/morse_tasks.h
+++ b/include/chameleon/morse_tasks.h
@@ -49,9 +49,11 @@ void MORSE_TASK_stile_zero(const MORSE_option_t *options,
 /*
  * Mark a data as unused after this call
  */
-void MORSE_TASK_dataflush(const MORSE_option_t *options,
-                          const MORSE_desc_t *A, int Am, int An);
-void MORSE_TASK_dataflush_all();
+void MORSE_TASK_flush_data( const MORSE_option_t *options,
+                           const MORSE_desc_t *A, int Am, int An);
+void MORSE_TASK_flush_desc( const MORSE_option_t *options,
+                           MORSE_enum uplo, const MORSE_desc_t *A );
+void MORSE_TASK_flush_all();
 
 #include "chameleon/morse_tasks_z.h"
 #include "chameleon/morse_tasks_d.h"
diff --git a/runtime/parsec/codelets/codelet_dataflush.c b/runtime/parsec/codelets/codelet_dataflush.c
index 606f8dc7d5b194d1565785cfb8913af1055193dd..9b3e40a3db8a355a10ff6f8651cbf5e25a48f98c 100644
--- a/runtime/parsec/codelets/codelet_dataflush.c
+++ b/runtime/parsec/codelets/codelet_dataflush.c
@@ -22,17 +22,28 @@
 #include "chameleon_parsec.h"
 #include "chameleon/chameleon_tasks.h"
 
-void MORSE_TASK_dataflush(const MORSE_option_t *options,
-                          const MORSE_desc_t *A, int Am, int An)
+void MORSE_TASK_flush_data( const MORSE_option_t *options,
+                           const MORSE_desc_t *A, int Am, int An )
 {
-    (void)options; (void)A;
+    (void)options; (void)A; (void)Am; (void)An;
 
     /*
-     * This is useful for StarPU implementation, if it happens in Quark, it will
-     * need to be done carefuly to not break both runtimes.
+     * This is useful for StarPU and PaRSEC MPI implementation, if it happens in
+     * Quark, it will need to be done carefuly to not break other runtimes.
      */
 }
 
-void MORSE_TASK_dataflush_all()
+void MORSE_TASK_flush_desc( const MORSE_option_t *options,
+                           MORSE_enum uplo, const MORSE_desc_t *A )
+{
+    (void)options; (void)uplo; (void)A;
+
+    /*
+     * This is useful for StarPU and PaRSEC MPI implementation, if it happens in
+     * Quark, it will need to be done carefuly to not break other runtimes.
+     */
+}
+
+void MORSE_TASK_flush_all()
 {
 }
diff --git a/runtime/quark/codelets/codelet_dataflush.c b/runtime/quark/codelets/codelet_dataflush.c
index 300f335840c00cbf923f2c7b23ebbf2efeb0a8e4..cbec78c35a0739516c61a3c7d36a99c2cfbb3148 100644
--- a/runtime/quark/codelets/codelet_dataflush.c
+++ b/runtime/quark/codelets/codelet_dataflush.c
@@ -26,17 +26,28 @@
  **/
 #include "chameleon_quark.h"
 
-void MORSE_TASK_dataflush(const MORSE_option_t *options,
-                          const MORSE_desc_t *A, int Am, int An)
+void MORSE_TASK_flush_data( const MORSE_option_t *options,
+                           const MORSE_desc_t *A, int Am, int An )
 {
     (void)options; (void)A; (void)Am; (void)An;
 
     /*
-     * This is useful for StarPU implementation, if it happens in Quark, it will
-     * need to be done carefuly to not break both runtimes.
+     * This is useful for StarPU and PaRSEC MPI implementation, if it happens in
+     * Quark, it will need to be done carefuly to not break other runtimes.
      */
 }
 
-void MORSE_TASK_dataflush_all()
+void MORSE_TASK_flush_desc( const MORSE_option_t *options,
+                           MORSE_enum uplo, const MORSE_desc_t *A )
+{
+    (void)options; (void)uplo; (void)A;
+
+    /*
+     * This is useful for StarPU and PaRSEC MPI implementation, if it happens in
+     * Quark, it will need to be done carefuly to not break other runtimes.
+     */
+}
+
+void MORSE_TASK_flush_all()
 {
 }
diff --git a/runtime/starpu/codelets/codelet_dataflush.c b/runtime/starpu/codelets/codelet_dataflush.c
index 2e43d5ec1f324151b3429b5c3726bf8bf529b186..be96e164ca891e1ec4c16091a22455604a9b83c2 100644
--- a/runtime/starpu/codelets/codelet_dataflush.c
+++ b/runtime/starpu/codelets/codelet_dataflush.c
@@ -56,16 +56,11 @@ int RUNTIME_desc_iscached(const MORSE_desc_t *A, int Am, int An)
 #endif
 #endif
 
-void MORSE_TASK_dataflush(const MORSE_option_t *options,
+void MORSE_TASK_flush_data(const MORSE_option_t *options,
                           const MORSE_desc_t *A, int Am, int An)
 {
     (void)options;
 
-    /*
-     * We can use MORSE_Complex64_t for all precisions since it is not use to
-     * compute the handle address in starpu.  We have to be careful with this if
-     * something similar happen in Quark.
-     */
     {
         starpu_data_handle_t *ptrtile = (starpu_data_handle_t*)(A->schedopt);
         ptrtile += ((int64_t)(A->lmt) * (int64_t)An + (int64_t)Am);
@@ -91,7 +86,46 @@ void MORSE_TASK_dataflush(const MORSE_option_t *options,
     }
 }
 
-void MORSE_TASK_dataflush_all()
+void MORSE_TASK_flush_desc( const MORSE_option_t *options,
+                           MORSE_enum uplo, const MORSE_desc_t *A )
+{
+    int m, n;
+
+    switch (uplo) {
+    /*
+     *  MorseUpper
+     */
+    case MorseUpper:
+        for (m = 0; m < A->mt; m++) {
+            for (n = m; n < A->nt; n++) {
+                MORSE_TASK_flush_data( options, A, m, n );
+            }
+        }
+        break;
+    /*
+     *  MorseLower
+     */
+    case MorseLower:
+        for (m = 0; m < A->mt; m++) {
+            for (n = 0; n < chameleon_min(m+1, A->nt); n++) {
+                MORSE_TASK_flush_data( options, A, m, n );
+            }
+        }
+        break;
+    /*
+     *  MorseUpperLower
+     */
+    case MorseUpperLower:
+    default:
+        for (m = 0; m < A->mt; m++) {
+            for (n = 0; n < A->nt; n++) {
+                MORSE_TASK_flush_data( options, A, m, n );
+            }
+        }
+    }
+}
+
+void MORSE_TASK_flush_all()
 {
 #if defined(CHAMELEON_USE_MPI)
     starpu_mpi_cache_flush_all_data(MPI_COMM_WORLD);
diff --git a/runtime/starpu/codelets/codelet_ztile_zero.c b/runtime/starpu/codelets/codelet_ztile_zero.c
index 26841ceb373d51768a66062e05feb11bb75ed2d6..218a0ed15805e4bcf0aade236f57abdf80b74803 100644
--- a/runtime/starpu/codelets/codelet_ztile_zero.c
+++ b/runtime/starpu/codelets/codelet_ztile_zero.c
@@ -30,9 +30,9 @@
 /*****************************************************************************
  *
  **/
-void MORSE_TASK_ztile_zero(const const MORSE_option_t *options,
-                           int X1, int X2, int Y1, int Y2,
-                           const MORSE_desc_t *A, int Am, int An, int lda)
+void MORSE_TASK_ztile_zero( const MORSE_option_t *options,
+                            int X1, int X2, int Y1, int Y2,
+                            const MORSE_desc_t *A, int Am, int An, int lda )
 {
     struct starpu_codelet *codelet;
     codelet = &cl_ztile_zero;
diff --git a/timing/time_zsytrf_tile.c b/timing/time_zsytrf_tile.c
index b3ea2ab4b705ef69ce3985b1f9c58f19938a84c8..423b77b7068c5ee9e63b085c97294cd7db411677 100644
--- a/timing/time_zsytrf_tile.c
+++ b/timing/time_zsytrf_tile.c
@@ -68,7 +68,7 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
     } 
 	
     PASTE_CODE_FREE_MATRIX( descA );
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 
     return 0;
 }