diff --git a/compute/CMakeLists.txt b/compute/CMakeLists.txt
index 45700455d95c5a27fd8aa2cbe3ce7f07ab1245a9..3160f15e186f7b37ea4ee58d689d84d2abe20190 100644
--- a/compute/CMakeLists.txt
+++ b/compute/CMakeLists.txt
@@ -37,6 +37,10 @@ if ( CHAMELEON_SCHED_QUARK )
   # No need for those extra diagonale tiles
   set( CHAMELEON_COPY_DIAG OFF )
 endif()
+if ( CHAMELEON_SCHED_PARSEC )
+  # Actual DIAG can not be used with PaRSEC
+  set( CHAMELEON_COPY_DIAG OFF )
+endif()
 
 mark_as_advanced(CHAMELEON_COPY_DIAG)
 
diff --git a/compute/pzgeqrfrh.c b/compute/pzgeqrfrh.c
index a2ea808b95b26cf679df93e81c1a827e2de1436f..30d6a1273cb8092a41348a6d50c9e222f6773891 100644
--- a/compute/pzgeqrfrh.c
+++ b/compute/pzgeqrfrh.c
@@ -31,8 +31,8 @@
  **/
 #include "control/common.h"
 
-#define A(m,n) A,  (m),  (n)
-#define T(m,n) T,  (m),  (n)
+#define A(m,n)  A,  (m),  (n)
+#define T(m,n)  T,  (m),  (n)
 #define T2(m,n) T,  (m), ((n)+A->nt)
 #if defined(CHAMELEON_COPY_DIAG)
 #define D(m,n) D, ((m)/BS), 0
diff --git a/compute/pzgetrf_incpiv.c b/compute/pzgetrf_incpiv.c
index 092d258faf2ec47c7c630c9d1767bcbec1bb3774..b5c23f6da8b8e085a5d1c09856b029fc4d0beb5e 100644
--- a/compute/pzgetrf_incpiv.c
+++ b/compute/pzgetrf_incpiv.c
@@ -35,9 +35,9 @@
 
 #define A(_m_,_n_) A, _m_, _n_
 #if defined(CHAMELEON_COPY_DIAG)
-#define DIAG(_k_) DIAG, _k_, 0
+#define D(k)   D, k, 0
 #else
-#define DIAG(_k_) A, _k_, _k_
+#define D(k)   A, k, k
 #endif
 #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_))])
@@ -45,13 +45,13 @@
 /*******************************************************************************
  *  Parallel tile LU factorization - dynamic scheduling
  **/
-void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
-                          MORSE_sequence_t *sequence, MORSE_request_t *request)
+void morse_pzgetrf_incpiv( MORSE_desc_t *A, MORSE_desc_t *L, MORSE_desc_t *D, int *IPIV,
+                           MORSE_sequence_t *sequence, MORSE_request_t *request )
 {
-    MORSE_desc_t *DIAG = NULL;
     MORSE_context_t *morse;
     MORSE_option_t options;
-    size_t h_work_size, d_work_size;
+    size_t ws_worker = 0;
+    size_t ws_host = 0;
 
     int k, m, n;
     int ldak, ldam;
@@ -65,14 +65,19 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
     RUNTIME_options_init(&options, morse, sequence, request);
 
     ib = MORSE_IB;
-    h_work_size  = sizeof(MORSE_Complex64_t)*( ib*L->nb );
-    d_work_size  = 0;
 
-    RUNTIME_options_ws_alloc( &options, h_work_size, d_work_size );
+    /*
+     * zgetrf_incpiv = 0
+     * zgessm        = 0
+     * ztstrf        = A->mb * ib
+     * zssssm        = 0
+     */
+    ws_worker = A->mb * ib;
 
-    /* necessary to avoid dependencies between tasks regarding the diag tile */
-    DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
-    morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, chameleon_min(A->m, A->n), A->nb, 0, 0, chameleon_min(A->m, A->n), A->nb, A->p, A->q);
+    ws_worker *= sizeof(MORSE_Complex64_t);
+    ws_host   *= sizeof(MORSE_Complex64_t);
+
+    RUNTIME_options_ws_alloc( &options, ws_worker, ws_host );
 
     for (k = 0; k < minMNT; k++) {
         RUNTIME_iteration_push(morse, k);
@@ -94,7 +99,7 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
                 &options,
                 MorseUpperLower, tempkm, tempkn, A->nb,
                 A(k, k), ldak,
-                DIAG(k), ldak);
+                D(k), ldak);
 #endif
         }
 
@@ -105,7 +110,7 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
                 tempkm, tempnn, tempkm, ib, L->nb,
                 IPIV(k, k),
                 L(k, k), L->mb,
-                DIAG(k), ldak,
+                D(k), ldak,
                 A(k, n), ldak);
         }
         for (m = k+1; m < A->mt; m++) {
@@ -138,7 +143,5 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
 
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-
-    morse_desc_mat_free(DIAG);
-    free(DIAG);
+    (void)D;
 }
diff --git a/compute/pztrsmpl.c b/compute/pztrsmpl.c
index 7314ad60fe731751f16e02b72e1987b5a2f78191..a96db6292f8a7bcb71224a3b88e6e55d2f409b54 100644
--- a/compute/pztrsmpl.c
+++ b/compute/pztrsmpl.c
@@ -37,8 +37,8 @@
 /*******************************************************************************
  *  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,
-                           MORSE_sequence_t *sequence, MORSE_request_t *request)
+void morse_pztrsmpl( MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *L, int *IPIV,
+                     MORSE_sequence_t *sequence, MORSE_request_t *request )
 {
     MORSE_context_t *morse;
     MORSE_option_t options;
diff --git a/compute/zgelqf.c b/compute/zgelqf.c
index bcab0855fa87c58f57ba961245b9d0837e5c0559..3e9529bec49c49fe2e0ca6ff823deb97a5aa00a8 100644
--- a/compute/zgelqf.c
+++ b/compute/zgelqf.c
@@ -132,6 +132,7 @@ int MORSE_zgelqf( int M, int N,
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zgelqf_param.c b/compute/zgelqf_param.c
index fe0623cb701f9831a7bc00ca19bb0fc6754ccd5c..76e11f6b9d8188026bf96e7bba188440f7c99e3e 100644
--- a/compute/zgelqf_param.c
+++ b/compute/zgelqf_param.c
@@ -129,6 +129,8 @@ int MORSE_zgelqf_param( const libhqr_tree_t *qrtree, int M, int N,
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descTS, sequence );
+    MORSE_Desc_Flush( descTT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zgelqs.c b/compute/zgelqs.c
index ccf896144f1af0d4f7188ac3f27d91a17d2ea8b1..75bf9db2d3224082a7e6efdf990d0be8bf5916a8 100644
--- a/compute/zgelqs.c
+++ b/compute/zgelqs.c
@@ -152,6 +152,7 @@ int MORSE_zgelqs( int M, int N, int NRHS,
                      MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zgelqs_param.c b/compute/zgelqs_param.c
index ffac93d2ef8e3972741a96e56b75d1cf76e24dca..6171fd70c359c231ab1aea42a150dbf3378bf524 100644
--- a/compute/zgelqs_param.c
+++ b/compute/zgelqs_param.c
@@ -154,6 +154,8 @@ int MORSE_zgelqs_param( const libhqr_tree_t *qrtree, int M, int N, int NRHS,
                      MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descTS, sequence );
+    MORSE_Desc_Flush( descTT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zgels.c b/compute/zgels.c
index 74d65ca46ff14367be7a567f941a1f87e5e7a15b..22af1ab71d75ffc1404fa5273e3396bda17ca2a0 100644
--- a/compute/zgels.c
+++ b/compute/zgels.c
@@ -194,6 +194,7 @@ int MORSE_zgels( MORSE_enum trans, int M, int N, int NRHS,
                      MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zgels_param.c b/compute/zgels_param.c
index 5619b004a8cb233b87e1bb877440b836f621e1f9..d965a089859f6895bd4398b718ef9725717ec382 100644
--- a/compute/zgels_param.c
+++ b/compute/zgels_param.c
@@ -195,6 +195,8 @@ int MORSE_zgels_param( const libhqr_tree_t *qrtree, MORSE_enum trans, int M, int
                      MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descTS, sequence );
+    MORSE_Desc_Flush( descTT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zgeqrf.c b/compute/zgeqrf.c
index 6695351de0915ddcb7d5ff6dde9ba993b9f3b197..e58694721d73319d5616fa6a65152dd9409491a4 100644
--- a/compute/zgeqrf.c
+++ b/compute/zgeqrf.c
@@ -131,6 +131,7 @@ int MORSE_zgeqrf( int M, int N,
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zgeqrf_param.c b/compute/zgeqrf_param.c
index 5e5b220f010c1ad2872a461b9df78e5b81167f8f..0586e4630f71296af693bd4384914c7f17eba51d 100644
--- a/compute/zgeqrf_param.c
+++ b/compute/zgeqrf_param.c
@@ -134,6 +134,8 @@ int MORSE_zgeqrf_param( const libhqr_tree_t *qrtree, int M, int N,
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descTS, sequence );
+    MORSE_Desc_Flush( descTT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zgeqrs.c b/compute/zgeqrs.c
index d8de43c6ebff5b2c2974ca2e9c2babc10cd60d89..db7fb9e7b07b79241d3cf75d0d2d7caa5f1a8a0c 100644
--- a/compute/zgeqrs.c
+++ b/compute/zgeqrs.c
@@ -152,6 +152,7 @@ int MORSE_zgeqrs( int M, int N, int NRHS,
                      MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zgeqrs_param.c b/compute/zgeqrs_param.c
index cd7f17b6b5ec4601db4ac7457bea27eca6f8fb80..26d98eb2893bc1aaf41916c75eb1e32ced3ed951 100644
--- a/compute/zgeqrs_param.c
+++ b/compute/zgeqrs_param.c
@@ -147,6 +147,8 @@ int MORSE_zgeqrs_param( const libhqr_tree_t *qrtree, int M, int N, int NRHS,
                      MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descTS, sequence );
+    MORSE_Desc_Flush( descTT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zgesv_incpiv.c b/compute/zgesv_incpiv.c
index 700f6b02e960c8723090f567f33107b467f6dddc..a3e9c8c3ea5cc665d3b9502be5005de49afcbfa8 100644
--- a/compute/zgesv_incpiv.c
+++ b/compute/zgesv_incpiv.c
@@ -151,6 +151,7 @@ int MORSE_zgesv_incpiv( int N, int NRHS,
                      MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descL, sequence );
 
     morse_sequence_wait( morse, sequence );
 
@@ -267,6 +268,7 @@ int MORSE_zgesv_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
                                    MORSE_sequence_t *sequence, MORSE_request_t *request )
 {
     MORSE_context_t *morse;
+    MORSE_desc_t D, *Dptr = NULL;
 
     morse = morse_context_self();
     if (morse == NULL) {
@@ -313,11 +315,28 @@ int MORSE_zgesv_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
      return MORSE_SUCCESS;
      */
 
-    morse_pzgetrf_incpiv( A, L, IPIV, sequence, request );
+#if defined(CHAMELEON_COPY_DIAG)
+    {
+        int n = chameleon_min(A->mt, A->nt) * A->nb;
+        morse_zdesc_alloc(D, A->mb, A->nb, A->m, n, 0, 0, A->m, n, );
+        Dptr = &D;
+    }
+#endif
+
+    morse_pzgetrf_incpiv( A, L, Dptr, IPIV, sequence, request );
 
     morse_pztrsmpl( A, B, L, IPIV, sequence, request );
 
     morse_pztrsm( MorseLeft, MorseUpper, MorseNoTrans, MorseNonUnit, (MORSE_Complex64_t)1.0, A, B, sequence, request );
 
+    if (Dptr != NULL) {
+        MORSE_Desc_Flush( A, sequence );
+        MORSE_Desc_Flush( L, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        MORSE_Desc_Flush( B, sequence );
+        morse_sequence_wait( morse, sequence );
+        morse_desc_mat_free( Dptr );
+    }
+    (void)D;
     return MORSE_SUCCESS;
 }
diff --git a/compute/zgetrf_incpiv.c b/compute/zgetrf_incpiv.c
index a86915d081d5b92b07269f534348dc985c023f7d..8c1c9eddfd03f8adb0b8d43354c814ffae378084 100644
--- a/compute/zgetrf_incpiv.c
+++ b/compute/zgetrf_incpiv.c
@@ -133,6 +133,7 @@ int MORSE_zgetrf_incpiv( int M, int N,
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descL, sequence );
 
     morse_sequence_wait( morse, sequence );
 
@@ -244,6 +245,7 @@ int MORSE_zgetrf_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
                                     MORSE_sequence_t *sequence, MORSE_request_t *request )
 {
     MORSE_context_t *morse;
+    MORSE_desc_t D, *Dptr = NULL;
 
     morse = morse_context_self();
     if (morse == NULL) {
@@ -286,7 +288,23 @@ int MORSE_zgetrf_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
      return MORSE_SUCCESS;
      */
 
-    morse_pzgetrf_incpiv( A, L, IPIV, sequence, request );
+#if defined(CHAMELEON_COPY_DIAG)
+    {
+        int n = chameleon_min(A->mt, A->nt) * A->nb;
+        morse_zdesc_alloc(D, A->mb, A->nb, A->m, n, 0, 0, A->m, n, );
+        Dptr = &D;
+    }
+#endif
+
+    morse_pzgetrf_incpiv( A, L, Dptr, IPIV, sequence, request );
 
+    if (Dptr != NULL) {
+        MORSE_Desc_Flush( A, sequence );
+        MORSE_Desc_Flush( L, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
+        morse_desc_mat_free( Dptr );
+    }
+    (void)D;
     return MORSE_SUCCESS;
 }
diff --git a/compute/zgetrs_incpiv.c b/compute/zgetrs_incpiv.c
index f877c8aa38b8d1ab39c86809842803384e53ba85..e22d55f2e54450528b8b5f7052f2d67206b4f39e 100644
--- a/compute/zgetrs_incpiv.c
+++ b/compute/zgetrs_incpiv.c
@@ -157,6 +157,7 @@ int MORSE_zgetrs_incpiv( MORSE_enum trans, int N, int NRHS,
                      MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descL, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/ztpgqrt.c b/compute/ztpgqrt.c
index d28a530995221f3bd0181658f6e23c836712fd1a..7763b4136f1df1572f2703ef171a70aaeb9938ca 100644
--- a/compute/ztpgqrt.c
+++ b/compute/ztpgqrt.c
@@ -232,6 +232,8 @@ int MORSE_ztpgqrt( int M, int N, int K, int L,
                      MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descQ2l, &descQ2t,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descT1, sequence );
+    MORSE_Desc_Flush( descT2, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/ztpqrt.c b/compute/ztpqrt.c
index 9f5f60bbffdeac37cbad20448128fae9a053466d..af70716d9b3cd18513b89157ac697bf31383a335 100644
--- a/compute/ztpqrt.c
+++ b/compute/ztpqrt.c
@@ -200,6 +200,7 @@ int MORSE_ztpqrt( int M, int N, int L,
                      MorseDescInout, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zunglq.c b/compute/zunglq.c
index f8738d76871d662731b63610adc717d64bd31ffe..ca9ed653bc82d5591bca9c8ebd531e998312e74c 100644
--- a/compute/zunglq.c
+++ b/compute/zunglq.c
@@ -151,6 +151,7 @@ int MORSE_zunglq( int M, int N, int K,
                      MorseDescInput, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descQl, &descQt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zunglq_param.c b/compute/zunglq_param.c
index 45110d3f79934e99119b81a80f52fe27e6c8d31b..39f63a41ec8689538136411e8101c335606fa896 100644
--- a/compute/zunglq_param.c
+++ b/compute/zunglq_param.c
@@ -148,6 +148,8 @@ int MORSE_zunglq_param( const libhqr_tree_t *qrtree, int M, int N, int K,
                      MorseDescInput, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descQl, &descQt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descTS, sequence );
+    MORSE_Desc_Flush( descTT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zungqr.c b/compute/zungqr.c
index 954f2da51d54070bcc6feb12fc1c66aa6d8664ae..331a5b35273439c3f7b1a72449c36f7b101e75c5 100644
--- a/compute/zungqr.c
+++ b/compute/zungqr.c
@@ -150,6 +150,7 @@ int MORSE_zungqr( int M, int N, int K,
                      MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descQl, &descQt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zungqr_param.c b/compute/zungqr_param.c
index 8621b7816829436859c3cafe994ad6bbb0f9fc6a..1f70aad4157733970f0099da92c713b3c73e9c84 100644
--- a/compute/zungqr_param.c
+++ b/compute/zungqr_param.c
@@ -149,6 +149,8 @@ int MORSE_zungqr_param( const libhqr_tree_t *qrtree,
                      MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descQl, &descQt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descTS, sequence );
+    MORSE_Desc_Flush( descTT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zunmlq.c b/compute/zunmlq.c
index 5901868c47a07b34ecc01815c8532909387c8d0d..33e73eb189a895d9ae8df29af0b4561e4e8a50ce 100644
--- a/compute/zunmlq.c
+++ b/compute/zunmlq.c
@@ -188,6 +188,7 @@ int MORSE_zunmlq( MORSE_enum side, MORSE_enum trans, int M, int N, int K,
                      MorseDescInput, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zunmlq_param.c b/compute/zunmlq_param.c
index 4a637513666d3b5f5485712645b7cf32d061e6c0..7b46fbb8697c41935890b76f7e9434add080febc 100644
--- a/compute/zunmlq_param.c
+++ b/compute/zunmlq_param.c
@@ -187,6 +187,8 @@ int MORSE_zunmlq_param( const libhqr_tree_t *qrtree, MORSE_enum side, MORSE_enum
                      MorseDescInput, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descTS, sequence );
+    MORSE_Desc_Flush( descTT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zunmqr.c b/compute/zunmqr.c
index 7e836f91f1ff8e026496681e9db7d5855aa65e6f..89f33de1d6142a2abb5eced233af1617e080a54c 100644
--- a/compute/zunmqr.c
+++ b/compute/zunmqr.c
@@ -191,6 +191,7 @@ int MORSE_zunmqr( MORSE_enum side, MORSE_enum trans, int M, int N, int K,
                      MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/compute/zunmqr_param.c b/compute/zunmqr_param.c
index 45c88e5750f2c250327db48c6a6d2bc714faec2b..f1d31036ba5eb1d42cf832b4c474d3a3a29e744c 100644
--- a/compute/zunmqr_param.c
+++ b/compute/zunmqr_param.c
@@ -192,6 +192,8 @@ int MORSE_zunmqr_param( const libhqr_tree_t *qrtree,
                      MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
                      MorseDescInout, MorseUpperLower, sequence, &request );
+    MORSE_Desc_Flush( descTS, sequence );
+    MORSE_Desc_Flush( descTT, sequence );
 
     morse_sequence_wait( morse, sequence );
 
diff --git a/control/compute_z.h b/control/compute_z.h
index 168277b4be24bcdaf37024488cfc93aef9e0cfb1..7ff7a28000cd376b0edaa08af5a419edf60e6929 100644
--- a/control/compute_z.h
+++ b/control/compute_z.h
@@ -78,7 +78,7 @@ void morse_pzgemm(MORSE_enum transA, MORSE_enum transB, MORSE_Complex64_t alpha,
 void morse_pzgeqrf(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D, MORSE_sequence_t *sequence, MORSE_request_t *request);
 void morse_pzgeqrfrh(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D, int BS, MORSE_sequence_t *sequence, MORSE_request_t *request);
 void morse_pzgetmi2(MORSE_enum idep, MORSE_enum odep, MORSE_enum storev, int m, int n, int mb, int nb, MORSE_Complex64_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request);
-void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_sequence_t *sequence, MORSE_request_t *request);
+void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, MORSE_desc_t *D, int *IPIV, MORSE_sequence_t *sequence, MORSE_request_t *request);
 void morse_pzgetrf_nopiv(MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request);
 void morse_pzgetrf_reclap(MORSE_desc_t *A, int *IPIV, MORSE_sequence_t *sequence, MORSE_request_t *request);
 void morse_pzgetrf_rectil(MORSE_desc_t *A, int *IPIV, MORSE_sequence_t *sequence, MORSE_request_t *request);
diff --git a/control/workspace.c b/control/workspace.c
index 852402979c754194e26fec04c906ea8dfe47b941..931577f2ae3e8d1b7ccfd67e20325064beb8343e 100644
--- a/control/workspace.c
+++ b/control/workspace.c
@@ -199,6 +199,8 @@ int MORSE_Dealloc_Workspace(MORSE_desc_t **desc)
         return MORSE_ERR_UNALLOCATED;
     }
     morse_desc_mat_free( *desc );
+    RUNTIME_desc_destroy( *desc );
+
     free(*desc);
     *desc = NULL;
     return MORSE_SUCCESS;
diff --git a/runtime/parsec/CMakeLists.txt b/runtime/parsec/CMakeLists.txt
index 9ff06bd0b2a4c9d106b028bd3299bcad5c798197..7360137bd8d9e23c2ea32ea17227cae67f8188b1 100644
--- a/runtime/parsec/CMakeLists.txt
+++ b/runtime/parsec/CMakeLists.txt
@@ -85,7 +85,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/parsec/codelets/codelet_dataflush.c b/runtime/parsec/codelets/codelet_dataflush.c
deleted file mode 100644
index a065cedf48fc5734a7bd17adac79d1955faa97f3..0000000000000000000000000000000000000000
--- a/runtime/parsec/codelets/codelet_dataflush.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- *
- * @copyright (c) 2009-2015 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2015 Inria. All rights reserved.
- * @copyright (c) 2012-2016 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
- *
- **/
-
-/**
- *
- *  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
- * @author Reazul Hoque
- * @precisions normal z -> c d s
- *
- **/
-#include "chameleon_parsec.h"
-#include "chameleon/morse_tasks.h"
-
-void MORSE_TASK_flush_data( const MORSE_option_t *options,
-                            const MORSE_desc_t *A, int Am, int An )
-{
-    parsec_taskpool_t* PARSEC_dtd_taskpool = (parsec_taskpool_t *)(options->sequence->schedopt);
-
-    parsec_dtd_data_flush( PARSEC_dtd_taskpool, RTBLKADDR( A, MORSE_Complex64_t, Am, An ) );
-}
-
-void MORSE_TASK_flush_desc( const MORSE_option_t *options,
-                            MORSE_enum uplo, const MORSE_desc_t *A )
-{
-    parsec_taskpool_t* PARSEC_dtd_taskpool = (parsec_taskpool_t *)(options->sequence->schedopt);
-
-    parsec_dtd_data_flush_all( PARSEC_dtd_taskpool, (parsec_data_collection_t*)(A->schedopt) );
-
-    (void)uplo;
-}
-
-void MORSE_TASK_flush_all()
-{
-}
diff --git a/runtime/parsec/codelets/codelet_zasum.c b/runtime/parsec/codelets/codelet_zasum.c
index 8736da1589d85f65e5aea4bcb6f4426217b33a98..24a926f43fcc60b0c44819bc9734e17a62872c84 100644
--- a/runtime/parsec/codelets/codelet_zasum.c
+++ b/runtime/parsec/codelets/codelet_zasum.c
@@ -24,31 +24,25 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_dzasum_parsec(parsec_execution_stream_t    *context,
-                   parsec_task_t *this_task)
+static inline int
+CORE_dzasum_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *storev;
-    MORSE_enum *uplo;
-    int *M;
-    int *N;
+    MORSE_enum storev;
+    MORSE_enum uplo;
+    int M;
+    int N;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     double *work;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &storev,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &work );
+        this_task, &storev, &uplo, &M, &N, &A, &lda, &work );
 
-    CORE_dzasum(*storev, *uplo, *M, *N, A, *lda, work);
+    CORE_dzasum( storev, uplo, M, N, A, lda, work );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_dzasum(const MORSE_option_t *options,
@@ -67,5 +61,5 @@ void MORSE_TASK_dzasum(const MORSE_option_t *options,
         PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
         sizeof(int),           &lda,                              VALUE,
         PASSED_BY_REF,         RTBLKADDR( B, double, Bm, Bn ),     INOUT,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zaxpy.c b/runtime/parsec/codelets/codelet_zaxpy.c
index ef8400eae97c834f715e176467617c67eae3474c..2c06d26f6d0f4c2eee836ba5b70b542170af2a8c 100644
--- a/runtime/parsec/codelets/codelet_zaxpy.c
+++ b/runtime/parsec/codelets/codelet_zaxpy.c
@@ -24,32 +24,28 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zaxpy_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zaxpy_parsec( parsec_execution_stream_t *context,
+                   parsec_task_t             *this_task )
 {
-    int *M;
-    MORSE_Complex64_t *alpha;
+    int M;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *A;
-    int *incA;
+    int incA;
     MORSE_Complex64_t *B;
-    int *incB;
+    int incB;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &incA,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &incB );
+        this_task, &M, &alpha, &A, &incA, &B, &incB );
 
-    CORE_zaxpy(*M, *alpha, A, *incA, B, *incB);
+    CORE_zaxpy( M, alpha, A, incA, B, incB );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zaxpy(const MORSE_option_t *options,
-                      int M, MORSE_Complex64_t *alpha,
+                      int M, MORSE_Complex64_t alpha,
                       const MORSE_desc_t *A, int Am, int An, int incA,
                       const MORSE_desc_t *B, int Bm, int Bn, int incB)
 {
@@ -63,5 +59,5 @@ void MORSE_TASK_zaxpy(const MORSE_option_t *options,
         sizeof(int),               &incA, VALUE,
         PASSED_BY_REF,  RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ), INOUT,
         sizeof(int),               &incB, VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zbuild.c b/runtime/parsec/codelets/codelet_zbuild.c
index df154edf882ed109b80c9d404401cabb59e496bd..f0a3bbd1df2761251a27c3428d3ea6fab3993e5f 100644
--- a/runtime/parsec/codelets/codelet_zbuild.c
+++ b/runtime/parsec/codelets/codelet_zbuild.c
@@ -27,29 +27,23 @@
 #include "coreblas/coreblas_z.h"
 
 static inline int
-CORE_zbuild_parsec(parsec_execution_stream_t    *context,
-                   parsec_task_t *this_task)
+CORE_zbuild_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
     MORSE_Complex64_t *A;
     int lda;
     void *user_data;
-    void (*user_build_callback)(int row_min, int row_max, int col_min, int col_max, void *buffer, int ld, void *user_data) ;
+    void (*user_build_callback)( int row_min, int row_max, int col_min, int col_max,
+                                 void *buffer, int ld, void *user_data );
     int row_min, row_max, col_min, col_max;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &row_min,
-        UNPACK_VALUE, &row_max,
-        UNPACK_VALUE, &col_min,
-        UNPACK_VALUE, &col_max,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_VALUE, &user_data,
-        UNPACK_VALUE, &user_build_callback );
+        this_task, &row_min, &row_max, &col_min, &col_max, &A, &lda, &user_data, &user_build_callback );
 
     user_build_callback(row_min, row_max, col_min, col_max, A, lda, user_data);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zbuild( const MORSE_option_t *options,
@@ -73,5 +67,5 @@ void MORSE_TASK_zbuild( const MORSE_option_t *options,
         sizeof(int),   &lda,                              VALUE,
         sizeof(void*), &user_data,                        VALUE,
         sizeof(void*), &user_build_callback,              VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zgeadd.c b/runtime/parsec/codelets/codelet_zgeadd.c
index eed82f144d8db2d7db984573496e5f97f292292c..3e90e8ffb5d1fa9ee4eaa1653d1f120951d9c01d 100644
--- a/runtime/parsec/codelets/codelet_zgeadd.c
+++ b/runtime/parsec/codelets/codelet_zgeadd.c
@@ -29,34 +29,27 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zgeadd_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zgeadd_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *trans;
-    int *M;
-    int *N;
-    MORSE_Complex64_t *alpha;
+    MORSE_enum trans;
+    int M;
+    int N;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *A;
-    int *LDA;
-    MORSE_Complex64_t *beta;
+    int LDA;
+    MORSE_Complex64_t beta;
     MORSE_Complex64_t *B;
-    int *LDB;
+    int LDB;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &trans,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA,
-        UNPACK_VALUE, &beta,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &LDB );
+        this_task, &trans, &M, &N, &alpha, &A, &LDA, &beta, &B, &LDB );
 
-    CORE_zgeadd(*trans, *M, *N, *alpha, A, *LDA, *beta, B, *LDB);
+    CORE_zgeadd( trans, M, N, alpha, A, LDA, beta, B, LDB );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 /**
@@ -131,5 +124,7 @@ void MORSE_TASK_zgeadd(const MORSE_option_t *options,
         sizeof(MORSE_Complex64_t), &beta,  VALUE,
         PASSED_BY_REF,              RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT,
         sizeof(int),               &ldb,   VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_zgelqt.c b/runtime/parsec/codelets/codelet_zgelqt.c
index f8283cc804f47bc7b2d63754b7686a1cd34e80b4..e827cca93564615276227c64c2e720a44b663438 100644
--- a/runtime/parsec/codelets/codelet_zgelqt.c
+++ b/runtime/parsec/codelets/codelet_zgelqt.c
@@ -85,34 +85,27 @@
  *          \retval <0 if -i, the i-th argument had an illegal value
  *
  ******************************************************************************/
-static int
-CORE_zgelqt_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zgelqt_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
-    int *ib;
+    int m;
+    int n;
+    int ib;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *TAU;
     MORSE_Complex64_t *WORK;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_VALUE, &ib,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &T,
-        UNPACK_VALUE, &ldt,
-        UNPACK_SCRATCH, &TAU,
-        UNPACK_SCRATCH, &WORK );
+        this_task, &m, &n, &ib, &A, &lda, &T, &ldt, &TAU, &WORK );
 
-    CORE_zgelqt(*m, *n, *ib, A, *lda, T, *ldt, TAU, WORK);
+    CORE_zgelqt( m, n, ib, A, lda, T, ldt, TAU, WORK );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zgelqt(const MORSE_option_t *options,
@@ -133,5 +126,5 @@ void MORSE_TASK_zgelqt(const MORSE_option_t *options,
         sizeof(int),           &ldt,                VALUE,
         sizeof(MORSE_Complex64_t)*nb,       NULL,   SCRATCH,
         sizeof(MORSE_Complex64_t)*ib*nb,    NULL,   SCRATCH,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zgemm.c b/runtime/parsec/codelets/codelet_zgemm.c
index 34ca3c30fa73a968036b211d0cd3c3e7fb665108..18ae8cd7c3ef9f25712887044de49f9431eab6d2 100644
--- a/runtime/parsec/codelets/codelet_zgemm.c
+++ b/runtime/parsec/codelets/codelet_zgemm.c
@@ -29,54 +29,42 @@
  * @ingroup CORE_MORSE_Complex64_t
  *
  **/
-static int
-CORE_zgemm_parsec(parsec_execution_stream_t    *context,
-                  parsec_task_t *this_task)
+static inline int
+CORE_zgemm_parsec( parsec_execution_stream_t *context,
+                   parsec_task_t             *this_task )
 {
-    MORSE_enum *transA;
-    MORSE_enum *transB;
-    int *m;
-    int *n;
-    int *k;
-    MORSE_Complex64_t *alpha;
+    MORSE_enum transA;
+    MORSE_enum transB;
+    int m;
+    int n;
+    int k;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex64_t *B;
-    int *ldb;
-    MORSE_Complex64_t *beta;
+    int ldb;
+    MORSE_Complex64_t beta;
     MORSE_Complex64_t *C;
-    int *ldc;
+    int ldc;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &transA,
-        UNPACK_VALUE, &transB,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_VALUE, &k,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &ldb,
-        UNPACK_VALUE, &beta,
-        UNPACK_DATA,  &C,
-        UNPACK_VALUE, &ldc );
+        this_task, &transA, &transB, &m, &n, &k, &alpha, &A, &lda, &B, &ldb, &beta, &C, &ldc );
 
-    CORE_zgemm(*transA, *transB, *m, *n, *k,
-               *alpha, A, *lda,
-                       B, *ldb,
-               *beta,  C, *ldc);
+    CORE_zgemm( transA, transB, m, n, k,
+               alpha, A, lda,
+                      B, ldb,
+               beta,  C, ldc);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
-void MORSE_TASK_zgemm(const MORSE_option_t *options,
-                      MORSE_enum transA, int transB,
-                      int m, int n, int k, int nb,
-                      MORSE_Complex64_t alpha, const MORSE_desc_t *A, int Am, int An, int lda,
+void MORSE_TASK_zgemm( const MORSE_option_t *options,
+                       MORSE_enum transA, int transB,
+                       int m, int n, int k, int nb,
+                       MORSE_Complex64_t alpha, const MORSE_desc_t *A, int Am, int An, int lda,
                                                 const MORSE_desc_t *B, int Bm, int Bn, int ldb,
-                      MORSE_Complex64_t beta, const MORSE_desc_t *C, int Cm, int Cn, int ldc)
+                       MORSE_Complex64_t beta,  const MORSE_desc_t *C, int Cm, int Cn, int ldc )
 {
     parsec_taskpool_t* PARSEC_dtd_taskpool = (parsec_taskpool_t *)(options->sequence->schedopt);
 
@@ -88,12 +76,14 @@ void MORSE_TASK_zgemm(const MORSE_option_t *options,
         sizeof(int),           &n,                                VALUE,
         sizeof(int),           &k,                                VALUE,
         sizeof(MORSE_Complex64_t),           &alpha,              VALUE,
-        PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
+        PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | morse_parsec_get_arena_index(A),
         sizeof(int),           &lda,                              VALUE,
-        PASSED_BY_REF,     RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT,
+        PASSED_BY_REF,     RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT | morse_parsec_get_arena_index(B),
         sizeof(int),           &ldb,                              VALUE,
         sizeof(MORSE_Complex64_t),           &beta,               VALUE,
-        PASSED_BY_REF,     RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | AFFINITY,
+        PASSED_BY_REF,     RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | morse_parsec_get_arena_index(C) | AFFINITY,
         sizeof(int),           &ldc,                              VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_zgeqrt.c b/runtime/parsec/codelets/codelet_zgeqrt.c
index 19b0d183bbde49ee8b91219bce4b2812339b7232..f3881733d664386c7471d4e88df8563e3ab96299 100644
--- a/runtime/parsec/codelets/codelet_zgeqrt.c
+++ b/runtime/parsec/codelets/codelet_zgeqrt.c
@@ -86,34 +86,27 @@
  *          \retval <0 if -i, the i-th argument had an illegal value
  *
  ******************************************************************************/
-static int
-CORE_zgeqrt_parsec (parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zgeqrt_parsec ( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
-    int *ib;
+    int m;
+    int n;
+    int ib;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *TAU;
     MORSE_Complex64_t *WORK;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_VALUE, &ib,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &T,
-        UNPACK_VALUE, &ldt,
-        UNPACK_SCRATCH, &TAU,
-        UNPACK_SCRATCH, &WORK );
+        this_task, &m, &n, &ib, &A, &lda, &T, &ldt, &TAU, &WORK );
 
-    CORE_zgeqrt(*m, *n, *ib, A, *lda, T, *ldt, TAU, WORK);
+    CORE_zgeqrt( m, n, ib, A, lda, T, ldt, TAU, WORK );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zgeqrt(const MORSE_option_t *options,
@@ -134,5 +127,5 @@ void MORSE_TASK_zgeqrt(const MORSE_option_t *options,
         sizeof(int),           &ldt,                           VALUE,
         sizeof(MORSE_Complex64_t)*nb,       NULL,              SCRATCH,
         sizeof(MORSE_Complex64_t)*ib*nb,    NULL,              SCRATCH,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zgessm.c b/runtime/parsec/codelets/codelet_zgessm.c
index 823c5264951393adba83e6bae79862ab7d8e0139..d7196b78924f1eb6d564b79f6e75fcdb0c332190 100644
--- a/runtime/parsec/codelets/codelet_zgessm.c
+++ b/runtime/parsec/codelets/codelet_zgessm.c
@@ -69,43 +69,33 @@
  *         \retval <0 if INFO = -k, the k-th argument had an illegal value
  *
  ******************************************************************************/
-static int
-CORE_zgessm_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zgessm_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
-    int *k;
-    int *ib;
+    int m;
+    int n;
+    int k;
+    int ib;
     int *IPIV;
     MORSE_Complex64_t *L;
-    int *ldl;
+    int ldl;
     MORSE_Complex64_t *D;
-    int *ldd;
+    int ldd;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_VALUE, &k,
-        UNPACK_VALUE, &ib,
-        UNPACK_SCRATCH, &IPIV,
-        UNPACK_DATA,  &L,
-        UNPACK_VALUE, &ldl,
-        UNPACK_DATA,  &D,
-        UNPACK_VALUE, &ldd,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda );
+        this_task, &m, &n, &k, &ib, &IPIV, &L, &ldl, &D, &ldd, &A, &lda );
 
-    CORE_zgessm(*m, *n, *k, *ib, IPIV, D, *ldd, A, *lda);
+    CORE_zgessm( m, n, k, ib, IPIV, D, ldd, A, lda );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zgessm(const MORSE_option_t *options,
-                       int m, int n, int k, int ib, int nb,
-                       int *IPIV,
+                       int m, int n, int k, int ib, int nb, int *IPIV,
                        const MORSE_desc_t *L, int Lm, int Ln, int ldl,
                        const MORSE_desc_t *D, int Dm, int Dn, int ldd,
                        const MORSE_desc_t *A, int Am, int An, int lda)
@@ -125,5 +115,5 @@ void MORSE_TASK_zgessm(const MORSE_option_t *options,
         sizeof(int),           &ldd,                              VALUE,
         PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT,
         sizeof(int),           &lda,                              VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zgessq.c b/runtime/parsec/codelets/codelet_zgessq.c
index 8f7f7b127e8642126caef3a11f008dd31d8cd29d..999adb36570ac96267a1dd487c60f06087da9b41 100644
--- a/runtime/parsec/codelets/codelet_zgessq.c
+++ b/runtime/parsec/codelets/codelet_zgessq.c
@@ -24,26 +24,23 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zgessq_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zgessq_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
+    int m;
+    int n;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     double *SCALESUMSQ;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &SCALESUMSQ );
+        this_task, &m, &n, &A, &lda, &SCALESUMSQ );
 
-    CORE_zgessq( *m, *n, A, *lda, SCALESUMSQ, SCALESUMSQ+1);
+    CORE_zgessq( m, n, A, lda, SCALESUMSQ, SCALESUMSQ+1 );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zgessq( const MORSE_option_t *options,
@@ -57,8 +54,8 @@ void MORSE_TASK_zgessq( const MORSE_option_t *options,
         PARSEC_dtd_taskpool, CORE_zgessq_parsec, options->priority, "gessq",
         sizeof(int),    &m,            VALUE,
         sizeof(int),    &n,            VALUE,
-        PASSED_BY_REF,   RTBLKADDR( A, MORSE_Complex64_t, Am, An ),                            INPUT,
+        PASSED_BY_REF,   RTBLKADDR( A, MORSE_Complex64_t, Am, An ),                 INPUT,
         sizeof(int),    &lda,          VALUE,
         PASSED_BY_REF,   RTBLKADDR( SCALESUMSQ, double, SCALESUMSQm, SCALESUMSQn ), INOUT,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zgetrf.c b/runtime/parsec/codelets/codelet_zgetrf.c
index 4950bb822fe90fca3bff6273f9477d90dac08a6d..d62a7c011317c2476841c3d7d61324e85103c1e6 100644
--- a/runtime/parsec/codelets/codelet_zgetrf.c
+++ b/runtime/parsec/codelets/codelet_zgetrf.c
@@ -24,31 +24,26 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zgetrf_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zgetrf_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
+    int m;
+    int n;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     int *IPIV;
     MORSE_bool *check_info;
-    int *iinfo;
+    int iinfo;
     int info;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_SCRATCH, &IPIV,
-        UNPACK_VALUE, &check_info,
-        UNPACK_VALUE, &iinfo );
+        this_task, &m, &n, &A, &lda, &IPIV, &check_info, &iinfo );
 
-    CORE_zgetrf( *m, *n, A, *lda, IPIV, &info );
+    CORE_zgetrf( m, n, A, lda, IPIV, &info );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zgetrf(const MORSE_option_t *options,
@@ -68,5 +63,5 @@ void MORSE_TASK_zgetrf(const MORSE_option_t *options,
         sizeof(int)*nb,      IPIV,                        SCRATCH,
         sizeof(MORSE_bool), &check_info,                 VALUE,
         sizeof(int),        &iinfo,                      VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zgetrf_incpiv.c b/runtime/parsec/codelets/codelet_zgetrf_incpiv.c
index 3322a11fd1f1e7e7db993c960070704ff96c428d..0f257167cc9eae55359dd834e216efd18be28a33 100644
--- a/runtime/parsec/codelets/codelet_zgetrf_incpiv.c
+++ b/runtime/parsec/codelets/codelet_zgetrf_incpiv.c
@@ -29,7 +29,7 @@
  * @ingroup CORE_MORSE_Complex64_t
  *
  *  CORE_zgetrf_incpiv computes an LU factorization of a general M-by-N tile A
- *  using partial pivoting with row interchanges.
+ *  using partial pivoting with row int erchanges.
  *
  *  The factorization has the form
  *
@@ -62,7 +62,7 @@
  *
  * @param[out] IPIV
  *         The pivot indices; for 1 <= i <= min(M,N), row i of the
- *         tile was interchanged with row IPIV(i).
+ *         tile was int erchanged with row IPIV(i).
  *
  * @param[out] INFO
  *         See returned value.
@@ -78,42 +78,36 @@
  *              to solve a system of equations.
  *
  ******************************************************************************/
-static int
-CORE_zgetrf_incpiv_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zgetrf_incpiv_parsec( parsec_execution_stream_t *context,
+                           parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
-    int *ib;
+    int m;
+    int n;
+    int ib;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     int *IPIV;
     MORSE_bool *check_info;
-    int *iinfo;
+    int iinfo;
 
     int info;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_VALUE, &ib,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_SCRATCH, &IPIV,
-        UNPACK_VALUE, &check_info,
-        UNPACK_VALUE, &iinfo );
+        this_task, &m, &n, &ib, &A, &lda, &IPIV, &check_info, &iinfo );
 
-    CORE_zgetrf_incpiv(*m, *n, *ib, A, *lda, IPIV, &info);
+    CORE_zgetrf_incpiv( m, n, ib, A, lda, IPIV, &info );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
-void MORSE_TASK_zgetrf_incpiv(const MORSE_option_t *options,
-                              int m, int n, int ib, int nb,
-                              const MORSE_desc_t *A, int Am, int An, int lda,
-                              const MORSE_desc_t *L, int Lm, int Ln, int ldl,
-                              int *IPIV,
-                              MORSE_bool check_info, int iinfo)
+void MORSE_TASK_zgetrf_incpiv( const MORSE_option_t *options,
+                               int m, int n, int ib, int nb,
+                               const MORSE_desc_t *A, int Am, int An, int lda,
+                               const MORSE_desc_t *L, int Lm, int Ln, int ldl,
+                               int *IPIV,
+                               MORSE_bool check_info, int iinfo )
 {
     parsec_taskpool_t* PARSEC_dtd_taskpool = (parsec_taskpool_t *)(options->sequence->schedopt);
 
@@ -127,5 +121,10 @@ void MORSE_TASK_zgetrf_incpiv(const MORSE_option_t *options,
         sizeof(int)*nb,        IPIV,                              SCRATCH,
         sizeof(int),           &check_info,                       VALUE,
         sizeof(int),           &iinfo,                            VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)L;
+    (void)Lm;
+    (void)Ln;
+    (void)ldl;
 }
diff --git a/runtime/parsec/codelets/codelet_zgetrf_nopiv.c b/runtime/parsec/codelets/codelet_zgetrf_nopiv.c
index e35f3f6a2bc8a134b0f7c1dc6915a5bf57083504..9896dfc3cebd60b19cacd0b0289e89d9b6d29a08 100644
--- a/runtime/parsec/codelets/codelet_zgetrf_nopiv.c
+++ b/runtime/parsec/codelets/codelet_zgetrf_nopiv.c
@@ -71,29 +71,25 @@
  *              to solve a system of equations.
  *
  ******************************************************************************/
-static int
-CORE_zgetrf_nopiv_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zgetrf_nopiv_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
-    int *ib;
+    int m;
+    int n;
+    int ib;
     MORSE_Complex64_t *A;
-    int *lda;
-    int *iinfo;
+    int lda;
+    int iinfo;
     int info;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_VALUE, &ib,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_VALUE, &iinfo );
+        this_task, &m, &n, &ib, &A, &lda, &iinfo );
 
-    CORE_zgetrf_nopiv(*m, *n, *ib, A, *lda, &info);
+    CORE_zgetrf_nopiv( m, n, ib, A, lda, &info );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zgetrf_nopiv(const MORSE_option_t *options,
@@ -111,5 +107,7 @@ void MORSE_TASK_zgetrf_nopiv(const MORSE_option_t *options,
         PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT,
         sizeof(int),           &lda,                        VALUE,
         sizeof(int),           &iinfo,                      VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_zhe2ge.c b/runtime/parsec/codelets/codelet_zhe2ge.c
index c9a3d059c07d618c0a393361bceba99cc4b4a819..5b81955a501dbf7194b4e6712b98724eec3d229c 100644
--- a/runtime/parsec/codelets/codelet_zhe2ge.c
+++ b/runtime/parsec/codelets/codelet_zhe2ge.c
@@ -30,28 +30,24 @@
  *
  **/
 static inline int
-CORE_zhe2ge_parsec(parsec_execution_stream_t    *context,
-                   parsec_task_t *this_task)
+CORE_zhe2ge_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    int *M;
-    int *N;
+    MORSE_enum uplo;
+    int M;
+    int N;
     const MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
     MORSE_Complex64_t *B;
-    int *LDB;
+    int LDB;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &LDB);
+        this_task, &uplo, &M, &N, &A, &LDA, &B, &LDB);
 
-    CORE_zhe2ge(*uplo, *M, *N, A, *LDA, B, *LDB);
+    CORE_zhe2ge( uplo, M, N, A, LDA, B, LDB );
+
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 
@@ -72,5 +68,7 @@ void MORSE_TASK_zhe2ge(const MORSE_option_t *options,
         sizeof(int),        &lda,    VALUE,
         PASSED_BY_REF,       RTBLKADDR(B, MORSE_Complex64_t, Bm, Bn), OUTPUT,
         sizeof(int),        &ldb,    VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)mb;
 }
diff --git a/runtime/parsec/codelets/codelet_zhemm.c b/runtime/parsec/codelets/codelet_zhemm.c
index 4686a0df0fe559fa7e05ca22e22a116f067b5eb5..5e45bb6a541cdb6e04950df176bf6069774f87d0 100644
--- a/runtime/parsec/codelets/codelet_zhemm.c
+++ b/runtime/parsec/codelets/codelet_zhemm.c
@@ -29,43 +29,33 @@
  * @ingroup CORE_MORSE_Complex64_t
  *
  **/
-static int
-CORE_zhemm_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zhemm_parsec( parsec_execution_stream_t *context,
+                   parsec_task_t             *this_task )
 {
-    MORSE_enum *side;
-    MORSE_enum *uplo;
-    int *M;
-    int *N;
-    MORSE_Complex64_t *alpha;
+    MORSE_enum side;
+    MORSE_enum uplo;
+    int M;
+    int N;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
     MORSE_Complex64_t *B;
-    int *LDB;
-    MORSE_Complex64_t *beta;
+    int LDB;
+    MORSE_Complex64_t beta;
     MORSE_Complex64_t *C;
-    int *LDC;
+    int LDC;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &side,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &LDB,
-        UNPACK_VALUE, &beta,
-        UNPACK_DATA,  &C,
-        UNPACK_VALUE, &LDC );
+        this_task, &side, &uplo, &M, &N, &alpha, &A, &LDA, &B, &LDB, &beta, &C, &LDC );
 
-    CORE_zhemm(*side, *uplo, *M, *N,
-               *alpha, A, *LDA,
-                       B, *LDB,
-               *beta,  C, *LDC);
+    CORE_zhemm( side, uplo, M, N,
+               alpha, A, LDA,
+                      B, LDB,
+               beta,  C, LDC);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zhemm(const MORSE_option_t *options,
@@ -91,5 +81,7 @@ void MORSE_TASK_zhemm(const MORSE_option_t *options,
         sizeof(MORSE_Complex64_t),         &beta,    VALUE,
         PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT,
         sizeof(int),           &ldc,                 VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_zher2k.c b/runtime/parsec/codelets/codelet_zher2k.c
index c2af9c222563080de9828b8f78e2bad313e818d3..bfbbb681e650b26a12140d3c482a6c26e4ad4474 100644
--- a/runtime/parsec/codelets/codelet_zher2k.c
+++ b/runtime/parsec/codelets/codelet_zher2k.c
@@ -29,43 +29,33 @@
  * @ingroup CORE_MORSE_Complex64_t
  *
  **/
-static int
-CORE_zher2k_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zher2k_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    MORSE_enum *trans;
-    int *n;
-    int *k;
-    MORSE_Complex64_t *alpha;
+    MORSE_enum uplo;
+    MORSE_enum trans;
+    int n;
+    int k;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex64_t *B;
-    int *ldb;
-    double *beta;
+    int ldb;
+    double beta;
     MORSE_Complex64_t *C;
-    int *ldc;
+    int ldc;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &trans,
-        UNPACK_VALUE, &n,
-        UNPACK_VALUE, &k,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &ldb,
-        UNPACK_VALUE, &beta,
-        UNPACK_DATA,  &C,
-        UNPACK_VALUE, &ldc );
+        this_task, &uplo, &trans, &n, &k, &alpha, &A, &lda, &B, &ldb, &beta, &C, &ldc );
 
-    CORE_zher2k(*uplo, *trans, *n, *k,
-                *alpha, A, *lda,
-                        B, *ldb,
-                *beta,  C, *ldc);
+    CORE_zher2k( uplo, trans, n, k,
+                alpha, A, lda,
+                       B, ldb,
+                beta,  C, ldc);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zher2k(const MORSE_option_t *options,
@@ -84,12 +74,14 @@ void MORSE_TASK_zher2k(const MORSE_option_t *options,
         sizeof(int),                        &n,        VALUE,
         sizeof(int),                        &k,        VALUE,
         sizeof(MORSE_Complex64_t),          &alpha,    VALUE,
-        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
+        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | morse_parsec_get_arena_index(A),
         sizeof(int),                        &lda,      VALUE,
-        PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT,
+        PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT | morse_parsec_get_arena_index(B),
         sizeof(int),                        &ldb,      VALUE,
         sizeof(double),                     &beta,     VALUE,
-        PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | AFFINITY,
+        PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | morse_parsec_get_arena_index(C) | AFFINITY,
         sizeof(int),                        &ldc,      VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_zherfb.c b/runtime/parsec/codelets/codelet_zherfb.c
index d50c874e3346cdf728d4a7e336b5d33e79c153c2..c90a7bc856f4989772e66b2efcc9b1042b12c876 100644
--- a/runtime/parsec/codelets/codelet_zherfb.c
+++ b/runtime/parsec/codelets/codelet_zherfb.c
@@ -27,42 +27,32 @@
 #include "coreblas/coreblas_z.h"
 
 static inline int
-CORE_zherfb_parsec(parsec_execution_stream_t    *context,
-                   parsec_task_t *this_task)
+CORE_zherfb_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    int *n;
-    int *k;
-    int *ib;
-    int *nb;
+    MORSE_enum uplo;
+    int n;
+    int k;
+    int ib;
+    int nb;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *C;
-    int *ldc;
+    int ldc;
     MORSE_Complex64_t *WORK;
-    int *ldwork;
+    int ldwork;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &uplo,
-        UNPACK_VALUE,   &n,
-        UNPACK_VALUE,   &k,
-        UNPACK_VALUE,   &ib,
-        UNPACK_VALUE,   &nb,
-        UNPACK_DATA,    &A,
-        UNPACK_VALUE,   &lda,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_DATA,    &C,
-        UNPACK_VALUE,   &ldc,
-        UNPACK_SCRATCH, &WORK,
-        UNPACK_VALUE,   &ldwork);
+        this_task,   &uplo,   &n,   &k,   &ib,   &nb, &A,   &lda, &T,   &ldt, &C,   &ldc, &WORK,   &ldwork);
 
-    CORE_zherfb(*uplo, *n, *k, *ib, *nb,
-                A, *lda, T, *ldt,
-                C, *ldc, WORK, *ldwork);
+    CORE_zherfb( uplo, n, k, ib, nb,
+                A, lda, T, ldt,
+                C, ldc, WORK, ldwork);
+
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zherfb(const MORSE_option_t *options,
@@ -89,5 +79,5 @@ void MORSE_TASK_zherfb(const MORSE_option_t *options,
         sizeof(int),        &ldc,  VALUE,
         sizeof(MORSE_Complex64_t)*2*nb*nb,  NULL, SCRATCH,
         sizeof(int),        &nb,   VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zherk.c b/runtime/parsec/codelets/codelet_zherk.c
index 20c78e9736c6f60be42051e5d362841e938c3fe7..7a0959d4ea1d12fb36b499bf9b8097d386c613a3 100644
--- a/runtime/parsec/codelets/codelet_zherk.c
+++ b/runtime/parsec/codelets/codelet_zherk.c
@@ -30,38 +30,30 @@
  *
  **/
 
-static int
-CORE_zherk_parsec(parsec_execution_stream_t *context, parsec_task_t * this_task)
+static inline int
+CORE_zherk_parsec( parsec_execution_stream_t *context,
+                   parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    MORSE_enum *trans;
-    int *n;
-    int *k;
-    double *alpha;
+    MORSE_enum uplo;
+    MORSE_enum trans;
+    int n;
+    int k;
+    double alpha;
     MORSE_Complex64_t *A;
-    int *lda;
-    double *beta;
+    int lda;
+    double beta;
     MORSE_Complex64_t *C;
-    int *ldc;
+    int ldc;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &trans,
-        UNPACK_VALUE, &n,
-        UNPACK_VALUE, &k,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_VALUE, &beta,
-        UNPACK_DATA,  &C,
-        UNPACK_VALUE, &ldc );
+        this_task, &uplo, &trans, &n, &k, &alpha, &A, &lda, &beta, &C, &ldc );
 
-    CORE_zherk(*uplo, *trans, *n, *k,
-               *alpha, A, *lda,
-               *beta,  C, *ldc);
+    CORE_zherk( uplo, trans, n, k,
+                alpha, A, lda,
+                beta,  C, ldc);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zherk(const MORSE_option_t *options,
@@ -79,11 +71,13 @@ void MORSE_TASK_zherk(const MORSE_option_t *options,
         sizeof(int),           &n,                                VALUE,
         sizeof(int),           &k,                                VALUE,
         sizeof(double),        &alpha,                            VALUE,
-        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
+        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | morse_parsec_get_arena_index(A),
         sizeof(int),           &lda,                              VALUE,
         sizeof(double),        &beta,                             VALUE,
-        PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | AFFINITY,
+        PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | morse_parsec_get_arena_index(C) | AFFINITY,
         sizeof(int),           &ldc,                              VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
 
diff --git a/runtime/parsec/codelets/codelet_zhessq.c b/runtime/parsec/codelets/codelet_zhessq.c
index 013f8e99a92d92df4b59dc0c453d49d1d7fe8713..be38a4f67dcb6ef7d6c5124f5b8e9303902a9708 100644
--- a/runtime/parsec/codelets/codelet_zhessq.c
+++ b/runtime/parsec/codelets/codelet_zhessq.c
@@ -24,26 +24,23 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zhessq_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zhessq_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    int *n;
+    MORSE_enum uplo;
+    int n;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     double *SCALESUMSQ;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &n,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &SCALESUMSQ );
+        this_task, &uplo, &n, &A, &lda, &SCALESUMSQ );
 
-    CORE_zhessq( *uplo, *n, A, *lda, &SCALESUMSQ[0], &SCALESUMSQ[1]);
+    CORE_zhessq( uplo, n, A, lda, &SCALESUMSQ[0], &SCALESUMSQ[1]);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zhessq( const MORSE_option_t *options,
@@ -60,5 +57,5 @@ void MORSE_TASK_zhessq( const MORSE_option_t *options,
         PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),                    INPUT,
         sizeof(int),           &lda,                VALUE,
         PASSED_BY_REF,         RTBLKADDR( SCALESUMSQ, double, SCALESUMSQm, SCALESUMSQn ),    INOUT,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zlacpy.c b/runtime/parsec/codelets/codelet_zlacpy.c
index 6df0728bac1401e4de806c63bfe3a36fb9661b51..702f414d96302ff59ee486aa95983522527c3c8a 100644
--- a/runtime/parsec/codelets/codelet_zlacpy.c
+++ b/runtime/parsec/codelets/codelet_zlacpy.c
@@ -29,34 +29,27 @@
  * @ingroup CORE_MORSE_Complex64_t
  *
  **/
-static int
-CORE_zlacpyx_parsec(parsec_execution_stream_t *context, parsec_task_t * this_task)
+static inline int
+CORE_zlacpyx_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    int *M;
-    int *N;
-    int *displA;
+    MORSE_enum uplo;
+    int M;
+    int N;
+    int displA;
     MORSE_Complex64_t *A;
-    int *LDA;
-    int *displB;
+    int LDA;
+    int displB;
     MORSE_Complex64_t *B;
-    int *LDB;
+    int LDB;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_VALUE, &displA,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA,
-        UNPACK_VALUE, &displB,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &LDB );
+        this_task, &uplo, &M, &N, &displA, &A, &LDA, &displB, &B, &LDB );
 
-    CORE_zlacpy(*uplo, *M, *N, A + (*displA), *LDA, B + (*displB), *LDB);
+    CORE_zlacpy( uplo, M, N, A + (displA), LDA, B + (displB), LDB );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zlacpyx( const MORSE_option_t *options,
@@ -78,7 +71,8 @@ void MORSE_TASK_zlacpyx( const MORSE_option_t *options,
         sizeof(int),           &displB,                    VALUE,
         PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),   OUTPUT,
         sizeof(int),           &ldb,                       VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+    (void)nb;
 }
 
 void MORSE_TASK_zlacpy(const MORSE_option_t *options,
diff --git a/runtime/parsec/codelets/codelet_zlag2c.c b/runtime/parsec/codelets/codelet_zlag2c.c
index 3f4e8e35193d9d15a0dc827769a2a181c8773231..c6c0f33450193bf94e09b0a9d93cf7546cc0875c 100644
--- a/runtime/parsec/codelets/codelet_zlag2c.c
+++ b/runtime/parsec/codelets/codelet_zlag2c.c
@@ -29,29 +29,25 @@
  * @ingroup CORE_MORSE_Complex64_t
  *
  **/
-static int
-CORE_zlag2c_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zlag2c_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
+    int m;
+    int n;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex32_t *B;
-    int *ldb;
+    int ldb;
     int info;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &ldb );
+        this_task, &m, &n, &A, &lda, &B, &ldb );
 
-    CORE_zlag2c( *m, *n, A, *lda, B, *ldb);
+    CORE_zlag2c( m, n, A, lda, B, ldb );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zlag2c(const MORSE_option_t *options,
@@ -68,7 +64,7 @@ void MORSE_TASK_zlag2c(const MORSE_option_t *options,
         sizeof(int),                        &lda,       VALUE,
         PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex32_t, Bm, Bn ),     OUTPUT,
         sizeof(int),                        &ldb,       VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
 
 /***************************************************************************//**
@@ -76,28 +72,23 @@ void MORSE_TASK_zlag2c(const MORSE_option_t *options,
  * @ingroup CORE_MORSE_Complex64_t
  *
  **/
-static int
+static inline int
 CORE_clag2z_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
 {
-    int *m;
-    int *n;
+    int m;
+    int n;
     MORSE_Complex32_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex64_t *B;
-    int *ldb;
+    int ldb;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &ldb );
+        this_task, &m, &n, &A, &lda, &B, &ldb );
 
-    CORE_clag2z( *m, *n, A, *lda, B, *ldb );
+    CORE_clag2z( m, n, A, lda, B, ldb );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_clag2z(const MORSE_option_t *options,
@@ -115,5 +106,5 @@ void MORSE_TASK_clag2z(const MORSE_option_t *options,
         sizeof(int),                        &lda,       VALUE,
         PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT,
         sizeof(int),                        &ldb,       VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zlange.c b/runtime/parsec/codelets/codelet_zlange.c
index 25e1708a4214e4723e3e6728a83e09030cd849ab..ef7df0b78e8d0998be0ba377680766f946ce2813 100644
--- a/runtime/parsec/codelets/codelet_zlange.c
+++ b/runtime/parsec/codelets/codelet_zlange.c
@@ -24,30 +24,25 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zlange_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zlange_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *norm;
-    int *M;
-    int *N;
+    MORSE_enum norm;
+    int M;
+    int N;
     MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
     double *work;
     double *normA;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &norm,
-        UNPACK_VALUE,   &M,
-        UNPACK_VALUE,   &N,
-        UNPACK_DATA,    &A,
-        UNPACK_VALUE,   &LDA,
-        UNPACK_SCRATCH, &work,
-        UNPACK_DATA,    &normA );
-
-    CORE_zlange( *norm, *M, *N, A, *LDA, work, normA );
-
-    return 0;
+        this_task,   &norm,   &M,   &N, &A,   &LDA, &work, &normA );
+
+    CORE_zlange( norm, M, N, A, LDA, work, normA );
+
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zlange(const MORSE_option_t *options,
@@ -68,25 +63,27 @@ void MORSE_TASK_zlange(const MORSE_option_t *options,
         sizeof(int),                   &LDA,           VALUE,
         sizeof(double)*szeW,           NULL,           SCRATCH,
         PASSED_BY_REF,         RTBLKADDR( B, double, Bm, Bn ),     OUTPUT,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)NB;
 }
 
 #if defined(PRECISION_d) || defined(PRECISION_s)
-static int
-CORE_zlange_max_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zlange_max_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
     double *A;
     double *normA;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_DATA,  &A,
-        UNPACK_DATA,  &normA );
+        this_task, &A, &normA );
 
     if ( *A > *normA )
         *normA = *A;
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zlange_max(const MORSE_option_t *options,
@@ -99,7 +96,7 @@ void MORSE_TASK_zlange_max(const MORSE_option_t *options,
         PARSEC_dtd_taskpool, CORE_zlange_max_parsec, options->priority, "lange_max",
         PASSED_BY_REF,         RTBLKADDR( A, double, Am, An ), INPUT,
         PASSED_BY_REF,         RTBLKADDR( B, double, Bm, Bn ), OUTPUT,
-        0);
+        PARSEC_DTD_ARG_END );
 }
 
 #endif /* defined(PRECISION_d) || defined(PRECISION_s) */
diff --git a/runtime/parsec/codelets/codelet_zlanhe.c b/runtime/parsec/codelets/codelet_zlanhe.c
index 8e1f0d88d7d44d5d44080b6f33e6143821ff4e16..58efac9fc7110fea71734729077a8101ec4df194 100644
--- a/runtime/parsec/codelets/codelet_zlanhe.c
+++ b/runtime/parsec/codelets/codelet_zlanhe.c
@@ -24,30 +24,25 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zlanhe_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zlanhe_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *norm;
-    MORSE_enum *uplo;
-    int *N;
+    MORSE_enum norm;
+    MORSE_enum uplo;
+    int N;
     MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
     double *work;
     double *normA;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &norm,
-        UNPACK_VALUE,   &uplo,
-        UNPACK_VALUE,   &N,
-        UNPACK_DATA,    &A,
-        UNPACK_VALUE,   &LDA,
-        UNPACK_SCRATCH, &work,
-        UNPACK_DATA,    &normA );
+        this_task,   &norm,   &uplo,   &N, &A,   &LDA, &work, &normA );
 
-    CORE_zlanhe( *norm, *uplo, *N, A, *LDA, work, normA);
+    CORE_zlanhe( norm, uplo, N, A, LDA, work, normA );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zlanhe(const MORSE_option_t *options,
@@ -68,5 +63,7 @@ void MORSE_TASK_zlanhe(const MORSE_option_t *options,
         sizeof(int),                   &LDA,           VALUE,
         sizeof(double)*szeW,           NULL,           SCRATCH,
         PASSED_BY_REF,         RTBLKADDR( B, double, Bm, Bn ),     OUTPUT,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)NB;
 }
diff --git a/runtime/parsec/codelets/codelet_zlansy.c b/runtime/parsec/codelets/codelet_zlansy.c
index 798405211e38cb4f576173bdb7ce50ffa37bd38b..748b68065c7b9ccd30dd7ef1b2239337f6b850c0 100644
--- a/runtime/parsec/codelets/codelet_zlansy.c
+++ b/runtime/parsec/codelets/codelet_zlansy.c
@@ -24,30 +24,25 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zlansy_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zlansy_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *norm;
-    MORSE_enum *uplo;
-    int *N;
+    int norm;
+    MORSE_enum uplo;
+    int N;
     MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
     double *work;
     double *normA;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &norm,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &N,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA,
-        UNPACK_SCRATCH, &work,
-        UNPACK_DATA,  &normA );
+        this_task, &norm, &uplo, &N, &A, &LDA, &work, &normA );
 
-    CORE_zlansy( *norm, *uplo, *N, A, *LDA, work, normA);
+    CORE_zlansy( norm, uplo, N, A, LDA, work, normA );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zlansy(const MORSE_option_t *options,
@@ -68,5 +63,7 @@ void MORSE_TASK_zlansy(const MORSE_option_t *options,
         sizeof(int),                   &LDA,           VALUE,
         sizeof(double)*szeW,           NULL,           SCRATCH,
         PASSED_BY_REF,         RTBLKADDR( B, double, Bm, Bn ),     OUTPUT,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)NB;
 }
diff --git a/runtime/parsec/codelets/codelet_zlantr.c b/runtime/parsec/codelets/codelet_zlantr.c
index 18dea9797275505d5c29cf81b7e5d77df43c541e..03da6c4cace4343f0f33ce22400dca2a32ca4081 100644
--- a/runtime/parsec/codelets/codelet_zlantr.c
+++ b/runtime/parsec/codelets/codelet_zlantr.c
@@ -24,32 +24,25 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zlantr_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zlantr_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *norm, *uplo, *diag;
-    int *M;
-    int *N;
+    MORSE_enum norm, uplo, diag;
+    int M;
+    int N;
     MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
     double *work;
     double *normA;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &norm,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &diag,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA,
-        UNPACK_SCRATCH, &work,
-        UNPACK_DATA,  &normA );
+        this_task, &norm, &uplo, &diag, &M, &N, &A, &LDA, &work, &normA );
 
-    CORE_zlantr( *norm, *uplo, *diag, *M, *N, A, *LDA, work, normA);
+    CORE_zlantr( norm, uplo, diag, M, N, A, LDA, work, normA );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zlantr(const MORSE_option_t *options,
@@ -73,5 +66,7 @@ void MORSE_TASK_zlantr(const MORSE_option_t *options,
         sizeof(int),                   &LDA,           VALUE,
         sizeof(double)*szeW,           NULL,           SCRATCH,
         PASSED_BY_REF,         RTBLKADDR( B, double, Bm, Bn ),     OUTPUT,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)NB;
 }
diff --git a/runtime/parsec/codelets/codelet_zlascal.c b/runtime/parsec/codelets/codelet_zlascal.c
index 3bb8c7d3f29ea5de578bf2f1caf9b9b1fd9971b1..5f6d2a238582dba99b4f7a9dcee3ba948464123a 100644
--- a/runtime/parsec/codelets/codelet_zlascal.c
+++ b/runtime/parsec/codelets/codelet_zlascal.c
@@ -39,26 +39,23 @@
  *
  **/
 static inline int
-CORE_zlascal_parsec(parsec_execution_stream_t    *context,
-                    parsec_task_t *this_task)
+CORE_zlascal_parsec( parsec_execution_stream_t *context,
+                     parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    int *M;
-    int *N;
-    MORSE_Complex64_t *alpha;
+    MORSE_enum uplo;
+    int M;
+    int N;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA);
+        this_task, &uplo, &M, &N, &alpha, &A, &LDA);
 
-    CORE_zlascal(*uplo, *M, *N, *alpha, A, *LDA);
+    CORE_zlascal( uplo, M, N, alpha, A, LDA );
+
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zlascal(const MORSE_option_t *options,
@@ -77,7 +74,9 @@ void MORSE_TASK_zlascal(const MORSE_option_t *options,
         sizeof(MORSE_Complex64_t), &alpha, VALUE,
         PASSED_BY_REF,              RTBLKADDR(A, MORSE_Complex64_t, Am, An), INOUT,
         sizeof(int),               &lda,   VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
 
 
diff --git a/runtime/parsec/codelets/codelet_zlaset.c b/runtime/parsec/codelets/codelet_zlaset.c
index 01d3bb02007a98cd71929d2583654d16046c493e..626286c0fde357a1a85bf9e21fe5473b79df5929 100644
--- a/runtime/parsec/codelets/codelet_zlaset.c
+++ b/runtime/parsec/codelets/codelet_zlaset.c
@@ -59,30 +59,25 @@
  *         The leading dimension of the array A.  LDA >= max(1,M).
  *
  **/
-static int
-CORE_zlaset_parsec(parsec_execution_stream_t *context, parsec_task_t * this_task)
+static inline int
+CORE_zlaset_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    int *M;
-    int *N;
-    MORSE_Complex64_t *alpha;
-    MORSE_Complex64_t *beta;
+    MORSE_enum uplo;
+    int M;
+    int N;
+    MORSE_Complex64_t alpha;
+    MORSE_Complex64_t beta;
     MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_VALUE, &alpha,
-        UNPACK_VALUE, &beta,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA );
+        this_task, &uplo, &M, &N, &alpha, &beta, &A, &LDA );
 
-    CORE_zlaset(*uplo, *M, *N, *alpha, *beta, A, *LDA);
+    CORE_zlaset( uplo, M, N, alpha, beta, A, LDA );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zlaset(const MORSE_option_t *options,
@@ -101,5 +96,5 @@ void MORSE_TASK_zlaset(const MORSE_option_t *options,
         sizeof(MORSE_Complex64_t),       &beta,        VALUE,
         PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT,
         sizeof(int),                     &LDA,         VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zlaset2.c b/runtime/parsec/codelets/codelet_zlaset2.c
index 625fefcfbc598c4d12feb255d47f1b096b159f94..648d99e9a5c4e236365bdd9d7283b41539b8eb8a 100644
--- a/runtime/parsec/codelets/codelet_zlaset2.c
+++ b/runtime/parsec/codelets/codelet_zlaset2.c
@@ -57,33 +57,29 @@
  *         The leading dimension of the array A.  LDA >= max(1,M).
  *
  **/
-static int
-CORE_zlaset2_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zlaset2_parsec( parsec_execution_stream_t *context,
+                     parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    int *M;
-    int *N;
-    MORSE_Complex64_t *alpha;
+    MORSE_enum uplo;
+    int M;
+    int N;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA );
+        this_task, &uplo, &M, &N, &alpha, &A, &LDA );
 
-    CORE_zlaset2(*uplo, *M, *N, *alpha, A, *LDA);
+    CORE_zlaset2( uplo, M, N, alpha, A, LDA );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zlaset2(const MORSE_option_t *options,
-                       MORSE_enum uplo, int M, int N,
-                       MORSE_Complex64_t alpha, const MORSE_desc_t *A, int Am, int An, int LDA)
+                        MORSE_enum uplo, int M, int N,
+                        MORSE_Complex64_t alpha, const MORSE_desc_t *A, int Am, int An, int LDA)
 {
     parsec_taskpool_t* PARSEC_dtd_taskpool = (parsec_taskpool_t *)(options->sequence->schedopt);
 
@@ -95,5 +91,5 @@ void MORSE_TASK_zlaset2(const MORSE_option_t *options,
         sizeof(MORSE_enum),                &alpha,     VALUE,
         PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT,
         sizeof(int),                       &LDA,       VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zlatro.c b/runtime/parsec/codelets/codelet_zlatro.c
index ecb990962165b3d07d05c74d0501af21924dbc00..04887c3a652fef086ebcd6e6c0878c0856082e6d 100644
--- a/runtime/parsec/codelets/codelet_zlatro.c
+++ b/runtime/parsec/codelets/codelet_zlatro.c
@@ -26,31 +26,26 @@
 #include "coreblas/coreblas_z.h"
 
 static inline int
-CORE_zlatro_parsec(parsec_execution_stream_t    *context,
-                   parsec_task_t *this_task)
+CORE_zlatro_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    MORSE_enum *trans;
-    int *M;
-    int *N;
+    MORSE_enum uplo;
+    MORSE_enum trans;
+    int M;
+    int N;
     const MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
     MORSE_Complex64_t *B;
-    int *LDB;
+    int LDB;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &trans,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &LDB);
+        this_task, &uplo, &trans, &M, &N, &A, &LDA, &B, &LDB);
 
-    CORE_zlatro(*uplo, *trans, *M, *N,
-                A, *LDA, B, *LDB);
+    CORE_zlatro( uplo, trans, M, N,
+                A, LDA, B, LDB);
+
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 /***************************************************************************//**
@@ -74,5 +69,7 @@ void MORSE_TASK_zlatro(const MORSE_option_t *options,
         sizeof(int),        &lda,   VALUE,
         PASSED_BY_REF,       RTBLKADDR(B, MORSE_Complex64_t, Bm, Bn), OUTPUT,
         sizeof(int),        &ldb,   VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)mb;
 }
diff --git a/runtime/parsec/codelets/codelet_zlauum.c b/runtime/parsec/codelets/codelet_zlauum.c
index 4eb005b4bba588bce55474cb924cec128f84b887..e63854da7bf2fcd447527a4894e1f977785b2655 100644
--- a/runtime/parsec/codelets/codelet_zlauum.c
+++ b/runtime/parsec/codelets/codelet_zlauum.c
@@ -29,24 +29,22 @@
  * @ingroup CORE_MORSE_Complex64_t
  *
  **/
-static int
-CORE_zlauum_parsec(parsec_execution_stream_t *context, parsec_task_t * this_task)
+static inline int
+CORE_zlauum_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    int *N;
+    MORSE_enum uplo;
+    int N;
     MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &N,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA );
+        this_task, &uplo, &N, &A, &LDA );
 
-    CORE_zlauum(*uplo, *N, A, *LDA);
+    CORE_zlauum( uplo, N, A, LDA );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zlauum(const MORSE_option_t *options,
@@ -61,5 +59,7 @@ void MORSE_TASK_zlauum(const MORSE_option_t *options,
         sizeof(int),           &n,                     VALUE,
         PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT,
         sizeof(int),           &lda,                   VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_zpamm.c b/runtime/parsec/codelets/codelet_zpamm.c
index f9efc2d028c241f3f4f250f33188490e78c43301..53a7407de9e08799d1745f49bbbf7afcc4b63e51 100644
--- a/runtime/parsec/codelets/codelet_zpamm.c
+++ b/runtime/parsec/codelets/codelet_zpamm.c
@@ -168,46 +168,33 @@
 
 /***************************************************************************/
 
-static int
-CORE_zpamm_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zpamm_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *op;
-    MORSE_enum *side;
-    int *storev;
-    int *M;
-    int *N;
-    int *K;
-    int *L;
+    int op;
+    MORSE_enum side;
+    int storev;
+    int M;
+    int N;
+    int K;
+    int L;
     MORSE_Complex64_t *A1;
-    int *LDA1;
+    int LDA1;
     MORSE_Complex64_t *A2;
-    int *LDA2;
+    int LDA2;
     MORSE_Complex64_t *V;
-    int *LDV;
+    int LDV;
     MORSE_Complex64_t *W;
-    int *LDW;
+    int LDW;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &op,
-        UNPACK_VALUE, &side,
-        UNPACK_VALUE, &storev,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_VALUE, &K,
-        UNPACK_VALUE, &L,
-        UNPACK_DATA,  &A1,
-        UNPACK_VALUE, &LDA1,
-        UNPACK_DATA,  &A2,
-        UNPACK_VALUE, &LDA2,
-        UNPACK_DATA,  &V,
-        UNPACK_VALUE, &LDV,
-        UNPACK_DATA,  &W,
-        UNPACK_VALUE, &LDW );
+        this_task, &op, &side, &storev, &M, &N, &K, &L, &A1, &LDA1, &A2, &LDA2, &V, &LDV, &W, &LDW );
 
-    CORE_zpamm( *op, *side, *storev, *M, *N, *K, *L, A1, *LDA1, A2, *LDA2, V, *LDV, W, *LDW);
+    CORE_zpamm( op, side, storev, M, N, K, L, A1, LDA1, A2, LDA2, V, LDV, W, LDW );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void
@@ -238,5 +225,5 @@ MORSE_TASK_zpamm(const MORSE_option_t *options,
         sizeof(int),                        &ldv,               VALUE,
         PASSED_BY_REF,         RTBLKADDR( W, MORSE_Complex64_t, Wm, Wn ),        INOUT,
         sizeof(int),                        &ldw,               VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zplghe.c b/runtime/parsec/codelets/codelet_zplghe.c
index 6883fd6e131e75f7b5f25751aa3a0bf1471af4cb..9f56b3937ca44f73415ba06efbbceed2ac01c1ef 100644
--- a/runtime/parsec/codelets/codelet_zplghe.c
+++ b/runtime/parsec/codelets/codelet_zplghe.c
@@ -24,34 +24,27 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zplghe_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zplghe_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    double *bump;
-    int *m;
-    int *n;
+    double bump;
+    int m;
+    int n;
     MORSE_Complex64_t *A;
-    int *lda;
-    int *bigM;
-    int *m0;
-    int *n0;
-    unsigned long long int *seed;
+    int lda;
+    int bigM;
+    int m0;
+    int n0;
+    unsigned long long int seed;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &bump,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_VALUE, &bigM,
-        UNPACK_VALUE, &m0,
-        UNPACK_VALUE, &n0,
-        UNPACK_VALUE, &seed );
+        this_task, &bump, &m, &n, &A, &lda, &bigM, &m0, &n0, &seed );
 
-    CORE_zplghe( *bump, *m, *n, A, *lda, *bigM, *m0, *n0, *seed );
+    CORE_zplghe( bump, m, n, A, lda, bigM, m0, n0, seed );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zplghe( const MORSE_option_t *options,
@@ -65,11 +58,11 @@ void MORSE_TASK_zplghe( const MORSE_option_t *options,
         sizeof(double),    &bump,                          VALUE,
         sizeof(int),       &m,                             VALUE,
         sizeof(int),       &n,                             VALUE,
-        PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | AFFINITY,
+        PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | morse_parsec_get_arena_index(A) | AFFINITY,
         sizeof(int),       &lda,                           VALUE,
         sizeof(int),       &bigM,                          VALUE,
         sizeof(int),       &m0,                            VALUE,
         sizeof(int),       &n0,                            VALUE,
         sizeof(unsigned long long int),       &seed,       VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zplgsy.c b/runtime/parsec/codelets/codelet_zplgsy.c
index 6ed9e709d69fb2c5b3dd3b3ab35647c62309403d..5c78e20a7967293450164e54b761138577da5d27 100644
--- a/runtime/parsec/codelets/codelet_zplgsy.c
+++ b/runtime/parsec/codelets/codelet_zplgsy.c
@@ -24,34 +24,27 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zplgsy_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zplgsy_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_Complex64_t *bump;
-    int *m;
-    int *n;
+    MORSE_Complex64_t bump;
+    int m;
+    int n;
     MORSE_Complex64_t *A;
-    int *lda;
-    int *bigM;
-    int *m0;
-    int *n0;
-    unsigned long long int *seed;
+    int lda;
+    int bigM;
+    int m0;
+    int n0;
+    unsigned long long int seed;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &bump,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_VALUE, &bigM,
-        UNPACK_VALUE, &m0,
-        UNPACK_VALUE, &n0,
-        UNPACK_VALUE, &seed );
+        this_task, &bump, &m, &n, &A, &lda, &bigM, &m0, &n0, &seed );
 
-    CORE_zplgsy( *bump, *m, *n, A, *lda, *bigM, *m0, *n0, *seed );
+    CORE_zplgsy( bump, m, n, A, lda, bigM, m0, n0, seed );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zplgsy( const MORSE_option_t *options,
@@ -65,11 +58,11 @@ void MORSE_TASK_zplgsy( const MORSE_option_t *options,
         sizeof(MORSE_Complex64_t), &bump,                          VALUE,
         sizeof(int),               &m,                             VALUE,
         sizeof(int),               &n,                             VALUE,
-        PASSED_BY_REF,             RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | AFFINITY,
+        PASSED_BY_REF,             RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | morse_parsec_get_arena_index(A) | AFFINITY,
         sizeof(int),               &lda,                           VALUE,
         sizeof(int),               &bigM,                          VALUE,
         sizeof(int),               &m0,                            VALUE,
         sizeof(int),               &n0,                            VALUE,
         sizeof(unsigned long long int),               &seed,       VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zplrnt.c b/runtime/parsec/codelets/codelet_zplrnt.c
index b0e21a698c848d988b1de2197f22ef6be457a658..61ecdf376a431d1a1e02d71d181acf09a6110d10 100644
--- a/runtime/parsec/codelets/codelet_zplrnt.c
+++ b/runtime/parsec/codelets/codelet_zplrnt.c
@@ -24,32 +24,26 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zplrnt_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zplrnt_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
+    int m;
+    int n;
     MORSE_Complex64_t *A;
-    int *lda;
-    int *bigM;
-    int *m0;
-    int *n0;
-    unsigned long long int *seed;
+    int lda;
+    int bigM;
+    int m0;
+    int n0;
+    unsigned long long int seed;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_VALUE, &bigM,
-        UNPACK_VALUE, &m0,
-        UNPACK_VALUE, &n0,
-        UNPACK_VALUE, &seed );
+        this_task, &m, &n, &A, &lda, &bigM, &m0, &n0, &seed );
 
-    CORE_zplrnt( *m, *n, A, *lda, *bigM, *m0, *n0, *seed );
+    CORE_zplrnt( m, n, A, lda, bigM, m0, n0, seed );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zplrnt( const MORSE_option_t *options,
@@ -68,5 +62,5 @@ void MORSE_TASK_zplrnt( const MORSE_option_t *options,
         sizeof(int),       &m0,                         VALUE,
         sizeof(int),       &n0,                         VALUE,
         sizeof(unsigned long long int),       &seed,    VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zplssq.c b/runtime/parsec/codelets/codelet_zplssq.c
index 858ce90bd3b7925e84a20cd986d38446265cdc0b..9200e65b01d2cd1b155088276acd9dbc92e7d0b9 100644
--- a/runtime/parsec/codelets/codelet_zplssq.c
+++ b/runtime/parsec/codelets/codelet_zplssq.c
@@ -56,16 +56,15 @@
  *          On exit, result contains scl * sqrt( ssq )
  *
  */
-static int
-CORE_zplssq_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zplssq_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
     double *SCALESUMSQ;
     double *SCLSSQ;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_DATA,  &SCALESUMSQ,
-        UNPACK_DATA,  &SCLSSQ );
+        this_task, &SCALESUMSQ, &SCLSSQ );
 
     if( SCLSSQ[0] < SCALESUMSQ[0] ) {
         SCLSSQ[1] = SCALESUMSQ[1] + (SCLSSQ[1]     * (( SCLSSQ[0] / SCALESUMSQ[0] ) * ( SCLSSQ[0] / SCALESUMSQ[0] )));
@@ -74,7 +73,8 @@ CORE_zplssq_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
         SCLSSQ[1] = SCLSSQ[1]     + (SCALESUMSQ[1] * (( SCALESUMSQ[0] / SCLSSQ[0] ) * ( SCALESUMSQ[0] / SCLSSQ[0] )));
     }
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zplssq( const MORSE_option_t *options,
@@ -87,21 +87,22 @@ void MORSE_TASK_zplssq( const MORSE_option_t *options,
         PARSEC_dtd_taskpool, CORE_zplssq_parsec, options->priority, "plssq",
         PASSED_BY_REF,         RTBLKADDR( SCALESUMSQ, double, SCALESUMSQm, SCALESUMSQn ),    INPUT,
         PASSED_BY_REF,         RTBLKADDR( SCLSSQ, double, SCLSSQm, SCLSSQn ),                INOUT,
-        0);
+        PARSEC_DTD_ARG_END );
 }
 
-static int
-CORE_zplssq2_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zplssq2_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
     double *RESULT;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_DATA, &RESULT );
+        this_task, &RESULT );
 
     RESULT[0] = RESULT[0] * sqrt( RESULT[1] );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zplssq2( const MORSE_option_t *options,
@@ -112,5 +113,5 @@ void MORSE_TASK_zplssq2( const MORSE_option_t *options,
     parsec_dtd_taskpool_insert_task(
         PARSEC_dtd_taskpool, CORE_zplssq2_parsec, options->priority, "plssq2",
         PASSED_BY_REF,         RTBLKADDR( RESULT, double, RESULTm, RESULTn ),     INOUT,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zpotrf.c b/runtime/parsec/codelets/codelet_zpotrf.c
index b13f687b74d84e9f17ee8643b0903f5332b841b4..a8618e06ed144da37fdaaf03fab34c661e5c59b9 100644
--- a/runtime/parsec/codelets/codelet_zpotrf.c
+++ b/runtime/parsec/codelets/codelet_zpotrf.c
@@ -29,24 +29,26 @@
  * @ingroup CORE_MORSE_Complex64_t
  *
  **/
-static int
-CORE_zpotrf_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zpotrf_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    int *tempkm, *ldak, *iinfo;
+    MORSE_enum uplo;
+    int tempkm, ldak, iinfo, info;
     MORSE_Complex64_t *A;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &tempkm,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &ldak,
-        UNPACK_VALUE, &iinfo );
+        this_task, &uplo, &tempkm, &A, &ldak, &iinfo );
 
-    CORE_zpotrf(*uplo, *tempkm, A, *ldak, iinfo);
+    CORE_zpotrf( uplo, tempkm, A, ldak, &info );
 
-    return 0;
+    /* if ( (sequence->status == MORSE_SUCCESS) && (info != 0) ) { */
+    /*     RUNTIME_sequence_flush( (MORSE_context_t*)quark, sequence, request, iinfo+info ); */
+    /* } */
+    (void)context;
+    (void)info;
+    (void)iinfo;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zpotrf(const MORSE_option_t *options,
@@ -60,8 +62,10 @@ void MORSE_TASK_zpotrf(const MORSE_option_t *options,
         PARSEC_dtd_taskpool, CORE_zpotrf_parsec, options->priority, "potrf",
         sizeof(MORSE_enum),    &uplo,                             VALUE,
         sizeof(int),           &n,                                VALUE,
-        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | AFFINITY,
+        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | morse_parsec_get_arena_index(A) | AFFINITY,
         sizeof(int),           &lda,                              VALUE,
         sizeof(int),           &iinfo,                            VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_zssssm.c b/runtime/parsec/codelets/codelet_zssssm.c
index 1285a3511f228eb718018e00d50bfa78f6d2ab7b..71998f8fd216fee211113b33a8f5fed14e8ff740 100644
--- a/runtime/parsec/codelets/codelet_zssssm.c
+++ b/runtime/parsec/codelets/codelet_zssssm.c
@@ -24,46 +24,33 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zssssm_parsec(parsec_execution_stream_t *context, parsec_task_t * this_task)
+static inline int
+CORE_zssssm_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m1;
-    int *n1;
-    int *m2;
-    int *n2;
-    int *k;
-    int *ib;
+    int m1;
+    int n1;
+    int m2;
+    int n2;
+    int k;
+    int ib;
     MORSE_Complex64_t *A1;
-    int *lda1;
+    int lda1;
     MORSE_Complex64_t *A2;
-    int *lda2;
+    int lda2;
     MORSE_Complex64_t *L1;
-    int *ldl1;
+    int ldl1;
     MORSE_Complex64_t *L2;
-    int *ldl2;
+    int ldl2;
     int *IPIV;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &m1,
-        UNPACK_VALUE,   &n1,
-        UNPACK_VALUE,   &m2,
-        UNPACK_VALUE,   &n2,
-        UNPACK_VALUE,   &k,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &A1,
-        UNPACK_VALUE,   &lda1,
-        UNPACK_DATA,    &A2,
-        UNPACK_VALUE,   &lda2,
-        UNPACK_DATA,    &L1,
-        UNPACK_VALUE,   &ldl1,
-        UNPACK_DATA,    &L2,
-        UNPACK_VALUE,   &ldl2,
-        UNPACK_SCRATCH, &IPIV );
+        this_task,   &m1,   &n1,   &m2,   &n2,   &k,   &ib, &A1,   &lda1, &A2,   &lda2, &L1,   &ldl1, &L2,   &ldl2, &IPIV );
 
-    CORE_zssssm(*m1, *n1, *m2, *n2, *k, *ib, A1, *lda1, A2, *lda2, L1, *ldl1, L2, *ldl2, IPIV);
+    CORE_zssssm( m1, n1, m2, n2, k, ib, A1, lda1, A2, lda2, L1, ldl1, L2, ldl2, IPIV );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zssssm(const MORSE_option_t *options,
@@ -93,5 +80,5 @@ void MORSE_TASK_zssssm(const MORSE_option_t *options,
         PASSED_BY_REF,         RTBLKADDR( L2, MORSE_Complex64_t, L2m, L2n ),     INPUT,
         sizeof(int),           &ldl2,                              VALUE,
         sizeof(int)*nb,        IPIV,                               SCRATCH,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zsymm.c b/runtime/parsec/codelets/codelet_zsymm.c
index 8d2db549d27eaba5dcec1ce41e728c1876c89601..292ab02efc6499570ba8ba3a88338d9208a474c3 100644
--- a/runtime/parsec/codelets/codelet_zsymm.c
+++ b/runtime/parsec/codelets/codelet_zsymm.c
@@ -24,43 +24,33 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zsymm_parsec(parsec_execution_stream_t *context, parsec_task_t * this_task)
+static inline int
+CORE_zsymm_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *side;
-    MORSE_enum *uplo;
-    int *M;
-    int *N;
-    MORSE_Complex64_t *alpha;
+    MORSE_enum side;
+    MORSE_enum uplo;
+    int M;
+    int N;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
     MORSE_Complex64_t *B;
-    int *LDB;
-    MORSE_Complex64_t *beta;
+    int LDB;
+    MORSE_Complex64_t beta;
     MORSE_Complex64_t *C;
-    int *LDC;
+    int LDC;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &side,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &LDB,
-        UNPACK_VALUE, &beta,
-        UNPACK_DATA,  &C,
-        UNPACK_VALUE, &LDC );
+        this_task, &side, &uplo, &M, &N, &alpha, &A, &LDA, &B, &LDB, &beta, &C, &LDC );
 
-    CORE_zsymm(*side, *uplo, *M, *N,
-                *alpha, A, *LDA,
-                        B, *LDB,
-                *beta,  C, *LDC);
+    CORE_zsymm( side, uplo, M, N,
+                alpha, A, LDA,
+                       B, LDB,
+                beta,  C, LDC);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zsymm(const MORSE_option_t *options,
@@ -86,5 +76,7 @@ void MORSE_TASK_zsymm(const MORSE_option_t *options,
         sizeof(MORSE_Complex64_t),  &beta,          VALUE,
         PASSED_BY_REF,          RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT,
         sizeof(int),            &ldc,               VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_zsyr2k.c b/runtime/parsec/codelets/codelet_zsyr2k.c
index 33d326d37d43674c6cc5fb1a9030d0e4216800d4..16ba727340d4427bdea6d8552100908213980775 100644
--- a/runtime/parsec/codelets/codelet_zsyr2k.c
+++ b/runtime/parsec/codelets/codelet_zsyr2k.c
@@ -24,43 +24,33 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zsyr2k_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zsyr2k_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    MORSE_enum *trans;
-    int *n;
-    int *k;
-    MORSE_Complex64_t *alpha;
+    MORSE_enum uplo;
+    MORSE_enum trans;
+    int n;
+    int k;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex64_t *B;
-    int *ldb;
-    MORSE_Complex64_t *beta;
+    int ldb;
+    MORSE_Complex64_t beta;
     MORSE_Complex64_t *C;
-    int *ldc;
+    int ldc;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &trans,
-        UNPACK_VALUE, &n,
-        UNPACK_VALUE, &k,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &ldb,
-        UNPACK_VALUE, &beta,
-        UNPACK_DATA,  &C,
-        UNPACK_VALUE, &ldc );
+        this_task, &uplo, &trans, &n, &k, &alpha, &A, &lda, &B, &ldb, &beta, &C, &ldc );
 
-    CORE_zsyr2k(*uplo, *trans, *n, *k,
-                *alpha, A, *lda,
-                        B, *ldb,
-                *beta,  C, *ldc);
+    CORE_zsyr2k( uplo, trans, n, k,
+                alpha, A, lda,
+                        B, ldb,
+                beta,  C, ldc);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zsyr2k(const MORSE_option_t *options,
@@ -79,12 +69,14 @@ void MORSE_TASK_zsyr2k(const MORSE_option_t *options,
         sizeof(int),            &n,                     VALUE,
         sizeof(int),            &k,                     VALUE,
         sizeof(MORSE_Complex64_t), &alpha,              VALUE,
-        PASSED_BY_REF,          RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
+        PASSED_BY_REF,          RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | morse_parsec_get_arena_index(A),
         sizeof(int),            &lda,                   VALUE,
-        PASSED_BY_REF,          RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT,
+        PASSED_BY_REF,          RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT | morse_parsec_get_arena_index(B),
         sizeof(int),            &ldb,                   VALUE,
         sizeof(MORSE_Complex64_t), &beta,               VALUE,
-        PASSED_BY_REF,          RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | AFFINITY,
+        PASSED_BY_REF,          RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | morse_parsec_get_arena_index(C) | AFFINITY,
         sizeof(int),            &ldc,                   VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_zsyrk.c b/runtime/parsec/codelets/codelet_zsyrk.c
index 4ff939ef2f1f9b3060a0bea9df1edb98b5901b2f..0d313d8a39cf8aafbf0d631090c8905f1dd31192 100644
--- a/runtime/parsec/codelets/codelet_zsyrk.c
+++ b/runtime/parsec/codelets/codelet_zsyrk.c
@@ -24,38 +24,30 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zsyrk_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zsyrk_parsec( parsec_execution_stream_t *context,
+                   parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    MORSE_enum *trans;
-    int *n;
-    int *k;
-    MORSE_Complex64_t *alpha;
+    MORSE_enum uplo;
+    MORSE_enum trans;
+    int n;
+    int k;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *A;
-    int *lda;
-    MORSE_Complex64_t *beta;
+    int lda;
+    MORSE_Complex64_t beta;
     MORSE_Complex64_t *C;
-    int *ldc;
+    int ldc;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &trans,
-        UNPACK_VALUE, &n,
-        UNPACK_VALUE, &k,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_VALUE, &beta,
-        UNPACK_DATA,  &C,
-        UNPACK_VALUE, &ldc );
+        this_task, &uplo, &trans, &n, &k, &alpha, &A, &lda, &beta, &C, &ldc );
 
-    CORE_zsyrk(*uplo, *trans, *n, *k,
-               *alpha, A, *lda,
-               *beta,  C, *ldc);
+    CORE_zsyrk( uplo, trans, n, k,
+               alpha, A, lda,
+               beta,  C, ldc);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zsyrk(const MORSE_option_t *options,
@@ -73,10 +65,12 @@ void MORSE_TASK_zsyrk(const MORSE_option_t *options,
         sizeof(int),           &n,                                 VALUE,
         sizeof(int),           &k,                                 VALUE,
         sizeof(MORSE_Complex64_t),           &alpha,               VALUE,
-        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
+        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | morse_parsec_get_arena_index(A),
         sizeof(int),           &lda,                               VALUE,
         sizeof(MORSE_Complex64_t),           &beta,                VALUE,
-        PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | AFFINITY,
+        PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | morse_parsec_get_arena_index(C) | AFFINITY,
         sizeof(int),           &ldc,                               VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_zsyssq.c b/runtime/parsec/codelets/codelet_zsyssq.c
index 56c424bc5e42bce23d3d61809af3530391875c5d..0dc91bbb1b2c807fde6f146da860f31b4b5332c5 100644
--- a/runtime/parsec/codelets/codelet_zsyssq.c
+++ b/runtime/parsec/codelets/codelet_zsyssq.c
@@ -24,26 +24,23 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zsyssq_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zsyssq_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    int *n;
+    MORSE_enum uplo;
+    int n;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     double *SCALESUMSQ;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &n,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &SCALESUMSQ );
+        this_task, &uplo, &n, &A, &lda, &SCALESUMSQ );
 
-    CORE_zsyssq( *uplo, *n, A, *lda, &SCALESUMSQ[0], &SCALESUMSQ[1]);
+    CORE_zsyssq( uplo, n, A, lda, &SCALESUMSQ[0], &SCALESUMSQ[1]);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zsyssq( const MORSE_option_t *options,
@@ -60,5 +57,5 @@ void MORSE_TASK_zsyssq( const MORSE_option_t *options,
         PASSED_BY_REF,          RTBLKADDR( A, MORSE_Complex64_t, Am, An ),                               INPUT,
         sizeof(int),            &lda,                   VALUE,
         PASSED_BY_REF,          RTBLKADDR( SCALESUMSQ, double, SCALESUMSQm, SCALESUMSQn ),    INOUT,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zsytrf_nopiv.c b/runtime/parsec/codelets/codelet_zsytrf_nopiv.c
index 229582c8e74131f967380d2d313e62677400a5cb..e28a4d234e6d03a2062fb08c96143e3e6a4a4849 100644
--- a/runtime/parsec/codelets/codelet_zsytrf_nopiv.c
+++ b/runtime/parsec/codelets/codelet_zsytrf_nopiv.c
@@ -24,27 +24,23 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zsytrf_nopiv_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zsytrf_nopiv_parsec( parsec_execution_stream_t *context,
+                          parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    int *n;
+    MORSE_enum uplo;
+    int n;
     MORSE_Complex64_t *A;
-    int *lda;
-    int *iinfo;
-    int info;
+    int lda;
+    int iinfo;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &n,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_VALUE, &iinfo );
+        this_task, &uplo, &n, &A, &lda, &iinfo );
 
-    CORE_zsytf2_nopiv(*uplo, *n, A, *lda);
+    CORE_zsytf2_nopiv( uplo, n, A, lda );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zsytrf_nopiv(const MORSE_option_t *options,
@@ -61,5 +57,7 @@ void MORSE_TASK_zsytrf_nopiv(const MORSE_option_t *options,
         PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT,
         sizeof(int),                     &lda,                 VALUE,
         sizeof(int),                     &iinfo,               VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_ztile_zero.c b/runtime/parsec/codelets/codelet_ztile_zero.c
index 8cce3597bbcb2edddcf673a49d35dafdd7d7d7f3..e55afa236bf6dbd3a5dfb19938f6fd0aad553aab 100644
--- a/runtime/parsec/codelets/codelet_ztile_zero.c
+++ b/runtime/parsec/codelets/codelet_ztile_zero.c
@@ -24,36 +24,32 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztile_zero_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_ztile_zero_parsec( parsec_execution_stream_t *context,
+                        parsec_task_t             *this_task )
 {
-    int *X1;
-    int *X2;
-    int *Y1;
-    int *Y2;
+    int X1;
+    int X2;
+    int Y1;
+    int Y2;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     int x, y;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &X1,
-        UNPACK_VALUE, &X2,
-        UNPACK_VALUE, &Y1,
-        UNPACK_VALUE, &Y2,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda );
+        this_task, &X1, &X2, &Y1, &Y2, &A, &lda );
 
-    for (x = *X1; x < *X2; x++)
-        for (y = *Y1; y < *Y2; y++)
-            A[*lda*x+y] = 0.0;
+    for (x = X1; x < X2; x++)
+        for (y = Y1; y < Y2; y++)
+            A[lda * x + y] = 0.0;
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
-void MORSE_TASK_ztile_zero(const const MORSE_option_t *options,
-                           int X1, int X2, int Y1, int Y2,
-                           const MORSE_desc_t *A, int Am, int An, int lda)
+void MORSE_TASK_ztile_zero( const MORSE_option_t *options,
+                            int X1, int X2, int Y1, int Y2,
+                            const MORSE_desc_t *A, int Am, int An, int lda )
 {
     parsec_taskpool_t* PARSEC_dtd_taskpool = (parsec_taskpool_t *)(options->sequence->schedopt);
 
@@ -65,5 +61,5 @@ void MORSE_TASK_ztile_zero(const const MORSE_option_t *options,
         sizeof(int),       &Y2,                       VALUE,
         PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT,
         sizeof(int),       &lda,                      VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_ztpmqrt.c b/runtime/parsec/codelets/codelet_ztpmqrt.c
index e718cd140f1933f658cce390f96f163aeb463fc5..62fda5c0312ed39c8e50a74298c2a189471adbcb 100644
--- a/runtime/parsec/codelets/codelet_ztpmqrt.c
+++ b/runtime/parsec/codelets/codelet_ztpmqrt.c
@@ -26,50 +26,35 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztpmqrt_parsec(parsec_execution_stream_t    *context,
-                    parsec_task_t *this_task)
+static inline int
+CORE_ztpmqrt_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *side;
-    MORSE_enum *trans;
-    int *M;
-    int *N;
-    int *K;
-    int *L;
-    int *ib;
+    MORSE_enum side;
+    MORSE_enum trans;
+    int M;
+    int N;
+    int K;
+    int L;
+    int ib;
     const MORSE_Complex64_t *V;
-    int *ldv;
+    int ldv;
     const MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex64_t *B;
-    int *ldb;
+    int ldb;
     MORSE_Complex64_t *WORK;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &side,
-        UNPACK_VALUE,   &trans,
-        UNPACK_VALUE,   &M,
-        UNPACK_VALUE,   &N,
-        UNPACK_VALUE,   &K,
-        UNPACK_VALUE,   &L,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &V,
-        UNPACK_VALUE,   &ldv,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_DATA,    &A,
-        UNPACK_VALUE,   &lda,
-        UNPACK_DATA,    &B,
-        UNPACK_VALUE,   &ldb,
-        UNPACK_SCRATCH, &WORK );
+        this_task,   &side,   &trans,   &M,   &N,   &K,   &L,   &ib, &V,   &ldv, &T,   &ldt, &A,   &lda, &B,   &ldb, &WORK );
 
-    CORE_ztpmqrt( *side, *trans, *M, *N, *K, *L, *ib,
-                  V, *ldv, T, *ldt, A, *lda, B, *ldb, WORK );
+    CORE_ztpmqrt( side, trans, M, N, K, L, ib,
+                  V, ldv, T, ldt, A, lda, B, ldb, WORK );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztpmqrt( const MORSE_option_t *options,
@@ -100,5 +85,5 @@ void MORSE_TASK_ztpmqrt( const MORSE_option_t *options,
         PASSED_BY_REF,       RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ), INOUT,
         sizeof(int),        &ldb,   VALUE,
         sizeof(MORSE_Complex64_t)*ib*nb, NULL, SCRATCH,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_ztpqrt.c b/runtime/parsec/codelets/codelet_ztpqrt.c
index 9cd3fb736e0a446d6dad2362f5c09553749d5bd9..e60b1ef5a89ba57c870e3fe9c7ca8f34b8ddec88 100644
--- a/runtime/parsec/codelets/codelet_ztpqrt.c
+++ b/runtime/parsec/codelets/codelet_ztpqrt.c
@@ -26,40 +26,30 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztpqrt_parsec(parsec_execution_stream_t    *context,
-                   parsec_task_t *this_task)
+static inline int
+CORE_ztpqrt_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *M;
-    int *N;
-    int *L;
-    int *ib;
+    int M;
+    int N;
+    int L;
+    int ib;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex64_t *B;
-    int *ldb;
+    int ldb;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *WORK;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &M,
-        UNPACK_VALUE,   &N,
-        UNPACK_VALUE,   &L,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &A,
-        UNPACK_VALUE,   &lda,
-        UNPACK_DATA,    &B,
-        UNPACK_VALUE,   &ldb,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_SCRATCH, &WORK );
+        this_task,   &M,   &N,   &L,   &ib, &A,   &lda, &B,   &ldb, &T,   &ldt, &WORK );
 
-    CORE_ztpqrt( *M, *N, *L, *ib,
-                 A, *lda, B, *ldb, T, *ldt, WORK );
+    CORE_ztpqrt( M, N, L, ib,
+                 A, lda, B, ldb, T, ldt, WORK );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztpqrt( const MORSE_option_t *options,
@@ -83,5 +73,5 @@ void MORSE_TASK_ztpqrt( const MORSE_option_t *options,
         PASSED_BY_REF,  RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ), OUTPUT,
         sizeof(int),   &ldt, VALUE,
         sizeof(MORSE_Complex64_t)*ib*nb, NULL, SCRATCH,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_ztradd.c b/runtime/parsec/codelets/codelet_ztradd.c
index a9083f43d71866f41f46b1f6629537302bbe00d6..29b6cb93294a17d4e32c0c668979089aaba7e057 100644
--- a/runtime/parsec/codelets/codelet_ztradd.c
+++ b/runtime/parsec/codelets/codelet_ztradd.c
@@ -28,36 +28,28 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztradd_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_ztradd_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    MORSE_enum *trans;
-    int *M;
-    int *N;
-    MORSE_Complex64_t *alpha;
+    MORSE_enum uplo;
+    MORSE_enum trans;
+    int M;
+    int N;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *A;
-    int *LDA;
-    MORSE_Complex64_t *beta;
+    int LDA;
+    MORSE_Complex64_t beta;
     MORSE_Complex64_t *B;
-    int *LDB;
+    int LDB;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &trans,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA,
-        UNPACK_VALUE, &beta,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &LDB );
+        this_task, &uplo, &trans, &M, &N, &alpha, &A, &LDA, &beta, &B, &LDB );
 
-    CORE_ztradd(*uplo, *trans, *M, *N, *alpha, A, *LDA, *beta, B, *LDB);
+    CORE_ztradd( uplo, trans, M, N, alpha, A, LDA, beta, B, LDB );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 /**
@@ -139,5 +131,7 @@ void MORSE_TASK_ztradd(const MORSE_option_t *options,
         sizeof(MORSE_Complex64_t), &beta,  VALUE,
         PASSED_BY_REF,              RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT,
         sizeof(int),               &ldb,   VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_ztrasm.c b/runtime/parsec/codelets/codelet_ztrasm.c
index 375abb2d2009a0db2e011f0e03d42c110c3765d3..3ca5dcf2eaa935bc56038775237f696937ed74a6 100644
--- a/runtime/parsec/codelets/codelet_ztrasm.c
+++ b/runtime/parsec/codelets/codelet_ztrasm.c
@@ -24,32 +24,26 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztrasm_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_ztrasm_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *storev;
-    MORSE_enum *uplo;
-    MORSE_enum *diag;
-    int *M;
-    int *N;
+    MORSE_enum storev;
+    MORSE_enum uplo;
+    MORSE_enum diag;
+    int M;
+    int N;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     double *work;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &storev,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &diag,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &work );
+        this_task, &storev, &uplo, &diag, &M, &N, &A, &lda, &work );
 
-    CORE_ztrasm(*storev, *uplo, *diag, *M, *N, A, *lda, work);
+    CORE_ztrasm( storev, uplo, diag, M, N, A, lda, work );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztrasm(const MORSE_option_t *options,
@@ -69,5 +63,5 @@ void MORSE_TASK_ztrasm(const MORSE_option_t *options,
         PASSED_BY_REF,          RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
         sizeof(int),            &lda,                   VALUE,
         PASSED_BY_REF,          RTBLKADDR( B, double, Bm, Bn ),     INOUT,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_ztrmm.c b/runtime/parsec/codelets/codelet_ztrmm.c
index fa2787109872de445d4cef98511a1fb401ec24c4..ce0608f4895e380a5bcdbd3656f98d257eb647e9 100644
--- a/runtime/parsec/codelets/codelet_ztrmm.c
+++ b/runtime/parsec/codelets/codelet_ztrmm.c
@@ -24,42 +24,33 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztrmm_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_ztrmm_parsec( parsec_execution_stream_t *context,
+                   parsec_task_t             *this_task )
 {
-    MORSE_enum *side;
-    MORSE_enum *uplo;
-    MORSE_enum *transA;
-    MORSE_enum *diag;
-    int *M;
-    int *N;
-    MORSE_Complex64_t *alpha;
+    MORSE_enum side;
+    MORSE_enum uplo;
+    MORSE_enum transA;
+    MORSE_enum diag;
+    int M;
+    int N;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *A;
-    int *LDA;
+    int LDA;
     MORSE_Complex64_t *B;
-    int *LDB;
+    int LDB;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &side,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &transA,
-        UNPACK_VALUE, &diag,
-        UNPACK_VALUE, &M,
-        UNPACK_VALUE, &N,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA,
-        UNPACK_DATA,  &B,
-        UNPACK_VALUE, &LDB );
+        this_task, &side, &uplo, &transA, &diag, &M, &N, &alpha, &A, &LDA, &B, &LDB );
 
-    CORE_ztrmm(*side, *uplo,
-        *transA, *diag,
-        *M, *N,
-        *alpha, A, *LDA,
-        B, *LDB);
+    CORE_ztrmm( side, uplo,
+        transA, diag,
+        M, N,
+        alpha, A, LDA,
+        B, LDB);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztrmm(const MORSE_option_t *options,
@@ -83,5 +74,7 @@ void MORSE_TASK_ztrmm(const MORSE_option_t *options,
         sizeof(int),            &lda,                   VALUE,
         PASSED_BY_REF,          RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT,
         sizeof(int),            &ldb,                   VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_ztrsm.c b/runtime/parsec/codelets/codelet_ztrsm.c
index 08520db9ac51cbf5bf07a4ff3c09343c6e87b344..deaace6bd211bb7dad9937ee594f989e6b6a006b 100644
--- a/runtime/parsec/codelets/codelet_ztrsm.c
+++ b/runtime/parsec/codelets/codelet_ztrsm.c
@@ -24,34 +24,25 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztrsm_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_ztrsm_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *side, *uplo, *trans, *diag;
-    int  *tempmm, *nb, *ldak, *ldam;
-    MORSE_Complex64_t *alpha;
+    MORSE_enum side, uplo, trans, diag;
+    int tempmm, nb, ldak, ldam;
+    MORSE_Complex64_t alpha;
     MORSE_Complex64_t *T;
     MORSE_Complex64_t *C;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &side,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &trans,
-        UNPACK_VALUE, &diag,
-        UNPACK_VALUE, &tempmm,
-        UNPACK_VALUE, &nb,
-        UNPACK_VALUE, &alpha,
-        UNPACK_DATA,  &T,
-        UNPACK_VALUE, &ldak,
-        UNPACK_DATA,  &C,
-        UNPACK_VALUE, &ldam );
+        this_task, &side, &uplo, &trans, &diag, &tempmm, &nb, &alpha, &T, &ldak, &C, &ldam );
 
-    CORE_ztrsm(*side, *uplo, *trans, *diag,
-           *tempmm, *nb, *alpha, T, *ldak,
-           C, *ldam);
+    CORE_ztrsm( side, uplo, trans, diag,
+                tempmm, nb, alpha,
+                T, ldak, C, ldam );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztrsm(const MORSE_option_t *options,
@@ -71,9 +62,11 @@ void MORSE_TASK_ztrsm(const MORSE_option_t *options,
         sizeof(int),           &m,                        VALUE,
         sizeof(int),           &n,                        VALUE,
         sizeof(MORSE_Complex64_t),           &alpha,      VALUE,
-        PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
+        PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | morse_parsec_get_arena_index(A),
         sizeof(int),           &lda,                      VALUE,
-        PASSED_BY_REF,     RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT | AFFINITY,
+        PASSED_BY_REF,     RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT | morse_parsec_get_arena_index(A) | AFFINITY,
         sizeof(int),           &ldb,                      VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_ztrssq.c b/runtime/parsec/codelets/codelet_ztrssq.c
index 6cef470bdb9193efd8c9ea1aba28514baf44d0eb..66c57d747ef1423d5248d43bdc3bc5bde17fe5d7 100644
--- a/runtime/parsec/codelets/codelet_ztrssq.c
+++ b/runtime/parsec/codelets/codelet_ztrssq.c
@@ -24,30 +24,25 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztrssq_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_ztrssq_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    MORSE_enum *diag;
-    int *m;
-    int *n;
+    MORSE_enum uplo;
+    MORSE_enum diag;
+    int m;
+    int n;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     double *SCALESUMSQ;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &diag,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &lda,
-        UNPACK_DATA,  &SCALESUMSQ );
+        this_task, &uplo, &diag, &m, &n, &A, &lda, &SCALESUMSQ );
 
-    CORE_ztrssq( *uplo, *diag, *m, *n, A, *lda, &SCALESUMSQ[0], &SCALESUMSQ[1]);
+    CORE_ztrssq( uplo, diag, m, n, A, lda, &SCALESUMSQ[0], &SCALESUMSQ[1]);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztrssq( const MORSE_option_t *options,
@@ -67,5 +62,5 @@ void MORSE_TASK_ztrssq( const MORSE_option_t *options,
         PASSED_BY_REF,          RTBLKADDR( A, MORSE_Complex64_t, Am, An ),                    INPUT,
         sizeof(int),            &lda,                   VALUE,
         PASSED_BY_REF,          RTBLKADDR( SCALESUMSQ, double, SCALESUMSQm, SCALESUMSQn ),    INOUT,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_ztrtri.c b/runtime/parsec/codelets/codelet_ztrtri.c
index 34b2c2d58dcdf18e3cdefccfc651ec56f1e2a49f..cd14186ba97a9fe0b80d8ab7539adea4e31f1403 100644
--- a/runtime/parsec/codelets/codelet_ztrtri.c
+++ b/runtime/parsec/codelets/codelet_ztrtri.c
@@ -24,36 +24,32 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztrtri_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_ztrtri_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *uplo;
-    MORSE_enum *diag;
-    int *N;
+    MORSE_enum uplo;
+    MORSE_enum diag;
+    int N;
     MORSE_Complex64_t *A;
-    int *LDA;
-    int *iinfo;
+    int LDA;
+    int iinfo;
     int info;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &uplo,
-        UNPACK_VALUE, &diag,
-        UNPACK_VALUE, &N,
-        UNPACK_DATA,  &A,
-        UNPACK_VALUE, &LDA,
-        UNPACK_VALUE, &iinfo );
+        this_task, &uplo, &diag, &N, &A, &LDA, &iinfo );
 
-    CORE_ztrtri(*uplo, *diag, *N, A, *LDA, &info);
+    CORE_ztrtri( uplo, diag, N, A, LDA, &info );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
-void MORSE_TASK_ztrtri(const MORSE_option_t *options,
-                       MORSE_enum uplo, MORSE_enum diag,
-                       int n, int nb,
-                       const MORSE_desc_t *A, int Am, int An, int lda,
-                       int iinfo)
+void MORSE_TASK_ztrtri( const MORSE_option_t *options,
+                        MORSE_enum uplo, MORSE_enum diag,
+                        int n, int nb,
+                        const MORSE_desc_t *A, int Am, int An, int lda,
+                        int iinfo )
 {
     parsec_taskpool_t* PARSEC_dtd_taskpool = (parsec_taskpool_t *)(options->sequence->schedopt);
 
@@ -65,5 +61,7 @@ void MORSE_TASK_ztrtri(const MORSE_option_t *options,
         PASSED_BY_REF,              RTBLKADDR( A, MORSE_Complex64_t, Am, An ),   INOUT,
         sizeof(int),                &lda,                   VALUE,
         sizeof(int),                &iinfo,                 VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
+
+    (void)nb;
 }
diff --git a/runtime/parsec/codelets/codelet_ztslqt.c b/runtime/parsec/codelets/codelet_ztslqt.c
index 67587b73e1a5024e145e56cac62719345dd8a43f..3bb06310d6889868a48e5d1df5b37ce64a15a17b 100644
--- a/runtime/parsec/codelets/codelet_ztslqt.c
+++ b/runtime/parsec/codelets/codelet_ztslqt.c
@@ -24,38 +24,29 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztslqt_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_ztslqt_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
-    int *ib;
+    int m;
+    int n;
+    int ib;
     MORSE_Complex64_t *A1;
-    int *lda1;
+    int lda1;
     MORSE_Complex64_t *A2;
-    int *lda2;
+    int lda2;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *TAU;
     MORSE_Complex64_t *WORK;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_VALUE, &ib,
-        UNPACK_DATA,  &A1,
-        UNPACK_VALUE, &lda1,
-        UNPACK_DATA,  &A2,
-        UNPACK_VALUE, &lda2,
-        UNPACK_DATA,  &T,
-        UNPACK_VALUE, &ldt,
-        UNPACK_SCRATCH, &TAU,
-        UNPACK_SCRATCH, &WORK );
+        this_task, &m, &n, &ib, &A1, &lda1, &A2, &lda2, &T, &ldt, &TAU, &WORK );
 
-    CORE_ztslqt(*m, *n, *ib, A1, *lda1, A2, *lda2, T, *ldt, TAU, WORK);
+    CORE_ztslqt( m, n, ib, A1, lda1, A2, lda2, T, ldt, TAU, WORK );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztslqt(const MORSE_option_t *options,
@@ -79,5 +70,5 @@ void MORSE_TASK_ztslqt(const MORSE_option_t *options,
         sizeof(int),                        &ldt,       VALUE,
         sizeof(MORSE_Complex64_t)*nb,       NULL,       SCRATCH,
         sizeof(MORSE_Complex64_t)*ib*nb,    NULL,       SCRATCH,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_ztsmlq.c b/runtime/parsec/codelets/codelet_ztsmlq.c
index 57a596dfaa9564647d60bf9ce033fe1259491cc3..4335db82909643e0bc1f30d81fe253ccf594740d 100644
--- a/runtime/parsec/codelets/codelet_ztsmlq.c
+++ b/runtime/parsec/codelets/codelet_ztsmlq.c
@@ -24,53 +24,37 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztsmlq_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_ztsmlq_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *side;
-    MORSE_enum *trans;
-    int *m1;
-    int *n1;
-    int *m2;
-    int *n2;
-    int *k;
-    int *ib;
+    MORSE_enum side;
+    MORSE_enum trans;
+    int m1;
+    int n1;
+    int m2;
+    int n2;
+    int k;
+    int ib;
     MORSE_Complex64_t *A1;
-    int *lda1;
+    int lda1;
     MORSE_Complex64_t *A2;
-    int *lda2;
+    int lda2;
     MORSE_Complex64_t *V;
-    int *ldv;
+    int ldv;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *WORK;
-    int *ldwork;
+    int ldwork;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &side,
-        UNPACK_VALUE,   &trans,
-        UNPACK_VALUE,   &m1,
-        UNPACK_VALUE,   &n1,
-        UNPACK_VALUE,   &m2,
-        UNPACK_VALUE,   &n2,
-        UNPACK_VALUE,   &k,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &A1,
-        UNPACK_VALUE,   &lda1,
-        UNPACK_DATA,    &A2,
-        UNPACK_VALUE,   &lda2,
-        UNPACK_DATA,    &V,
-        UNPACK_VALUE,   &ldv,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_SCRATCH, &WORK,
-        UNPACK_VALUE,   &ldwork );
+        this_task,   &side,   &trans,   &m1,   &n1,   &m2,   &n2,   &k,   &ib, &A1,   &lda1, &A2,   &lda2, &V,   &ldv, &T,   &ldt, &WORK,   &ldwork );
 
-    CORE_ztsmlq(*side, *trans, *m1, *n1, *m2, *n2, *k, *ib,
-                A1, *lda1, A2, *lda2, V, *ldv, T, *ldt, WORK, *ldwork);
+    CORE_ztsmlq( side, trans, m1, n1, m2, n2, k, ib,
+                A1, lda1, A2, lda2, V, ldv, T, ldt, WORK, ldwork);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztsmlq(const MORSE_option_t *options,
@@ -105,5 +89,5 @@ void MORSE_TASK_ztsmlq(const MORSE_option_t *options,
         sizeof(int),           &ldt,                    VALUE,
         sizeof(MORSE_Complex64_t)*ib*nb,    NULL,       SCRATCH,
         sizeof(int),           &ldwork,                 VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_ztsmlq_hetra1.c b/runtime/parsec/codelets/codelet_ztsmlq_hetra1.c
index 13fe37a0b2499744f2b5b3d6a5f9c60788ca326e..f60300f8f83bf04c8bea08b7e8ebb3392de494c0 100644
--- a/runtime/parsec/codelets/codelet_ztsmlq_hetra1.c
+++ b/runtime/parsec/codelets/codelet_ztsmlq_hetra1.c
@@ -30,53 +30,38 @@
 #include "coreblas/coreblas_z.h"
 
 static inline int
-CORE_ztsmlq_hetra1_parsec(parsec_execution_stream_t    *context,
-                          parsec_task_t *this_task)
+CORE_ztsmlq_hetra1_parsec( parsec_execution_stream_t *context,
+                           parsec_task_t             *this_task )
 {
-    MORSE_enum *side;
-    MORSE_enum *trans;
-    int *m1;
-    int *n1;
-    int *m2;
-    int *n2;
-    int *k;
-    int *ib;
+    MORSE_enum side;
+    MORSE_enum trans;
+    int m1;
+    int n1;
+    int m2;
+    int n2;
+    int k;
+    int ib;
     MORSE_Complex64_t *A1;
-    int *lda1;
+    int lda1;
     MORSE_Complex64_t *A2;
-    int *lda2;
+    int lda2;
     MORSE_Complex64_t *V;
-    int *ldv;
+    int ldv;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *WORK;
-    int *ldwork;
+    int ldwork;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &side,
-        UNPACK_VALUE,   &trans,
-        UNPACK_VALUE,   &m1,
-        UNPACK_VALUE,   &n1,
-        UNPACK_VALUE,   &m2,
-        UNPACK_VALUE,   &n2,
-        UNPACK_VALUE,   &k,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &A1,
-        UNPACK_VALUE,   &lda1,
-        UNPACK_DATA,    &A2,
-        UNPACK_VALUE,   &lda2,
-        UNPACK_DATA,    &V,
-        UNPACK_VALUE,   &ldv,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_SCRATCH, &WORK,
-        UNPACK_VALUE,   &ldwork);
+        this_task,   &side,   &trans,   &m1,   &n1,   &m2,   &n2,   &k,   &ib, &A1,   &lda1, &A2,   &lda2, &V,   &ldv, &T,   &ldt, &WORK,   &ldwork);
 
-    CORE_ztsmlq_hetra1(*side, *trans, *m1, *n1, *m2, *n2, *k, *ib,
-                       A1, *lda1, A2, *lda2,
-                       V, *ldv, T, *ldt,
-                       WORK, *ldwork);
+    CORE_ztsmlq_hetra1( side, trans, m1, n1, m2, n2, k, ib,
+                       A1, lda1, A2, lda2,
+                       V, ldv, T, ldt,
+                       WORK, ldwork);
+
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztsmlq_hetra1(const MORSE_option_t *options,
@@ -110,5 +95,5 @@ void MORSE_TASK_ztsmlq_hetra1(const MORSE_option_t *options,
         sizeof(int),        &ldt,    VALUE,
         sizeof(MORSE_Complex64_t)*ib*nb, NULL, SCRATCH,
         sizeof(int),        &ldwork, VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_ztsmqr.c b/runtime/parsec/codelets/codelet_ztsmqr.c
index f6edb0f5fb16ce00482d08ce683f796f1e2ef500..a0beb9f8bb6b83625edd519e2b8bcb625bcb83c3 100644
--- a/runtime/parsec/codelets/codelet_ztsmqr.c
+++ b/runtime/parsec/codelets/codelet_ztsmqr.c
@@ -24,53 +24,37 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztsmqr_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_ztsmqr_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *side;
-    MORSE_enum *trans;
-    int *m1;
-    int *n1;
-    int *m2;
-    int *n2;
-    int *k;
-    int *ib;
+    MORSE_enum side;
+    MORSE_enum trans;
+    int m1;
+    int n1;
+    int m2;
+    int n2;
+    int k;
+    int ib;
     MORSE_Complex64_t *A1;
-    int *lda1;
+    int lda1;
     MORSE_Complex64_t *A2;
-    int *lda2;
+    int lda2;
     MORSE_Complex64_t *V;
-    int *ldv;
+    int ldv;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *WORK;
-    int *ldwork;
+    int ldwork;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &side,
-        UNPACK_VALUE,   &trans,
-        UNPACK_VALUE,   &m1,
-        UNPACK_VALUE,   &n1,
-        UNPACK_VALUE,   &m2,
-        UNPACK_VALUE,   &n2,
-        UNPACK_VALUE,   &k,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &A1,
-        UNPACK_VALUE,   &lda1,
-        UNPACK_DATA,    &A2,
-        UNPACK_VALUE,   &lda2,
-        UNPACK_DATA,    &V,
-        UNPACK_VALUE,   &ldv,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_SCRATCH, &WORK,
-        UNPACK_VALUE,   &ldwork );
+        this_task,   &side,   &trans,   &m1,   &n1,   &m2,   &n2,   &k,   &ib, &A1,   &lda1, &A2,   &lda2, &V,   &ldv, &T,   &ldt, &WORK,   &ldwork );
 
-    CORE_ztsmqr(*side, *trans, *m1, *n1, *m2, *n2, *k, *ib,
-                A1, *lda1, A2, *lda2, V, *ldv, T, *ldt, WORK, *ldwork);
+    CORE_ztsmqr( side, trans, m1, n1, m2, n2, k, ib,
+                A1, lda1, A2, lda2, V, ldv, T, ldt, WORK, ldwork);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztsmqr(const MORSE_option_t *options,
@@ -105,5 +89,5 @@ void MORSE_TASK_ztsmqr(const MORSE_option_t *options,
         sizeof(int),           &ldt,                               VALUE,
         sizeof(MORSE_Complex64_t)*ib*nb,    NULL,                  SCRATCH,
         sizeof(int),           &ldwork,                            VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_ztsmqr_hetra1.c b/runtime/parsec/codelets/codelet_ztsmqr_hetra1.c
index 9fe6acb6a2dbd3bb9070ad1256201dca1db877ec..0a83e4b58bae9fc49da5512ae143bd70833a9170 100644
--- a/runtime/parsec/codelets/codelet_ztsmqr_hetra1.c
+++ b/runtime/parsec/codelets/codelet_ztsmqr_hetra1.c
@@ -30,53 +30,38 @@
 #include "coreblas/coreblas_z.h"
 
 static inline int
-CORE_ztsmqr_hetra1_parsec(parsec_execution_stream_t    *context,
-                          parsec_task_t *this_task)
+CORE_ztsmqr_hetra1_parsec( parsec_execution_stream_t *context,
+                           parsec_task_t             *this_task )
 {
-    MORSE_enum *side;
-    MORSE_enum *trans;
-    int *m1;
-    int *n1;
-    int *m2;
-    int *n2;
-    int *k;
-    int *ib;
+    MORSE_enum side;
+    MORSE_enum trans;
+    int m1;
+    int n1;
+    int m2;
+    int n2;
+    int k;
+    int ib;
     MORSE_Complex64_t *A1;
-    int *lda1;
+    int lda1;
     MORSE_Complex64_t *A2;
-    int *lda2;
+    int lda2;
     MORSE_Complex64_t *V;
-    int *ldv;
+    int ldv;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *WORK;
-    int *ldwork;
+    int ldwork;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &side,
-        UNPACK_VALUE,   &trans,
-        UNPACK_VALUE,   &m1,
-        UNPACK_VALUE,   &n1,
-        UNPACK_VALUE,   &m2,
-        UNPACK_VALUE,   &n2,
-        UNPACK_VALUE,   &k,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &A1,
-        UNPACK_VALUE,   &lda1,
-        UNPACK_DATA,    &A2,
-        UNPACK_VALUE,   &lda2,
-        UNPACK_DATA,    &V,
-        UNPACK_VALUE,   &ldv,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_SCRATCH, &WORK,
-        UNPACK_VALUE,   &ldwork);
+        this_task,   &side,   &trans,   &m1,   &n1,   &m2,   &n2,   &k,   &ib, &A1,   &lda1, &A2,   &lda2, &V,   &ldv, &T,   &ldt, &WORK,   &ldwork);
 
-    CORE_ztsmqr_hetra1(*side, *trans, *m1, *n1, *m2, *n2, *k, *ib,
-                       A1, *lda1, A2, *lda2,
-                       V, *ldv, T, *ldt,
-                       WORK, *ldwork);
+    CORE_ztsmqr_hetra1( side, trans, m1, n1, m2, n2, k, ib,
+                       A1, lda1, A2, lda2,
+                       V, ldv, T, ldt,
+                       WORK, ldwork);
+
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztsmqr_hetra1(const MORSE_option_t *options,
@@ -110,5 +95,5 @@ void MORSE_TASK_ztsmqr_hetra1(const MORSE_option_t *options,
         sizeof(int),        &ldt,    VALUE,
         sizeof(MORSE_Complex64_t)*ib*nb, NULL, SCRATCH,
         sizeof(int),        &ldwork, VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_ztsqrt.c b/runtime/parsec/codelets/codelet_ztsqrt.c
index 19ce9c24444d52a094e67cbcb51b21c5523a558b..e4c9830995a6460689cdfa5108f4f58b5162a7e4 100644
--- a/runtime/parsec/codelets/codelet_ztsqrt.c
+++ b/runtime/parsec/codelets/codelet_ztsqrt.c
@@ -24,38 +24,29 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztsqrt_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_ztsqrt_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
-    int *ib;
+    int m;
+    int n;
+    int ib;
     MORSE_Complex64_t *A1;
-    int *lda1;
+    int lda1;
     MORSE_Complex64_t *A2;
-    int *lda2;
+    int lda2;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *TAU;
     MORSE_Complex64_t *WORK;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE, &m,
-        UNPACK_VALUE, &n,
-        UNPACK_VALUE, &ib,
-        UNPACK_DATA,  &A1,
-        UNPACK_VALUE, &lda1,
-        UNPACK_DATA,  &A2,
-        UNPACK_VALUE, &lda2,
-        UNPACK_DATA,  &T,
-        UNPACK_VALUE, &ldt,
-        UNPACK_SCRATCH, &TAU,
-        UNPACK_SCRATCH, &WORK );
+        this_task, &m, &n, &ib, &A1, &lda1, &A2, &lda2, &T, &ldt, &TAU, &WORK );
 
-    CORE_ztsqrt(*m, *n, *ib, A1, *lda1, A2, *lda2, T, *ldt, TAU, WORK);
+    CORE_ztsqrt( m, n, ib, A1, lda1, A2, lda2, T, ldt, TAU, WORK );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztsqrt(const MORSE_option_t *options,
@@ -79,5 +70,5 @@ void MORSE_TASK_ztsqrt(const MORSE_option_t *options,
         sizeof(int),           &ldt,                               VALUE,
         sizeof(MORSE_Complex64_t)*nb,       NULL,                  SCRATCH,
         sizeof(MORSE_Complex64_t)*ib*nb,    NULL,                  SCRATCH,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_ztstrf.c b/runtime/parsec/codelets/codelet_ztstrf.c
index 69504ff4278620d586140844beeb5fcfcf499803..7dd96544d820f25a6b8a5889cfaf9f1f4225b1e7 100644
--- a/runtime/parsec/codelets/codelet_ztstrf.c
+++ b/runtime/parsec/codelets/codelet_ztstrf.c
@@ -24,48 +24,35 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_ztstrf_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_ztstrf_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
-    int *ib;
-    int *nb;
+    int m;
+    int n;
+    int ib;
+    int nb;
     MORSE_Complex64_t *U;
-    int *ldu;
+    int ldu;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex64_t *L;
-    int *ldl;
+    int ldl;
     int *IPIV;
     MORSE_Complex64_t *WORK;
-    int *ldwork;
+    int ldwork;
     MORSE_bool *check_info;
-    int *iinfo;
+    int iinfo;
 
     int info;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &m,
-        UNPACK_VALUE,   &n,
-        UNPACK_VALUE,   &ib,
-        UNPACK_VALUE,   &nb,
-        UNPACK_DATA,    &U,
-        UNPACK_VALUE,   &ldu,
-        UNPACK_DATA,    &A,
-        UNPACK_VALUE,   &lda,
-        UNPACK_DATA,    &L,
-        UNPACK_VALUE,   &ldl,
-        UNPACK_SCRATCH, &IPIV,
-        UNPACK_SCRATCH, &WORK,
-        UNPACK_VALUE,   &ldwork,
-        UNPACK_VALUE,   &check_info,
-        UNPACK_VALUE,   &iinfo );
+        this_task,   &m,   &n,   &ib,   &nb, &U,   &ldu, &A,   &lda, &L,   &ldl, &IPIV, &WORK,   &ldwork,   &check_info,   &iinfo );
 
-    CORE_ztstrf(*m, *n, *ib, *nb, U, *ldu, A, *lda, L, *ldl, IPIV, WORK, *ldwork, &info);
+    CORE_ztstrf( m, n, ib, nb, U, ldu, A, lda, L, ldl, IPIV, WORK, ldwork, &info );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_ztstrf(const MORSE_option_t *options,
@@ -95,5 +82,5 @@ void MORSE_TASK_ztstrf(const MORSE_option_t *options,
         sizeof(int),           &nb,                               VALUE,
         sizeof(int),           &check_info,                       VALUE,
         sizeof(int),           &iinfo,                            VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zttlqt.c b/runtime/parsec/codelets/codelet_zttlqt.c
index 67f6b7105a074379b54766d6258ec50a41c0a7f8..ec4d4bb24166e93bcebdaa6446e2978c3b7d1d67 100644
--- a/runtime/parsec/codelets/codelet_zttlqt.c
+++ b/runtime/parsec/codelets/codelet_zttlqt.c
@@ -24,38 +24,29 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zttlqt_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zttlqt_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
-    int *ib;
+    int m;
+    int n;
+    int ib;
     MORSE_Complex64_t *A1;
-    int *lda1;
+    int lda1;
     MORSE_Complex64_t *A2;
-    int *lda2;
+    int lda2;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *TAU;
     MORSE_Complex64_t *WORK;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &m,
-        UNPACK_VALUE,   &n,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &A1,
-        UNPACK_VALUE,   &lda1,
-        UNPACK_DATA,    &A2,
-        UNPACK_VALUE,   &lda2,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_SCRATCH, &TAU,
-        UNPACK_SCRATCH, &WORK );
+        this_task,   &m,   &n,   &ib, &A1,   &lda1, &A2,   &lda2, &T,   &ldt, &TAU, &WORK );
 
-    CORE_zttlqt(*m, *n, *ib, A1, *lda1, A2, *lda2, T, *ldt, TAU, WORK);
+    CORE_zttlqt( m, n, ib, A1, lda1, A2, lda2, T, ldt, TAU, WORK );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zttlqt(const MORSE_option_t *options,
@@ -80,5 +71,5 @@ void MORSE_TASK_zttlqt(const MORSE_option_t *options,
         sizeof(int),            &ldt,                   VALUE,
         sizeof(MORSE_Complex64_t)*nb,       NULL,       SCRATCH,
         sizeof(MORSE_Complex64_t)*ib*nb,    NULL,       SCRATCH,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zttmlq.c b/runtime/parsec/codelets/codelet_zttmlq.c
index 53c6f379dee8b518d08dd2a7ccc1371099279d73..430f594b2be0f4c8746b97fdb6b0793972e36e21 100644
--- a/runtime/parsec/codelets/codelet_zttmlq.c
+++ b/runtime/parsec/codelets/codelet_zttmlq.c
@@ -24,53 +24,37 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zttmlq_parsec(parsec_execution_stream_t *context, parsec_task_t * this_task)
+static inline int
+CORE_zttmlq_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *side;
-    MORSE_enum *trans;
-    int *m1;
-    int *n1;
-    int *m2;
-    int *n2;
-    int *k;
-    int *ib;
+    MORSE_enum side;
+    MORSE_enum trans;
+    int m1;
+    int n1;
+    int m2;
+    int n2;
+    int k;
+    int ib;
     MORSE_Complex64_t *A1;
-    int *lda1;
+    int lda1;
     MORSE_Complex64_t *A2;
-    int *lda2;
+    int lda2;
     MORSE_Complex64_t *V;
-    int *ldv;
+    int ldv;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *WORK;
-    int *ldwork;
+    int ldwork;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &side,
-        UNPACK_VALUE,   &trans,
-        UNPACK_VALUE,   &m1,
-        UNPACK_VALUE,   &n1,
-        UNPACK_VALUE,   &m2,
-        UNPACK_VALUE,   &n2,
-        UNPACK_VALUE,   &k,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &A1,
-        UNPACK_VALUE,   &lda1,
-        UNPACK_DATA,    &A2,
-        UNPACK_VALUE,   &lda2,
-        UNPACK_DATA,    &V,
-        UNPACK_VALUE,   &ldv,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_SCRATCH, &WORK,
-        UNPACK_VALUE,   &ldwork );
+        this_task,   &side,   &trans,   &m1,   &n1,   &m2,   &n2,   &k,   &ib, &A1,   &lda1, &A2,   &lda2, &V,   &ldv, &T,   &ldt, &WORK,   &ldwork );
 
-    CORE_zttmlq(*side, *trans, *m1, *n1, *m2, *n2, *k, *ib, A1, *lda1,
-                A2, *lda2, V, *ldv, T, *ldt, WORK, *ldwork);
+    CORE_zttmlq( side, trans, m1, n1, m2, n2, k, ib, A1, lda1,
+                A2, lda2, V, ldv, T, ldt, WORK, ldwork);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zttmlq(const MORSE_option_t *options,
@@ -105,5 +89,5 @@ void MORSE_TASK_zttmlq(const MORSE_option_t *options,
         sizeof(int),            &ldt,                       VALUE,
         sizeof(MORSE_Complex64_t)*ib*nb,    NULL,           SCRATCH,
         sizeof(int),            &ldwork,                    VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zttmqr.c b/runtime/parsec/codelets/codelet_zttmqr.c
index 70bde8c14c6a399d43d15403fb761a90c29292b3..578107bcbbe57d5a57324ed3abecb2ebe367ff61 100644
--- a/runtime/parsec/codelets/codelet_zttmqr.c
+++ b/runtime/parsec/codelets/codelet_zttmqr.c
@@ -24,53 +24,37 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zttmqr_parsec(parsec_execution_stream_t *context, parsec_task_t * this_task)
+static inline int
+CORE_zttmqr_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *side;
-    MORSE_enum *trans;
-    int *m1;
-    int *n1;
-    int *m2;
-    int *n2;
-    int *k;
-    int *ib;
+    MORSE_enum side;
+    MORSE_enum trans;
+    int m1;
+    int n1;
+    int m2;
+    int n2;
+    int k;
+    int ib;
     MORSE_Complex64_t *A1;
-    int *lda1;
+    int lda1;
     MORSE_Complex64_t *A2;
-    int *lda2;
+    int lda2;
     MORSE_Complex64_t *V;
-    int *ldv;
+    int ldv;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *WORK;
-    int *ldwork;
+    int ldwork;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &side,
-        UNPACK_VALUE,   &trans,
-        UNPACK_VALUE,   &m1,
-        UNPACK_VALUE,   &n1,
-        UNPACK_VALUE,   &m2,
-        UNPACK_VALUE,   &n2,
-        UNPACK_VALUE,   &k,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &A1,
-        UNPACK_VALUE,   &lda1,
-        UNPACK_DATA,    &A2,
-        UNPACK_VALUE,   &lda2,
-        UNPACK_DATA,    &V,
-        UNPACK_VALUE,   &ldv,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_SCRATCH, &WORK,
-        UNPACK_VALUE,   &ldwork );
+        this_task,   &side,   &trans,   &m1,   &n1,   &m2,   &n2,   &k,   &ib, &A1,   &lda1, &A2,   &lda2, &V,   &ldv, &T,   &ldt, &WORK,   &ldwork );
 
-    CORE_zttmqr(*side, *trans, *m1, *n1, *m2, *n2, *k, *ib,
-                A1, *lda1, A2, *lda2, V, *ldv, T, *ldt, WORK, *ldwork);
+    CORE_zttmqr( side, trans, m1, n1, m2, n2, k, ib,
+                A1, lda1, A2, lda2, V, ldv, T, ldt, WORK, ldwork);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 
@@ -106,5 +90,5 @@ void MORSE_TASK_zttmqr(const MORSE_option_t *options,
         sizeof(int),           &ldt,                              VALUE,
         sizeof(MORSE_Complex64_t)*ib*nb,    NULL,                           SCRATCH,
         sizeof(int),           &ldwork,                           VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zttqrt.c b/runtime/parsec/codelets/codelet_zttqrt.c
index baab70c86b891fa0561fec7857250dd8257744d7..6f61cbf5c7b1b82f50fe0a1cd2ba7898f16c379d 100644
--- a/runtime/parsec/codelets/codelet_zttqrt.c
+++ b/runtime/parsec/codelets/codelet_zttqrt.c
@@ -24,38 +24,29 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zttqrt_parsec(parsec_execution_stream_t *context, parsec_task_t * this_task)
+static inline int
+CORE_zttqrt_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    int *m;
-    int *n;
-    int *ib;
+    int m;
+    int n;
+    int ib;
     MORSE_Complex64_t *A1;
-    int *lda1;
+    int lda1;
     MORSE_Complex64_t *A2;
-    int *lda2;
+    int lda2;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *TAU;
     MORSE_Complex64_t *WORK;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &m,
-        UNPACK_VALUE,   &n,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &A1,
-        UNPACK_VALUE,   &lda1,
-        UNPACK_DATA,    &A2,
-        UNPACK_VALUE,   &lda2,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_SCRATCH, &TAU,
-        UNPACK_SCRATCH, &WORK );
+        this_task,   &m,   &n,   &ib, &A1,   &lda1, &A2,   &lda2, &T,   &ldt, &TAU, &WORK );
 
-    CORE_zttqrt(*m, *n, *ib, A1, *lda1, A2, *lda2, T, *ldt, TAU, WORK);
+    CORE_zttqrt( m, n, ib, A1, lda1, A2, lda2, T, ldt, TAU, WORK );
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zttqrt(const MORSE_option_t *options,
@@ -79,5 +70,5 @@ void MORSE_TASK_zttqrt(const MORSE_option_t *options,
         sizeof(int),           &ldt,                               VALUE,
         sizeof(MORSE_Complex64_t)*nb,       NULL,                  SCRATCH,
         sizeof(MORSE_Complex64_t)*ib*nb,    NULL,                  SCRATCH,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zunmlq.c b/runtime/parsec/codelets/codelet_zunmlq.c
index e590f329b18e0c5626a9c5dc2d284059539b853b..362d499b29b13434cedeae19fb74d82505314abc 100644
--- a/runtime/parsec/codelets/codelet_zunmlq.c
+++ b/runtime/parsec/codelets/codelet_zunmlq.c
@@ -24,45 +24,33 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zunmlq_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zunmlq_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *side;
-    MORSE_enum *trans;
-    int *m;
-    int *n;
-    int *k;
-    int *ib;
+    MORSE_enum side;
+    MORSE_enum trans;
+    int m;
+    int n;
+    int k;
+    int ib;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *C;
-    int *ldc;
+    int ldc;
     MORSE_Complex64_t *WORK;
-    int *ldwork;
+    int ldwork;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &side,
-        UNPACK_VALUE,   &trans,
-        UNPACK_VALUE,   &m,
-        UNPACK_VALUE,   &n,
-        UNPACK_VALUE,   &k,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &A,
-        UNPACK_VALUE,   &lda,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_DATA,    &C,
-        UNPACK_VALUE,   &ldc,
-        UNPACK_SCRATCH, &WORK,
-        UNPACK_VALUE,   &ldwork );
+        this_task,   &side,   &trans,   &m,   &n,   &k,   &ib, &A,   &lda, &T,   &ldt, &C,   &ldc, &WORK,   &ldwork );
 
-    CORE_zunmlq(*side, *trans, *m, *n, *k, *ib,
-                A, *lda, T, *ldt, C, *ldc, WORK, *ldwork);
+    CORE_zunmlq( side, trans, m, n, k, ib,
+                A, lda, T, ldt, C, ldc, WORK, ldwork);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zunmlq(const MORSE_option_t *options,
@@ -90,5 +78,5 @@ void MORSE_TASK_zunmlq(const MORSE_option_t *options,
         sizeof(int),                        &ldc,               VALUE,
         sizeof(MORSE_Complex64_t)*ib*nb,    NULL,               SCRATCH,
         sizeof(int),                        &nb,                VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/codelets/codelet_zunmqr.c b/runtime/parsec/codelets/codelet_zunmqr.c
index 58ace163909e06dac4338b10384e7f55b0a236ff..773811326a87482dfb41857082fd3bb77eb4b5e4 100644
--- a/runtime/parsec/codelets/codelet_zunmqr.c
+++ b/runtime/parsec/codelets/codelet_zunmqr.c
@@ -24,45 +24,33 @@
 #include "chameleon/morse_tasks_z.h"
 #include "coreblas/coreblas_z.h"
 
-static int
-CORE_zunmqr_parsec(parsec_execution_stream_t *context, parsec_task_t *this_task)
+static inline int
+CORE_zunmqr_parsec( parsec_execution_stream_t *context,
+                    parsec_task_t             *this_task )
 {
-    MORSE_enum *side;
-    MORSE_enum *trans;
-    int *m;
-    int *n;
-    int *k;
-    int *ib;
+    MORSE_enum side;
+    MORSE_enum trans;
+    int m;
+    int n;
+    int k;
+    int ib;
     MORSE_Complex64_t *A;
-    int *lda;
+    int lda;
     MORSE_Complex64_t *T;
-    int *ldt;
+    int ldt;
     MORSE_Complex64_t *C;
-    int *ldc;
+    int ldc;
     MORSE_Complex64_t *WORK;
-    int *ldwork;
+    int ldwork;
 
     parsec_dtd_unpack_args(
-        this_task,
-        UNPACK_VALUE,   &side,
-        UNPACK_VALUE,   &trans,
-        UNPACK_VALUE,   &m,
-        UNPACK_VALUE,   &n,
-        UNPACK_VALUE,   &k,
-        UNPACK_VALUE,   &ib,
-        UNPACK_DATA,    &A,
-        UNPACK_VALUE,   &lda,
-        UNPACK_DATA,    &T,
-        UNPACK_VALUE,   &ldt,
-        UNPACK_DATA,    &C,
-        UNPACK_VALUE,   &ldc,
-        UNPACK_SCRATCH, &WORK,
-        UNPACK_VALUE,   &ldwork );
+        this_task,   &side,   &trans,   &m,   &n,   &k,   &ib, &A,   &lda, &T,   &ldt, &C,   &ldc, &WORK,   &ldwork );
 
-    CORE_zunmqr(*side, *trans, *m, *n, *k, *ib,
-                A, *lda, T, *ldt, C, *ldc, WORK, *ldwork);
+    CORE_zunmqr( side, trans, m, n, k, ib,
+                A, lda, T, ldt, C, ldc, WORK, ldwork);
 
-    return 0;
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
 }
 
 void MORSE_TASK_zunmqr(const MORSE_option_t *options,
@@ -90,5 +78,5 @@ void MORSE_TASK_zunmqr(const MORSE_option_t *options,
         sizeof(int),           &ldc,                               VALUE,
         sizeof(MORSE_Complex64_t)*ib*nb,   NULL,                   SCRATCH,
         sizeof(int),           &nb,                                VALUE,
-        0);
+        PARSEC_DTD_ARG_END );
 }
diff --git a/runtime/parsec/control/runtime_async.c b/runtime/parsec/control/runtime_async.c
index 7df5d0bcf2b086a2c6e28c2b3136a150a3a555d8..5745eb11738804a1b949fd5a872f3b28a8328fea 100644
--- a/runtime/parsec/control/runtime_async.c
+++ b/runtime/parsec/control/runtime_async.c
@@ -1,10 +1,16 @@
 /**
  *
- * @copyright (c) 2009-2015 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2015 Inria. All rights reserved.
- * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ * @copyright 2012-2017 The University of Tennessee and The University of
+ *                      Tennessee Research Foundation.  All rights reserved.
+ * @copyright 2012-2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                      Univ. Bordeaux. All rights reserved.
+ *
+ * @file runtime_async.c
+ *
+ * @version 1.0.0
+ * @author Reazul Hoque
+ * @author Mathieu Faverge
+ * @date 2017-01-12
  *
  **/
 #include <stdlib.h>
@@ -13,12 +19,13 @@
 /*******************************************************************************
  *  Create a sequence
  **/
-int RUNTIME_sequence_create(MORSE_context_t *morse, MORSE_sequence_t *sequence)
+int RUNTIME_sequence_create( MORSE_context_t  *morse,
+                             MORSE_sequence_t *sequence )
 {
-    parsec_context_t  *parsec        = (parsec_context_t *)morse->schedopt;
+    parsec_context_t  *parsec        = (parsec_context_t *)(morse->schedopt);
     parsec_taskpool_t *parsec_dtd_tp = parsec_dtd_taskpool_new();
 
-    parsec_enqueue(parsec, (parsec_taskpool_t *) parsec_dtd_tp);
+    parsec_enqueue( parsec, (parsec_taskpool_t *)parsec_dtd_tp );
     sequence->schedopt = parsec_dtd_tp;
 
     parsec_context_start(parsec);
@@ -29,19 +36,15 @@ int RUNTIME_sequence_create(MORSE_context_t *morse, MORSE_sequence_t *sequence)
 /*******************************************************************************
  *  Destroy a sequence
  **/
-int RUNTIME_sequence_destroy(MORSE_context_t *morse, MORSE_sequence_t *sequence)
+int RUNTIME_sequence_destroy( MORSE_context_t  *morse,
+                              MORSE_sequence_t *sequence )
 {
-    parsec_context_t  *parsec = (parsec_context_t *)morse->schedopt;
-    parsec_taskpool_t *parsec_dtd_tp = (parsec_taskpool_t *) sequence->schedopt;
-    (void)morse;
+    parsec_context_t  *parsec = (parsec_context_t *)(morse->schedopt);
+    parsec_taskpool_t *parsec_dtd_tp = (parsec_taskpool_t *)(sequence->schedopt);
 
     assert( parsec_dtd_tp );
-
-    // TODO: switch to a partial wait
-    //parsec_dtd_taskpool_wait(parsec, parsec_dtd_tp);
-    parsec_context_wait(parsec);
-
-    parsec_taskpool_free(parsec_dtd_tp);
+    parsec_dtd_taskpool_wait( parsec, parsec_dtd_tp );
+    parsec_taskpool_free( parsec_dtd_tp );
 
     sequence->schedopt = NULL;
     return MORSE_SUCCESS;
@@ -50,14 +53,14 @@ int RUNTIME_sequence_destroy(MORSE_context_t *morse, MORSE_sequence_t *sequence)
 /*******************************************************************************
  *  Wait for the completion of a sequence
  **/
-int RUNTIME_sequence_wait(MORSE_context_t *morse, MORSE_sequence_t *sequence )
+int RUNTIME_sequence_wait( MORSE_context_t  *morse,
+                           MORSE_sequence_t *sequence )
 {
     parsec_context_t  *parsec = (parsec_context_t *)morse->schedopt;
     parsec_taskpool_t *parsec_dtd_tp = (parsec_taskpool_t *) sequence->schedopt;
 
     assert( parsec_dtd_tp );
-
-    parsec_dtd_taskpool_wait(parsec, parsec_dtd_tp);
+    parsec_dtd_taskpool_wait( parsec, parsec_dtd_tp );
 
     return MORSE_SUCCESS;
 }
@@ -65,13 +68,14 @@ int RUNTIME_sequence_wait(MORSE_context_t *morse, MORSE_sequence_t *sequence )
 /*******************************************************************************
  *  Terminate a sequence
  **/
-void RUNTIME_sequence_flush(void *schedopt, MORSE_sequence_t *sequence, MORSE_request_t *request, int status)
+void RUNTIME_sequence_flush( MORSE_context_t  *morse,
+                             MORSE_sequence_t *sequence,
+                             MORSE_request_t  *request,
+                             int status )
 {
-    parsec_context_t *parsec = (parsec_context_t *)schedopt;
-    (void)schedopt;
     sequence->request = request;
     sequence->status = status;
     request->status = status;
+    (void)morse;
     return;
 }
-
diff --git a/runtime/parsec/control/runtime_context.c b/runtime/parsec/control/runtime_context.c
index dee863d4f76a8748c41288436f7fc2ecc3f25a56..130161d53398460500a7f60a3b3eb92d952a3348 100644
--- a/runtime/parsec/control/runtime_context.c
+++ b/runtime/parsec/control/runtime_context.c
@@ -1,10 +1,16 @@
 /**
  *
- * @copyright (c) 2009-2015 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2015 Inria. All rights reserved.
- * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ * @copyright 2012-2017 The University of Tennessee and The University of
+ *                      Tennessee Research Foundation.  All rights reserved.
+ * @copyright 2012-2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                      Univ. Bordeaux. All rights reserved.
+ *
+ * @file runtime_context.c
+ *
+ * @version 1.0.0
+ * @author Reazul Hoque
+ * @author Mathieu Faverge
+ * @date 2017-01-12
  *
  **/
 #include <stdlib.h>
@@ -13,7 +19,7 @@
 /*******************************************************************************
  *  Create new context
  **/
-void RUNTIME_context_create(MORSE_context_t *morse)
+void RUNTIME_context_create( MORSE_context_t *morse )
 {
     /* In case of PaRSEC, this is done in init */
     morse->scheduler = RUNTIME_SCHED_PARSEC;
@@ -23,8 +29,7 @@ void RUNTIME_context_create(MORSE_context_t *morse)
 /*******************************************************************************
  *  Clean the context
  **/
-
-void RUNTIME_context_destroy(MORSE_context_t *morse)
+void RUNTIME_context_destroy( MORSE_context_t *morse )
 {
     (void)morse;
     return;
@@ -37,12 +42,10 @@ void RUNTIME_enable(MORSE_enum lever)
 {
     switch (lever)
     {
-        case MORSE_PROFILING_MODE:
-            // TODO: check correctly for this
-            //dague_profiling_start();
-            break;
-        default:
-            return;
+    case MORSE_PROFILING_MODE:
+        break;
+    default:
+        return;
     }
     return;
 }
@@ -54,12 +57,10 @@ void RUNTIME_disable(MORSE_enum lever)
 {
     switch (lever)
     {
-        case MORSE_PROFILING_MODE:
-            // TODO: check correctly for this
-            //dague_profiling_stop();
-            break;
-        default:
-            return;
+    case MORSE_PROFILING_MODE:
+        break;
+    default:
+        return;
     }
     return;
 }
diff --git a/runtime/parsec/control/runtime_control.c b/runtime/parsec/control/runtime_control.c
index 5efcbcde57db74cfa0208db8d757c3e75edaf177..9b3907b007ed46551d1245568cda3d56c1f0a058 100644
--- a/runtime/parsec/control/runtime_control.c
+++ b/runtime/parsec/control/runtime_control.c
@@ -1,10 +1,16 @@
 /**
  *
- * @copyright (c) 2009-2015 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2015 Inria. All rights reserved.
- * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ * @copyright 2012-2017 The University of Tennessee and The University of
+ *                      Tennessee Research Foundation.  All rights reserved.
+ * @copyright 2012-2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                      Univ. Bordeaux. All rights reserved.
+ *
+ * @file runtime_control.c
+ *
+ * @version 1.0.0
+ * @author Reazul Hoque
+ * @author Mathieu Faverge
+ * @date 2017-01-12
  *
  **/
 #include <stdio.h>
@@ -15,44 +21,41 @@
 #include <mpi.h>
 #endif
 
-/*******************************************************************************
- * Thread rank.
- **/
-int RUNTIME_rank(MORSE_context_t *morse)
-{
-    return 0;
-}
-
 /*******************************************************************************
  * Initialize MORSE
  **/
-int RUNTIME_init_scheduler(MORSE_context_t *morse, int nworkers, int ncudas, int nthreads_per_worker)
+int RUNTIME_init( MORSE_context_t *morse,
+                  int ncpus,
+                  int ncudas,
+                  int nthreads_per_worker )
 {
     int hres = -1, default_ncores = -1;
     int *argc = (int *)malloc(sizeof(int));
     *argc = 0;
 
     /* Initializing parsec context */
-    if( 0 < nworkers ) {
-        default_ncores = nworkers;
+    if( 0 < ncpus ) {
+        default_ncores = ncpus;
     }
     morse->parallel_enabled = MORSE_TRUE;
     morse->schedopt = (void *)parsec_init(default_ncores, argc, NULL);
 
     if(NULL != morse->schedopt) {
-        morse->nworkers = nworkers;
+        morse->nworkers = ncpus;
         morse->nthreads_per_worker = nthreads_per_worker;
         hres = 0;
     }
 
     free(argc);
+
+    (void)ncudas;
     return hres;
 }
 
 /*******************************************************************************
  * Finalize MORSE
  */
-void RUNTIME_finalize_scheduler(MORSE_context_t *morse)
+void RUNTIME_finalize( MORSE_context_t *morse )
 {
     parsec_context_t *parsec = (parsec_context_t*)morse->schedopt;
     parsec_fini(&parsec);
@@ -60,81 +63,88 @@ void RUNTIME_finalize_scheduler(MORSE_context_t *morse)
 }
 
 /*******************************************************************************
- * Barrier MORSE.
+ *  To suspend the processing of new tasks by workers
  **/
-void RUNTIME_barrier(MORSE_context_t *morse)
+void RUNTIME_pause( MORSE_context_t *morse )
 {
-    parsec_context_t *parsec = (parsec_context_t*)morse->schedopt;
-    // This will be a problem with the fake tasks inserted to detect end of DTD algorithms
-    //parsec_context_wait( parsec );
+    (void)morse;
     return;
 }
 
 /*******************************************************************************
- *  Set iteration numbers for traces
+ *  This is the symmetrical call to RUNTIME_pause,
+ *  used to resume the workers polling for new tasks.
  **/
-void RUNTIME_iteration_push( MORSE_context_t *morse, unsigned long iteration )
+void RUNTIME_resume( MORSE_context_t *morse )
 {
-    (void)morse; (void)iteration;
+    (void)morse;
     return;
 }
-void RUNTIME_iteration_pop( MORSE_context_t *morse )
+
+/*******************************************************************************
+ * Barrier MORSE.
+ **/
+void RUNTIME_barrier( MORSE_context_t *morse )
 {
-    (void)morse;
+    parsec_context_t *parsec = (parsec_context_t*)(morse->schedopt);
+    // This will be a problem with the fake tasks inserted to detect end of DTD algorithms
+    parsec_context_wait( parsec );
     return;
 }
 
 /*******************************************************************************
- *  To suspend the processing of new tasks by workers
+ *  Display a progress information when executing the tasks
  **/
-void RUNTIME_pause( MORSE_context_t *morse )
+void RUNTIME_progress( MORSE_context_t *morse )
 {
     (void)morse;
     return;
 }
 
 /*******************************************************************************
- *  This is the symmetrical call to RUNTIME_pause,
- *  used to resume the workers polling for new tasks.
+ * Thread rank.
  **/
-void RUNTIME_resume( MORSE_context_t *morse )
+int RUNTIME_thread_rank( MORSE_context_t *morse )
 {
     (void)morse;
-    return;
+    return 0;
 }
 
 /*******************************************************************************
- *  This returns the rank of this process
+ * Thread rank.
  **/
-void RUNTIME_comm_rank( int *rank )
+int RUNTIME_thread_size( MORSE_context_t *morse )
 {
-#if defined(CHAMELEON_USE_MPI)
-    MPI_Comm_rank(MPI_COMM_WORLD, rank);
-#else
-    *rank = 0;
-#endif
-    return;
+    // TODO: fixme
+    //return vpmap_get_nb_total_threads();
+    (void)morse;
+    return 1;
 }
 
 /*******************************************************************************
- *  This returns the size of the distributed computation
+ *  This returns the rank of this process
  **/
-void RUNTIME_comm_size( int *size )
+int RUNTIME_comm_rank( MORSE_context_t *morse )
 {
+    int rank = 0;
 #if defined(CHAMELEON_USE_MPI)
-    MPI_Comm_size(MPI_COMM_WORLD, size);
-#else
-    *size = 1;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 #endif
-    return;
+
+    (void)morse;
+    return rank;
 }
 
 /*******************************************************************************
- *  This returns the number of workers
+ *  This returns the size of the distributed computation
  **/
-int RUNTIME_get_thread_nbr()
+int RUNTIME_comm_size( MORSE_context_t *morse )
 {
-    // TODO: fixme
-    //return vpmap_get_nb_total_threads();
-    return 0;
+    int size = 0;
+#if defined(CHAMELEON_USE_MPI)
+    MPI_Comm_size(MPI_COMM_WORLD, &size);
+#endif
+
+    (void)morse;
+    return size;
 }
diff --git a/runtime/parsec/control/runtime_descriptor.c b/runtime/parsec/control/runtime_descriptor.c
index be513a3eabc39e37b9c7e68faa17646aad5af9ad..8f01af0a5b5de765c517f003be8204a080903302 100644
--- a/runtime/parsec/control/runtime_descriptor.c
+++ b/runtime/parsec/control/runtime_descriptor.c
@@ -1,34 +1,43 @@
 /**
  *
- * @copyright (c) 2009-2015 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2015 Inria. All rights reserved.
- * @copyright (c) 2012-2016 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ * @copyright 2012-2017 The University of Tennessee and The University of
+ *                      Tennessee Research Foundation.  All rights reserved.
+ * @copyright 2012-2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                      Univ. Bordeaux. All rights reserved.
+ *
+ * @file runtime_descriptor.c
+ *
+ * @version 1.0.0
+ * @author Reazul Hoque
+ * @author Mathieu Faverge
+ * @date 2017-01-12
  *
  **/
 #include <stdlib.h>
 #include "chameleon_parsec.h"
 #include <parsec/data.h>
 #include <parsec/datatype.h>
+//#include <parsec/data_dist/matrix/matrix.h>
 #include <parsec/arena.h>
 
 static int parsec_global_arena_index = 0;
 
-void RUNTIME_user_tag_size(int user_tag_width, int user_tag_sep) {
-  (void)user_tag_width;
-  (void)user_tag_sep;
+void RUNTIME_comm_set_tag_sizes( int user_tag_width,
+                                 int user_tag_sep )
+{
+    (void)user_tag_width;
+    (void)user_tag_sep;
 }
 
-void *RUNTIME_mat_alloc( size_t size)
+void *RUNTIME_malloc( size_t size )
 {
     return malloc(size);
 }
 
-void RUNTIME_mat_free( void *mat, size_t size)
+void RUNTIME_free( void *ptr, size_t size )
 {
     (void)size;
-    free(mat);
+    free(ptr);
     return;
 }
 
@@ -39,7 +48,12 @@ struct morse_parsec_desc_s {
     int arena_index;
 };
 
-static void
+int
+morse_parsec_get_arena_index(const MORSE_desc_t *desc) {
+    return ((morse_parsec_desc_t *)desc->schedopt)->arena_index;
+}
+
+static inline void
 morse_parsec_key_to_coordinates(parsec_data_collection_t *data_collection, parsec_data_key_t key,
                                 int *m, int *n)
 {
@@ -53,7 +67,7 @@ morse_parsec_key_to_coordinates(parsec_data_collection_t *data_collection, parse
     *n = _n - mdesc->j / mdesc->nb;
 }
 
-static parsec_data_key_t
+static inline parsec_data_key_t
 morse_parsec_data_key(parsec_data_collection_t *data_collection, ...)
 {
     morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)data_collection;
@@ -74,7 +88,7 @@ morse_parsec_data_key(parsec_data_collection_t *data_collection, ...)
     return ((n * mdesc->lmt) + m);
 }
 
-static uint32_t
+static inline uint32_t
 morse_parsec_rank_of(parsec_data_collection_t *data_collection, ...)
 {
     morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)data_collection;
@@ -95,7 +109,7 @@ morse_parsec_rank_of(parsec_data_collection_t *data_collection, ...)
     return mdesc->get_rankof( mdesc, m, n );
 }
 
-static uint32_t
+static inline uint32_t
 morse_parsec_rank_of_key(parsec_data_collection_t *data_collection, parsec_data_key_t key)
 {
     int m, n;
@@ -103,13 +117,14 @@ morse_parsec_rank_of_key(parsec_data_collection_t *data_collection, parsec_data_
     return morse_parsec_rank_of(data_collection, m, n);
 }
 
-static int32_t
-morse_parsec_vpid_of(parsec_data_collection_t *data_collection, ...)
+static inline int32_t
+morse_parsec_vpid_of(parsec_data_collection_t *data_collection, ... )
 {
+    (void)data_collection;
     return 0;
 }
 
-static int32_t
+static inline int32_t
 morse_parsec_vpid_of_key(parsec_data_collection_t *data_collection, parsec_data_key_t key)
 {
     int m, n;
@@ -117,7 +132,7 @@ morse_parsec_vpid_of_key(parsec_data_collection_t *data_collection, parsec_data_
     return morse_parsec_vpid_of(data_collection, m, n);
 }
 
-static parsec_data_t*
+static inline parsec_data_t*
 morse_parsec_data_of(parsec_data_collection_t *data_collection, ...)
 {
     morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)data_collection;
@@ -140,12 +155,12 @@ morse_parsec_data_of(parsec_data_collection_t *data_collection, ...)
     //assert( data_collection->nodes == 1 );
 #endif
     return parsec_data_create( pdesc->data_map + n * mdesc->lmt + m, data_collection,
-                              morse_parsec_data_key( data_collection, m, n ),
-                              mdesc->get_blkaddr( mdesc, m, n ),
-                              mdesc->bsiz * MORSE_Element_Size(mdesc->dtyp) );
+                               morse_parsec_data_key( data_collection, m, n ),
+                               mdesc->get_blkaddr( mdesc, m, n ),
+                               mdesc->bsiz * MORSE_Element_Size(mdesc->dtyp) );
 }
 
-static parsec_data_t*
+static inline parsec_data_t*
 morse_parsec_data_of_key(parsec_data_collection_t *data_collection, parsec_data_key_t key)
 {
     morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)data_collection;
@@ -158,12 +173,12 @@ morse_parsec_data_of_key(parsec_data_collection_t *data_collection, parsec_data_
     //assert( data_collection->nodes == 1 );
 #endif
     return parsec_data_create( pdesc->data_map + key, data_collection, key,
-                              mdesc->get_blkaddr( mdesc, m, n ),
-                              mdesc->bsiz * MORSE_Element_Size(mdesc->dtyp) );
+                               mdesc->get_blkaddr( mdesc, m, n ),
+                               mdesc->bsiz * MORSE_Element_Size(mdesc->dtyp) );
 }
 
 #ifdef parsec_PROF_TRACE
-static int
+static inline int
 morse_parsec_key_to_string(parsec_data_collection_t *data_collection, parsec_data_key_t key, char * buffer, uint32_t buffer_size)
 {
     morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)data_collection;
@@ -179,15 +194,12 @@ morse_parsec_key_to_string(parsec_data_collection_t *data_collection, parsec_dat
 }
 #endif
 
-void RUNTIME_desc_init( MORSE_desc_t *mdesc )
-{
-    (void)mdesc;
-    return;
-}
-
+/*******************************************************************************
+ *  Create data descriptor
+ **/
 void RUNTIME_desc_create( MORSE_desc_t *mdesc )
 {
-    parsec_data_collection_t       *data_collection;
+    parsec_data_collection_t *data_collection;
     morse_parsec_desc_t *pdesc;
     int comm_size;
 
@@ -195,7 +207,7 @@ void RUNTIME_desc_create( MORSE_desc_t *mdesc )
     data_collection = (parsec_data_collection_t*)pdesc;
 
     /* Super setup */
-    RUNTIME_comm_size( &comm_size );
+    comm_size = RUNTIME_comm_size( NULL );
     data_collection->nodes  = comm_size;
     data_collection->myrank = mdesc->myrank;
 
@@ -225,15 +237,43 @@ void RUNTIME_desc_create( MORSE_desc_t *mdesc )
 
     parsec_dtd_data_collection_init(data_collection);
 
+    /* arena init */
+    pdesc->arena_index = 0;
+
+    /* taskpool init to bypass a requirement of PaRSEC  */
+#if defined(CHAMELEON_USE_MPI)
+    parsec_dtd_taskpool_new();
+    /* Internal limitation of PaRSEC */
+    assert(parsec_global_arena_index < 16);
+    pdesc->arena_index = parsec_global_arena_index++;
+
+    parsec_datatype_t datatype;
+    switch(mdesc->dtyp) {
+    case MorseInteger:       datatype = parsec_datatype_int32_t; break;
+    case MorseRealFloat:     datatype = parsec_datatype_float_t; break;
+    case MorseRealDouble:    datatype = parsec_datatype_double_t; break;
+    case MorseComplexFloat:  datatype = parsec_datatype_complex_t; break;
+    case MorseComplexDouble: datatype = parsec_datatype_double_complex_t; break;
+    default: morse_fatal_error("MORSE_Element_Size", "undefined type"); break;
+    }
+
+    parsec_matrix_add2arena_tile( parsec_dtd_arenas[pdesc->arena_index], datatype, mdesc->mb*mdesc->nb*MORSE_Element_Size(mdesc->dtyp) );
+#endif
     /* /\* Overwrite the leading dimensions to store the padding *\/ */
     /* mdesc->llm = mdesc->mb * mdesc->lmt; */
     /* mdesc->lln = mdesc->nb * mdesc->lnt; */
     return;
 }
 
+/*******************************************************************************
+ *  Destroy data descriptor
+ **/
 void RUNTIME_desc_destroy( MORSE_desc_t *mdesc )
 {
     morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)(mdesc->schedopt);
+    if ( pdesc == NULL ) {
+        return;
+    }
 
     if ( pdesc->data_map != NULL ) {
         parsec_data_t **data = pdesc->data_map;
@@ -252,33 +292,61 @@ void RUNTIME_desc_destroy( MORSE_desc_t *mdesc )
     parsec_dtd_data_collection_fini( (parsec_data_collection_t *)pdesc );
 
     free(pdesc);
+    mdesc->schedopt = NULL;
     return;
 }
 
-void RUNTIME_desc_submatrix( MORSE_desc_t *desc )
+/*******************************************************************************
+ *  Acquire data
+ **/
+int RUNTIME_desc_acquire( const MORSE_desc_t *desc )
 {
     (void)desc;
-    return;
+    return MORSE_SUCCESS;
 }
 
-int RUNTIME_desc_acquire( MORSE_desc_t *desc )
+/*******************************************************************************
+ *  Release data
+ **/
+int RUNTIME_desc_release( const MORSE_desc_t *desc )
 {
     (void)desc;
     return MORSE_SUCCESS;
 }
 
-int RUNTIME_desc_release( MORSE_desc_t *desc )
+/*******************************************************************************
+ *  Flush cached data
+ **/
+void RUNTIME_flush()
 {
-    (void)desc;
-    return MORSE_SUCCESS;
 }
 
-int RUNTIME_desc_getoncpu( MORSE_desc_t *desc )
+void RUNTIME_desc_flush( const MORSE_desc_t     *desc,
+                         const MORSE_sequence_t *sequence )
 {
-    (void)desc;
-    return MORSE_SUCCESS;
+    parsec_taskpool_t* PARSEC_dtd_taskpool = (parsec_taskpool_t *)(sequence->schedopt);
+
+    parsec_dtd_data_flush_all( PARSEC_dtd_taskpool, (parsec_data_collection_t*)(desc->schedopt) );
+}
+
+void RUNTIME_data_flush( const MORSE_sequence_t *sequence,
+                         const MORSE_desc_t *A, int Am, int An )
+{
+    /*
+     * For now, we do nothing in this function as in PaRSEC, once the data is
+     * flushed it cannot be reused in the same sequence, when this issue will be
+     * fixed, we will uncomment this function
+     */
+    /* parsec_taskpool_t* PARSEC_dtd_taskpool = (parsec_taskpool_t *)(sequence->schedopt); */
+    /* parsec_dtd_data_flush( PARSEC_dtd_taskpool, RTBLKADDR( A, MORSE_Complex64_t, Am, An ) ); */
+
+    (void)sequence; (void)A; (void)Am; (void)An;
+    return;
 }
 
+/*******************************************************************************
+ *  Get data addr
+ **/
 void *RUNTIME_desc_getaddr( const MORSE_desc_t *desc, int m, int n )
 {
     assert(0); /* This should not be called because we also need the handle to match the address we need. */
diff --git a/runtime/parsec/control/runtime_options.c b/runtime/parsec/control/runtime_options.c
index b9fd469a84262154b5dcfcc3cf65c6e218932de1..035561939da1d28d6f6585a4ea689fa5183f5d44 100644
--- a/runtime/parsec/control/runtime_options.c
+++ b/runtime/parsec/control/runtime_options.c
@@ -1,10 +1,16 @@
 /**
  *
- * @copyright (c) 2009-2015 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2015 Inria. All rights reserved.
- * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ * @copyright 2012-2017 The University of Tennessee and The University of
+ *                      Tennessee Research Foundation.  All rights reserved.
+ * @copyright 2012-2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                      Univ. Bordeaux. All rights reserved.
+ *
+ * @file runtime_options.c
+ *
+ * @version 1.0.0
+ * @author Reazul Hoque
+ * @author Mathieu Faverge
+ * @date 2017-01-12
  *
  **/
 #include <stdio.h>
diff --git a/runtime/parsec/control/runtime_profiling.c b/runtime/parsec/control/runtime_profiling.c
index 1e50dac2a1792d9448ad9360f986efc6f6bcd2e4..ed7dbd842fadd42d0697c9e1b4e8682fa0ba92ff 100644
--- a/runtime/parsec/control/runtime_profiling.c
+++ b/runtime/parsec/control/runtime_profiling.c
@@ -1,14 +1,20 @@
 /**
  *
- * @copyright (c) 2009-2015 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2015 Inria. All rights reserved.
- * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ * @copyright 2012-2017 The University of Tennessee and The University of
+ *                      Tennessee Research Foundation.  All rights reserved.
+ * @copyright 2012-2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                      Univ. Bordeaux. All rights reserved.
+ *
+ * @file runtime_profiling.c
+ *
+ * @version 1.0.0
+ * @author Reazul Hoque
+ * @author Mathieu Faverge
+ * @date 2017-01-12
  *
  **/
 #include "chameleon_parsec.h"
-#include "chameleon_timer.h"
+#include "chameleon/chameleon_timer.h"
 
 double RUNTIME_get_time(){
     return CHAMELEON_timer();
@@ -43,3 +49,18 @@ void RUNTIME_kernelprofile_display(void)
 {
     morse_warning("RUNTIME_kernelprofile_display(parsec)", "Kernel profiling is not available with PaRSEC\n");
 }
+
+/*******************************************************************************
+ *  Set iteration numbers for traces
+ **/
+void RUNTIME_iteration_push( MORSE_context_t *morse, unsigned long iteration )
+{
+    (void)morse; (void)iteration;
+    return;
+}
+void RUNTIME_iteration_pop( MORSE_context_t *morse )
+{
+    (void)morse;
+    return;
+}
+
diff --git a/runtime/parsec/control/runtime_zlocality.c b/runtime/parsec/control/runtime_zlocality.c
index 8dc21a47348d293d054edbcd7b9308ebe71e9b23..6b1b97ddac2db608237cf2c7b9d5c52474cad73e 100644
--- a/runtime/parsec/control/runtime_zlocality.c
+++ b/runtime/parsec/control/runtime_zlocality.c
@@ -1,10 +1,16 @@
 /**
  *
- * @copyright (c) 2009-2015 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2015 Inria. All rights reserved.
- * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ * @copyright 2012-2017 The University of Tennessee and The University of
+ *                      Tennessee Research Foundation.  All rights reserved.
+ * @copyright 2012-2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                      Univ. Bordeaux. All rights reserved.
+ *
+ * @file runtime_zlocality.c
+ *
+ * @version 1.0.0
+ * @author Reazul Hoque
+ * @author Mathieu Faverge
+ * @date 2017-01-12
  *
  **/
 #include "runtime/PaRSEC/include/chameleon_parsec.h"
diff --git a/runtime/parsec/control/runtime_zprofiling.c b/runtime/parsec/control/runtime_zprofiling.c
index 1bcf7d0dfd518848f2fe2df0f29737b1b447037a..f93c365870819216f5dc30663651f0b7f663cd98 100644
--- a/runtime/parsec/control/runtime_zprofiling.c
+++ b/runtime/parsec/control/runtime_zprofiling.c
@@ -1,10 +1,16 @@
 /**
  *
- * @copyright (c) 2009-2015 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2015 Inria. All rights reserved.
- * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ * @copyright 2012-2017 The University of Tennessee and The University of
+ *                      Tennessee Research Foundation.  All rights reserved.
+ * @copyright 2012-2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                      Univ. Bordeaux. All rights reserved.
+ *
+ * @file runtime_zprofiling.c
+ *
+ * @version 1.0.0
+ * @author Reazul Hoque
+ * @author Mathieu Faverge
+ * @date 2017-01-12
  *
  **/
 #include "chameleon_parsec.h"
diff --git a/runtime/parsec/include/chameleon_parsec.h b/runtime/parsec/include/chameleon_parsec.h
index 4dcce7564eb3bfb5d35f96683dd55a49422a73c9..a75f2ee877ccf372a07b186677f6a6d6cea764f3 100644
--- a/runtime/parsec/include/chameleon_parsec.h
+++ b/runtime/parsec/include/chameleon_parsec.h
@@ -19,6 +19,8 @@
 struct morse_parsec_desc_s;
 typedef struct morse_parsec_desc_s morse_parsec_desc_t;
 
+int morse_parsec_get_arena_index(const MORSE_desc_t *desc);
+
 /*
  * Access to block pointer and leading dimension
  */
diff --git a/runtime/starpu/control/runtime_async.c b/runtime/starpu/control/runtime_async.c
index 70e9597f054468ff15b90021d72e79e699e54445..9ecd094216da6bf92cc7c7c52c7d37c71d72f82b 100644
--- a/runtime/starpu/control/runtime_async.c
+++ b/runtime/starpu/control/runtime_async.c
@@ -74,6 +74,5 @@ void RUNTIME_sequence_flush( MORSE_context_t  *morse,
     sequence->request = request;
     sequence->status = status;
     request->status = status;
-    starpu_task_wait_for_all();
     return;
 }
diff --git a/runtime/starpu/control/runtime_control.c b/runtime/starpu/control/runtime_control.c
index 770c18261568696f102f215b92916a21c1abe717..6034f92aec9d7e7cde421e2aa24da05e908270a6 100644
--- a/runtime/starpu/control/runtime_control.c
+++ b/runtime/starpu/control/runtime_control.c
@@ -236,15 +236,14 @@ int RUNTIME_thread_size( MORSE_context_t *morse )
  **/
 int RUNTIME_comm_rank( MORSE_context_t *morse )
 {
-    int rank;
+    int rank = 0;
+
 #if defined(CHAMELEON_USE_MPI)
 #  if defined(HAVE_STARPU_MPI_COMM_RANK)
     starpu_mpi_comm_rank( MPI_COMM_WORLD, &rank );
 #  else
     MPI_Comm_rank( MPI_COMM_WORLD, &rank );
 #  endif
-#else
-    rank = 0;
 #endif
 
     (void)morse;