diff --git a/runtime/parsec/CMakeLists.txt b/runtime/parsec/CMakeLists.txt
index 37624f0a700c57056a31346ecba4502fa1162357..a19890afe2b1c55a0eccfdb36c0a25d4dcde1e64 100644
--- a/runtime/parsec/CMakeLists.txt
+++ b/runtime/parsec/CMakeLists.txt
@@ -27,6 +27,7 @@
 #
 ###
 
+cmake_minimum_required(VERSION 2.8)
 
 # check if magma_dgetrf_incpiv_gpu is accessible in libmagma and activate it in chameleon
 if ( CBLAS_FOUND AND LAPACKE_FOUND AND LAPACK_FOUND AND CUDA_FOUND AND CUDA_CUBLAS_LIBRARIES AND MAGMA_FOUND )
@@ -73,10 +74,10 @@ precisions_rules_py(RUNTIME_COMMON_GENERATED "${ZSRC}"
                     TARGETDIR "control")
 
 set(RUNTIME_COMMON
-    control/runtime_control.c
+    control/runtime_async.c
     control/runtime_context.c
+    control/runtime_control.c
     control/runtime_descriptor.c
-    control/runtime_async.c
     control/runtime_options.c
     control/runtime_profiling.c
     codelets/codelet_dataflush.c
@@ -109,6 +110,7 @@ set(ZSRC
     # LAPACK
     ##################
     codelets/codelet_zgeadd.c
+    codelets/codelet_zlascal.c
     codelets/codelet_zgelqt.c
     codelets/codelet_zgeqrt.c
     codelets/codelet_zgessm.c
@@ -116,6 +118,8 @@ set(ZSRC
     codelets/codelet_zgetrf.c
     codelets/codelet_zgetrf_incpiv.c
     codelets/codelet_zgetrf_nopiv.c
+    codelets/codelet_zhe2ge.c
+    codelets/codelet_zherfb.c
     codelets/codelet_zhessq.c
     codelets/codelet_zlacpy.c
     codelets/codelet_zlange.c
@@ -124,6 +128,7 @@ set(ZSRC
     codelets/codelet_zlantr.c
     codelets/codelet_zlaset2.c
     codelets/codelet_zlaset.c
+    codelets/codelet_zlatro.c
     codelets/codelet_zlauum.c
     codelets/codelet_zplghe.c
     codelets/codelet_zplgsy.c
@@ -140,6 +145,8 @@ set(ZSRC
     codelets/codelet_ztslqt.c
     codelets/codelet_ztsmlq.c
     codelets/codelet_ztsmqr.c
+    codelets/codelet_ztsmlq_hetra1.c
+    codelets/codelet_ztsmqr_hetra1.c
     codelets/codelet_ztsqrt.c
     codelets/codelet_ztstrf.c
     codelets/codelet_zttlqt.c
@@ -153,7 +160,6 @@ set(ZSRC
     ##################
     codelets/codelet_zbuild.c
     )
-list(REMOVE_DUPLICATES ZSRC)
 
 precisions_rules_py(RUNTIME_SRCS_GENERATED "${ZSRC}"
                     PRECISIONS "${CHAMELEON_PRECISION}"
@@ -171,9 +177,9 @@ set_property(TARGET chameleon_parsec PROPERTY LINKER_LANGUAGE Fortran)
 set_property(TARGET chameleon_parsec PROPERTY INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
 
 target_link_libraries(chameleon_parsec coreblas ${PARSEC_LIBRARIES_DEP})
-if(CHAMELEON_USE_CUDA OR CHAMELEON_USE_MAGMA)
+if(CHAMELEON_USE_CUDA)
   target_link_libraries(chameleon_parsec cudablas)
-endif(CHAMELEON_USE_CUDA OR CHAMELEON_USE_MAGMA)
+endif(CHAMELEON_USE_CUDA)
 
 add_dependencies(chameleon_parsec
   chameleon_include
@@ -182,6 +188,10 @@ add_dependencies(chameleon_parsec
   runtime_parsec_include
 )
 
+if (CHAMELEON_USE_CUDA AND NOT CHAMELEON_SIMULATION)
+    add_dependencies(chameleon_starpu cudablas_include)
+endif()
+
 # installation
 # ------------
 install(TARGETS chameleon_parsec
diff --git a/runtime/parsec/codelets/codelet_zasum.c b/runtime/parsec/codelets/codelet_zasum.c
index e796649eed06a588dad61f72f0d6294b8920b59c..848b9bcd18c276e2c7d1a38b994a60d7957e436e 100644
--- a/runtime/parsec/codelets/codelet_zasum.c
+++ b/runtime/parsec/codelets/codelet_zasum.c
@@ -23,7 +23,8 @@
 #include "runtime/parsec/include/morse_parsec.h"
 
 static int
-CORE_dzasum_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+CORE_dzasum_parsec(dague_execution_unit_t    *context,
+                   dague_execution_context_t *this_task)
 {
     MORSE_enum *storev;
     MORSE_enum *uplo;
diff --git a/runtime/parsec/codelets/codelet_zgemm.c b/runtime/parsec/codelets/codelet_zgemm.c
index ba0f15f3df07fa8c88515cc9e71ba22e6aaf672b..18f07d9eef28bfbb9a58823254fd2a76b1a3980e 100644
--- a/runtime/parsec/codelets/codelet_zgemm.c
+++ b/runtime/parsec/codelets/codelet_zgemm.c
@@ -28,7 +28,8 @@
  *
  **/
 static int
-CORE_zgemm_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+CORE_zgemm_parsec(dague_execution_unit_t    *context,
+                  dague_execution_context_t *this_task)
 {
     MORSE_enum *transA;
     MORSE_enum *transB;
diff --git a/runtime/parsec/codelets/codelet_zhe2ge.c b/runtime/parsec/codelets/codelet_zhe2ge.c
new file mode 100644
index 0000000000000000000000000000000000000000..a60718e0208aeab6e19d411f088c4eba3c06e3e5
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zhe2ge.c
@@ -0,0 +1,73 @@
+/**
+ *
+ * @copyright (c) 2009-2014 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2014 Inria. All rights reserved.
+ * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ *
+ * @file codelet_zhe2ge.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @precisions normal z -> c d s
+ *
+ **/
+
+#include "runtime/quark/include/morse_parsec.h"
+
+/**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ **/
+static inline static int
+CORE_zhe2ge_parsec(dague_execution_unit_t    *context,
+                   dague_execution_context_t *this_task)
+{
+    MORSE_enum *uplo;
+    int *M;
+    int *N;
+    const MORSE_Complex64_t *A;
+    int *LDA;
+    MORSE_Complex64_t *B;
+    int *LDB;
+
+    dague_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);
+
+    CORE_zhe2ge(uplo, M, N, A, LDA, B, LDB);
+}
+
+
+void MORSE_TASK_zhe2ge(const MORSE_option_t *options,
+                       MORSE_enum uplo,
+                       int m, int n, int mb,
+                       const MORSE_desc_t *A, int Am, int An, int lda,
+                       const MORSE_desc_t *B, int Bm, int Bn, int ldb)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(
+        DAGUE_dtd_handle, CORE_zhe2ge_parsec, "he2ge",
+        sizeof(MORSE_enum),              &uplo,   VALUE,
+        sizeof(int),                     &m,      VALUE,
+        sizeof(int),                     &n,      VALUE,
+        sizeof(MORSE_Complex64_t)*mb*mb,  RTBLKADDR(A, MORSE_Complex64_t, Am, An), INPUT  | REGION_FULL,
+        sizeof(int),                     &lda,    VALUE,
+        sizeof(MORSE_Complex64_t)*mb*mb,  RTBLKADDR(B, MORSE_Complex64_t, Bm, Bn), OUTPUT | REGION_FULL,
+        sizeof(int),                     &ldb,    VALUE,
+        0);
+}
diff --git a/runtime/parsec/codelets/codelet_zherfb.c b/runtime/parsec/codelets/codelet_zherfb.c
new file mode 100644
index 0000000000000000000000000000000000000000..ab6c58eabc49f2d213c17afd35c426de79a557f1
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zherfb.c
@@ -0,0 +1,90 @@
+/**
+ *
+ * @copyright (c) 2009-2014 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2014 Inria. All rights reserved.
+ * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ *
+ * @file qwrapper_zherfb.c
+ *
+ *  PLASMA core_blas quark wrapper
+ *  PLASMA is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.8.0
+ * @author Hatem Ltaief
+ * @date 2010-11-15
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/quark/include/morse_parsec.h"
+
+static int
+CORE_zherfb_parsec(dague_execution_unit_t    *context,
+                   dague_execution_context_t *this_task)
+{
+    MORSE_enum *uplo;
+    int *n;
+    int *k;
+    int *ib;
+    int *nb;
+    MORSE_Complex64_t *A;
+    int *lda;
+    MORSE_Complex64_t *T;
+    int *ldt;
+    MORSE_Complex64_t *C;
+    int *ldc;
+    MORSE_Complex64_t *WORK;
+    int *ldwork;
+
+    dague_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);
+
+    CORE_zherfb(uplo, n, k, ib, nb,
+                A, lda, T, ldt,
+                C, ldc, WORK, ldwork);
+}
+
+void MORSE_TASK_zherfb(const MORSE_option_t *options,
+                       MORSE_enum uplo,
+                       int n, int k, int ib, int nb,
+                       const MORSE_desc_t *A, int Am, int An, int lda,
+                       const MORSE_desc_t *T, int Tm, int Tn, int ldt,
+                       const MORSE_desc_t *C, int Cm, int Cn, int ldc)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(
+        DAGUE_dtd_handle, CORE_zherfb_parsec, "herfb",
+        sizeof(MORSE_enum),                &uplo, VALUE,
+        sizeof(int),                       &n,    VALUE,
+        sizeof(int),                       &k,    VALUE,
+        sizeof(int),                       &ib,   VALUE,
+        sizeof(int),                       &nb,   VALUE,
+        sizeof(MORSE_Complex64_t)*nb*nb,    RTBLKADDR(A, MORSE_Complex64_t, Am, An), (uplo == MorseUpper) ? INOUT | REGION_U : INOUT | REGION_L,
+        sizeof(int),                       &lda,  VALUE,
+        sizeof(MORSE_Complex64_t)*ib*nb,    RTBLKADDR(T, MORSE_Complex64_t, Tm, Tn), INPUT | REGION_FULL,
+        sizeof(int),                       &ldt,  VALUE,
+        sizeof(MORSE_Complex64_t)*nb*nb,    RTBLKADDR(C, MORSE_Complex64_t, Cm, Cn), (uplo == MorseUpper) ? INOUT | REGION_D | REGION_U : INOUT | REGION_D | REGION_L,
+        sizeof(int),                       &ldc,  VALUE,
+        sizeof(MORSE_Complex64_t)*2*nb*nb,  NULL, SCRATCH,
+        sizeof(int),                       &nb,   VALUE,
+        0);
+}
diff --git a/runtime/parsec/codelets/codelet_zlascal.c b/runtime/parsec/codelets/codelet_zlascal.c
new file mode 100644
index 0000000000000000000000000000000000000000..3cea2ba8bd80cd74d080021092766ace7aaa2014
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zlascal.c
@@ -0,0 +1,80 @@
+/**
+ *
+ * @copyright (c) 2009-2014 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2014 Inria. All rights reserved.
+ * @copyright (c) 2012-2014, 2016 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ *
+ * @file codelet_zlascal.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @comment This file has been automatically generated
+ *          from Plasma 2.5.0 for MORSE 1.0.0
+ * @author Julien Langou
+ * @author Henricus Bouwmeester
+ * @author Mathieu Faverge
+ * @author Emmanuel Agullo
+ * @author Cedric Castagnede
+ * @date 2010-11-15
+ * @precisions normal z -> c d s
+ *
+ **/
+
+#include "runtime/quark/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ **/
+static inline int
+CORE_zlascal_parsec(dague_execution_unit_t    *context,
+                    dague_execution_context_t *this_task)
+{
+    MORSE_enum *uplo;
+    int *M;
+    int *N;
+    MORSE_Complex64_t *alpha;
+    MORSE_Complex64_t *A;
+    int *LDA;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &A,
+                          UNPACK_VALUE, &LDA);
+
+    CORE_zlascal(uplo, M, N, alpha, A, LDA);
+}
+
+void MORSE_TASK_zlascal(const MORSE_option_t *options,
+                        MORSE_enum uplo,
+                        int m, int n, int nb,
+                        MORSE_Complex64_t alpha,
+                        const MORSE_desc_t *A, int Am, int An, int lda)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(
+        DAGUE_dtd_handle, CORE_zlascal_parsec, "lascal",
+        sizeof(MORSE_enum),              &uplo,  VALUE,
+        sizeof(int),                     &m,     VALUE,
+        sizeof(int),                     &n,     VALUE,
+        sizeof(MORSE_Complex64_t),       &alpha, VALUE,
+        sizeof(MORSE_Complex64_t)*nb*nb,  RTBLKADDR(A, MORSE_Complex64_t, Am, An), INOUT | REGION_FULL,
+        sizeof(int),                     &lda,   VALUE,
+        0);
+}
+
+
diff --git a/runtime/parsec/codelets/codelet_zlatro.c b/runtime/parsec/codelets/codelet_zlatro.c
new file mode 100644
index 0000000000000000000000000000000000000000..6cf3e6297c1cf3f099170ae5d2c1de77c306516d
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zlatro.c
@@ -0,0 +1,76 @@
+/**
+ *
+ * @copyright (c) 2009-2014 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2014 Inria. All rights reserved.
+ * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file qwrapper_zlatro.c
+ *
+ *  PLASMA core_blas quark wrapper
+ *  PLASMA is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.8.0
+ * @author Azzam Haidar
+ * @date 2010-11-15
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+
+static int
+CORE_zlatro_parsec(dague_execution_unit_t    *context,
+                   dague_execution_context_t *this_task)
+{
+    MORSE_enum *uplo;
+    MORSE_enum *trans;
+    int *M;
+    int *N;
+    const MORSE_Complex64_t *A;
+    int *LDA;
+    MORSE_Complex64_t *B;
+    int *LDB;
+
+    dague_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);
+
+    CORE_zlatro(uplo, trans, M, N,
+                A, LDA, B, LDB);
+}
+
+/***************************************************************************//**
+ *
+ **/
+void MORSE_TASK_zlatro(const MORSE_option_t *options,
+                       MORSE_enum uplo, MORSE_enum trans,
+                       int m, int n, int mb,
+                       const MORSE_desc_t *A, int Am, int An, int lda,
+                       const MORSE_desc_t *B, int Bm, int Bn, int ldb)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(
+        DAGUE_dtd_handle, CORE_zlatro_parsec, "latro",
+        sizeof(MORSE_enum),              &uplo,  VALUE,
+        sizeof(MORSE_enum),              &trans, VALUE,
+        sizeof(int),                     &m,     VALUE,
+        sizeof(int),                     &n,     VALUE,
+        sizeof(MORSE_Complex64_t)*mb*mb,  RTBLKADDR(A, MORSE_Complex64_t, Am, An), INPUT  | REGION_FULL,
+        sizeof(int),                     &lda,   VALUE,
+        sizeof(MORSE_Complex64_t)*mb*mb,  RTBLKADDR(B, MORSE_Complex64_t, Bm, Bn), OUTPUT | REGION_FULL,
+        sizeof(int),                     &ldb,   VALUE,
+        0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztsmlq_hetra1.c b/runtime/parsec/codelets/codelet_ztsmlq_hetra1.c
new file mode 100644
index 0000000000000000000000000000000000000000..ff3d2ce6f6547325421306514b85427fbaee44fb
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztsmlq_hetra1.c
@@ -0,0 +1,110 @@
+/**
+ *
+ * @copyright (c) 2009-2014 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2014 Inria. All rights reserved.
+ * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ *
+ * @file codelet_ztsmlq_hetra1.c
+ *
+ *  PLASMA core_blas quark wrapper
+ *  PLASMA is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.8.0
+ * @author Hatem Ltaief
+ * @author Mathieu Faverge
+ * @author Jakub Kurzak
+ * @author Azzam Haidar
+ * @date 2010-11-15
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/quark/include/morse_parsec.h"
+
+static int
+CORE_ztsmlq_hetra1_parsec(dague_execution_unit_t    *context,
+                          dague_execution_context_t *this_task)
+{
+    MORSE_enum *side;
+    MORSE_enum *trans;
+    int *m1;
+    int *n1;
+    int *m2;
+    int *n2;
+    int *k;
+    int *ib;
+    MORSE_Complex64_t *A1;
+    int *lda1;
+    MORSE_Complex64_t *A2;
+    int *lda2;
+    MORSE_Complex64_t *V;
+    int *ldv;
+    MORSE_Complex64_t *T;
+    int *ldt;
+    MORSE_Complex64_t *WORK;
+    int *ldwork;
+
+    dague_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);
+
+    CORE_ztsmlq_hetra1(side, trans, m1, n1, m2, n2, k, ib,
+                       A1, lda1, A2, lda2,
+                       V, ldv, T, ldt,
+                       WORK, ldwork);
+}
+
+void MORSE_TASK_ztsmlq_hetra1(const MORSE_option_t *options,
+                              MORSE_enum side, MORSE_enum trans,
+                              int m1, int n1, int m2, int n2, int k, int ib, int nb,
+                              const MORSE_desc_t *A1, int A1m, int A1n, int lda1,
+                              const MORSE_desc_t *A2, int A2m, int A2n, int lda2,
+                              const MORSE_desc_t *V, int Vm, int Vn, int ldv,
+                              const MORSE_desc_t *T, int Tm, int Tn, int ldt)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(
+        DAGUE_dtd_handle, CORE_ztsmlq_hetra1_parsec, "tsmlq_hetra1",
+        sizeof(MORSE_enum),              &side,   VALUE,
+        sizeof(MORSE_enum),              &trans,  VALUE,
+        sizeof(int),                     &m1,     VALUE,
+        sizeof(int),                     &n1,     VALUE,
+        sizeof(int),                     &m2,     VALUE,
+        sizeof(int),                     &n2,     VALUE,
+        sizeof(int),                     &k,      VALUE,
+        sizeof(int),                     &ib,     VALUE,
+        sizeof(MORSE_Complex64_t)*nb*nb,  RTBLKADDR(A1, MORSE_Complex64_t, A1m, A1n), INOUT | REGION_U | REGION_D,
+        sizeof(int),                     &lda1,   VALUE,
+        sizeof(MORSE_Complex64_t)*nb*nb,  RTBLKADDR(A2, MORSE_Complex64_t, A2m, A2n), INOUT | REGION_FULL,
+        sizeof(int),                     &lda2,   VALUE,
+        sizeof(MORSE_Complex64_t)*nb*nb,  RTBLKADDR(V,  MORSE_Complex64_t, Vm,  Vn),  INPUT | REGION_FULL,
+        sizeof(int),                     &ldv,    VALUE,
+        sizeof(MORSE_Complex64_t)*ib*nb,  RTBLKADDR(T,  MORSE_Complex64_t, Tm,  Tn),  INPUT | REGION_FULL,
+        sizeof(int),                     &ldt,    VALUE,
+        sizeof(MORSE_Complex64_t)*ib*nb,  NULL,   SCRATCH,
+        sizeof(int),                     &ldwork, VALUE,
+        0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztsmqr.c b/runtime/parsec/codelets/codelet_ztsmqr.c
index 1d2e782e29b7f4052783975d9182936173b5d2e7..4f3e4f6ae53ad9aa4ebfdc9de4e81a86c76c2d3d 100644
--- a/runtime/parsec/codelets/codelet_ztsmqr.c
+++ b/runtime/parsec/codelets/codelet_ztsmqr.c
@@ -45,24 +45,24 @@ CORE_ztsmqr_parsec(dague_execution_unit_t *context, dague_execution_context_t *t
     int *ldwork;
 
     dague_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_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
+                          UNPACK_VALUE,   &ldwork
                         );
 
 
diff --git a/runtime/parsec/codelets/codelet_ztsmqr_hetra1.c b/runtime/parsec/codelets/codelet_ztsmqr_hetra1.c
new file mode 100644
index 0000000000000000000000000000000000000000..ce428c0f0e93cfcda82693c2b392a201a9127038
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztsmqr_hetra1.c
@@ -0,0 +1,110 @@
+/**
+ *
+ * @copyright (c) 2009-2014 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2014 Inria. All rights reserved.
+ * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ *
+ * @file codelets_ztsmqr_hetra1.c
+ *
+ *  PLASMA core_blas quark wrapper
+ *  PLASMA is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.8.0
+ * @author Hatem Ltaief
+ * @author Mathieu Faverge
+ * @author Jakub Kurzak
+ * @author Azzam Haidar
+ * @date 2010-11-15
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/quark/include/morse_parsec.h"
+
+static int
+CORE_ztsmqr_hetra1_parsec(dague_execution_unit_t    *context,
+                          dague_execution_context_t *this_task)
+{
+    MORSE_enum *side;
+    MORSE_enum *trans;
+    int *m1;
+    int *n1;
+    int *m2;
+    int *n2;
+    int *k;
+    int *ib;
+    MORSE_Complex64_t *A1;
+    int *lda1;
+    MORSE_Complex64_t *A2;
+    int *lda2;
+    MORSE_Complex64_t *V;
+    int *ldv;
+    MORSE_Complex64_t *T;
+    int *ldt;
+    MORSE_Complex64_t *WORK;
+    int *ldwork;
+
+    dague_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);
+
+    CORE_ztsmqr_hetra1(side, trans, m1, n1, m2, n2, k, ib,
+                       A1, lda1, A2, lda2,
+                       V, ldv, T, ldt,
+                       WORK, ldwork);
+}
+
+void MORSE_TASK_ztsmqr_hetra1(const MORSE_option_t *options,
+                              MORSE_enum side, MORSE_enum trans,
+                              int m1, int n1, int m2, int n2, int k, int ib, int nb,
+                              const MORSE_desc_t *A1, int A1m, int A1n, int lda1,
+                              const MORSE_desc_t *A2, int A2m, int A2n, int lda2,
+                              const MORSE_desc_t *V, int Vm, int Vn, int ldv,
+                              const MORSE_desc_t *T, int Tm, int Tn, int ldt)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(
+        DAGUE_dtd_handle, CORE_ztsmqr_hetra1_parsec, "tsmqr_hetra1",
+        sizeof(MORSE_enum),              &side,   VALUE,
+        sizeof(MORSE_enum),              &trans,  VALUE,
+        sizeof(int),                     &m1,     VALUE,
+        sizeof(int),                     &n1,     VALUE,
+        sizeof(int),                     &m2,     VALUE,
+        sizeof(int),                     &n2,     VALUE,
+        sizeof(int),                     &k,      VALUE,
+        sizeof(int),                     &ib,     VALUE,
+        sizeof(MORSE_Complex64_t)*nb*nb,  RTBLKADDR(A1, MORSE_Complex64_t, A1m, A1n), INOUT | REGION_L | REGION_D,
+        sizeof(int),                     &lda1,   VALUE,
+        sizeof(MORSE_Complex64_t)*nb*nb,  RTBLKADDR(A2, MORSE_Complex64_t, A2m, A2n), INOUT | REGION_FULL,
+        sizeof(int),                     &lda2,   VALUE,
+        sizeof(MORSE_Complex64_t)*nb*nb,  RTBLKADDR(V,  MORSE_Complex64_t, Vm,  Vn),  INPUT | REGION_FULL,
+        sizeof(int),                     &ldv,    VALUE,
+        sizeof(MORSE_Complex64_t)*ib*nb,  RTBLKADDR(T,  MORSE_Complex64_t, Tm,  Tn),  INPUT | REGION_FULL,
+        sizeof(int),                     &ldt,    VALUE,
+        sizeof(MORSE_Complex64_t)*ib*nb,  NULL,   SCRATCH,
+        sizeof(int),                     &ldwork, VALUE,
+        0);
+}