diff --git a/compute/pzbuild.c b/compute/pzbuild.c
index 1b8d361a45ae0c91a6844576fe2b4ee74782bfd7..f4e3a6c0b8f0bdb26eb7676ca5aa0561e92ee7e2 100644
--- a/compute/pzbuild.c
+++ b/compute/pzbuild.c
@@ -30,7 +30,7 @@
 #include "control/common.h"
 
 #define A(m, n) A,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile matrix generation
  *
  *******************************************************************************
@@ -86,6 +86,5 @@ void morse_pzbuild( MORSE_enum uplo, MORSE_desc_t *A, void *user_data, void* use
     }
   }
 
-  MORSE_TASK_flush_desc( &options, uplo, A );
   RUNTIME_options_finalize( &options, morse);
 }
diff --git a/compute/pzgelqf.c b/compute/pzgelqf.c
index 3821a120983f2a5cda5082eaeeb0321d5c419e93..2d28d719c13d1855e0ab7fb5c698fc2dc6388743 100644
--- a/compute/pzgelqf.c
+++ b/compute/pzgelqf.c
@@ -38,7 +38,7 @@
 #define D(k)   A, k, k
 #endif
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile LQ factorization - dynamic scheduling
  **/
 void morse_pzgelqf(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D,
@@ -153,10 +153,7 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzgelqf_param.c b/compute/pzgelqf_param.c
index 88588051e1ef4e3d3baac9b254aefe02ee841d07..8a889b05c659d96c106362d8b1c82d7fbf0ff569 100644
--- a/compute/pzgelqf_param.c
+++ b/compute/pzgelqf_param.c
@@ -196,12 +196,8 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzgelqfrh.c b/compute/pzgelqfrh.c
index 141d94195d1800aa0e9158d3e4a97f97f78e26ff..ad11204ad69da663e4c680896ffe286436fb90cf 100644
--- a/compute/pzgelqfrh.c
+++ b/compute/pzgelqfrh.c
@@ -181,10 +181,7 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzgemm.c b/compute/pzgemm.c
index e001af357c58b8938c74085a7ce89c4d2204020f..c52fcc281c57374bb2249d21faf9b4c343da1771 100644
--- a/compute/pzgemm.c
+++ b/compute/pzgemm.c
@@ -31,7 +31,7 @@
 #define A(m, n) A,  m,  n
 #define B(m, n) B,  m,  n
 #define C(m, n) C,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile matrix-matrix multiplication - dynamic scheduling
  **/
 void morse_pzgemm(MORSE_enum transA, MORSE_enum transB,
@@ -134,19 +134,17 @@ void morse_pzgemm(MORSE_enum transA, MORSE_enum transB,
                     }
                 }
             }
-            MORSE_TASK_flush_data( &options, C(m, n) );
+            RUNTIME_data_flush( sequence, C(m, n) );
         }
         if (transA == MorseNoTrans) {
             for (k = 0; k < A->nt; k++) {
-                MORSE_TASK_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, A(m, k) );
             }
         } else {
             for (k = 0; k < A->mt; k++) {
-                MORSE_TASK_flush_data( &options, A(k, m) );
+                RUNTIME_data_flush( sequence, A(k, m) );
             }
         }
     }
-    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzgeqrf.c b/compute/pzgeqrf.c
index 1ccd8bb99dae30fec44fe4a3e150a368b21c6fe2..849d7a00568a25988fb8c66819cb2068209a1a22 100644
--- a/compute/pzgeqrf.c
+++ b/compute/pzgeqrf.c
@@ -38,7 +38,7 @@
 #define D(k)   A, k, k
 #endif
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile QR factorization - dynamic scheduling
  **/
 void morse_pzgeqrf(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D,
@@ -147,10 +147,7 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzgeqrf_param.c b/compute/pzgeqrf_param.c
index 2382953a802dab0a2f219ad1941dc1c659c29092..3845f4627f459ebeda7733d1e976589f30e6c430 100644
--- a/compute/pzgeqrf_param.c
+++ b/compute/pzgeqrf_param.c
@@ -195,12 +195,8 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzgeqrfrh.c b/compute/pzgeqrfrh.c
index aeec53fabbb299ca258319ef5c5f25baa8635dd6..a2ea808b95b26cf679df93e81c1a827e2de1436f 100644
--- a/compute/pzgeqrfrh.c
+++ b/compute/pzgeqrfrh.c
@@ -40,7 +40,7 @@
 #define D(m,n) A,  (m),  (n)
 #endif
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile QR factorization (reduction Householder) - dynamic scheduling
  **/
 void morse_pzgeqrfrh(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D, int BS,
@@ -180,10 +180,7 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzgetrf_incpiv.c b/compute/pzgetrf_incpiv.c
index 9b01a7552c952aed98a79bda85af22545d81efa1..092d258faf2ec47c7c630c9d1767bcbec1bb3774 100644
--- a/compute/pzgetrf_incpiv.c
+++ b/compute/pzgetrf_incpiv.c
@@ -42,7 +42,7 @@
 #define L(_m_,_n_) L,  _m_,  _n_
 #define IPIV(_m_,_n_) &(IPIV[(int64_t)A->mb*((int64_t)(_m_)+(int64_t)A->mt*(int64_t)(_n_))])
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile LU factorization - dynamic scheduling
  **/
 void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
@@ -136,11 +136,8 @@ 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_flush_all();
 
     morse_desc_mat_free(DIAG);
     free(DIAG);
diff --git a/compute/pzgetrf_nopiv.c b/compute/pzgetrf_nopiv.c
index 1385462496fec63ad7c1286fd2d5f2c936a15fc9..e620dcdfa07b64f339d962fe455871fb739364ce 100644
--- a/compute/pzgetrf_nopiv.c
+++ b/compute/pzgetrf_nopiv.c
@@ -29,7 +29,7 @@
 
 #define A(m,n) A,  m,  n
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile LU factorization with no pivoting - dynamic scheduling
  **/
 void morse_pzgetrf_nopiv(MORSE_desc_t *A,
@@ -104,7 +104,5 @@ 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_flush_all();
 }
diff --git a/compute/pzhemm.c b/compute/pzhemm.c
index a8582ee597f84c26b237e4b83fad0fffb1917e85..7e5ca07095bb0a933e66897bca79179883e6c178 100644
--- a/compute/pzhemm.c
+++ b/compute/pzhemm.c
@@ -31,7 +31,7 @@
 #define A(m,n) A,  m,  n
 #define B(m,n) B,  m,  n
 #define C(m,n) C,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile Hermitian matrix-matrix multiplication - dynamic scheduling
  **/
 void morse_pzhemm(MORSE_enum side, MORSE_enum uplo,
@@ -226,9 +226,5 @@ 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_flush_all();
 }
diff --git a/compute/pzher2k.c b/compute/pzher2k.c
index 9bde1020aaf3c705ac60b6378804ba787ec7fd23..63b02741095ad2a6eba0c54e3ae65e134d61f380 100644
--- a/compute/pzher2k.c
+++ b/compute/pzher2k.c
@@ -31,7 +31,7 @@
 #define A(m,n) A,  m,  n
 #define B(m,n) B,  m,  n
 #define C(m,n) C,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile Hermitian rank-k update - dynamic scheduling
  **/
 void morse_pzher2k(MORSE_enum uplo, MORSE_enum trans,
@@ -214,9 +214,5 @@ 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_flush_all();
 }
diff --git a/compute/pzherk.c b/compute/pzherk.c
index e3dd914f372242d87ac4037e6b524b9575b65ccc..b499177f11ba862d8339e523abbb6277cc8f68e4 100644
--- a/compute/pzherk.c
+++ b/compute/pzherk.c
@@ -30,7 +30,7 @@
 
 #define A(m,n) A,  m,  n
 #define C(m,n) C,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile Hermitian rank-k update - dynamic scheduling
  **/
 void morse_pzherk(MORSE_enum uplo, MORSE_enum trans,
@@ -173,7 +173,5 @@ 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);
 }
diff --git a/compute/pzhetrd_he2hb.c b/compute/pzhetrd_he2hb.c
index 0d8ed1d2f3160e9b5e008f0081a56cdebb8c538c..74c3396149dfc3a4e1d34e129ca2676dcb31f7f8 100644
--- a/compute/pzhetrd_he2hb.c
+++ b/compute/pzhetrd_he2hb.c
@@ -38,7 +38,7 @@
 #define E(m, n) A, m, n
 #endif
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile BAND Tridiagonal Reduction - dynamic scheduler
  **/
 void morse_pzhetrd_he2hb(MORSE_enum uplo,
@@ -436,10 +436,8 @@ void morse_pzhetrd_he2hb(MORSE_enum uplo,
     }
 
 
-    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_flush_all();
 
     MORSE_Sequence_Wait(sequence);
     morse_desc_mat_free(D);
diff --git a/compute/pzlacpy.c b/compute/pzlacpy.c
index 220c8b9dbdd6c12e94afcb23a12ac58413a5ffd8..b13b15222513827741298d84bff4abc56060512e 100644
--- a/compute/pzlacpy.c
+++ b/compute/pzlacpy.c
@@ -30,11 +30,11 @@
 
 #define A(m,n) A,  m,  n
 #define B(m,n) B,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *
  **/
 
-/***************************************************************************//**
+/*******************************************************************************
  *
  **/
 void morse_pzlacpy(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B,
@@ -129,7 +129,5 @@ 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);
 }
diff --git a/compute/pzlag2c.c b/compute/pzlag2c.c
index ec193214e4aa00e0391f2e4d51f4516499f92a78..5ca24e2b313b97b9e13f3aa78ca9cdee3bb0cb75 100644
--- a/compute/pzlag2c.c
+++ b/compute/pzlag2c.c
@@ -32,11 +32,11 @@
 #define B(m,n) B,  m,  n
 #define SA(m,n) SA,  m,  n
 #define SB(m,n) SB,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *
  **/
 
-/***************************************************************************//**
+/*******************************************************************************
  *
  **/
 void morse_pclag2z(MORSE_desc_t *SA, MORSE_desc_t *B,
@@ -67,7 +67,5 @@ 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);
 }
diff --git a/compute/pzlange.c b/compute/pzlange.c
index 83eee09a6c8511743c0e15b7a6118dcc8cc80e78..f893a4d9b45d1d0f04bbc06397b7c469b69fe880 100644
--- a/compute/pzlange.c
+++ b/compute/pzlange.c
@@ -35,15 +35,12 @@
 #define VECNORMS_STEP1(m, n) VECNORMS_STEP1, m, n
 #define VECNORMS_STEP2(m, n) VECNORMS_STEP2, m, n
 #define RESULT(m, n) RESULT, m, n
-/***************************************************************************//**
-                                                                              *
-                                                                              **/
-
-/***************************************************************************//**
-                                                                              *
-                                                                              **/
-void morse_pzlange(MORSE_enum norm, MORSE_desc_t *A, double *result,
-                   MORSE_sequence_t *sequence, MORSE_request_t *request)
+
+/*****************************************************************************
+ *
+ **/
+void morse_pzlange( MORSE_enum norm, MORSE_desc_t *A, double *result,
+                    MORSE_sequence_t *sequence, MORSE_request_t *request )
 {
     MORSE_desc_t *VECNORMS_STEP1 = NULL;
     MORSE_desc_t *VECNORMS_STEP2 = NULL;
@@ -412,5 +409,4 @@ 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_flush_all();
 }
diff --git a/compute/pzlanhe.c b/compute/pzlanhe.c
index a637a283d648f92a4c760ccb87d636cd9b41acec..af3b5bbab0bdff3c67545b22427c59730915d31e 100644
--- a/compute/pzlanhe.c
+++ b/compute/pzlanhe.c
@@ -35,11 +35,11 @@
 #define VECNORMS_STEP1(m, n) VECNORMS_STEP1, m, n
 #define VECNORMS_STEP2(m, n) VECNORMS_STEP2, m, n
 #define RESULT(m, n) RESULT, m, n
-/***************************************************************************//**
+/*******************************************************************************
  *
  **/
 
-/***************************************************************************//**
+/*******************************************************************************
  *
  **/
 void morse_pzlanhe(MORSE_enum norm, MORSE_enum uplo, MORSE_desc_t *A, double *result,
@@ -456,5 +456,4 @@ 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_flush_all();
 }
diff --git a/compute/pzlansy.c b/compute/pzlansy.c
index cdb4c1dcab6d3c545f8d43052e294cc391609e5c..f71eb5cb0f410729e187318be9bad6441ca876b6 100644
--- a/compute/pzlansy.c
+++ b/compute/pzlansy.c
@@ -35,11 +35,11 @@
 #define VECNORMS_STEP1(m, n) VECNORMS_STEP1, m, n
 #define VECNORMS_STEP2(m, n) VECNORMS_STEP2, m, n
 #define RESULT(m, n) RESULT, m, n
-/***************************************************************************//**
+/*******************************************************************************
  *
  **/
 
-/***************************************************************************//**
+/*******************************************************************************
  *
  **/
 void morse_pzlansy(MORSE_enum norm, MORSE_enum uplo, MORSE_desc_t *A, double *result,
@@ -465,5 +465,4 @@ 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_flush_all();
 }
diff --git a/compute/pzlantr.c b/compute/pzlantr.c
index 7f6ded725d09a4913259ba0a65da32d6a3359bc2..7c1e28b71c2c739c5cd13229f35151d544a2c10b 100644
--- a/compute/pzlantr.c
+++ b/compute/pzlantr.c
@@ -32,7 +32,7 @@
 #define VECNORMS_STEP1(m, n) VECNORMS_STEP1, m, n
 #define VECNORMS_STEP2(m, n) VECNORMS_STEP2, m, n
 #define RESULT(m, n) RESULT, m, n
-/***************************************************************************//**
+/*******************************************************************************
  *
  **/
 void morse_pzlantr(MORSE_enum norm, MORSE_enum uplo, MORSE_enum diag,
@@ -665,5 +665,4 @@ void morse_pzlantr(MORSE_enum norm, MORSE_enum uplo, MORSE_enum diag,
     }
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzlascal.c b/compute/pzlascal.c
index 2659c3d7e9c43cb131b75a1c59bbd26f10996da5..1809a5a12f15d5ea778a542fd0857d71de31c342 100644
--- a/compute/pzlascal.c
+++ b/compute/pzlascal.c
@@ -97,6 +97,5 @@ void morse_pzlascal(MORSE_enum uplo, MORSE_Complex64_t alpha, MORSE_desc_t *A,
             }
         }
     }
-    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pzlaset.c b/compute/pzlaset.c
index a14ba24f0906bd491d0e16ccb6f41e1e42e63857..f0c84a852747e92dc52de55d6de1134b05a33ac2 100644
--- a/compute/pzlaset.c
+++ b/compute/pzlaset.c
@@ -30,7 +30,7 @@
 #include "control/common.h"
 
 #define A(m,n) A,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel initialization a 2-D array A to BETA on the diagonal and
  *  ALPHA on the offdiagonals.
  **/
@@ -118,6 +118,5 @@ void morse_pzlaset(MORSE_enum uplo,
                A(j, j), ldaj);
        }
     }
-    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pzlaset2.c b/compute/pzlaset2.c
index c56661594e293db4fb28ececedaedc9c28e19dc3..96b681245be044ad9aad739b17ccb3ecfe12aa25 100644
--- a/compute/pzlaset2.c
+++ b/compute/pzlaset2.c
@@ -30,7 +30,7 @@
 #include "control/common.h"
 
 #define A(m,n) A,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel initializztion a 2-D array A to 
  *  ALPHA on the offdiagonals.
  **/
@@ -108,6 +108,5 @@ void morse_pzlaset2(MORSE_enum uplo, MORSE_Complex64_t alpha,
            }
        }
     }
-    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pzlauum.c b/compute/pzlauum.c
index 9ff23bebea324af581de9af2c7bd96ca5841e9b9..d7052fd75fef5dcf2f07664dfabdac0c7c60a5e8 100644
--- a/compute/pzlauum.c
+++ b/compute/pzlauum.c
@@ -31,7 +31,7 @@
 #include "control/common.h"
 
 #define A(m,n) A,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel UU' or L'L operation - dynamic scheduling
  **/
 void morse_pzlauum(MORSE_enum uplo, MORSE_desc_t *A,
@@ -76,7 +76,7 @@ void morse_pzlauum(MORSE_enum uplo, MORSE_desc_t *A,
                 }
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, A(m, k) );
                 MORSE_TASK_ztrmm(
                     &options,
                     MorseRight, uplo, MorseConjTrans, MorseNonUnit,
@@ -129,13 +129,12 @@ void morse_pzlauum(MORSE_enum uplo, MORSE_desc_t *A,
                     1.0, A(k, k), ldak,
                          A(m, k), ldam);
             }
-            MORSE_TASK_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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);
 }
diff --git a/compute/pzplghe.c b/compute/pzplghe.c
index d0b0d16e0f4a66f7fc98a6b3a432fc2e22792f69..239e5947ea86d24758900d0bf4999674162a2442 100644
--- a/compute/pzplghe.c
+++ b/compute/pzplghe.c
@@ -32,7 +32,7 @@
 #include "control/common.h"
 
 #define A(m,n) A,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  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,
@@ -97,6 +97,5 @@ void morse_pzplghe( double bump, MORSE_enum uplo, MORSE_desc_t *A,
             }
         }
     }
-    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pzplgsy.c b/compute/pzplgsy.c
index 3c8c288bf80a57c30b3e992bcc2857634ab5870d..c5111e5674a0743d0df5e0dcc7170038d50b1304 100644
--- a/compute/pzplgsy.c
+++ b/compute/pzplgsy.c
@@ -32,7 +32,7 @@
 #include "control/common.h"
 
 #define A(m,n) A,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  morse_pzplgsy - Generate a random symmetric (positive definite if 'bump' is large enough) half-matrix by tiles.
  **/
 void morse_pzplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, MORSE_desc_t *A,
@@ -97,6 +97,5 @@ void morse_pzplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, MORSE_desc_t *A,
             }
         }
     }
-    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pzplrnt.c b/compute/pzplrnt.c
index 1e2fc8c61d8d45778549a08e326e184969e9c6a9..d0467737980d0ad57d6db98805943afddca3294b 100644
--- a/compute/pzplrnt.c
+++ b/compute/pzplrnt.c
@@ -29,7 +29,7 @@
 #include "control/common.h"
 
 #define A(m, n) A,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  morse_pzplghe - Generate a random matrix by tiles.
  **/
 void morse_pzplrnt( MORSE_desc_t *A, unsigned long long int seed,
@@ -60,6 +60,5 @@ 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);
 }
diff --git a/compute/pzpotrf.c b/compute/pzpotrf.c
index 662c96fd1050671274d6db890c692104720a445b..ae7f858a3e7aa78caba17dfe0084a16d45d2dd04 100644
--- a/compute/pzpotrf.c
+++ b/compute/pzpotrf.c
@@ -32,7 +32,7 @@
 #include "control/common.h"
 
 #define A(m,n) A,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile Cholesky factorization - dynamic scheduling
  **/
 void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
@@ -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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(n, k) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, A(k, k) );
 
             for (m = k+1; m < A->mt; m++) {
                 tempmm = m == A->mt-1 ? A->m - m*A->mb : A->mb;
@@ -170,7 +170,7 @@ void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
                                A(k, n), ldak,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_flush_data( &options, A(k, m) );
+                RUNTIME_data_flush( sequence, A(k, m) );
             }
 
             RUNTIME_iteration_pop(morse);
diff --git a/compute/pzpotrimm.c b/compute/pzpotrimm.c
index abbbd1d03bd6c2e6d618c39ccdf42d9d12c03adc..fd4956e21f2f732056034e54999807ad5606cdb2 100644
--- a/compute/pzpotrimm.c
+++ b/compute/pzpotrimm.c
@@ -31,7 +31,7 @@
 #define A(m,n) A,  m,  n
 #define B(m,n) B,  m,  n
 #define C(m,n) C,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile Cholesky factorization - dynamic scheduling
  **/
 void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(n, k) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, A(m, k) );
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, B(m, k) );
+                RUNTIME_data_flush( sequence, B(m, k) );
             }
             for (n = 0; n <= k; n++) {
-                MORSE_TASK_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, m) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, A(k, n) );
             }
             for (m = 0; m < k; m++) {
                 ldam = BLKLDD(A, m);
-                MORSE_TASK_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, B(m, k) );
+                RUNTIME_data_flush( sequence, B(m, k) );
             }
             for (m = 0; m <= k; m++) {
-                MORSE_TASK_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, A(m, k) );
             }
 
             RUNTIME_iteration_pop(morse);
@@ -479,5 +479,4 @@ 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 71b95895790cd969316790ce7f871b51da7cb46d..fd608f65d9fac24e3967c5933be0c3ce7430d723 100644
--- a/compute/pzsymm.c
+++ b/compute/pzsymm.c
@@ -31,7 +31,7 @@
 #define A(m,n) A,  m,  n
 #define B(m,n) B,  m,  n
 #define C(m,n) C,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile symmetric matrix-matrix multiplication - dynamic scheduling
  **/
 void morse_pzsymm(MORSE_enum side, MORSE_enum uplo,
@@ -141,16 +141,16 @@ void morse_pzsymm(MORSE_enum side, MORSE_enum uplo,
                         }
                     }
                 }
-                MORSE_TASK_flush_data( &options, B(k, n) );
+                RUNTIME_data_flush( sequence, B(k, n) );
             }
             if (uplo == MorseLower) {
                 for (n = 0; n <= k; n++) {
-                    MORSE_TASK_flush_data( &options, A(k, n) );
+                    RUNTIME_data_flush( sequence, A(k, n) );
                 }
             }
             else {
                 for (m = 0; m <= k; m++) {
-                    MORSE_TASK_flush_data( &options, A(m, k) );
+                    RUNTIME_data_flush( sequence, A(m, k) );
                 }
             }
         }
@@ -242,20 +242,19 @@ void morse_pzsymm(MORSE_enum side, MORSE_enum uplo,
                         }
                     }
                 }
-                MORSE_TASK_flush_data( &options, B(m, k) );
+                RUNTIME_data_flush( sequence, B(m, k) );
             }
             if (uplo == MorseLower) {
                 for (n = 0; n <= k; n++) {
-                    MORSE_TASK_flush_data( &options, A(k, n) );
+                    RUNTIME_data_flush( sequence, A(k, n) );
                 }
             }
             else {
                 for (m = 0; m <= k; m++) {
-                    MORSE_TASK_flush_data( &options, A(m, k) );
+                    RUNTIME_data_flush( sequence, A(m, k) );
                 }
             }
         }
     }
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzsyr2k.c b/compute/pzsyr2k.c
index 68e4d6ee10c6f207e25a2087dd4b301eac21be44..9ed43086c37a4de4de61c6c2f23cf7c3dfd4b991 100644
--- a/compute/pzsyr2k.c
+++ b/compute/pzsyr2k.c
@@ -31,7 +31,7 @@
 #define A(m,n) A,  m,  n
 #define B(m,n) B,  m,  n
 #define C(m,n) C,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile Hermitian rank-k update - dynamic scheduling
  **/
 void morse_pzsyr2k(MORSE_enum uplo, MORSE_enum trans,
@@ -213,9 +213,5 @@ 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_flush_all();
 }
diff --git a/compute/pzsyrk.c b/compute/pzsyrk.c
index 49508895c5aabd53caa555efff8b967757febb7f..a942fa8d475415759fbac0f0918710e50a4eb323 100644
--- a/compute/pzsyrk.c
+++ b/compute/pzsyrk.c
@@ -31,7 +31,7 @@
 
 #define A(m,n) A,  m,  n
 #define C(m,n) C,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile symmetric rank-k update - dynamic scheduling
  **/
 void morse_pzsyrk(MORSE_enum uplo, MORSE_enum trans,
@@ -172,7 +172,5 @@ 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);
 }
diff --git a/compute/pzsytrf.c b/compute/pzsytrf.c
index 2ea509a512d9ed1afd16da1ad445bd8d496e84da..6e257b5b2080ace71fc02161256600a0645ba53b 100644
--- a/compute/pzsytrf.c
+++ b/compute/pzsytrf.c
@@ -31,7 +31,7 @@
 #include "control/common.h"
 
 #define A(m,n) A,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile Cholesky factorization - dynamic scheduling
  **/
 void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
@@ -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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(n, k) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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,13 @@ void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
                                A(k, n), ldak,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_flush_data( &options, A(k, m) );
+                RUNTIME_data_flush( sequence, A(k, m) );
             }
 
             RUNTIME_iteration_pop(morse);
         }
     }
 
-    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pztile.c b/compute/pztile.c
index c5222001063655c1d9e706b715101c53a759fd32..6b9b49a8233d3ebfbc8a0c967aa13b7bd0c60da8 100644
--- a/compute/pztile.c
+++ b/compute/pztile.c
@@ -72,10 +72,9 @@ void morse_pzlapack_to_tile(MORSE_Complex64_t *Af77, int ldaf77, MORSE_desc_t *A
         }
     }
 
+    RUNTIME_desc_flush( &B, sequence );
     RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
-    MORSE_TASK_flush_all();
-    RUNTIME_desc_getoncpu( &B );
     RUNTIME_desc_destroy( &B );
 }
 
@@ -122,10 +121,9 @@ void morse_pztile_to_lapack(MORSE_desc_t *A, MORSE_Complex64_t *Af77, int ldaf77
         }
     }
 
-    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    RUNTIME_desc_flush( &B, sequence );
     RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
-    RUNTIME_desc_getoncpu( &B );
     RUNTIME_desc_destroy( &B );
 }
 
diff --git a/compute/pztile2band.c b/compute/pztile2band.c
index 22b8ca68fea6be025cc4df1e59b58df84c68f785..bfd4f5cf1861e02b1d19c823083fde827abd68de 100644
--- a/compute/pztile2band.c
+++ b/compute/pztile2band.c
@@ -30,7 +30,7 @@
 #define A(m,n)   A,  m, n
 #define B(m, n)  B, m, n
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel copy of a band matrix from full NxN tile storage to band storage (LDABxN).
  **/
 void morse_pztile2band(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B,
@@ -118,7 +118,6 @@ void morse_pztile2band(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B,
        }
     }
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_flush_all();
 }
 #undef B
 #undef A
diff --git a/compute/pztpgqrt.c b/compute/pztpgqrt.c
index fe4b413eae2c407fe39e804c6d7aaa53cdee9e3c..a070dc85157fe4e1c0623c823617e4c826fe9ce3 100644
--- a/compute/pztpgqrt.c
+++ b/compute/pztpgqrt.c
@@ -36,7 +36,7 @@
 #define D(k)    V1, k, k
 #endif
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile QR factorization - dynamic scheduling
  **/
 void morse_pztpgqrt( int L,
@@ -162,13 +162,6 @@ 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);
     (void)D;
diff --git a/compute/pztpqrt.c b/compute/pztpqrt.c
index 6101c0934b551cc1a2d5cba6388ad6e68353e7da..47415ff055e846d4e690709174ec926e5b347028 100644
--- a/compute/pztpqrt.c
+++ b/compute/pztpqrt.c
@@ -28,7 +28,7 @@
 #define B(m,n) B,  m,  n
 #define T(m,n) T,  m,  n
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile QR factorization - dynamic scheduling
  **/
 void morse_pztpqrt( int L, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *T,
@@ -111,9 +111,6 @@ 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);
 }
diff --git a/compute/pztradd.c b/compute/pztradd.c
index 8d121b7e9d1b916129c3de29d30803993e552633..aa5dca0e588b2ef31384b276f43f37c8b6712109 100644
--- a/compute/pztradd.c
+++ b/compute/pztradd.c
@@ -30,7 +30,7 @@
 #define A(m, n) A,  m,  n
 #define B(m, n) B,  m,  n
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile matrix-matrix multiplication - dynamic scheduling
  **/
 void morse_pztradd(MORSE_enum uplo, MORSE_enum trans,
@@ -194,7 +194,5 @@ 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 b9f6cb0063da5bfba8a0dbd20257d0b5fcf53363..b616bd55a478c65aae58e4c5f0bef8ee9bc17f67 100644
--- a/compute/pztrmm.c
+++ b/compute/pztrmm.c
@@ -33,7 +33,7 @@
 
 
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile triangular matrix-matrix multiplication - dynamic scheduling
  **/
 void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
@@ -311,7 +311,5 @@ 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);
 }
diff --git a/compute/pztrsm.c b/compute/pztrsm.c
index c861890ccdee3d1e3995cabedf8ddc8d27091737..727b7e5dbeb10cf313792071a2d7300f6c879502 100644
--- a/compute/pztrsm.c
+++ b/compute/pztrsm.c
@@ -32,7 +32,7 @@
 
 #define A(m,n) A,  m,  n
 #define B(m,n) B,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile triangular solve - dynamic scheduling
  **/
 void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum diag,
@@ -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_flush_data( &options, A(B->mt-1-k, B->mt-1-k) );
+                    RUNTIME_data_flush( sequence, 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_flush_data( &options, A(B->mt-1-m, B->mt-1-k) );
+                        RUNTIME_data_flush( sequence, A(B->mt-1-m, B->mt-1-k) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, B(B->mt-1-k, n) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+                    RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, m) );
+                        RUNTIME_data_flush( sequence, A(k, m) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, B(k, n) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+                    RUNTIME_data_flush( sequence, 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_flush_data( &options, A(m, k) );
+                        RUNTIME_data_flush( sequence, A(m, k) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, B(k, n) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(B->mt-1-k, B->mt-1-k) );
+                    RUNTIME_data_flush( sequence, 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_flush_data( &options, A(B->mt-1-k, B->mt-1-m) );
+                        RUNTIME_data_flush( sequence, A(B->mt-1-k, B->mt-1-m) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, B(B->mt-1-k, n) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+                    RUNTIME_data_flush( sequence, 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_flush_data( &options, B(m, k) );
+                        RUNTIME_data_flush( sequence, B(m, k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, A(k, n) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(B->nt-1-k, B->nt-1-k) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, B(m,        B->nt-1-k) );
+                        RUNTIME_data_flush( sequence, B(m,        B->nt-1-k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, A(B->nt-1-n, B->nt-1-k) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(B->nt-1-k, B->nt-1-k) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, B(m,        B->nt-1-k) );
+                        RUNTIME_data_flush( sequence, B(m,        B->nt-1-k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, A(B->nt-1-k, B->nt-1-n) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, B(m, k) );
+                        RUNTIME_data_flush( sequence, B(m, k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, A(n, k) );
+                        RUNTIME_data_flush( sequence, A(n, k) );
                     }
 
                 }
diff --git a/compute/pztrsmpl.c b/compute/pztrsmpl.c
index 4c51e7a5eef96cee0880901ce9277b8a9459461b..7314ad60fe731751f16e02b72e1987b5a2f78191 100644
--- a/compute/pztrsmpl.c
+++ b/compute/pztrsmpl.c
@@ -34,7 +34,7 @@
 #define B(m,n) B,  m,  n
 #define L(m,n) L,  m,  n
 #define IPIV(m,n) &(IPIV[(int64_t)A->nb*((int64_t)(m)+(int64_t)A->mt*(int64_t)(n))])
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel forward substitution for tile LU - dynamic scheduling
  **/
 void morse_pztrsmpl(MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *L, int *IPIV,
@@ -87,7 +87,5 @@ 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);
 }
diff --git a/compute/pztrtri.c b/compute/pztrtri.c
index fbea4fe03db5e43c968f9bbc90cc767520b185c8..e212d3805516147fb1067991dabfbd22961cff07 100644
--- a/compute/pztrtri.c
+++ b/compute/pztrtri.c
@@ -31,7 +31,7 @@
 #include "control/common.h"
 
 #define A(m,n) A,  m,  n
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel tile triangular matrix inverse - dynamic scheduling
  **/
 void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
@@ -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_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, A(m, k) );
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, A(k, n) );
             }
             for (m = 0; m < k; m++) {
                 ldam = BLKLDD(A, m);
-                MORSE_TASK_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, A(k, k) );
             MORSE_TASK_ztrtri(
                 &options,
                 uplo, diag,
@@ -155,6 +155,5 @@ 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);
 }
diff --git a/compute/pzunglq.c b/compute/pzunglq.c
index d764b3a71b19b785f06eaecad117c8827eafc467..13a034ce3d64ecf8f1c5f1abf47e41a09e494141 100644
--- a/compute/pzunglq.c
+++ b/compute/pzunglq.c
@@ -39,7 +39,7 @@
 #define D(k) A, k, k
 #endif
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel construction of Q using tile V (application to identity) - dynamic scheduling
  **/
 void morse_pzunglq(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T, MORSE_desc_t *D,
@@ -142,10 +142,6 @@ 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);
     (void)D;
diff --git a/compute/pzunglq_param.c b/compute/pzunglq_param.c
index 6da5c30702d06b7db6a3d7cf928a953ddbeab1df..adc3512ff57fa88d9b79b1272eddee14cdad87c4 100644
--- a/compute/pzunglq_param.c
+++ b/compute/pzunglq_param.c
@@ -169,14 +169,8 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzunglqrh.c b/compute/pzunglqrh.c
index bd76fe5be8ce970c6aa6a202a8b21ce0b368adec..72836940f2ef8f4e87a7b218357e2f2b17e9fff2 100644
--- a/compute/pzunglqrh.c
+++ b/compute/pzunglqrh.c
@@ -164,10 +164,6 @@ void morse_pzunglqrh(MORSE_desc_t *A, MORSE_desc_t *Q,
         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);
     (void)D;
diff --git a/compute/pzungqr.c b/compute/pzungqr.c
index c2e0829d166aca1856a11a8a7789b1e6f022dbaa..389f79e854029cefd083ca19ea681d9838c8b231 100644
--- a/compute/pzungqr.c
+++ b/compute/pzungqr.c
@@ -39,7 +39,7 @@
 #define D(k) A, k, k
 #endif
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel construction of Q using tile V (application to identity) - dynamic scheduling
  **/
 void morse_pzungqr(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T, MORSE_desc_t *D,
@@ -142,10 +142,6 @@ void morse_pzungqr(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, MorseLower,      T );
-    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
     (void)D;
diff --git a/compute/pzungqr_param.c b/compute/pzungqr_param.c
index 13b1be1c6a3f910b1062cbeafcf019c7bb219403..a0849b634ee1679ed5ea6c32fb3a486a9dd9bfff 100644
--- a/compute/pzungqr_param.c
+++ b/compute/pzungqr_param.c
@@ -175,14 +175,8 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzungqrrh.c b/compute/pzungqrrh.c
index c383858d2313afdb47ad6a4820752542b95d50d1..1d0516298a0ec3dbbcfd1aa783b29e2a0c697e63 100644
--- a/compute/pzungqrrh.c
+++ b/compute/pzungqrrh.c
@@ -169,12 +169,7 @@ void morse_pzungqrrh(MORSE_desc_t *A, MORSE_desc_t *Q,
         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_flush_all();
     (void)D;
 }
diff --git a/compute/pzunmlq.c b/compute/pzunmlq.c
index c6547f3dc0720bc747d7cdccc2b48afc4035cdf3..9c9cfd679c8532eb2f94d5d5fba7b25b04d6ff71 100644
--- a/compute/pzunmlq.c
+++ b/compute/pzunmlq.c
@@ -40,7 +40,7 @@
 #define D(k) A, k, k
 #endif
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel application of Q using tile V - LQ factorization - dynamic scheduling
  **/
 void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
@@ -313,10 +313,6 @@ 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);
     (void)D;
diff --git a/compute/pzunmlq_param.c b/compute/pzunmlq_param.c
index 0b5ef65f8c77cd1fddb726cf2ec672d060c48d9f..5ad102180aa5557f3bc9083af56074806dec95a5 100644
--- a/compute/pzunmlq_param.c
+++ b/compute/pzunmlq_param.c
@@ -432,15 +432,9 @@ 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_flush_all();
 
     (void)D;
 }
diff --git a/compute/pzunmlqrh.c b/compute/pzunmlqrh.c
index ac288111c5c74ee1c8e4b52a14790e2eb7df2a32..8444f0bb3899178caf82269875e4f725130c0bc9 100644
--- a/compute/pzunmlqrh.c
+++ b/compute/pzunmlqrh.c
@@ -41,7 +41,7 @@
 #define D(m,n) A, (m), (n)
 #endif
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel application of Q using tile V - LQ factorization (reduction
  *  Householder) - dynamic scheduling
  **/
@@ -408,12 +408,7 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzunmqr.c b/compute/pzunmqr.c
index 86dc63bd780ea02071078ebe6aa836c70645a169..4e81716ddf0439cde04ed3465422ebefec0a860b 100644
--- a/compute/pzunmqr.c
+++ b/compute/pzunmqr.c
@@ -40,7 +40,7 @@
 #define D(k) A, k, k
 #endif
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel application of Q using tile V - QR factorization - dynamic scheduling
  **/
 void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
@@ -318,10 +318,6 @@ 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);
     (void)D;
diff --git a/compute/pzunmqr_param.c b/compute/pzunmqr_param.c
index 5f7b20032020d22c7dea3bdfef1b78a74ccca9dd..ae9b46d5e9755f0cd03c46e367dadb52d0b8084b 100644
--- a/compute/pzunmqr_param.c
+++ b/compute/pzunmqr_param.c
@@ -431,15 +431,9 @@ 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_flush_all();
 
     (void)D;
 }
diff --git a/compute/pzunmqrrh.c b/compute/pzunmqrrh.c
index 80f9879db09d4fe3162794f99b11b23a445ed599..ca7097ca99f51439bf2ec33627a36812fd01ead5 100644
--- a/compute/pzunmqrrh.c
+++ b/compute/pzunmqrrh.c
@@ -41,13 +41,13 @@
 #define D(m,n) A, (m), (n)
 #endif
 
-/***************************************************************************//**
+/*******************************************************************************
  *  Parallel application of Q using tile V - QR factorization (reduction
  *  Householder) - dynamic scheduling
  **/
-void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
-                     MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *T, MORSE_desc_t *D, int BS,
-                     MORSE_sequence_t *sequence, MORSE_request_t *request)
+void morse_pzunmqrrh( MORSE_enum side, MORSE_enum trans,
+                      MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *T, MORSE_desc_t *D, int BS,
+                      MORSE_sequence_t *sequence, MORSE_request_t *request )
 {
     MORSE_context_t *morse;
     MORSE_option_t options;
@@ -413,10 +413,6 @@ 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);
     (void)D;
diff --git a/compute/zbuild.c b/compute/zbuild.c
index 8262d017bb1ebd8aad84d98a41395c034688f3b2..71fadaac9434b5d8357a9bddac6360fb0cfefe02 100644
--- a/compute/zbuild.c
+++ b/compute/zbuild.c
@@ -5,10 +5,6 @@
  *                          All rights reserved.
  * @copyright (c) 2012-2014 Inria. All rights reserved.
  * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
- *
- **/
-
-/**
  *
  * @file zbuild.c
  *
@@ -29,7 +25,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -89,61 +86,62 @@ int MORSE_zbuild( MORSE_enum uplo, int M, int N,
                   MORSE_Complex64_t *A, int LDA,
                   void *user_data, void* user_build_callback)
 {
-  int NB;
-  int status;
-  MORSE_context_t *morse;
-  MORSE_sequence_t *sequence = NULL;
-  MORSE_request_t request = MORSE_REQUEST_INITIALIZER;
-  MORSE_desc_t descA;
+    int NB;
+    int status;
+    MORSE_context_t *morse;
+    MORSE_sequence_t *sequence = NULL;
+    MORSE_request_t request = MORSE_REQUEST_INITIALIZER;
+    MORSE_desc_t descA;
 
-  morse = morse_context_self();
-  if (morse == NULL) {
-    morse_fatal_error("MORSE_zbuild", "MORSE not initialized");
-    return MORSE_ERR_NOT_INITIALIZED;
-  }
-  /* Check input arguments */
-  if (M < 0) {
-    morse_error("MORSE_zbuild", "illegal value of M");
-    return -1;
-  }
-  if (N < 0) {
-    morse_error("MORSE_zbuild", "illegal value of N");
-    return -2;
-  }
-  if (LDA < chameleon_max(1, M)) {
-    morse_error("MORSE_zbuild", "illegal value of LDA");
-    return -4;
-  }
-  /* Quick return */
-  if (chameleon_min(M, N) == 0)
-    return MORSE_SUCCESS;
+    morse = morse_context_self();
+    if (morse == NULL) {
+        morse_fatal_error("MORSE_zbuild", "MORSE not initialized");
+        return MORSE_ERR_NOT_INITIALIZED;
+    }
+    /* Check input arguments */
+    if (M < 0) {
+        morse_error("MORSE_zbuild", "illegal value of M");
+        return -1;
+    }
+    if (N < 0) {
+        morse_error("MORSE_zbuild", "illegal value of N");
+        return -2;
+    }
+    if (LDA < chameleon_max(1, M)) {
+        morse_error("MORSE_zbuild", "illegal value of LDA");
+        return -4;
+    }
+    /* Quick return */
+    if (chameleon_min(M, N) == 0)
+        return MORSE_SUCCESS;
 
-  /* Tune NB depending on M, N & NRHS; Set NBNB */
-  status = morse_tune(MORSE_FUNC_ZGEMM, M, N, 0);
-  if (status != MORSE_SUCCESS) {
-    morse_error("MORSE_zbuild", "morse_tune() failed");
-    return status;
-  }
+    /* Tune NB depending on M, N & NRHS; Set NBNB */
+    status = morse_tune(MORSE_FUNC_ZGEMM, M, N, 0);
+    if (status != MORSE_SUCCESS) {
+        morse_error("MORSE_zbuild", "morse_tune() failed");
+        return status;
+    }
 
-  /* Set NT */
-  NB = MORSE_NB;
-  morse_sequence_create(morse, &sequence);
-  morse_zdesc_alloc(descA, NB, NB, LDA, N, 0, 0, M, N, morse_desc_mat_free(&descA));
+    /* Set NT */
+    NB = MORSE_NB;
+    morse_sequence_create(morse, &sequence);
+    morse_zdesc_alloc(descA, NB, NB, LDA, N, 0, 0, M, N, morse_desc_mat_free(&descA));
 
-  /* Call the tile interface */
-  MORSE_zbuild_Tile_Async(uplo, &descA, user_data, user_build_callback, sequence, &request );
+    /* Call the tile interface */
+    MORSE_zbuild_Tile_Async(uplo, &descA, user_data, user_build_callback, sequence, &request );
 
-  morse_zooptile2lap(descA, A, NB, NB, LDA, N,  sequence, &request);
-  morse_sequence_wait(morse, sequence);
-  morse_desc_mat_free(&descA);
+    morse_zooptile2lap(descA, A, NB, NB, LDA, N,  sequence, &request);
+    morse_sequence_wait(morse, sequence);
+    morse_desc_mat_free(&descA);
 
-  status = sequence->status;
-  morse_sequence_destroy(morse, sequence);
+    status = sequence->status;
+    morse_sequence_destroy(morse, sequence);
 
-  return status;
+    return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -187,25 +185,26 @@ int MORSE_zbuild( MORSE_enum uplo, int M, int N,
 int MORSE_zbuild_Tile( MORSE_enum uplo, MORSE_desc_t *A,
                        void *user_data, void* user_build_callback )
 {
-  MORSE_context_t *morse;
-  MORSE_sequence_t *sequence = NULL;
-  MORSE_request_t request = MORSE_REQUEST_INITIALIZER;
-  int status;
+    MORSE_context_t *morse;
+    MORSE_sequence_t *sequence = NULL;
+    MORSE_request_t request = MORSE_REQUEST_INITIALIZER;
+    int status;
 
-  morse = morse_context_self();
-  if (morse == NULL) {
-    morse_fatal_error("MORSE_zbuild_Tile", "MORSE not initialized");
-    return MORSE_ERR_NOT_INITIALIZED;
-  }
-  morse_sequence_create(morse, &sequence);
-  MORSE_zbuild_Tile_Async( uplo, A, user_data, user_build_callback, sequence, &request );
-  morse_sequence_wait(morse, sequence);
-  status = sequence->status;
-  morse_sequence_destroy(morse, sequence);
-  return status;
+    morse = morse_context_self();
+    if (morse == NULL) {
+        morse_fatal_error("MORSE_zbuild_Tile", "MORSE not initialized");
+        return MORSE_ERR_NOT_INITIALIZED;
+    }
+    morse_sequence_create(morse, &sequence);
+    MORSE_zbuild_Tile_Async( uplo, A, user_data, user_build_callback, sequence, &request );
+    morse_sequence_wait(morse, sequence);
+    status = sequence->status;
+    morse_sequence_destroy(morse, sequence);
+    return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
@@ -252,38 +251,38 @@ int MORSE_zbuild_Tile_Async( MORSE_enum uplo, MORSE_desc_t     *A,
                              MORSE_sequence_t *sequence,
                              MORSE_request_t  *request)
 {
-  MORSE_context_t *morse;
+    MORSE_context_t *morse;
 
-  morse = morse_context_self();
-  if (morse == NULL) {
-    morse_fatal_error("MORSE_zbuild_Tile", "MORSE not initialized");
-    return MORSE_ERR_NOT_INITIALIZED;
-  }
-  if (sequence == NULL) {
-    morse_fatal_error("MORSE_zbuild_Tile", "NULL sequence");
-    return MORSE_ERR_UNALLOCATED;
-  }
-  if (request == NULL) {
-    morse_fatal_error("MORSE_zbuild_Tile", "NULL request");
-    return MORSE_ERR_UNALLOCATED;
-  }
-  /* Check sequence status */
-  if (sequence->status == MORSE_SUCCESS)
-    request->status = MORSE_SUCCESS;
-  else
-    return morse_request_fail(sequence, request, MORSE_ERR_SEQUENCE_FLUSHED);
+    morse = morse_context_self();
+    if (morse == NULL) {
+        morse_fatal_error("MORSE_zbuild_Tile", "MORSE not initialized");
+        return MORSE_ERR_NOT_INITIALIZED;
+    }
+    if (sequence == NULL) {
+        morse_fatal_error("MORSE_zbuild_Tile", "NULL sequence");
+        return MORSE_ERR_UNALLOCATED;
+    }
+    if (request == NULL) {
+        morse_fatal_error("MORSE_zbuild_Tile", "NULL request");
+        return MORSE_ERR_UNALLOCATED;
+    }
+    /* Check sequence status */
+    if (sequence->status == MORSE_SUCCESS)
+        request->status = MORSE_SUCCESS;
+    else
+        return morse_request_fail(sequence, request, MORSE_ERR_SEQUENCE_FLUSHED);
 
-  /* Check descriptors for correctness */
-  if (morse_desc_check(A) != MORSE_SUCCESS) {
-    morse_error("MORSE_zbuild_Tile", "invalid descriptor");
-    return morse_request_fail(sequence, request, MORSE_ERR_ILLEGAL_VALUE);
-  }
+    /* Check descriptors for correctness */
+    if (morse_desc_check(A) != MORSE_SUCCESS) {
+        morse_error("MORSE_zbuild_Tile", "invalid descriptor");
+        return morse_request_fail(sequence, request, MORSE_ERR_ILLEGAL_VALUE);
+    }
 
-  /* Quick return */
-  if (chameleon_min( A->m, A->n ) == 0)
-    return MORSE_SUCCESS;
+    /* Quick return */
+    if (chameleon_min( A->m, A->n ) == 0)
+        return MORSE_SUCCESS;
 
-  morse_pzbuild(uplo, A, user_data, user_build_callback, sequence,  request);
+    morse_pzbuild(uplo, A, user_data, user_build_callback, sequence,  request);
 
-  return MORSE_SUCCESS;
+    return MORSE_SUCCESS;
 }
diff --git a/compute/zgeadd.c b/compute/zgeadd.c
index 9aea3d4c73bed941982ed456415e7b093a6da422..b6e85b32297b0b56bbd9b3e0d9aaa6a46230e657 100644
--- a/compute/zgeadd.c
+++ b/compute/zgeadd.c
@@ -26,7 +26,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -184,7 +185,8 @@ int MORSE_zgeadd(MORSE_enum trans, int M, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -247,16 +249,17 @@ int MORSE_zgeadd_Tile(MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgeadd_Tile_Async(trans, alpha, A, beta, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zgelqf.c b/compute/zgelqf.c
index 6fb6606b14c249906af6c883978856eb4afd65ca..55b9284837f7af7fd60f17702fcba108942c4d1b 100644
--- a/compute/zgelqf.c
+++ b/compute/zgelqf.c
@@ -30,7 +30,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -146,7 +147,8 @@ int MORSE_zgelqf(int M, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -198,15 +200,16 @@ int MORSE_zgelqf_Tile(MORSE_desc_t *A, MORSE_desc_t *T)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgelqf_Tile_Async(A, T, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zgelqf_param.c b/compute/zgelqf_param.c
index 2e46686816f4d5423371b8a120df9cce725c110a..d650ba8ad5f3b180d22f0011dd334ce27b3b55b8 100644
--- a/compute/zgelqf_param.c
+++ b/compute/zgelqf_param.c
@@ -197,8 +197,8 @@ int MORSE_zgelqf_param_Tile(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgelqf_param_Tile_Async(qrtree, A, TS, TT, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgelqs.c b/compute/zgelqs.c
index 23cdd4d022d705afab6a683d282ecce90f8f3cc5..b9410fd3d107681ccdbeac7bd54ed92537ba0580 100644
--- a/compute/zgelqs.c
+++ b/compute/zgelqs.c
@@ -222,9 +222,9 @@ int MORSE_zgelqs_Tile(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgelqs_Tile_Async(A, T, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgelqs_param.c b/compute/zgelqs_param.c
index cf2e853634609914c3c960a3d7e8b5508e40a55e..ac5c26520b0d471eabea1a527630959d135dc55a 100644
--- a/compute/zgelqs_param.c
+++ b/compute/zgelqs_param.c
@@ -227,9 +227,9 @@ int MORSE_zgelqs_param_Tile(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgelqs_param_Tile_Async(qrtree, A, TS, TT, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgels.c b/compute/zgels.c
index f80cc4ef65b4268e41b92453a924553020d5b610..4ab15cb6d82b1b12fb3cdc18df73a7f04abcb674 100644
--- a/compute/zgels.c
+++ b/compute/zgels.c
@@ -217,7 +217,8 @@ int MORSE_zgels(MORSE_enum trans, int M, int N, int NRHS,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -285,16 +286,17 @@ int MORSE_zgels_Tile(MORSE_enum trans, MORSE_desc_t *A,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgels_Tile_Async(trans, A, T, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zgels_param.c b/compute/zgels_param.c
index d862c63267b877f276740af544336a90087503b5..9e91871be2973d89a78be91aa3c2e788074d757f 100644
--- a/compute/zgels_param.c
+++ b/compute/zgels_param.c
@@ -291,9 +291,9 @@ int MORSE_zgels_param_Tile(const libhqr_tree_t *qrtree, MORSE_enum trans, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgels_param_Tile_Async(qrtree, trans, A, TS, TT, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgemm.c b/compute/zgemm.c
index 0f931d8dc4636d67112d7e452b522738c789731b..332b540061849362a78b9c4dc8d893e39ae56bbb 100644
--- a/compute/zgemm.c
+++ b/compute/zgemm.c
@@ -50,7 +50,8 @@
  *
  */
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -247,7 +248,8 @@ int MORSE_zgemm(MORSE_enum transA, MORSE_enum transB, int M, int N, int K,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -319,17 +321,18 @@ int MORSE_zgemm_Tile(MORSE_enum transA, MORSE_enum transB,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgemm_Tile_Async(transA, transB, alpha, A, B, beta, C, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
-    RUNTIME_desc_getoncpu(C);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zgeqrf.c b/compute/zgeqrf.c
index de992ffa755e19cac65af0dcb5cc62332ea68a4d..5e500472b0dd8c3ed530b94c9e230b7833bd8172 100644
--- a/compute/zgeqrf.c
+++ b/compute/zgeqrf.c
@@ -29,7 +29,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -145,7 +146,8 @@ int MORSE_zgeqrf(int M, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -197,8 +199,8 @@ int MORSE_zgeqrf_Tile(MORSE_desc_t *A, MORSE_desc_t *T)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgeqrf_Tile_Async(A, T, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgeqrf_param.c b/compute/zgeqrf_param.c
index 8e84f2a2bc421df67aa4e4e1f4695b53cf2f29e1..a67f508db78185e1264e6935a0cfa379df024c1c 100644
--- a/compute/zgeqrf_param.c
+++ b/compute/zgeqrf_param.c
@@ -206,8 +206,8 @@ int MORSE_zgeqrf_param_Tile(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgeqrf_param_Tile_Async(qrtree, A, TS, TT, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgeqrs.c b/compute/zgeqrs.c
index 32e618550fb35324d019990f64afa0a9eeca51fd..29b962f4f6c5f20483682f54eff2822ee9402edc 100644
--- a/compute/zgeqrs.c
+++ b/compute/zgeqrs.c
@@ -30,7 +30,8 @@
 #include "control/common.h"
 #include <stdlib.h>
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -168,7 +169,8 @@ int MORSE_zgeqrs(int M, int N, int NRHS,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -219,17 +221,18 @@ int MORSE_zgeqrs_Tile(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgeqrs_Tile_Async(A, T, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( T, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(T);
-    RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zgeqrs_param.c b/compute/zgeqrs_param.c
index 611b136fa92b6e770d903401fc53ff13104c06de..6e6cb28b394e3b1d815757968cd6dcbf5ae56ae6 100644
--- a/compute/zgeqrs_param.c
+++ b/compute/zgeqrs_param.c
@@ -216,11 +216,11 @@ int MORSE_zgeqrs_param_Tile(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgeqrs_param_Tile_Async(qrtree, A, TS, TT, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( TS, sequence );
+    RUNTIME_desc_flush( TT, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(TS);
-    RUNTIME_desc_getoncpu(TT);
-    RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgesv_incpiv.c b/compute/zgesv_incpiv.c
index 02b1129c26bc3254c380fe70da57de57ae03add3..ca0ca1e6a74dfa96cce66e4616ebd1be54f4af4c 100644
--- a/compute/zgesv_incpiv.c
+++ b/compute/zgesv_incpiv.c
@@ -29,7 +29,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -166,7 +167,8 @@ int MORSE_zgesv_incpiv(int N, int NRHS,
     morse_sequence_destroy(morse, sequence);
     return status;
 }
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -224,16 +226,17 @@ int MORSE_zgesv_incpiv_Tile(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_d
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgesv_incpiv_Tile_Async(A, L, IPIV, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zgesv_nopiv.c b/compute/zgesv_nopiv.c
index 31735f19c856c8c77c8b03a6df813cd41d5e9310..bc0d9bdf9d3fd297954c2a6cc14d692c59002705 100644
--- a/compute/zgesv_nopiv.c
+++ b/compute/zgesv_nopiv.c
@@ -29,7 +29,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -165,7 +166,8 @@ int MORSE_zgesv_nopiv(int N, int NRHS,
     morse_sequence_destroy(morse, sequence);
     return status;
 }
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -216,16 +218,17 @@ int MORSE_zgesv_nopiv_Tile(MORSE_desc_t *A, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgesv_nopiv_Tile_Async(A, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zgesvd.c b/compute/zgesvd.c
index b2d7e48d430c43bfef24fbde3dbd6a404bc10620..968c0a01b427303b55a50c8574231d407222a849 100644
--- a/compute/zgesvd.c
+++ b/compute/zgesvd.c
@@ -31,7 +31,8 @@
 #include <coreblas/lapacke.h>
 #endif
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -238,7 +239,8 @@ int MORSE_zgesvd(MORSE_enum jobu, MORSE_enum jobvt,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -362,7 +364,8 @@ int MORSE_zgesvd_Tile(MORSE_enum jobu, MORSE_enum jobvt,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zgetrf_incpiv.c b/compute/zgetrf_incpiv.c
index 169fb67f05fd55e87abbdbe6e377d85fb1f48237..aaf96f147bfdf88424c2200fd29eb645e005aa47 100644
--- a/compute/zgetrf_incpiv.c
+++ b/compute/zgetrf_incpiv.c
@@ -29,7 +29,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -147,7 +148,8 @@ int MORSE_zgetrf_incpiv(int M, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -202,15 +204,16 @@ int MORSE_zgetrf_incpiv_Tile(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgetrf_incpiv_Tile_Async(A, L, IPIV, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zgetrf_nopiv.c b/compute/zgetrf_nopiv.c
index ea987f595f701c29cf171e573311d2782f66b990..5e56c4a8b6bd8dffd399385ebc61bcf2ac52ea36 100644
--- a/compute/zgetrf_nopiv.c
+++ b/compute/zgetrf_nopiv.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -143,7 +144,8 @@ int MORSE_zgetrf_nopiv(int M, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -190,15 +192,16 @@ int MORSE_zgetrf_nopiv_Tile(MORSE_desc_t *A)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgetrf_nopiv_Tile_Async(A, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zgetrs_incpiv.c b/compute/zgetrs_incpiv.c
index 63f9564a2fca9fa0a01d874abd33874343dfc420..195b0895d444eb00ca8e7b5ad70bff8bd06a5800 100644
--- a/compute/zgetrs_incpiv.c
+++ b/compute/zgetrs_incpiv.c
@@ -29,7 +29,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -172,7 +173,8 @@ int MORSE_zgetrs_incpiv(MORSE_enum trans, int N, int NRHS,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -227,16 +229,17 @@ int MORSE_zgetrs_incpiv_Tile(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgetrs_incpiv_Tile_Async(A, L, IPIV, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(B);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zgetrs_nopiv.c b/compute/zgetrs_nopiv.c
index 02b029146f903eba98da6b6b0a4722102a57046d..f92c66abf05da77ee81aa117a5ac2f1d21411e03 100644
--- a/compute/zgetrs_nopiv.c
+++ b/compute/zgetrs_nopiv.c
@@ -30,7 +30,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -166,7 +167,8 @@ int MORSE_zgetrs_nopiv(MORSE_enum trans, int N, int NRHS,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -215,16 +217,17 @@ int MORSE_zgetrs_nopiv_Tile(MORSE_desc_t *A, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgetrs_nopiv_Tile_Async(A, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zheevd.c b/compute/zheevd.c
index e4a85b98b380b7217225252031dd29b7cb4a21c5..8094b590b35474f80f0740ba8a04389eeb557b6b 100644
--- a/compute/zheevd.c
+++ b/compute/zheevd.c
@@ -30,7 +30,8 @@
 #include <coreblas/lapacke.h>
 #endif
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -175,7 +176,8 @@ int MORSE_zheevd(MORSE_enum jobz, MORSE_enum uplo, int N,
     morse_sequence_destroy(morse, sequence);
     return status;
 }
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -257,17 +259,17 @@ int MORSE_zheevd_Tile(MORSE_enum jobz, MORSE_enum uplo,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zheevd_Tile_Async(jobz, uplo, A, W, T, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( T, sequence );
     morse_sequence_wait(morse, sequence);
 
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(T);
-
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zhemm.c b/compute/zhemm.c
index a9581e25a62a77ca307ee2250b95384aebfd9bcb..5b6b31852f6335f10dde0a428acb5988abb6338d 100644
--- a/compute/zhemm.c
+++ b/compute/zhemm.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -210,7 +211,8 @@ int MORSE_zhemm(MORSE_enum side, MORSE_enum uplo, int M, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -284,17 +286,18 @@ int MORSE_zhemm_Tile(MORSE_enum side, MORSE_enum uplo,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zhemm_Tile_Async(side, uplo, alpha, A, B, beta, C, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(B);
-        RUNTIME_desc_getoncpu(C);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zher2k.c b/compute/zher2k.c
index 6dd8448041eb2c5bdc1de9aec24e3fadb65acc2c..e8f2e6d892b9bf8be8b7c8f3fff666afce446ece 100644
--- a/compute/zher2k.c
+++ b/compute/zher2k.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -214,7 +215,8 @@ int MORSE_zher2k(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -283,17 +285,18 @@ int MORSE_zher2k_Tile(MORSE_enum uplo, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zher2k_Tile_Async(uplo, trans, alpha, A, B, beta, C, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(B);
-        RUNTIME_desc_getoncpu(C);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zherk.c b/compute/zherk.c
index b52cdff217dd0e6297c40ab209bf58241614b1cb..6fbe72d552b780604b3b3026e7c68e3cb7452227 100644
--- a/compute/zherk.c
+++ b/compute/zherk.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -194,7 +195,8 @@ int MORSE_zherk(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -259,16 +261,17 @@ int MORSE_zherk_Tile(MORSE_enum uplo, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zherk_Tile_Async(uplo, trans, alpha, A, beta, C, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(C);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zhetrd.c b/compute/zhetrd.c
index e3390e8fb0f56e45a2c21e35288bbefc2ed79d94..e69bce8a9eb5f25e76f796a2cd2857f65df93daf 100644
--- a/compute/zhetrd.c
+++ b/compute/zhetrd.c
@@ -30,7 +30,8 @@
 #include <coreblas/lapacke.h>
 #endif
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -189,7 +190,8 @@ int MORSE_zhetrd(MORSE_enum jobz, MORSE_enum uplo, int N,
     morse_sequence_destroy(morse, sequence);
     return status;
 }
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -291,7 +293,8 @@ int MORSE_zhetrd_Tile(MORSE_enum jobz, MORSE_enum uplo,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zlacpy.c b/compute/zlacpy.c
index c19edef30700232549a7caa946cc7085bb5f8e7b..3088442702a338f26aa23fbba300a5aa8e9bd9a9 100644
--- a/compute/zlacpy.c
+++ b/compute/zlacpy.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -158,7 +159,8 @@ int MORSE_zlacpy(MORSE_enum uplo, int M, int N,
     return MORSE_SUCCESS;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -216,7 +218,8 @@ int MORSE_zlacpy_Tile(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B)
     return MORSE_SUCCESS;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zlange.c b/compute/zlange.c
index c48e992e2a01a3344e6a40863e4364323164e344..82831613fd334461bc4f2a1e1cf437d6eb328a03 100644
--- a/compute/zlange.c
+++ b/compute/zlange.c
@@ -26,7 +26,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -146,8 +147,8 @@ double MORSE_zlange(MORSE_enum norm, int M, int N,
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
         morse_zooptile2lap(descA, A, NB, NB, LDA, N,  sequence, &request);
+    RUNTIME_desc_flush( &descA, sequence );
         morse_sequence_wait(morse, sequence);
-        RUNTIME_desc_getoncpu(&descA);
         morse_desc_mat_free(&descA);
 /*    } else {*/
 /*        morse_ziptile2lap( descA, A, NB, NB, LDA, N,  sequence, &request);*/
@@ -158,7 +159,8 @@ double MORSE_zlange(MORSE_enum norm, int M, int N,
     return value;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -215,7 +217,8 @@ double MORSE_zlange_Tile(MORSE_enum norm, MORSE_desc_t *A)
     return value;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zlanhe.c b/compute/zlanhe.c
index e03146bc65b14abd3c2e0c0d85a75539ea2501d8..e666221ace06405bf247ff7faab0d9b2cc7ec18d 100644
--- a/compute/zlanhe.c
+++ b/compute/zlanhe.c
@@ -26,7 +26,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -146,8 +147,8 @@ double MORSE_zlanhe(MORSE_enum norm, MORSE_enum uplo, int N,
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
     morse_zooptile2lap(descA, A, NB, NB, LDA, N,  sequence, &request);
+    RUNTIME_desc_flush( &descA, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(&descA);
     morse_desc_mat_free(&descA);
 /*    } else {*/
 /*        morse_ziptile2lap( descA, A, NB, NB, LDA, N,  sequence, &request);*/
@@ -158,7 +159,8 @@ double MORSE_zlanhe(MORSE_enum norm, MORSE_enum uplo, int N,
     return value;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -219,7 +221,8 @@ double MORSE_zlanhe_Tile(MORSE_enum norm, MORSE_enum uplo, MORSE_desc_t *A)
     return value;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zlansy.c b/compute/zlansy.c
index 5a141e1937c61f6fcab82419ba8fb455ace72cb0..35df4fc8912e33279b04fa6af22974ec005a1e11 100644
--- a/compute/zlansy.c
+++ b/compute/zlansy.c
@@ -26,7 +26,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -156,7 +157,8 @@ double MORSE_zlansy(MORSE_enum norm, MORSE_enum uplo, int N,
     return value;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -217,7 +219,8 @@ double MORSE_zlansy_Tile(MORSE_enum norm, MORSE_enum uplo, MORSE_desc_t *A)
     return value;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zlantr.c b/compute/zlantr.c
index 69563ac643ac00e1c2d08f7082eab70d1182bd9f..3f5e8f1eda3637f3c91541e8da96c816a732dbf6 100644
--- a/compute/zlantr.c
+++ b/compute/zlantr.c
@@ -26,7 +26,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -176,7 +177,8 @@ double MORSE_zlantr(MORSE_enum norm, MORSE_enum uplo, MORSE_enum diag,
     return value;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -239,7 +241,8 @@ double MORSE_zlantr_Tile(MORSE_enum norm, MORSE_enum uplo, MORSE_enum diag, MORS
     return value;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zlascal.c b/compute/zlascal.c
index 7fba2b6ee94e810165747545fe309fef2018f860..c86ca1da02ebad9066a30f628521088f95ad0d94 100644
--- a/compute/zlascal.c
+++ b/compute/zlascal.c
@@ -14,7 +14,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -138,7 +139,8 @@ int MORSE_zlascal(MORSE_enum uplo, int M, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -198,7 +200,8 @@ int MORSE_zlascal_Tile(MORSE_enum uplo,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zlaset.c b/compute/zlaset.c
index c90ba7526368db6e7438813d7b7ebfd08b39ad56..fab26797f9a563522dcb8d744d81070a9bc5dc0b 100644
--- a/compute/zlaset.c
+++ b/compute/zlaset.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -149,7 +150,8 @@ int MORSE_zlaset(MORSE_enum uplo, int M, int N,
     return MORSE_SUCCESS;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -205,7 +207,8 @@ int MORSE_zlaset_Tile(MORSE_enum uplo,
     return MORSE_SUCCESS;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zlauum.c b/compute/zlauum.c
index f96cab0c6b36d7894df2181d0fa5cdc6bddcdcaa..8ef3f032d56c4805b9e8fad10267a7cc1eb97a26 100644
--- a/compute/zlauum.c
+++ b/compute/zlauum.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -145,7 +146,8 @@ int MORSE_zlauum(MORSE_enum uplo, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -199,15 +201,16 @@ int MORSE_zlauum_Tile(MORSE_enum uplo, MORSE_desc_t *A)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zlauum_Tile_Async(uplo, A, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zplghe.c b/compute/zplghe.c
index d7c884989890c5bc30ea21ab762242c004a3a123..0d7af992710735c1e17462eb6e5d6d8f71bb6c36 100644
--- a/compute/zplghe.c
+++ b/compute/zplghe.c
@@ -31,7 +31,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -129,7 +130,8 @@ int MORSE_zplghe( double bump, MORSE_enum uplo, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -190,7 +192,8 @@ int MORSE_zplghe_Tile( double bump, MORSE_enum uplo, MORSE_desc_t *A,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zplgsy.c b/compute/zplgsy.c
index 3684d39dca07057d90d9d58cf09edcbd2b4c837a..7c8e8aeda0f5d1e96d384d40b529751a266875c8 100644
--- a/compute/zplgsy.c
+++ b/compute/zplgsy.c
@@ -31,7 +31,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -129,7 +130,8 @@ int MORSE_zplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -191,7 +193,8 @@ int MORSE_zplgsy_Tile( MORSE_Complex64_t bump, MORSE_enum uplo,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zplrnt.c b/compute/zplrnt.c
index 707469c9eb10c99f4ffead2d911280dcfff218e1..45e141e11fb5191fe9b2d40b94c7f7a58904f278 100644
--- a/compute/zplrnt.c
+++ b/compute/zplrnt.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -126,7 +127,8 @@ int MORSE_zplrnt( int M, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -181,7 +183,8 @@ int MORSE_zplrnt_Tile( MORSE_desc_t *A,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zposv.c b/compute/zposv.c
index b0c9cb25d7a8b551c16419cba70aa33ce9e7ecf6..5fe1ab279a4feb38ac097f80ca68bfed70807a54 100644
--- a/compute/zposv.c
+++ b/compute/zposv.c
@@ -29,7 +29,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -179,7 +180,8 @@ int MORSE_zposv(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_destroy(morse, sequence);
     return status;
 }
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -242,16 +244,17 @@ int MORSE_zposv_Tile(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zposv_Tile_Async(uplo, A, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zpotrf.c b/compute/zpotrf.c
index e69c04b8605ca4df2a1f2e77ecc42123e22082e3..08261848912dfe3913b30bc45f3e0ffd3adb1d9d 100644
--- a/compute/zpotrf.c
+++ b/compute/zpotrf.c
@@ -29,7 +29,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -152,7 +153,8 @@ int MORSE_zpotrf(MORSE_enum uplo, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -211,15 +213,16 @@ int MORSE_zpotrf_Tile(MORSE_enum uplo, MORSE_desc_t *A)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zpotrf_Tile_Async(uplo, A, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zpotri.c b/compute/zpotri.c
index 5581e027475583c814e6f1693ad944c2870d27e8..801f077cc45b83a80792ea563a91551e4be1f9e2 100644
--- a/compute/zpotri.c
+++ b/compute/zpotri.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -142,7 +143,8 @@ int MORSE_zpotri(MORSE_enum uplo, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -199,15 +201,16 @@ int MORSE_zpotri_Tile(MORSE_enum uplo, MORSE_desc_t *A)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zpotri_Tile_Async(uplo, A, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zpotrimm.c b/compute/zpotrimm.c
index c779d47c6c9d285de923c001ea9930e98ccd6e8a..180725746aa845cb28b197c915d64304e6e226e1 100644
--- a/compute/zpotrimm.c
+++ b/compute/zpotrimm.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -160,7 +161,8 @@ int MORSE_zpotrimm(MORSE_enum uplo, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -217,15 +219,16 @@ int MORSE_zpotrimm_Tile(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zpotrimm_Tile_Async(uplo, A, B, C, sequence, &request);
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(C);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zpotrs.c b/compute/zpotrs.c
index 13309e1c524623bdaa8b87b3d783ab9e616acba3..0494b688426132276bb426e911b8645bbd439e35 100644
--- a/compute/zpotrs.c
+++ b/compute/zpotrs.c
@@ -29,7 +29,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -163,7 +164,8 @@ int MORSE_zpotrs(MORSE_enum uplo, int N, int NRHS,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -217,16 +219,17 @@ int MORSE_zpotrs_Tile(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zpotrs_Tile_Async(uplo, A, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zsymm.c b/compute/zsymm.c
index 3bd567a9e486c3eb9f319d6cec1f35e26e332dcd..344f04da6f07ecd8b3be760a95e8d3621aaee504 100644
--- a/compute/zsymm.c
+++ b/compute/zsymm.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -210,7 +211,8 @@ int MORSE_zsymm(MORSE_enum side, MORSE_enum uplo, int M, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -284,17 +286,18 @@ int MORSE_zsymm_Tile(MORSE_enum side, MORSE_enum uplo,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zsymm_Tile_Async(side, uplo, alpha, A, B, beta, C, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
-    RUNTIME_desc_getoncpu(C);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zsyr2k.c b/compute/zsyr2k.c
index bc098a162414536c726763b6f341f0b5b826eb5f..50c9b234e36efeb66d03c3347ebc1c6e88a56f2d 100644
--- a/compute/zsyr2k.c
+++ b/compute/zsyr2k.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -214,7 +215,8 @@ int MORSE_zsyr2k(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -283,17 +285,18 @@ int MORSE_zsyr2k_Tile(MORSE_enum uplo, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zsyr2k_Tile_Async(uplo, trans, alpha, A, B, beta, C, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(B);
-        RUNTIME_desc_getoncpu(C);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zsyrk.c b/compute/zsyrk.c
index 3623506f22dba7f484f5e63f5b0399a62b2f0af4..4b29d6b7f93eb1e267d901ae11a897b6119bc634 100644
--- a/compute/zsyrk.c
+++ b/compute/zsyrk.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -194,7 +195,8 @@ int MORSE_zsyrk(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -259,16 +261,17 @@ int MORSE_zsyrk_Tile(MORSE_enum uplo, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zsyrk_Tile_Async(uplo, trans, alpha, A, beta, C, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(C);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zsysv.c b/compute/zsysv.c
index db51e5c515299716402007d979312469279f75f1..d39bda8bfff3341c1453dcd894478e17d9de50e2 100644
--- a/compute/zsysv.c
+++ b/compute/zsysv.c
@@ -31,7 +31,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -176,7 +177,8 @@ int MORSE_zsysv(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_destroy(morse, sequence);
     return status;
 }
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -235,16 +237,17 @@ int MORSE_zsysv_Tile(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zsysv_Tile_Async(uplo, A, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zsytrf.c b/compute/zsytrf.c
index c157d1248004068d209507dac66451ce7122fb9a..c2e3eeead99ea9237859064a13a66558fdc25360 100644
--- a/compute/zsytrf.c
+++ b/compute/zsytrf.c
@@ -25,7 +25,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -147,7 +148,8 @@ int MORSE_zsytrf(MORSE_enum uplo, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -200,15 +202,16 @@ int MORSE_zsytrf_Tile(MORSE_enum uplo, MORSE_desc_t *A)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zsytrf_Tile_Async(uplo, A, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zsytrs.c b/compute/zsytrs.c
index 508d404c634dbb376946ea5591b18021c34563fb..df6f7d9dea81ba12ef7e6f443d14f3f9105b2796 100644
--- a/compute/zsytrs.c
+++ b/compute/zsytrs.c
@@ -31,7 +31,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -162,7 +163,8 @@ int MORSE_zsytrs(MORSE_enum uplo, int N, int NRHS,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -213,16 +215,17 @@ int MORSE_zsytrs_Tile(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zsytrs_Tile_Async(uplo, A, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/ztile.c b/compute/ztile.c
index 5d95c523d3207505aa71a833088414ab7410d59f..5377a78643d356f397c3e46011c097a8113a157d 100644
--- a/compute/ztile.c
+++ b/compute/ztile.c
@@ -26,7 +26,8 @@
  **/
 #include "control/common.h"
 
-/*******************************************************************************
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -82,15 +83,16 @@ int MORSE_zLapack_to_Tile(MORSE_Complex64_t *Af77, int LDA, MORSE_desc_t *A)
 
     morse_pzlapack_to_tile( Af77, LDA, A, sequence, &request);
 
+    RUNTIME_desc_flush( A, sequence );
     RUNTIME_sequence_wait( morse, sequence );
-    RUNTIME_desc_getoncpu( A );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/*******************************************************************************
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
@@ -152,7 +154,8 @@ int MORSE_zLapack_to_Tile_Async(MORSE_Complex64_t *Af77, int LDA, MORSE_desc_t *
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -207,14 +210,16 @@ int MORSE_zTile_to_Lapack(MORSE_desc_t *A, MORSE_Complex64_t *Af77, int LDA)
     morse_sequence_create(morse, &sequence);
 
     morse_pztile_to_lapack( A, Af77, LDA, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
     RUNTIME_sequence_wait( morse, sequence );
-    RUNTIME_desc_getoncpu( A );
+
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/*******************************************************************************
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/ztpgqrt.c b/compute/ztpgqrt.c
index 2df25d010ceccca96fb923b6c765e41204d520d1..bf6fee28d640f5e6345299766d1e983c74a5a7d3 100644
--- a/compute/ztpgqrt.c
+++ b/compute/ztpgqrt.c
@@ -296,9 +296,9 @@ int MORSE_ztpgqrt_Tile( int L,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztpgqrt_Tile_Async(L, V1, T1, V2, T2, Q1, Q2, sequence, &request);
+    RUNTIME_desc_flush( Q1, sequence );
+    RUNTIME_desc_flush( Q2, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(Q1);
-    RUNTIME_desc_getoncpu(Q2);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/ztpqrt.c b/compute/ztpqrt.c
index adb72fe9aef7004c9eae4548e30859802c55b7fd..3298638e02705a80365fc645a57c1c906e76c021 100644
--- a/compute/ztpqrt.c
+++ b/compute/ztpqrt.c
@@ -268,9 +268,9 @@ int MORSE_ztpqrt_Tile( int L, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *T
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztpqrt_Tile_Async(L, A, B, T, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/ztradd.c b/compute/ztradd.c
index d35eb823c13d08cfb25848e724d2054036aa8532..7bbf05f99cc7828f7c8f7201cf1d63258c5a605d 100644
--- a/compute/ztradd.c
+++ b/compute/ztradd.c
@@ -26,7 +26,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -194,7 +195,8 @@ int MORSE_ztradd(MORSE_enum uplo, MORSE_enum trans, int M, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -263,16 +265,17 @@ int MORSE_ztradd_Tile(MORSE_enum uplo, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztradd_Tile_Async(uplo, trans, alpha, A, beta, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/ztrmm.c b/compute/ztrmm.c
index 17e5d44039b514938445003df3a9c13ed7b125ba..434621d6da5963f885d2e35142b9d1db28b8f22f 100644
--- a/compute/ztrmm.c
+++ b/compute/ztrmm.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -207,7 +208,8 @@ int MORSE_ztrmm(MORSE_enum side, MORSE_enum uplo,
     morse_sequence_destroy(morse, sequence);
     return status;
 }
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -285,16 +287,17 @@ int MORSE_ztrmm_Tile(MORSE_enum side, MORSE_enum uplo,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztrmm_Tile_Async(side, uplo, transA, diag, alpha, A, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(B);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/ztrsm.c b/compute/ztrsm.c
index 5a6b21980c2166cc4f9cd083074b2c59a4a566d7..db4e89dec01cd316b7933dd5faf1c798923cf1e1 100644
--- a/compute/ztrsm.c
+++ b/compute/ztrsm.c
@@ -29,7 +29,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -205,7 +206,8 @@ int MORSE_ztrsm(MORSE_enum side, MORSE_enum uplo,
     morse_sequence_destroy(morse, sequence);
     return status;
 }
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -283,16 +285,17 @@ int MORSE_ztrsm_Tile(MORSE_enum side, MORSE_enum uplo,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztrsm_Tile_Async(side, uplo, transA, diag, alpha, A, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(B);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/ztrsmpl.c b/compute/ztrsmpl.c
index 86ef9bb4d3bffa2f0d228fe147e79927bb0d82de..0439834108f356cdb5ed263047c219f069596656 100644
--- a/compute/ztrsmpl.c
+++ b/compute/ztrsmpl.c
@@ -29,7 +29,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -160,7 +161,8 @@ int MORSE_ztrsmpl(int N, int NRHS,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -212,16 +214,17 @@ int MORSE_ztrsmpl_Tile(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_desc_t
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztrsmpl_Tile_Async(A, L, IPIV, B, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(B);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/ztrtri.c b/compute/ztrtri.c
index 28cab09ef59ac5d24e8642972c909a57cf8c0e9d..2f2d36c6040991076ab17946577becfde41f311a 100644
--- a/compute/ztrtri.c
+++ b/compute/ztrtri.c
@@ -28,7 +28,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -154,7 +155,8 @@ int MORSE_ztrtri(MORSE_enum uplo, MORSE_enum diag, int N,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -218,15 +220,16 @@ int MORSE_ztrtri_Tile(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztrtri_Tile_Async(uplo, diag, A, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zunglq.c b/compute/zunglq.c
index 0ee4758b652a79c973ae9c54278ca92be62c155c..7ececcb759dc1614ec1ec3b72f2691c541c6c841 100644
--- a/compute/zunglq.c
+++ b/compute/zunglq.c
@@ -30,7 +30,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -166,7 +167,8 @@ int MORSE_zunglq(int M, int N, int K,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -214,16 +216,17 @@ int MORSE_zunglq_Tile(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *Q)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zunglq_Tile_Async(A, T, Q, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( Q, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(Q);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zunglq_param.c b/compute/zunglq_param.c
index d64930f4119ada76f12b9623e8230ed43378a1bd..5b6d30e6065194ea3f825b7304f889c8f9be2bb9 100644
--- a/compute/zunglq_param.c
+++ b/compute/zunglq_param.c
@@ -213,9 +213,9 @@ int MORSE_zunglq_param_Tile(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zunglq_param_Tile_Async(qrtree, A, TS, TT, Q, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( Q, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(Q);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zungqr.c b/compute/zungqr.c
index 122b1b911adce9a201c93dbfcc62a9c41ef6405a..822dc4e568f7c9bca64af7c37746b57105aeba7f 100644
--- a/compute/zungqr.c
+++ b/compute/zungqr.c
@@ -30,7 +30,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -165,7 +166,8 @@ int MORSE_zungqr(int M, int N, int K,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -213,16 +215,17 @@ int MORSE_zungqr_Tile(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *Q)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zungqr_Tile_Async(A, T, Q, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( Q, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(Q);
     
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zungqr_param.c b/compute/zungqr_param.c
index 8b4f7e46103dcf0fd3cd92492ced8a764c2de654..af88ea598d0b1f9c13bfd1c328f5f5ec2e1170d3 100644
--- a/compute/zungqr_param.c
+++ b/compute/zungqr_param.c
@@ -214,9 +214,9 @@ int MORSE_zungqr_param_Tile(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zungqr_param_Tile_Async(qrtree, A, TS, TT, Q, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( Q, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-    RUNTIME_desc_getoncpu(Q);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zunmlq.c b/compute/zunmlq.c
index 33cf72a309ad39382c9c15b17b60caf59b46dcb0..81535c19d79ff71a24345609b2e319ad90c4056a 100644
--- a/compute/zunmlq.c
+++ b/compute/zunmlq.c
@@ -269,9 +269,9 @@ int MORSE_zunmlq_Tile(MORSE_enum side, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zunmlq_Tile_Async(side, trans, A, T, C, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(C);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zunmlq_param.c b/compute/zunmlq_param.c
index cace1d697c507ea985807303f74c1b50846dc3b0..b6f746d02e23a78cbfdd0853a34953d6d04fdac5 100644
--- a/compute/zunmlq_param.c
+++ b/compute/zunmlq_param.c
@@ -268,9 +268,9 @@ int MORSE_zunmlq_param_Tile(const libhqr_tree_t *qrtree, MORSE_enum side, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zunmlq_param_Tile_Async(qrtree, side, trans, A, TS, TT, C, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(C);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zunmqr.c b/compute/zunmqr.c
index a32d603674ffd69e6baf2dc2175d923a6b0dd808..4464aaecbe90f5d6bbf86bf4c644aa89ccbe87d5 100644
--- a/compute/zunmqr.c
+++ b/compute/zunmqr.c
@@ -30,7 +30,8 @@
  **/
 #include "control/common.h"
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t
  *
@@ -207,7 +208,8 @@ int MORSE_zunmqr(MORSE_enum side, MORSE_enum trans, int M, int N, int K,
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile
  *
@@ -271,16 +273,17 @@ int MORSE_zunmqr_Tile(MORSE_enum side, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zunmqr_Tile_Async(side, trans, A, T, C, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(C);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
 }
 
-/***************************************************************************//**
+/**
+ ********************************************************************************
  *
  * @ingroup MORSE_Complex64_t_Tile_Async
  *
diff --git a/compute/zunmqr_param.c b/compute/zunmqr_param.c
index 2a101ace364e8b379d92255b11be078925c17670..d285caabf0ce422062a6b621355c85bf309c4de4 100644
--- a/compute/zunmqr_param.c
+++ b/compute/zunmqr_param.c
@@ -274,9 +274,9 @@ int MORSE_zunmqr_param_Tile(const libhqr_tree_t *qrtree, MORSE_enum side, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zunmqr_param_Tile_Async(qrtree, side, trans, A, TS, TT, C, sequence, &request);
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
-    RUNTIME_desc_getoncpu(A);
-        RUNTIME_desc_getoncpu(C);
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/control/control.c b/control/control.c
index fb742b5b491646be64a30fa46818d365bf056ca7..58bc403c18402dd3d42151042325de561eab1afe 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_flush_all();
+    RUNTIME_flush();
 #  if !defined(CHAMELEON_SIMULATION)
     RUNTIME_barrier(morse);
 #  endif
diff --git a/control/descriptor.c b/control/descriptor.c
index bec07637c288d0db4bc7e8acd4f1d348046586f2..de7d216bdda0750193727395791c2fe9d3631479 100644
--- a/control/descriptor.c
+++ b/control/descriptor.c
@@ -151,7 +151,7 @@ MORSE_desc_t morse_desc_init_user(MORSE_enum dtyp, int mb, int nb, int bsiz,
     desc.occurences = 0;
     desc.use_mat      = 1;
     desc.alloc_mat    = 1;
-    desc.register_mat = 1;
+    desc.register_mat = (morse->ncudas > 0) ? 1 : 0;
     desc.ooc          = 0;
 
     desc.myrank = RUNTIME_comm_rank( morse );
@@ -809,8 +809,7 @@ int MORSE_Desc_Release (MORSE_desc_t  *desc) {
  *
  * @ingroup Descriptor
  *
- *  MORSE_Desc_Getoncpu - Apply an acquire and a release on the data of the
- *  descriptors so that its values are up-to-date in the main memory.
+ *  MORSE_Desc_Flush - Flushes the data in the sequence when they won't be reused. This calls cleans up the distributed communication caches, and transfer the data back to the CPU.
  *
  ******************************************************************************
  *
@@ -823,8 +822,11 @@ int MORSE_Desc_Release (MORSE_desc_t  *desc) {
  *          \retval MORSE_SUCCESS successful exit
  *
  *****************************************************************************/
-int MORSE_Desc_Getoncpu(MORSE_desc_t  *desc) {
-    return RUNTIME_desc_getoncpu( desc );
+int MORSE_Desc_Flush( MORSE_desc_t     *desc,
+                      MORSE_sequence_t *sequence )
+{
+    RUNTIME_desc_flush( desc, sequence );
+    return MORSE_SUCCESS;
 }
 
 /**
diff --git a/doc/orgmode/chapters/using.org b/doc/orgmode/chapters/using.org
index 5bc65eaed097a7b8d10bfbe517598325dfbf4881..7bf39140f57702191dee06f459a506e2754c254f 100644
--- a/doc/orgmode/chapters/using.org
+++ b/doc/orgmode/chapters/using.org
@@ -1004,7 +1004,7 @@
      Ensure that all data are up-to-date in main memory (even if some
      tasks have been processed on GPUs).
      #+begin_src
-     int MORSE_Desc_Getoncpu(MORSE_desc_t  *desc);
+     int MORSE_Desc_Flush(MORSE_desc_t  *desc, MORSE_sequence_t *sequence);
      #+end_src
 
      Set the sizes for the MPI tags.  Default value: tag_width=31,
diff --git a/doc/texinfo/chapters/using.texi b/doc/texinfo/chapters/using.texi
index bb50d74f50044dd41a8be8524bd0d4a148ebba8b..ae7dbe1009264ce26b1230e041ad92f9bd64bed2 100644
--- a/doc/texinfo/chapters/using.texi
+++ b/doc/texinfo/chapters/using.texi
@@ -830,7 +830,7 @@ int MORSE_Desc_Destroy (MORSE_desc_t **desc);
 Ensure that all data are up-to-date in main memory (even if some tasks have
 been processed on GPUs)
 @verbatim
-int MORSE_Desc_Getoncpu(MORSE_desc_t  *desc);
+int MORSE_Desc_Flush(MORSE_desc_t  *desc, MORSE_sequence_t *sequence);
 @end verbatim
 
 @node Options routines
diff --git a/example/lapack_to_morse/step4.c b/example/lapack_to_morse/step4.c
index b4111cdab378e21ea1abcc60f41892a71e14661c..3c37878e56eeca485e2eb922c5e036236bd59e35 100644
--- a/example/lapack_to_morse/step4.c
+++ b/example/lapack_to_morse/step4.c
@@ -141,15 +141,15 @@ int main(int argc, char *argv[]) {
      */
     MORSE_dpotrs_Tile_Async( UPLO, descA, descX, sequence, &request);
 
+    /* Ensure that all data processed on the gpus we are depending on are back
+     * in main memory */
+    MORSE_Desc_Flush( descA, sequence );
+    MORSE_Desc_Flush( descX, sequence );
+
     /* Synchronization barrier (the runtime ensures that all submitted tasks
      * have been terminated */
     MORSE_Sequence_Wait(sequence);
 
-    /* Ensure that all data processed on the gpus we are depending on are back
-     * in main memory */
-    RUNTIME_desc_getoncpu(descA);
-    RUNTIME_desc_getoncpu(descX);
-
     status = sequence->status;
     if ( status != 0 ) {
         fprintf(stderr, "Error in computation (%d)\n", status);
diff --git a/example/lapack_to_morse/step5.c b/example/lapack_to_morse/step5.c
index 46aa1d29ae495cbfa57a4f6b0890dbdb528db50c..addff8e7cb34534a4fc4589a94b2884d815b9bdc 100644
--- a/example/lapack_to_morse/step5.c
+++ b/example/lapack_to_morse/step5.c
@@ -145,15 +145,15 @@ int main(int argc, char *argv[]) {
      */
     MORSE_dpotrs_Tile_Async( UPLO, descA, descX, sequence, &request);
 
+    /* Ensure that all data processed on the gpus we are depending on are back
+     * in main memory */
+    MORSE_Desc_Flush( descA, sequence );
+    MORSE_Desc_Flush( descX, sequence );
+
     /* Synchronization barrier (the runtime ensures that all submitted tasks
      * have been terminated */
     MORSE_Sequence_Wait(sequence);
 
-    /* Ensure that all data processed on the gpus we are depending on are back
-     * in main memory */
-    RUNTIME_desc_getoncpu(descA);
-    RUNTIME_desc_getoncpu(descX);
-
     status = sequence->status;
     if ( status != 0 ) {
         fprintf(stderr, "Error in computation (%d)\n", status);
diff --git a/example/lapack_to_morse/step6.c b/example/lapack_to_morse/step6.c
index 68850db3f7e3af4374aee9e2f9f63b9abf89d8cd..074d4cfa8e054d9ddea83381e692d03ae7b140e2 100644
--- a/example/lapack_to_morse/step6.c
+++ b/example/lapack_to_morse/step6.c
@@ -167,15 +167,15 @@ int main(int argc, char *argv[]) {
      */
     MORSE_dpotrs_Tile_Async( UPLO, descA, descX, sequence, &request);
 
+    /* Ensure that all data processed on the gpus we are depending on are back
+     * in main memory */
+    MORSE_Desc_Flush( descA, sequence );
+    MORSE_Desc_Flush( descX, sequence );
+
     /* Synchronization barrier (the runtime ensures that all submitted tasks
      * have been terminated */
     MORSE_Sequence_Wait(sequence);
 
-    /* Ensure that all data processed on the gpus we are depending on are back
-     * in main memory */
-    RUNTIME_desc_getoncpu(descA);
-    RUNTIME_desc_getoncpu(descX);
-
     status = sequence->status;
     if ( status != 0 ) {
         fprintf(stderr, "Error in computation (%d)\n", status);
diff --git a/example/lapack_to_morse/step7.c b/example/lapack_to_morse/step7.c
index 15e00f5875bc32da15788188c8fd6e0e3fa7f115..fbb48e4e50deaa1ad1d48b9e3aad6963c6a0b72a 100644
--- a/example/lapack_to_morse/step7.c
+++ b/example/lapack_to_morse/step7.c
@@ -175,15 +175,15 @@ int main(int argc, char *argv[]) {
      */
     MORSE_dpotrs_Tile_Async( UPLO, descA, descX, sequence, &request);
 
+    /* Ensure that all data processed on the gpus we are depending on are back
+     * in main memory */
+    MORSE_Desc_Flush( descA, sequence );
+    MORSE_Desc_Flush( descX, sequence );
+
     /* Synchronization barrier (the runtime ensures that all submitted tasks
      * have been terminated */
     MORSE_Sequence_Wait(sequence);
 
-    /* Ensure that all data processed on the gpus we are depending on are back
-     * in main memory */
-    RUNTIME_desc_getoncpu(descA);
-    RUNTIME_desc_getoncpu(descX);
-
     status = sequence->status;
     if ( status != 0 ) {
         fprintf(stderr, "Error in computation (%d)\n", status);
diff --git a/include/chameleon/morse_runtime.h b/include/chameleon/morse_runtime.h
index c9f098f3f7ae8d78189a8503f08f0e319c5ccd26..76c83ce85505d1afac466de41a3d5c1f84b5ab49 100644
--- a/include/chameleon/morse_runtime.h
+++ b/include/chameleon/morse_runtime.h
@@ -394,52 +394,73 @@ int
 RUNTIME_desc_release( const MORSE_desc_t *desc );
 
 /**
- * @brief Make sure the data is brought back to the CPU main memory at the
- * end of the algorithm.
+ * @brief Flush all pieces of data from a descriptor.
+ *
+ * This function marks all pieces of data from the descriptor as unused in the future to:
+ *   - cleanup the data from the distributed cache if present.
+ *   - mark for eviction from the GPU if space is needed
+ *   - move the data back to the main memory
  *
  * @param[in] desc
- *            The descriptor to release.
+ *            The descriptor to flush.
  *
- * @retval MORSE_SUCCESS on success
+ * @param[in] sequence
+ *            The sequence in which the data is used.
  */
-int
-RUNTIME_desc_getoncpu( const MORSE_desc_t *desc );
+void
+RUNTIME_desc_flush( const MORSE_desc_t     *desc,
+                    const MORSE_sequence_t *sequence );
 
 /**
- * @brief Make sure the data will be brought back to the CPU main memory at the
- * end of the algorithm.
+ * @brief Flush all data submitted to the runtime systems from the distributed
+ * cache, and/or mark for eviction from the GPU memory.
  *
- * This function is a asynchronous call that submit the data movement from
- * remote memory to the main memory. This call must be completed by a call to
- * RUNTIME_sequence_wait() to ensure that all data have been moved.
- * Users should avoid to call this function as it sequentially moves back the
- * data from outside the main memory to main memory, and should prefer
- * RUNTIME_desc_getoncpu_async().
+ * This function flushes all data from the distributed cache of the runtime system.
+ */
+void
+RUNTIME_flush( );
+
+/**
+ * @brief Flush a single piece of data.
  *
- * @param[in] desc
- *            The descriptor to release.
+ * This function marks a piece of data as unused in the future to:
+ *   - cleanup the data from the distributed cache if present.
+ *   - mark for eviction from the GPU if space is needed
+ *   - move the data back to the main memory
  *
  * @param[in] sequence
- *            The sequence to which submit the data movements
+ *            The sequence in which the data is used.
  *
- * @retval MORSE_SUCCESS on success
+ * @param[in] A
+ *            The descriptor to which the piece of data belongs.
+ *
+ * @param[in] Am
+ *            The row coordinate of the piece of data in the matrix
+ *
+ * @param[in] An
+ *            The column coordinate of the piece of data in the matrix
  */
-int
-RUNTIME_desc_getoncpu_async( const MORSE_desc_t *desc,
-                             MORSE_sequence_t   *sequence );
+void
+RUNTIME_data_flush( const MORSE_sequence_t *sequence,
+                    const MORSE_desc_t *A, int Am, int An );
 
 /**
  * @brief Get the pointer to the data or the runtime handler associated to the
  * piece of data (m, n) in desc.
  *
- * @param[in] desc
- *            The descriptor to release.
+ * @param[in] A
+ *            The descriptor to which belongs the piece of data.
  *
- * @retval MORSE_SUCCESS on success
+ * @param[in] Am
+ *            The row coordinate of the piece of data in the matrix
+ *
+ * @param[in] An
+ *            The column coordinate of the piece of data in the matrix
+ *
+ * @retval The runtime handler address of the piece of data.
  */
 void *
-RUNTIME_desc_getaddr( const MORSE_desc_t *desc,
-                      int m, int n );
+RUNTIME_data_getaddr( const MORSE_desc_t *A, int Am, int An );
 
 /**
  * @}
diff --git a/include/chameleon/morse_tasks.h b/include/chameleon/morse_tasks.h
index 82abf2c7853cbf5269d8b1887386dbd48440762a..a048e391eb40996b9429eb55bfc63ccaa16fa5b9 100644
--- a/include/chameleon/morse_tasks.h
+++ b/include/chameleon/morse_tasks.h
@@ -46,15 +46,6 @@ void MORSE_TASK_stile_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);
 
-/*
- * Mark a data as unused after this call
- */
-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"
 #include "chameleon/morse_tasks_c.h"
diff --git a/include/morse.h b/include/morse.h
index 6d745743fdebf87f8c14dd903fb2f6b7e1982aa1..525c27b0671748655578d01f2bcaa5ccebe23c77 100644
--- a/include/morse.h
+++ b/include/morse.h
@@ -114,7 +114,7 @@ int MORSE_Desc_Create_OOC_User(MORSE_desc_t **desc, MORSE_enum dtyp,
 int MORSE_Desc_Destroy (MORSE_desc_t **desc);
 int MORSE_Desc_Acquire (MORSE_desc_t  *desc);
 int MORSE_Desc_Release (MORSE_desc_t  *desc);
-int MORSE_Desc_Getoncpu(MORSE_desc_t  *desc);
+int MORSE_Desc_Flush   (MORSE_desc_t  *desc, MORSE_sequence_t *sequence);
 void MORSE_user_tag_size(int, int) ;
 
 /* Workspaces */
diff --git a/runtime/parsec/include/chameleon_parsec.h b/runtime/parsec/include/chameleon_parsec.h
index 76f515905084369d2d597eda5ee143dfac04172f..4dcce7564eb3bfb5d35f96683dd55a49422a73c9 100644
--- a/runtime/parsec/include/chameleon_parsec.h
+++ b/runtime/parsec/include/chameleon_parsec.h
@@ -22,8 +22,8 @@ typedef struct morse_parsec_desc_s morse_parsec_desc_t;
 /*
  * Access to block pointer and leading dimension
  */
-#define RTBLKADDR( desc, type, m, n ) ( parsec_dtd_tile_of( (parsec_data_collection_t *) ((desc)->schedopt),            \
-                                      ((parsec_data_collection_t *) (desc)->schedopt)->data_key((desc)->schedopt, m, n) ))
+#define RTBLKADDR( desc, type, m, n ) ( parsec_dtd_tile_of( (parsec_data_collection_t *) ((desc)->schedopt), \
+                                                            ((parsec_data_collection_t *) (desc)->schedopt)->data_key((desc)->schedopt, m, n) ))
 
 #define RUNTIME_BEGIN_ACCESS_DECLARATION
 
diff --git a/runtime/quark/CMakeLists.txt b/runtime/quark/CMakeLists.txt
index c6412acc493b121e49b3a4a329796b5411dad93d..db92c2a9bbc2755ca15b7a896432782c7c7cb83e 100644
--- a/runtime/quark/CMakeLists.txt
+++ b/runtime/quark/CMakeLists.txt
@@ -86,7 +86,6 @@ set(RUNTIME_COMMON
   control/runtime_descriptor.c
   control/runtime_options.c
   control/runtime_profiling.c
-  codelets/codelet_dataflush.c
   ${RUNTIME_COMMON_GENERATED}
   )
 
diff --git a/runtime/quark/codelets/codelet_dataflush.c b/runtime/quark/codelets/codelet_dataflush.c
deleted file mode 100644
index cbec78c35a0739516c61a3c7d36a99c2cfbb3148..0000000000000000000000000000000000000000
--- a/runtime/quark/codelets/codelet_dataflush.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- *
- * @copyright (c) 2009-2014 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2014 Inria. All rights reserved.
- * @copyright (c) 2012-2014, 2016 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
- *
- **/
-
-/**
- *
- * @file codelet_dataflush.c
- *
- *  MORSE codelets kernel
- *  MORSE is a software package provided by Univ. of Tennessee,
- *  Univ. of California Berkeley and Univ. of Colorado Denver
- *
- * @version 2.5.0
- * @comment This file has been automatically generated
- *          from Plasma 2.5.0 for MORSE 1.0.0
- * @author Mathieu Faverge
- *
- * @date 2014-02-05
- *
- **/
-#include "chameleon_quark.h"
-
-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 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_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/control/runtime_descriptor.c b/runtime/quark/control/runtime_descriptor.c
index 2b08dd846a3916e1013243867373b91f0ac9470e..3832d9926ee7b00fa86b9ae04d7f52c8a7d7f4bc 100644
--- a/runtime/quark/control/runtime_descriptor.c
+++ b/runtime/quark/control/runtime_descriptor.c
@@ -64,21 +64,34 @@ int RUNTIME_desc_release( const MORSE_desc_t *desc )
     return MORSE_SUCCESS;
 }
 
-int RUNTIME_desc_getoncpu( const MORSE_desc_t *desc )
+void
+RUNTIME_desc_flush( const MORSE_desc_t     *desc,
+                    const MORSE_sequence_t *sequence )
 {
     (void)desc;
-    return MORSE_SUCCESS;
+    (void)sequence;
+    return;
 }
 
-int RUNTIME_desc_getoncpu_async( const MORSE_desc_t *desc,
-                                 MORSE_sequence_t   *sequence )
+
+void
+RUNTIME_flush( )
+{
+    return;
+}
+
+void
+RUNTIME_data_flush( const MORSE_sequence_t *sequence,
+                    const MORSE_desc_t *A, int Am, int An )
 {
-    (void)desc;
     (void)sequence;
-    return MORSE_SUCCESS;
+    (void)A;
+    (void)Am;
+    (void)An;
+    return;
 }
 
-void *RUNTIME_desc_getaddr( const MORSE_desc_t *desc, int m, int n )
+void *RUNTIME_data_getaddr( const MORSE_desc_t *desc, int m, int n )
 {
     return desc->get_blkaddr( desc, m, n );
 }
diff --git a/runtime/quark/include/chameleon_quark.h b/runtime/quark/include/chameleon_quark.h
index 50d11f52188dcdd8759820714aa9486cfb5be11b..231e8acf39a1d1499b19ebab8a5dd71ef63764d6 100644
--- a/runtime/quark/include/chameleon_quark.h
+++ b/runtime/quark/include/chameleon_quark.h
@@ -40,7 +40,7 @@ typedef struct quark_option_s {
 /*
  * Access to block pointer and leading dimension
  */
-#define RTBLKADDR( desc, type, m, n ) ( (type*)RUNTIME_desc_getaddr( desc, m, n ) )
+#define RTBLKADDR( desc, type, m, n ) ( (type*)RUNTIME_data_getaddr( desc, m, n ) )
 
 #define RUNTIME_BEGIN_ACCESS_DECLARATION
 
diff --git a/runtime/starpu/CMakeLists.txt b/runtime/starpu/CMakeLists.txt
index 2bc2c94d14005fc9c0831f98920bac3b470c5e3e..a6d06b1ad6e193823f0ef152e10fd08216349a2d 100644
--- a/runtime/starpu/CMakeLists.txt
+++ b/runtime/starpu/CMakeLists.txt
@@ -95,7 +95,6 @@ set(RUNTIME_COMMON
   control/runtime_options.c
   control/runtime_profiling.c
   control/runtime_workspace.c
-  codelets/codelet_dataflush.c
   ${RUNTIME_COMMON_GENERATED}
   )
 
diff --git a/runtime/starpu/codelets/codelet_dataflush.c b/runtime/starpu/codelets/codelet_dataflush.c
deleted file mode 100644
index 976c5dfca15c2b05f62590d68f2e4cb53a2ec5d9..0000000000000000000000000000000000000000
--- a/runtime/starpu/codelets/codelet_dataflush.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- *
- * @copyright (c) 2009-2014 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2014 Inria. All rights reserved.
- * @copyright (c) 2012-2016 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
- *
- **/
-
-/**
- *
- * @file codelet_dataflush.c
- *
- *  MORSE codelets kernel
- *  MORSE is a software package provided by Univ. of Tennessee,
- *  Univ. of California Berkeley and Univ. of Colorado Denver
- *
- * @version 2.5.0
- * @comment This file has been automatically generated
- *          from Plasma 2.5.0 for MORSE 1.0.0
- * @author Mathieu Faverge
- * @author Marc Sergent
- * @date 2014-02-05
- *
- **/
-#include "chameleon_starpu.h"
-#include "chameleon/morse_tasks.h"
-
-#ifdef HAVE_STARPU_DATA_WONT_USE
-#elif defined HAVE_STARPU_IDLE_PREFETCH
-static void data_flush(void *handle)
-{
-        starpu_data_idle_prefetch_on_node(handle, STARPU_MAIN_RAM, 1);
-        starpu_data_release_on_node(handle, -1);
-}
-#else
-static void data_release(void *handle)
-{
-        starpu_data_release(handle);
-}
-#endif
-
-#ifdef CHAMELEON_USE_MPI
-#ifdef HAVE_STARPU_MPI_CACHED_RECEIVE
-int RUNTIME_desc_iscached(const MORSE_desc_t *A, int Am, int An)
-{
-    starpu_data_handle_t *ptrtile = (starpu_data_handle_t*)(A->schedopt);
-    ptrtile += ((int64_t)(A->lmt) * (int64_t)An + (int64_t)Am);
-
-    if (!(*ptrtile))
-        return 0;
-
-    return starpu_mpi_cached_receive(*ptrtile);
-}
-#endif
-#endif
-
-void MORSE_TASK_flush_data( const MORSE_option_t *options,
-                            const MORSE_desc_t *A, int Am, int An )
-{
-    (void)options;
-
-    {
-        starpu_data_handle_t *ptrtile = (starpu_data_handle_t*)(A->schedopt);
-        ptrtile += ((int64_t)(A->lmt) * (int64_t)An + (int64_t)Am);
-
-        if (*ptrtile != NULL)
-        {
-#if defined(CHAMELEON_USE_MPI)
-            starpu_mpi_cache_flush(MPI_COMM_WORLD, *ptrtile);
-#endif
-
-            if ( A->myrank == A->get_rankof( A, Am, An ) )
-            {
-                /* Push data to main memory when we have time to */
-#ifdef HAVE_STARPU_DATA_WONT_USE
-                starpu_data_wont_use(*ptrtile);
-#elif defined HAVE_STARPU_IDLE_PREFETCH
-                starpu_data_acquire_on_node_cb(*ptrtile, -1, STARPU_R, data_flush, *ptrtile);
-#else
-                starpu_data_acquire_cb(*ptrtile, STARPU_R, data_release, *ptrtile);
-#endif
-            }
-        }
-    }
-}
-
-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);
-#endif
-}
diff --git a/runtime/starpu/control/runtime_descriptor.c b/runtime/starpu/control/runtime_descriptor.c
index 39282f386736479b9b94b472f16e3e673c5d96aa..ee2350065243b40bc15d943d26f052875a7292f2 100644
--- a/runtime/starpu/control/runtime_descriptor.c
+++ b/runtime/starpu/control/runtime_descriptor.c
@@ -127,6 +127,8 @@ void RUNTIME_desc_create( MORSE_desc_t *desc )
         rc = cudaHostRegister( desc->mat, size, cudaHostRegisterPortable );
         if ( rc != cudaSuccess )
         {
+            /* Disable the unregister as register failed */
+            desc->register_mat = 0;
             morse_warning("RUNTIME_desc_create(StarPU): cudaHostRegister - ", cudaGetErrorString( rc ));
         }
     }
@@ -294,76 +296,96 @@ int RUNTIME_desc_release( const MORSE_desc_t *desc )
 }
 
 /*******************************************************************************
- *  Get data on cpu - Synchronous call
+ *  Flush cached data
  **/
-int RUNTIME_desc_getoncpu( const MORSE_desc_t *desc )
+void RUNTIME_flush()
+{
+#if defined(CHAMELEON_USE_MPI)
+    starpu_mpi_cache_flush_all_data(MPI_COMM_WORLD);
+#endif
+}
+
+/*****************************************************************************
+ * Different implementations of the flush call based on StarPU version
+ */
+#ifdef HAVE_STARPU_DATA_WONT_USE
+
+static inline void
+chameleon_starpu_data_wont_use( starpu_data_handle_t handle ) {
+    starpu_data_wont_use( handle );
+}
+
+#elif defined HAVE_STARPU_IDLE_PREFETCH
+
+static inline void
+chameleon_starpu_data_flush( starpu_data_handle_t handle)
+{
+    starpu_data_idle_prefetch_on_node(handle, STARPU_MAIN_RAM, 1);
+    starpu_data_release_on_node(handle, -1);
+}
+
+static inline void
+chameleon_starpu_data_wont_use( starpu_data_handle_t handle ) {
+    starpu_data_acquire_on_node_cb( handle, -1, STARPU_R,
+                                    chameleon_starpu_data_flush, handle );
+}
+
+#else
+
+static inline void
+chameleon_starpu_data_wont_use( starpu_data_handle_t handle ) {
+    starpu_data_acquire_cb( handle, STARPU_R,
+                            (void (*)(void*))&starpu_data_release, handle );
+
+#endif
+
+void RUNTIME_desc_flush( const MORSE_desc_t     *desc,
+                         const MORSE_sequence_t *sequence )
 {
     starpu_data_handle_t *handle = (starpu_data_handle_t*)(desc->schedopt);
     int lmt = desc->lmt;
     int lnt = desc->lnt;
     int m, n;
 
-    if ( desc->ooc ) {
-        /* May not even fit */
-        morse_warning( "RUNTIME_desc_getoncpu(StarPU)",
-                       "Try to get an out-of-core matrix on main memory. Cancelled as it might not fit" );
-        return MORSE_SUCCESS;
-    }
-
-    for (n = 0; n < lnt; n++) {
-        for (m = 0; m < lmt; m++)
+    for (n = 0; n < lnt; n++)
+    {
+        for (m = 0; m < lmt; m++, handle++)
         {
-            if ( (*handle == NULL) ||
-                 !morse_desc_islocal( desc, m, n ) )
-            {
-                handle++;
+            if ( *handle == NULL ) {
                 continue;
             }
 
-            starpu_data_acquire(*handle, STARPU_R);
-            starpu_data_release(*handle);
-            handle++;
+#if defined(CHAMELEON_USE_MPI)
+            starpu_mpi_cache_flush( MPI_COMM_WORLD, *handle );
+#endif
+            if ( morse_desc_islocal( desc, m, n ) ) {
+                chameleon_starpu_data_wont_use( *handle );
+            }
         }
     }
-    return MORSE_SUCCESS;
+
+    (void)sequence;
 }
 
-/*******************************************************************************
- *  Get data on cpu - Asynchronous call
- **/
-int RUNTIME_desc_getoncpu_async( const MORSE_desc_t *desc,
-                                 MORSE_sequence_t   *sequence )
+void RUNTIME_data_flush( const MORSE_sequence_t *sequence,
+                         const MORSE_desc_t *A, int Am, int An )
 {
-    starpu_data_handle_t *handle = (starpu_data_handle_t*)(desc->schedopt);
-    int lmt = desc->lmt;
-    int lnt = desc->lnt;
-    int m, n;
+    starpu_data_handle_t *handle = (starpu_data_handle_t*)(A->schedopt);
+    handle += ((int64_t)(A->lmt) * (int64_t)An + (int64_t)Am);
 
-    if ( desc->ooc ) {
-        /* May not even fit */
-        morse_warning( "RUNTIME_desc_getoncpu_async(StarPU)",
-                       "Try to get an out-of-core matrix on main memory. Cancelled as it might not fit" );
-        return MORSE_SUCCESS;
+    if (*handle == NULL) {
+        return;
     }
 
-    for (n = 0; n < lnt; n++) {
-        for (m = 0; m < lmt; m++)
-        {
-            if ( (*handle == NULL) ||
-                 !morse_desc_islocal( desc, m, n ) )
-            {
-                handle++;
-                continue;
-            }
+#if defined(CHAMELEON_USE_MPI)
+    starpu_mpi_cache_flush( MPI_COMM_WORLD, *handle );
+#endif
 
-            starpu_data_acquire_cb( *handle, STARPU_R,
-                                    (void (*)(void*))&starpu_data_release, *handle );
-            handle++;
-        }
+    if ( morse_desc_islocal( A, Am, An ) ) {
+        chameleon_starpu_data_wont_use( *handle );
     }
 
     (void)sequence;
-    return MORSE_SUCCESS;
 }
 
 /*******************************************************************************
@@ -375,7 +397,7 @@ int RUNTIME_desc_getoncpu_async( const MORSE_desc_t *desc,
 #define STARPU_MAIN_RAM 0
 #endif
 
-void *RUNTIME_desc_getaddr( const MORSE_desc_t *desc, int m, int n )
+void *RUNTIME_data_getaddr( const MORSE_desc_t *desc, int m, int n )
 {
     int64_t im = m + (desc->i / desc->mb);
     int64_t jn = n + (desc->j / desc->nb);
diff --git a/runtime/starpu/include/chameleon_starpu.h.in b/runtime/starpu/include/chameleon_starpu.h.in
index 82a71f96bde9802b9ec23e303f977c50b31a6d65..7567425e6c5819f0fd4c03f0b132ca6518ced614 100644
--- a/runtime/starpu/include/chameleon_starpu.h.in
+++ b/runtime/starpu/include/chameleon_starpu.h.in
@@ -117,24 +117,31 @@ typedef struct starpu_conf starpu_conf_t;
 /**
  * Access to block pointer and leading dimension
  */
-#define RTBLKADDR( desc, type, m, n ) ( (starpu_data_handle_t)RUNTIME_desc_getaddr( desc, m, n ) )
+#define RTBLKADDR( desc, type, m, n ) ( (starpu_data_handle_t)RUNTIME_data_getaddr( desc, m, n ) )
 
 void RUNTIME_set_reduction_methods(starpu_data_handle_t handle, MORSE_enum dtyp);
-#ifdef CHAMELEON_USE_MPI
-#ifdef HAVE_STARPU_MPI_CACHED_RECEIVE
-int RUNTIME_desc_iscached(const MORSE_desc_t *A, int Am, int An);
-#endif
-#endif
 
-#if defined(CHAMELEON_USE_MPI)
-#  if defined(HAVE_STARPU_MPI_CACHED_RECEIVE)
-#    define RUNTIME_ACCESS_WRITE_CACHED(A, Am, An) do { if (RUNTIME_desc_iscached(A, Am, An)) __morse_need_submit = 1; } while(0)
-#  else
-#    warning "WAR dependencies need starpu_mpi_cached_receive support from StarPU 1.2.1 or greater"
-#    define RUNTIME_ACCESS_WRITE_CACHED(A, Am, An)
-#  endif
+#if defined(CHAMELEON_USE_MPI) && defined(HAVE_STARPU_MPI_CACHED_RECEIVE)
+static inline int
+chameleon_starpu_data_iscached(const MORSE_desc_t *A, int Am, int An)
+{
+    starpu_data_handle_t *ptrtile = (starpu_data_handle_t*)(A->schedopt);
+    ptrtile += ((int64_t)(A->lmt) * (int64_t)An + (int64_t)Am);
+
+    if (!(*ptrtile))
+        return 0;
+
+    return starpu_mpi_cached_receive(*ptrtile);
+}
+
+#define RUNTIME_ACCESS_WRITE_CACHED(A, Am, An) do {                 \
+        if (chameleon_starpu_data_iscached(A, Am, An)) __morse_need_submit = 1; } while(0)
+
 #else
-#define RUNTIME_ACCESS_WRITE_CACHED(A, Am, An)
+
+#warning "WAR dependencies need starpu_mpi_cached_receive support from StarPU 1.2.1 or greater"
+#define RUNTIME_ACCESS_WRITE_CACHED(A, Am, An) do {} while (0)
+
 #endif
 
 #ifdef CHAMELEON_ENABLE_PRUNING_STATS
diff --git a/timing/time_zgetri_tile.c b/timing/time_zgetri_tile.c
index 471f30f621b2dfa57501d99b7d96d30fd7fe5121..ebd0a74f2e15017556e556491705eef4b58a7f6f 100644
--- a/timing/time_zgetri_tile.c
+++ b/timing/time_zgetri_tile.c
@@ -40,10 +40,10 @@ static int check_getri_factorization(MORSE_desc_t *descA1, MORSE_desc_t *descA2,
     MORSE_Complex64_t *b = (MORSE_Complex64_t *)malloc((descA1->m)*sizeof(MORSE_Complex64_t));
     MORSE_Complex64_t *x = (MORSE_Complex64_t *)malloc((descA1->m)*sizeof(MORSE_Complex64_t));
 
-    MORSE_Desc_Create(&descB, b, MorseComplexDouble, descA1->mb, descA1->nb, descA1->bsiz, 
-		      descA1->m, 1, 0, 0, descA1->m, 1, 1, 1);
-    MORSE_Desc_Create(&descX, x, MorseComplexDouble, descA1->mb, descA1->nb, descA1->bsiz, 
-		      descA1->m, 1, 0, 0, descA1->m, 1, 1, 1);
+    MORSE_Desc_Create(&descB, b, MorseComplexDouble, descA1->mb, descA1->nb, descA1->bsiz,
+                      descA1->m, 1, 0, 0, descA1->m, 1, 1, 1);
+    MORSE_Desc_Create(&descX, x, MorseComplexDouble, descA1->mb, descA1->nb, descA1->bsiz,
+                      descA1->m, 1, 0, 0, descA1->m, 1, 1, 1);
 
     MORSE_zplrnt_Tile( descX, 537 );
     MORSE_zlacpy_Tile( MorseUpperLower, descX, descB);
@@ -55,9 +55,9 @@ static int check_getri_factorization(MORSE_desc_t *descA1, MORSE_desc_t *descA2,
     Bnorm = MORSE_zlange_Tile(MorseInfNorm, descB,  work);
 
     MORSE_zgemm_Tile( MorseNoTrans, MorseNoTrans,
-                       (MORSE_Complex64_t)1.,  descA1, descX, 
+                       (MORSE_Complex64_t)1.,  descA1, descX,
                        (MORSE_Complex64_t)-1., descB);
-    
+
     Rnorm = MORSE_zlange_Tile(MorseInfNorm, descB, work);
 
     if (getenv("MORSE_TESTING_VERBOSE"))
@@ -96,26 +96,26 @@ static int check_getri_inverse(MORSE_desc_t *descA1, MORSE_desc_t *descA2, int *
     double eps = LAPACKE_dlamch_work('e');
     MORSE_desc_t        *descW;
 
-    MORSE_Desc_Create(&descW, work, MorseComplexDouble,  descA1->mb, descA1->nb, descA1->bsiz, 
+    MORSE_Desc_Create(&descW, work, MorseComplexDouble,  descA1->mb, descA1->nb, descA1->bsiz,
                        descA1->m, descA1->n, 0, 0, descA1->m, descA1->n);
-    
+
     MORSE_zlaset_Tile( MorseUpperLower, (MORSE_Complex64_t)0., (MORSE_Complex64_t)1., descW);
-    MORSE_zgemm_Tile( MorseNoTrans, MorseNoTrans, 
-                       (MORSE_Complex64_t)-1., descA2, descA1, 
+    MORSE_zgemm_Tile( MorseNoTrans, MorseNoTrans,
+                       (MORSE_Complex64_t)-1., descA2, descA1,
                        (MORSE_Complex64_t)1.,  descW);
 
     Anorm    = MORSE_zlange_Tile(MorseInfNorm, descA1, W);
     Ainvnorm = MORSE_zlange_Tile(MorseInfNorm, descA2, W);
     Rnorm    = MORSE_zlange_Tile(MorseInfNorm, descW,  W);
-    
-    dparam[IPARAM_ANORM] = Anorm;    
-    dparam[IPARAM_BNORM] = Ainvnorm; 
+
+    dparam[IPARAM_ANORM] = Anorm;
+    dparam[IPARAM_BNORM] = Ainvnorm;
 
     result = Rnorm / ( (Anorm*Ainvnorm)*descA1->m*eps ) ;
     dparam[IPARAM_RES] = Rnorm;
 
     if (  isnan(Ainvnorm) || isinf(Ainvnorm) || isnan(result) || isinf(result) || (result > 60.0) ) {
-        dparam[IPARAM_XNORM] = -1.;    
+        dparam[IPARAM_XNORM] = -1.;
     }
     else{
         dparam[IPARAM_XNORM] = 0.;
@@ -129,12 +129,12 @@ static int check_getri_inverse(MORSE_desc_t *descA1, MORSE_desc_t *descA2, int *
 }
 
 static int
-RunTest(int *iparam, double *dparam, morse_time_t *t_) 
+RunTest(int *iparam, double *dparam, morse_time_t *t_)
 {
     MORSE_desc_t descW;
     int ret = 0;
     PASTE_CODE_IPARAM_LOCALS( iparam );
-    
+
     if ( M != N ) {
         fprintf(stderr, "This timing works only with M == N\n");
         return -1;
@@ -155,69 +155,65 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
     /* MORSE ZGETRF / ZTRTRI / ZTRSMRV  */
     {
 #if defined(TRACE_BY_SEQUENCE)
-        MORSE_sequence_t *sequence[4];
-        MORSE_request_t request[4] = { MORSE_REQUEST_INITIALIZER, 
-                                      MORSE_REQUEST_INITIALIZER, 
-                                      MORSE_REQUEST_INITIALIZER, 
-                                      MORSE_REQUEST_INITIALIZER };
-        
-        MORSE_Sequence_Create(&sequence[0]);
-        MORSE_Sequence_Create(&sequence[1]);
-        MORSE_Sequence_Create(&sequence[2]);
-        MORSE_Sequence_Create(&sequence[3]);
+        MORSE_sequence_t *sequence;
+        MORSE_request_t request[4] = { MORSE_REQUEST_INITIALIZER,
+                                       MORSE_REQUEST_INITIALIZER,
+                                       MORSE_REQUEST_INITIALIZER,
+                                       MORSE_REQUEST_INITIALIZER };
+
+        MORSE_Sequence_Create(&sequence);
 
         if ( ! iparam[IPARAM_ASYNC] ) {
-            
+
             START_TIMING();
-            MORSE_zgetrf_Tile_Async(descA, piv, sequence[0], &request[0]); 
-            MORSE_Sequence_Wait(sequence[0]);
-            
-            MORSE_ztrtri_Tile_Async(MorseUpper, MorseNonUnit, descA, sequence[1], &request[1]);
-            MORSE_Sequence_Wait(sequence[1]);
-            
-            MORSE_ztrsmrv_Tile_Async(MorseRight, MorseLower, MorseNoTrans, MorseUnit, 
-                                      (MORSE_Complex64_t) 1.0, descA, &descW, sequence[2], &request[2]);
-            MORSE_Sequence_Wait(sequence[2]);
-            
-            MORSE_zlaswpc_Tile_Async(descA, 1, descA->m, piv, -1, sequence[3], &request[3]);
-            MORSE_Sequence_Wait(sequence[3]);
-            MORSE_Desc_Getoncpu( descA );
+            MORSE_zgetrf_Tile_Async( descA, piv, sequence, &request[0] );
+            MORSE_Sequence_Wait(sequence);
+
+            MORSE_ztrtri_Tile_Async( MorseUpper, MorseNonUnit, descA, sequence, &request[1] );
+            MORSE_Sequence_Wait(sequence);
+
+            MORSE_ztrsmrv_Tile_Async( MorseRight, MorseLower, MorseNoTrans, MorseUnit,
+                                      (MORSE_Complex64_t) 1.0, descA, &descW,
+                                      sequence, &request[2] );
+            MORSE_Sequence_Wait(sequence);
+
+            MORSE_zlaswpc_Tile_Async( descA, 1, descA->m, piv, -1,
+                                      sequence, &request[3] );
+            MORSE_Sequence_Wait(sequence);
+            MORSE_Desc_Flush( descA, sequence );
             STOP_TIMING();
 
         } else {
 
             START_TIMING();
-            MORSE_zgetrf_Tile_Async( descA, piv, sequence[0], &request[0]);
-            MORSE_ztrtri_Tile_Async( MorseUpper, MorseNonUnit, 
-                                      descA, sequence[1], &request[1]);
-            MORSE_ztrsmrv_Tile_Async(MorseRight, MorseLower, MorseNoTrans, MorseUnit, 
-                                      (MORSE_Complex64_t) 1.0, 
-                                      descA, &descW, sequence[2], &request[2]);
-            MORSE_zlaswpc_Tile_Async(descA, 1, descA->m, piv, -1, 
-                                      sequence[3], &request[3]);
-            
+            MORSE_zgetrf_Tile_Async( descA, piv, sequence, &request[0]);
+            MORSE_ztrtri_Tile_Async( MorseUpper, MorseNonUnit,
+                                     descA, sequence, &request[1] );
+            MORSE_ztrsmrv_Tile_Async( MorseRight, MorseLower, MorseNoTrans, MorseUnit,
+                                      (MORSE_Complex64_t) 1.0,
+                                      descA, &descW, sequence, &request[2] );
+            MORSE_zlaswpc_Tile_Async( descA, 1, descA->m, piv, -1,
+                                      sequence, &request[3] );
+
             /* Wait for everything */
-            MORSE_Sequence_Wait(sequence[0]);
-            MORSE_Sequence_Wait(sequence[1]);
-            MORSE_Sequence_Wait(sequence[2]);
-            MORSE_Sequence_Wait(sequence[3]);
-            MORSE_Desc_Getoncpu( descA );
+            MORSE_Sequence_Wait( sequence );
+            MORSE_Desc_Flush( descA, sequence );
             STOP_TIMING();
-        
+
         }
 
         MORSE_Sequence_Destroy(sequence[0]);
         MORSE_Sequence_Destroy(sequence[1]);
         MORSE_Sequence_Destroy(sequence[2]);
         MORSE_Sequence_Destroy(sequence[3]);
-        
+
 #else
         if ( ! iparam[IPARAM_ASYNC] ) {
 
             START_TIMING();
             MORSE_zgetrf_Tile(descA, piv);
             MORSE_ztrtri_Tile(MorseUpper, MorseNonUnit, descA);
-            MORSE_ztrsmrv_Tile(MorseRight, MorseLower, MorseNoTrans, MorseUnit, 
+            MORSE_ztrsmrv_Tile(MorseRight, MorseLower, MorseNoTrans, MorseUnit,
                                 (MORSE_Complex64_t) 1.0, descA, &descW);
             MORSE_zlaswpc_Tile(descA, 1, descA->m, piv, -1);
             STOP_TIMING();
@@ -225,28 +221,28 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
         } else {
 
             MORSE_sequence_t *sequence;
-            MORSE_request_t request[2] = { MORSE_REQUEST_INITIALIZER, 
+            MORSE_request_t request[2] = { MORSE_REQUEST_INITIALIZER,
                                           MORSE_REQUEST_INITIALIZER };
 
             MORSE_Sequence_Create(&sequence);
-            
+
             START_TIMING();
             MORSE_zgetrf_Tile_Async(descA, piv, sequence, &request[0]);
             MORSE_zgetri_Tile_Async(descA, piv, &descW, sequence, &request[1]);
             MORSE_Sequence_Wait(sequence);
-            MORSE_Desc_Getoncpu( descA );
+            MORSE_Desc_Flush( descA, sequence );
             STOP_TIMING();
-        
-            MORSE_Sequence_Destroy(sequence);       
+
+            MORSE_Sequence_Destroy(sequence);
         }
 #endif
     }
-    
+
     /* Check the solution */
     if ( check )
     {
         ret = check_getri_inverse(descA2, descA, piv, dparam);
-    
+
         PASTE_CODE_FREE_MATRIX( descA2 );
     }
 
@@ -256,4 +252,3 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
 
     return ret;
 }
-
diff --git a/timing/time_zpotri_tile.c b/timing/time_zpotri_tile.c
index 07ef6007f8a71bf8fd275301ce0c3af344ca26b2..3a2d59e5b6aebc91b591a7427cbd7f3394c551ea 100644
--- a/timing/time_zpotri_tile.c
+++ b/timing/time_zpotri_tile.c
@@ -50,40 +50,36 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
      */
 #if defined(TRACE_BY_SEQUENCE)
     {
-        MORSE_sequence_t *sequence[3];
+        MORSE_sequence_t *sequence;
         MORSE_request_t request[3] = { MORSE_REQUEST_INITIALIZER,
                                        MORSE_REQUEST_INITIALIZER,
                                        MORSE_REQUEST_INITIALIZER };
 
-        MORSE_Sequence_Create(&sequence[0]);
-        MORSE_Sequence_Create(&sequence[1]);
-        MORSE_Sequence_Create(&sequence[2]);
+        MORSE_Sequence_Create(&sequence);
 
         if ( ! iparam[IPARAM_ASYNC] ) {
             START_TIMING();
 
-            MORSE_zpotrf_Tile_Async(uplo, descA,                sequence[0], &request[0]);
-            MORSE_Sequence_Wait(sequence[0]);
+            MORSE_zpotrf_Tile_Async(uplo, descA,               sequence, &request[0]);
+            MORSE_Sequence_Wait(sequence);
 
-            MORSE_ztrtri_Tile_Async(uplo, MorseNonUnit, descA, sequence[1], &request[1]);
-            MORSE_Sequence_Wait(sequence[1]);
+            MORSE_ztrtri_Tile_Async(uplo, MorseNonUnit, descA, sequence, &request[1]);
+            MORSE_Sequence_Wait(sequence);
 
-            MORSE_zlauum_Tile_Async(uplo, descA,                sequence[2], &request[2]);
-            MORSE_Sequence_Wait(sequence[2]);
-            MORSE_Desc_Getoncpu( descA );
+            MORSE_zlauum_Tile_Async(uplo, descA,               sequence, &request[2]);
+            MORSE_Sequence_Wait(sequence);
+            MORSE_Desc_Flush( descA, sequence );
             STOP_TIMING();
 
         } else {
 
             START_TIMING();
-            MORSE_zpotrf_Tile_Async(uplo, descA,                sequence[0], &request[0]);
-            MORSE_ztrtri_Tile_Async(uplo, MorseNonUnit, descA, sequence[1], &request[1]);
-            MORSE_zlauum_Tile_Async(uplo, descA,                sequence[2], &request[2]);
-
-            MORSE_Sequence_Wait(sequence[0]);
-            MORSE_Sequence_Wait(sequence[1]);
-            MORSE_Sequence_Wait(sequence[2]);
-            MORSE_Desc_Getoncpu( descA );
+            MORSE_zpotrf_Tile_Async(uplo, descA,               sequence, &request[0]);
+            MORSE_ztrtri_Tile_Async(uplo, MorseNonUnit, descA, sequence, &request[1]);
+            MORSE_zlauum_Tile_Async(uplo, descA,               sequence, &request[2]);
+
+            MORSE_Sequence_Wait(sequence);
+            MORSE_Desc_Flush( descA, sequence );
             STOP_TIMING();
         }
 
@@ -113,7 +109,7 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
             MORSE_zpotrf_Tile_Async(uplo, descA, sequence, &request[0]);
             MORSE_zpotri_Tile_Async(uplo, descA, sequence, &request[1]);
             MORSE_Sequence_Wait(sequence);
-            MORSE_Desc_Getoncpu( descA );
+            MORSE_Desc_Flush( descA, sequence );
             STOP_TIMING();
 
             MORSE_Sequence_Destroy(sequence);
diff --git a/timing/time_zsytrf_tile.c b/timing/time_zsytrf_tile.c
index 423b77b7068c5ee9e63b085c97294cd7db411677..54cf336554d29761dbf573a0480d5b2523cb184b 100644
--- a/timing/time_zsytrf_tile.c
+++ b/timing/time_zsytrf_tile.c
@@ -58,17 +58,16 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
         dparam[IPARAM_ANORM] = MORSE_zlange_Tile(MorseInfNorm, descAC);
         dparam[IPARAM_BNORM] = MORSE_zlange_Tile(MorseInfNorm, descB);
         dparam[IPARAM_XNORM] = MORSE_zlange_Tile(MorseInfNorm, descX);
-		MORSE_zgemm_Tile( MorseNoTrans, MorseNoTrans, 1.0, descAC, descX, -1.0, descB );
-		dparam[IPARAM_RES] = MORSE_zlange_Tile(MorseInfNorm, descB);
+                MORSE_zgemm_Tile( MorseNoTrans, MorseNoTrans, 1.0, descAC, descX, -1.0, descB );
+                dparam[IPARAM_RES] = MORSE_zlange_Tile(MorseInfNorm, descB);
 
         PASTE_CODE_FREE_MATRIX( descB  );
         PASTE_CODE_FREE_MATRIX( descAC );
         PASTE_CODE_FREE_MATRIX( descX  );
 
-    } 
-	
+    }
+
     PASTE_CODE_FREE_MATRIX( descA );
-    MORSE_TASK_flush_all();
 
     return 0;
 }