diff --git a/compute/pzher2k.c b/compute/pzher2k.c
index 159a7e5494faea83ea83bbc8a19a6134aee6d836..87778f4eb8a16cb90c5b453caca98f65c982fb4c 100644
--- a/compute/pzher2k.c
+++ b/compute/pzher2k.c
@@ -92,7 +92,7 @@ void morse_pzher2k(MORSE_enum uplo, MORSE_enum trans,
                             &options,
                             trans, MorseConjTrans,
                             tempmm, tempnn, tempkn, A->mb,
-                            alpha, A(m, k), ldam,  /* ldam * K */
+                            conj(alpha), A(m, k), ldam,  /* ldam * K */
                                    B(n, k), ldbn,  /* ldan * K */
                             zbeta, C(m, n), ldcm); /* ldc  * N */
 
@@ -129,7 +129,7 @@ void morse_pzher2k(MORSE_enum uplo, MORSE_enum trans,
                             &options,
                             trans, MorseConjTrans,
                             tempnn, tempmm, tempkn, A->mb,
-                            alpha, B(n, k), ldan,  /* ldan * K */
+                            conj(alpha), B(n, k), ldan,  /* ldan * K */
                                    A(m, k), ldam,  /* ldam * M */
                             zone,  C(n, m), ldcn); /* ldc  * M */
                     }
@@ -206,7 +206,7 @@ void morse_pzher2k(MORSE_enum uplo, MORSE_enum trans,
                             &options,
                             trans, MorseNoTrans,
                             tempnn, tempmm, tempkm, A->mb,
-                            alpha, B(k, n), ldbk,  /* lda * K */
+                            conj(alpha), B(k, n), ldbk,  /* lda * K */
                                    A(k, m), ldak,  /* lda * M */
                             zone,  C(n, m), ldcn); /* ldc * M */
                     }
diff --git a/compute/pztrmm.c b/compute/pztrmm.c
index 5a8d9ac2de447402e6affd154f4c028a1fb4f090..1d9b20c0a5eaa6853fa461c4463487da17984f60 100644
--- a/compute/pztrmm.c
+++ b/compute/pztrmm.c
@@ -45,7 +45,7 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
     MORSE_option_t options;
 
     int k, m, n;
-    int lda, ldak, ldb, ldbk;
+    int ldak, ldam, ldan, ldbk, ldbm;
     int tempkm, tempkn, tempmm, tempnn;
 
     MORSE_Complex64_t zone = (MORSE_Complex64_t)1.0;
@@ -62,16 +62,16 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
             if (trans == MorseNoTrans) {
                 for (m = 0; m < B->mt; m++) {
                     tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                    ldb = BLKLDD(B, m);
-                    lda = BLKLDD(A, m);
+                    ldbm = BLKLDD(B, m);
+                    ldam = BLKLDD(A, m);
                     for (n = 0; n < B->nt; n++) {
                         tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
                         MORSE_TASK_ztrmm(
                             &options,
                             side, uplo, trans, diag,
                             tempmm, tempnn, A->mb,
-                            alpha, A(m, m), lda,  /* lda * tempkm */
-                                   B(m, n), ldb); /* ldb * tempnn */
+                            alpha, A(m, m), ldam,  /* lda * tempkm */
+                                   B(m, n), ldbm); /* ldb * tempnn */
 
                         for (k = m+1; k < A->mt; k++) {
                             tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
@@ -80,9 +80,9 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
                                 &options,
                                 trans, MorseNoTrans,
                                 tempmm, tempnn, tempkn, A->mb,
-                                alpha, A(m, k), lda,
+                                alpha, A(m, k), ldam,
                                        B(k, n), ldbk,
-                                zone,  B(m, n), ldb);
+                                zone,  B(m, n), ldbm);
                         }
                     }
                 }
@@ -93,25 +93,27 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
             else {
                 for (m = B->mt-1; m > -1; m--) {
                     tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                    ldb = BLKLDD(B, m);
-                    lda = BLKLDD(A, m);
+                    ldbm = BLKLDD(B, m);
+                    ldam = BLKLDD(A, m);
                     for (n = 0; n < B->nt; n++) {
                         tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
                         MORSE_TASK_ztrmm(
                             &options,
                             side, uplo, trans, diag,
                             tempmm, tempnn, A->mb,
-                            alpha, A(m, m), lda,  /* lda * tempkm */
-                                   B(m, n), ldb); /* ldb * tempnn */
+                            alpha, A(m, m), ldam,  /* lda * tempkm */
+                                   B(m, n), ldbm); /* ldb * tempnn */
 
                         for (k = 0; k < m; k++) {
+                            ldbk = BLKLDD(B, k);
+                            ldak = BLKLDD(A, k);
                             MORSE_TASK_zgemm(
                                 &options,
                                 trans, MorseNoTrans,
                                 tempmm, tempnn, B->mb, A->mb,
-                                alpha, A(k, m), A->mb,
-                                       B(k, n), B->mb,
-                                zone,  B(m, n), ldb);
+                                alpha, A(k, m), ldak,
+                                       B(k, n), ldbk,
+                                zone,  B(m, n), ldbm);
                         }
                     }
                 }
@@ -124,25 +126,26 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
             if (trans == MorseNoTrans) {
                 for (m = B->mt-1; m > -1; m--) {
                     tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                    ldb = BLKLDD(B, m);
-                    lda = BLKLDD(A, m);
+                    ldbm = BLKLDD(B, m);
+                    ldam = BLKLDD(A, m);
                     for (n = 0; n < B->nt; n++) {
                         tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
                         MORSE_TASK_ztrmm(
                             &options,
                             side, uplo, trans, diag,
                             tempmm, tempnn, A->mb,
-                            alpha, A(m, m), lda,  /* lda * tempkm */
-                                   B(m, n), ldb); /* ldb * tempnn */
+                            alpha, A(m, m), ldam,  /* lda * tempkm */
+                                   B(m, n), ldbm); /* ldb * tempnn */
 
                         for (k = 0; k < m; k++) {
+                            ldbk = BLKLDD(B, k);
                             MORSE_TASK_zgemm(
                                 &options,
                                 trans, MorseNoTrans,
                                 tempmm, tempnn, B->mb, A->mb,
-                                alpha, A(m, k), lda,
-                                       B(k, n), B->mb,
-                                zone,  B(m, n), ldb);
+                                alpha, A(m, k), ldam,
+                                       B(k, n), ldbk,
+                                zone,  B(m, n), ldbm);
                         }
                     }
                 }
@@ -153,16 +156,16 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
             else {
                 for (m = 0; m < B->mt; m++) {
                     tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                    ldb = BLKLDD(B, m);
-                    lda = BLKLDD(A, m);
+                    ldbm = BLKLDD(B, m);
+                    ldam = BLKLDD(A, m);
                     for (n = 0; n < B->nt; n++) {
                         tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
                         MORSE_TASK_ztrmm(
                             &options,
                             side, uplo, trans, diag,
                             tempmm, tempnn, A->mb,
-                            alpha, A(m, m), lda,  /* lda * tempkm */
-                                   B(m, n), ldb); /* ldb * tempnn */
+                            alpha, A(m, m), ldam,  /* lda * tempkm */
+                                   B(m, n), ldbm); /* ldb * tempnn */
 
                         for (k = m+1; k < A->mt; k++) {
                             tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
@@ -174,7 +177,7 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
                                 tempmm, tempnn, tempkm, A->mb,
                                 alpha, A(k, m), ldak,
                                        B(k, n), ldbk,
-                                zone,  B(m, n), ldb);
+                                zone,  B(m, n), ldbm);
                         }
                     }
                 }
@@ -189,25 +192,26 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
             if (trans == MorseNoTrans) {
                 for (n = B->nt-1; n > -1; n--) {
                     tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
-                    lda = BLKLDD(A, n);
+                    ldan = BLKLDD(A, n);
                     for (m = 0; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                        ldb = BLKLDD(B, m);
+                        ldbm = BLKLDD(B, m);
                         MORSE_TASK_ztrmm(
                             &options,
                             side, uplo, trans, diag,
                             tempmm, tempnn, A->mb,
-                            alpha, A(n, n), lda,  /* lda * tempkm */
-                                   B(m, n), ldb); /* ldb * tempnn */
+                            alpha, A(n, n), ldan,  /* lda * tempkm */
+                                   B(m, n), ldbm); /* ldb * tempnn */
 
                         for (k = 0; k < n; k++) {
+                            ldak = BLKLDD(A, k);
                             MORSE_TASK_zgemm(
                                 &options,
                                 MorseNoTrans, trans,
                                 tempmm, tempnn, B->mb, A->mb,
-                                alpha, B(m, k), ldb,
-                                       A(k, n), A->mb,
-                                zone,  B(m, n), ldb);
+                                alpha, B(m, k), ldbm,
+                                       A(k, n), ldak,
+                                zone,  B(m, n), ldbm);
                         }
                     }
                 }
@@ -218,16 +222,16 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
             else {
                 for (n = 0; n < B->nt; n++) {
                     tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
-                    lda = BLKLDD(A, n);
+                    ldan = BLKLDD(A, n);
                     for (m = 0; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                        ldb = BLKLDD(B, m);
+                        ldbm = BLKLDD(B, m);
                         MORSE_TASK_ztrmm(
                             &options,
                             side, uplo, trans, diag,
                             tempmm, tempnn, A->mb,
-                            alpha, A(n, n), lda,  /* lda * tempkm */
-                                   B(m, n), ldb); /* ldb * tempnn */
+                            alpha, A(n, n), ldan,  /* lda * tempkm */
+                                   B(m, n), ldbm); /* ldb * tempnn */
 
                         for (k = n+1; k < A->mt; k++) {
                             tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
@@ -235,9 +239,9 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
                                 &options,
                                 MorseNoTrans, trans,
                                 tempmm, tempnn, tempkn, A->mb,
-                                alpha, B(m, k), ldb,
-                                       A(n, k), lda,
-                                zone,  B(m, n), ldb);
+                                alpha, B(m, k), ldbm,
+                                       A(n, k), ldan,
+                                zone,  B(m, n), ldbm);
                         }
                     }
                 }
@@ -250,16 +254,16 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
             if (trans == MorseNoTrans) {
                 for (n = 0; n < B->nt; n++) {
                     tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
-                    lda = BLKLDD(A, n);
+                    ldan = BLKLDD(A, n);
                     for (m = 0; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                        ldb = BLKLDD(B, m);
+                        ldbm = BLKLDD(B, m);
                         MORSE_TASK_ztrmm(
                             &options,
                             side, uplo, trans, diag,
                             tempmm, tempnn, A->mb,
-                            alpha, A(n, n), lda,  /* lda * tempkm */
-                                   B(m, n), ldb); /* ldb * tempnn */
+                            alpha, A(n, n), ldan,  /* lda * tempkm */
+                                   B(m, n), ldbm); /* ldb * tempnn */
 
                         for (k = n+1; k < A->mt; k++) {
                             tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
@@ -268,9 +272,9 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
                                 &options,
                                 MorseNoTrans, trans,
                                 tempmm, tempnn, tempkn, A->mb,
-                                alpha, B(m, k), ldb,
+                                alpha, B(m, k), ldbm,
                                        A(k, n), ldak,
-                                zone,  B(m, n), ldb);
+                                zone,  B(m, n), ldbm);
                         }
                     }
                 }
@@ -281,25 +285,25 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
             else {
                 for (n = B->nt-1; n > -1; n--) {
                     tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
-                    lda = BLKLDD(A, n);
+                    ldan = BLKLDD(A, n);
                     for (m = 0; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                        ldb = BLKLDD(B, m);
+                        ldbm = BLKLDD(B, m);
                         MORSE_TASK_ztrmm(
                             &options,
                             side, uplo, trans, diag,
                             tempmm, tempnn, A->mb,
-                            alpha, A(n, n), lda,  /* lda * tempkm */
-                                   B(m, n), ldb); /* ldb * tempnn */
+                            alpha, A(n, n), ldan,  /* lda * tempkm */
+                                   B(m, n), ldbm); /* ldb * tempnn */
 
                         for (k = 0; k < n; k++) {
                             MORSE_TASK_zgemm(
                                 &options,
                                 MorseNoTrans, trans,
                                 tempmm, tempnn, B->mb, A->mb,
-                                alpha, B(m, k), ldb,
-                                       A(n, k), lda,
-                                zone,  B(m, n), ldb);
+                                alpha, B(m, k), ldbm,
+                                       A(n, k), ldan,
+                                zone,  B(m, n), ldbm);
                         }
                     }
                 }
diff --git a/compute/pztrsm.c b/compute/pztrsm.c
index 836c5023b68ccef39b396c724c2c161ac239522e..f981f68bb282d0bb1ea941ca5e496956a66a951e 100644
--- a/compute/pztrsm.c
+++ b/compute/pztrsm.c
@@ -1,10 +1,10 @@
 /**
  *
- * @copyright (c) 2009-2014 The University of Tennessee and The University
+ * @copyright (c) 2009-2015 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.
+ * @copyright (c) 2012-2016 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
  *
  **/
 
@@ -43,7 +43,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
     MORSE_option_t options;
 
     int k, m, n;
-    int lda, ldan, ldb;
+    int ldak, ldam, ldan, ldbk, ldbm;
     int tempkm, tempkn, tempmm, tempnn;
 
     MORSE_Complex64_t zone       = (MORSE_Complex64_t) 1.0;
@@ -63,8 +63,8 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
             if (trans == MorseNoTrans) {
                 for (k = 0; k < B->mt; k++) {
                     tempkm = k == 0 ? B->m-(B->mt-1)*B->mb : B->mb;
-                    lda = BLKLDD(A, B->mt-1-k);
-                    ldb = BLKLDD(B, B->mt-1-k);
+                    ldak = BLKLDD(A, B->mt-1-k);
+                    ldbk = BLKLDD(B, B->mt-1-k);
                     lalpha = k == 0 ? alpha : zone;
                     for (n = 0; n < B->nt; n++) {
                         tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
@@ -72,21 +72,22 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             &options,
                             side, uplo, trans, diag,
                             tempkm, tempnn, A->mb,
-                            lalpha, A(B->mt-1-k, B->mt-1-k), lda,  /* lda * tempkm */
-                                    B(B->mt-1-k,        n), ldb); /* ldb * tempnn */
+                            lalpha, A(B->mt-1-k, B->mt-1-k), ldak,  /* lda * tempkm */
+                                    B(B->mt-1-k,        n), ldbk); /* ldb * tempnn */
                     }
                     MORSE_TASK_dataflush( &options, A(B->mt-1-k, B->mt-1-k) );
-
                     for (m = k+1; m < B->mt; m++) {
+                        ldam = BLKLDD(A, B->mt-1-m);
+                        ldbm = BLKLDD(B, B->mt-1-m);
                         for (n = 0; n < B->nt; n++) {
                             tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
                             MORSE_TASK_zgemm(
                                 &options,
                                 MorseNoTrans, MorseNoTrans,
                                 B->mb, tempnn, tempkm, A->mb,
-                                mzone,  A(B->mt-1-m, B->mt-1-k), A->mb,
-                                        B(B->mt-1-k, n       ), ldb,
-                                lalpha, B(B->mt-1-m, n       ), B->mb);
+                                mzone,  A(B->mt-1-m, B->mt-1-k), ldam,
+                                        B(B->mt-1-k, n       ), ldbk,
+                                lalpha, B(B->mt-1-m, n       ), ldbm);
                         }
                         MORSE_TASK_dataflush( &options, A(B->mt-1-m, B->mt-1-k) );
                     }
@@ -101,8 +102,8 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
             else {
                 for (k = 0; k < B->mt; k++) {
                     tempkm = k == B->mt-1 ? B->m-k*B->mb : B->mb;
-                    lda = BLKLDD(A, k);
-                    ldb = BLKLDD(B, k);
+                    ldak = BLKLDD(A, k);
+                    ldbk = BLKLDD(B, k);
                     lalpha = k == 0 ? alpha : zone;
                     for (n = 0; n < B->nt; n++) {
                         tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
@@ -110,29 +111,29 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             &options,
                             side, uplo, trans, diag,
                             tempkm, tempnn, A->mb,
-                            lalpha, A(k, k), lda,
-                                    B(k, n), ldb);
+                            lalpha, A(k, k), ldak,
+                                    B(k, n), ldbk);
                     }
                     MORSE_TASK_dataflush( &options, A(k, k) );
-
                     for (m = k+1; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                        ldb = BLKLDD(B, m);
+                        ldbm = BLKLDD(B, m);
                         for (n = 0; n < B->nt; n++) {
                             tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
                             MORSE_TASK_zgemm(
                                 &options,
                                 trans, MorseNoTrans,
                                 tempmm, tempnn, B->mb, A->mb,
-                                mzone,  A(k, m), A->mb,
-                                        B(k, n), B->mb,
-                                lalpha, B(m, n), ldb);
+                                mzone,  A(k, m), ldak,
+                                        B(k, n), ldbk,
+                                lalpha, B(m, n), ldbm);
                         }
                         MORSE_TASK_dataflush( &options, A(k, m) );
                     }
                     for (n = 0; n < B->nt; n++) {
                         MORSE_TASK_dataflush( &options, B(k, n) );
                     }
+
                 }
             }
         }
@@ -143,8 +144,8 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
             if (trans == MorseNoTrans) {
                 for (k = 0; k < B->mt; k++) {
                     tempkm = k == B->mt-1 ? B->m-k*B->mb : B->mb;
-                    lda = BLKLDD(A, k);
-                    ldb = BLKLDD(B, k);
+                    ldak = BLKLDD(A, k);
+                    ldbk = BLKLDD(B, k);
                     lalpha = k == 0 ? alpha : zone;
                     for (n = 0; n < B->nt; n++) {
                         tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
@@ -152,24 +153,23 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             &options,
                             side, uplo, trans, diag,
                             tempkm, tempnn, A->mb,
-                            lalpha, A(k, k), lda,
-                                    B(k, n), ldb);
+                            lalpha, A(k, k), ldak,
+                                    B(k, n), ldbk);
                     }
                     MORSE_TASK_dataflush( &options, A(k, k) );
-
                     for (m = k+1; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                        lda = BLKLDD(A, m);
-                        ldb = BLKLDD(B, m);
+                        ldam = BLKLDD(A, m);
+                        ldbm = BLKLDD(B, m);
                         for (n = 0; n < B->nt; n++) {
                             tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
                             MORSE_TASK_zgemm(
                                 &options,
                                 MorseNoTrans, MorseNoTrans,
                                 tempmm, tempnn, B->mb, A->mb,
-                                mzone,  A(m, k), lda,
-                                        B(k, n), B->mb,
-                                lalpha, B(m, n), ldb);
+                                mzone,  A(m, k), ldam,
+                                        B(k, n), ldbk,
+                                lalpha, B(m, n), ldbm);
                         }
                         MORSE_TASK_dataflush( &options, A(m, k) );
                     }
@@ -184,8 +184,8 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
             else {
                 for (k = 0; k < B->mt; k++) {
                     tempkm = k == 0 ? B->m-(B->mt-1)*B->mb : B->mb;
-                    lda = BLKLDD(A, B->mt-1-k);
-                    ldb = BLKLDD(B, B->mt-1-k);
+                    ldak = BLKLDD(A, B->mt-1-k);
+                    ldbk = BLKLDD(B, B->mt-1-k);
                     lalpha = k == 0 ? alpha : zone;
                     for (n = 0; n < B->nt; n++) {
                         tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
@@ -193,22 +193,22 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             &options,
                             side, uplo, trans, diag,
                             tempkm, tempnn, A->mb,
-                            lalpha, A(B->mt-1-k, B->mt-1-k), lda,
-                                    B(B->mt-1-k,        n), ldb);
+                            lalpha, A(B->mt-1-k, B->mt-1-k), ldak,
+                                    B(B->mt-1-k,        n), ldbk);
                     }
                     MORSE_TASK_dataflush( &options, A(B->mt-1-k, B->mt-1-k) );
-
                     for (m = k+1; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
+                        ldbm = BLKLDD(B, B->mt-1-m);
                         for (n = 0; n < B->nt; n++) {
                             tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
                             MORSE_TASK_zgemm(
                                 &options,
                                 trans, MorseNoTrans,
                                 B->mb, tempnn, tempkm, A->mb,
-                                mzone,  A(B->mt-1-k, B->mt-1-m), lda,
-                                        B(B->mt-1-k, n       ), ldb,
-                                lalpha, B(B->mt-1-m, n       ), B->mb);
+                                mzone,  A(B->mt-1-k, B->mt-1-m), ldak,
+                                        B(B->mt-1-k, n       ), ldbk,
+                                lalpha, B(B->mt-1-m, n       ), ldbm);
                         }
                         MORSE_TASK_dataflush( &options, A(B->mt-1-k, B->mt-1-m) );
                     }
@@ -227,32 +227,31 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
             if (trans == MorseNoTrans) {
                 for (k = 0; k < B->nt; k++) {
                     tempkn = k == B->nt-1 ? B->n-k*B->nb : B->nb;
-                    lda = BLKLDD(A, k);
+                    ldak = BLKLDD(A, k);
                     lalpha = k == 0 ? alpha : zone;
                     for (m = 0; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                        ldb = BLKLDD(B, m);
+                        ldbm = BLKLDD(B, m);
                         MORSE_TASK_ztrsm(
                             &options,
                             side, uplo, trans, diag,
                             tempmm, tempkn, A->mb,
-                            lalpha, A(k, k), lda,  /* lda * tempkn */
-                                    B(m, k), ldb); /* ldb * tempkn */
+                            lalpha, A(k, k), ldak,  /* lda * tempkn */
+                                    B(m, k), ldbm); /* ldb * tempkn */
                     }
                     MORSE_TASK_dataflush( &options, A(k, k) );
-
                     for (m = 0; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                        ldb = BLKLDD(B, m);
+                        ldbm = BLKLDD(B, m);
                         for (n = k+1; n < B->nt; n++) {
                             tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
                             MORSE_TASK_zgemm(
                                 &options,
                                 MorseNoTrans, MorseNoTrans,
                                 tempmm, tempnn, B->mb, A->mb,
-                                mzone,  B(m, k), ldb,  /* ldb * B->mb   */
-                                        A(k, n), lda,  /* lda * tempnn */
-                                lalpha, B(m, n), ldb); /* ldb * tempnn */
+                                mzone,  B(m, k), ldbm,  /* ldb * B->mb   */
+                                        A(k, n), ldak,  /* lda * tempnn */
+                                lalpha, B(m, n), ldbm); /* ldb * tempnn */
                         }
                         MORSE_TASK_dataflush( &options, B(m, k) );
                     }
@@ -267,26 +266,27 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
             else {
                 for (k = 0; k < B->nt; k++) {
                     tempkn = k == 0 ? B->n-(B->nt-1)*B->nb : B->nb;
-                    lda = BLKLDD(A, B->nt-1-k);
+                    ldak = BLKLDD(A, B->nt-1-k);
                     for (m = 0; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                        ldb = BLKLDD(B, m);
+                        ldbm = BLKLDD(B, m);
                         MORSE_TASK_ztrsm(
                             &options,
                             side, uplo, trans, diag,
                             tempmm, tempkn, A->mb,
-                            alpha, A(B->nt-1-k, B->nt-1-k), lda,  /* lda * tempkn */
-                                   B(       m, B->nt-1-k), ldb); /* ldb * tempkn */
+                            alpha, A(B->nt-1-k, B->nt-1-k), ldak,  /* lda * tempkn */
+                                   B(       m, B->nt-1-k), ldbm); /* ldb * tempkn */
                         MORSE_TASK_dataflush( &options, A(B->nt-1-k, B->nt-1-k) );
 
                         for (n = k+1; n < B->nt; n++) {
+                            ldan = BLKLDD(A, B->nt-1-n);
                             MORSE_TASK_zgemm(
                                 &options,
                                 MorseNoTrans, trans,
                                 tempmm, B->nb, tempkn, A->mb,
-                                minvalpha, B(m,        B->nt-1-k), ldb,  /* ldb  * tempkn */
-                                           A(B->nt-1-n, B->nt-1-k), A->mb, /* A->mb * tempkn (Never last row) */
-                                zone,      B(m,        B->nt-1-n), ldb); /* ldb  * B->nb   */
+                                minvalpha, B(m,        B->nt-1-k), ldbm,  /* ldb  * tempkn */
+                                           A(B->nt-1-n, B->nt-1-k), ldan, /* A->mb * tempkn (Never last row) */
+                                zone,      B(m,        B->nt-1-n), ldbm); /* ldb  * B->nb   */
                         }
                         MORSE_TASK_dataflush( &options, B(m,        B->nt-1-k) );
                     }
@@ -303,17 +303,17 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
             if (trans == MorseNoTrans) {
                 for (k = 0; k < B->nt; k++) {
                     tempkn = k == 0 ? B->n-(B->nt-1)*B->nb : B->nb;
-                    lda = BLKLDD(A, B->nt-1-k);
+                    ldak = BLKLDD(A, B->nt-1-k);
                     lalpha = k == 0 ? alpha : zone;
                     for (m = 0; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                        ldb = BLKLDD(B, m);
+                        ldbm = BLKLDD(B, m);
                         MORSE_TASK_ztrsm(
                             &options,
                             side, uplo, trans, diag,
                             tempmm, tempkn, A->mb,
-                            lalpha, A(B->nt-1-k, B->nt-1-k), lda,  /* lda * tempkn */
-                                    B(       m, B->nt-1-k), ldb); /* ldb * tempkn */
+                            lalpha, A(B->nt-1-k, B->nt-1-k), ldak,  /* lda * tempkn */
+                                    B(       m, B->nt-1-k), ldbm); /* ldb * tempkn */
                         MORSE_TASK_dataflush( &options, A(B->nt-1-k, B->nt-1-k) );
 
                         for (n = k+1; n < B->nt; n++) {
@@ -321,9 +321,9 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                 &options,
                                 MorseNoTrans, MorseNoTrans,
                                 tempmm, B->nb, tempkn, A->mb,
-                                mzone,  B(m,        B->nt-1-k), ldb,  /* ldb * tempkn */
-                                        A(B->nt-1-k, B->nt-1-n), lda,  /* lda * B->nb   */
-                                lalpha, B(m,        B->nt-1-n), ldb); /* ldb * B->nb   */
+                                mzone,  B(m,        B->nt-1-k), ldbm,  /* ldb * tempkn */
+                                        A(B->nt-1-k, B->nt-1-n), ldak,  /* lda * B->nb   */
+                                lalpha, B(m,        B->nt-1-n), ldbm); /* ldb * B->nb   */
                         }
                         MORSE_TASK_dataflush( &options, B(m,        B->nt-1-k) );
                     }
@@ -338,16 +338,16 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
             else {
                 for (k = 0; k < B->nt; k++) {
                     tempkn = k == B->nt-1 ? B->n-k*B->nb : B->nb;
-                    lda = BLKLDD(A, k);
+                    ldak = BLKLDD(A, k);
                     for (m = 0; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
-                        ldb = BLKLDD(B, m);
+                        ldbm = BLKLDD(B, m);
                         MORSE_TASK_ztrsm(
                             &options,
                             side, uplo, trans, diag,
                             tempmm, tempkn, A->mb,
-                            alpha, A(k, k), lda,  /* lda * tempkn */
-                                   B(m, k), ldb); /* ldb * tempkn */
+                            alpha, A(k, k), ldak,  /* lda * tempkn */
+                                   B(m, k), ldbm); /* ldb * tempkn */
                         MORSE_TASK_dataflush( &options, A(k, k) );
 
                         for (n = k+1; n < B->nt; n++) {
@@ -357,19 +357,19 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                 &options,
                                 MorseNoTrans, trans,
                                 tempmm, tempnn, B->mb, A->mb,
-                                minvalpha, B(m, k), ldb,  /* ldb  * tempkn */
+                                minvalpha, B(m, k), ldbm,  /* ldb  * tempkn */
                                            A(n, k), ldan, /* ldan * tempkn */
-                                zone,      B(m, n), ldb); /* ldb  * tempnn */
+                                zone,      B(m, n), ldbm); /* ldb  * tempnn */
                         }
                         MORSE_TASK_dataflush( &options, B(m, k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
                         MORSE_TASK_dataflush( &options, A(n, k) );
                     }
+
                 }
             }
         }
     }
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }