diff --git a/compute/zgeadd.c b/compute/zgeadd.c
index b6e85b32297b0b56bbd9b3e0d9aaa6a46230e657..93e709dfdc08c35447af4d3f5d797b20e44df630 100644
--- a/compute/zgeadd.c
+++ b/compute/zgeadd.c
@@ -154,10 +154,10 @@ int MORSE_zgeadd(MORSE_enum trans, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) { */
-        morse_zooplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, An, Am, An, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, N, M, N, sequence, &request );
     /* } else { */
     /*     morse_ziplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, */
     /*                         sequence, &request); */
diff --git a/compute/zgelqf.c b/compute/zgelqf.c
index 55b9284837f7af7fd60f17702fcba108942c4d1b..4fb713c04b4482a4348f28408bfafc0eef238df0 100644
--- a/compute/zgelqf.c
+++ b/compute/zgelqf.c
@@ -123,8 +123,8 @@ int MORSE_zgelqf(int M, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zgelqf_param.c b/compute/zgelqf_param.c
index d650ba8ad5f3b180d22f0011dd334ce27b3b55b8..1b0c5bf6121d669e92b191228f0791c9e84ebaf0 100644
--- a/compute/zgelqf_param.c
+++ b/compute/zgelqf_param.c
@@ -120,8 +120,8 @@ int MORSE_zgelqf_param(const libhqr_tree_t *qrtree, int M, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zgelqs.c b/compute/zgelqs.c
index 816bf996950f731c5834330c046d4294437da334..dde651c6844f1ff3cf88d72286af23d577bb934b 100644
--- a/compute/zgelqs.c
+++ b/compute/zgelqs.c
@@ -138,10 +138,10 @@ int MORSE_zgelqs(int M, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/zgelqs_param.c b/compute/zgelqs_param.c
index 2a93e3265ac3a1eabde40543372106ca46559dba..fc3d96ea60aee43829a72852c6076677d6c1ca6d 100644
--- a/compute/zgelqs_param.c
+++ b/compute/zgelqs_param.c
@@ -140,10 +140,10 @@ int MORSE_zgelqs_param(const libhqr_tree_t *qrtree, int M, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/zgels.c b/compute/zgels.c
index 7b6392f4c0690d41301897cdf794559d1301e76f..a12abd3ca63c112d6847f3ab20f665936bf6023e 100644
--- a/compute/zgels.c
+++ b/compute/zgels.c
@@ -173,10 +173,10 @@ int MORSE_zgels(MORSE_enum trans, int M, int N, int NRHS,
 
     if ( M >= N ) {
 /*        if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-            morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N, sequence, &request,
-                                 morse_desc_mat_free(&(descA)) );
-            morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, M, NRHS, sequence, &request,
-                                 morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, M, NRHS, sequence, &request );
 /*        } else {*/
 /*            morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N,*/
 /*                                sequence, &request);*/
@@ -185,10 +185,10 @@ int MORSE_zgels(MORSE_enum trans, int M, int N, int NRHS,
 /*        }*/
     } else {
 /*        if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-            morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N, sequence, &request,
-                                 morse_desc_mat_free(&(descA)) );
-            morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                                 morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 /*        } else {*/
 /*            morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N,*/
 /*                                sequence, &request);*/
diff --git a/compute/zgels_param.c b/compute/zgels_param.c
index 9e91871be2973d89a78be91aa3c2e788074d757f..26d4ae18a61bed367dbbb16caa5ef58009d16994 100644
--- a/compute/zgels_param.c
+++ b/compute/zgels_param.c
@@ -175,10 +175,10 @@ int MORSE_zgels_param(const libhqr_tree_t *qrtree, MORSE_enum trans, int M, int
 
     if ( M >= N ) {
         /*        if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N, sequence, &request,
-                            morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, M, NRHS, sequence, &request,
-                            morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, M, NRHS, sequence, &request );
         /*        } else {*/
         /*            morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N,*/
         /*                                sequence, &request);*/
@@ -187,10 +187,10 @@ int MORSE_zgels_param(const libhqr_tree_t *qrtree, MORSE_enum trans, int M, int
         /*        }*/
     } else {
         /*        if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N, sequence, &request,
-                            morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                            morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
         /*        } else {*/
         /*            morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N,*/
         /*                                sequence, &request);*/
diff --git a/compute/zgemm.c b/compute/zgemm.c
index 332b540061849362a78b9c4dc8d893e39ae56bbb..7d5fd72bd372ca856bdeea48a43393984da1ebe5 100644
--- a/compute/zgemm.c
+++ b/compute/zgemm.c
@@ -211,12 +211,12 @@ int MORSE_zgemm(MORSE_enum transA, MORSE_enum transB, int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, Bn, 0, 0, Bm, Bn, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
-        morse_zooplap2tile( descC, C, NB, NB, LDC, N,  0, 0, M,  N,  sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)); morse_desc_mat_free(&(descC)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, An, Am, An, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, Bn, Bm, Bn, sequence, &request );
+    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+                     C, NB, NB, LDC, N, M,  N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, */
 /*                            sequence, &request);*/
diff --git a/compute/zgeqrf.c b/compute/zgeqrf.c
index 5e500472b0dd8c3ed530b94c9e230b7833bd8172..08604a843530e8ba6a76514507296ebe1bf8b427 100644
--- a/compute/zgeqrf.c
+++ b/compute/zgeqrf.c
@@ -122,8 +122,8 @@ int MORSE_zgeqrf(int M, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zgeqrf_param.c b/compute/zgeqrf_param.c
index a67f508db78185e1264e6935a0cfa379df024c1c..4e1dbb61234bcdc89b7883529316be94fd0a4c80 100644
--- a/compute/zgeqrf_param.c
+++ b/compute/zgeqrf_param.c
@@ -125,8 +125,8 @@ int MORSE_zgeqrf_param(const libhqr_tree_t *qrtree, int M, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zgeqrs.c b/compute/zgeqrs.c
index 29b962f4f6c5f20483682f54eff2822ee9402edc..615c1513a913c8d4cd6709f2d2de92368eff4bb5 100644
--- a/compute/zgeqrs.c
+++ b/compute/zgeqrs.c
@@ -138,10 +138,10 @@ int MORSE_zgeqrs(int M, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, M, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, M, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/zgeqrs_param.c b/compute/zgeqrs_param.c
index 6e6cb28b394e3b1d815757968cd6dcbf5ae56ae6..c14ee32b0608a5b9bac6c2a2df61c624aaf6ed46 100644
--- a/compute/zgeqrs_param.c
+++ b/compute/zgeqrs_param.c
@@ -133,10 +133,10 @@ int MORSE_zgeqrs_param(const libhqr_tree_t *qrtree, int M, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, M, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, M, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, M, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/zgesv_incpiv.c b/compute/zgesv_incpiv.c
index ca0ca1e6a74dfa96cce66e4616ebd1be54f4af4c..f1431c24e26bdbc73791e0274b1a10b59c2f3636 100644
--- a/compute/zgesv_incpiv.c
+++ b/compute/zgesv_incpiv.c
@@ -137,10 +137,10 @@ int MORSE_zgesv_incpiv(int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/zgesv_nopiv.c b/compute/zgesv_nopiv.c
index bc0d9bdf9d3fd297954c2a6cc14d692c59002705..97a540d58f8d5739ea6c1a149e70be172e00fe86 100644
--- a/compute/zgesv_nopiv.c
+++ b/compute/zgesv_nopiv.c
@@ -136,10 +136,10 @@ int MORSE_zgesv_nopiv(int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/zgesvd.c b/compute/zgesvd.c
index 968c0a01b427303b55a50c8574231d407222a849..7432a277f5b8372939e42ea64276edb4719389e6 100644
--- a/compute/zgesvd.c
+++ b/compute/zgesvd.c
@@ -215,8 +215,8 @@ int MORSE_zgesvd(MORSE_enum jobu, MORSE_enum jobvt,
     morse_sequence_create(morse, &sequence);
 
     /* if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) { */
-    morse_zooplap2tile( descA, A, NB, NB,  LDA, N, 0, 0, M, N, sequence, &request,
-                        morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB,  LDA, N, M, N, sequence, &request );
     /* } else { */
     /*     morse_ziplap2tile( descA,   A, NB, NB,  LDA, N, 0, 0, M, N, */
     /*                         sequence, &request); */
diff --git a/compute/zgetrf_incpiv.c b/compute/zgetrf_incpiv.c
index aaf96f147bfdf88424c2200fd29eb645e005aa47..243e7f70c17902f58f9393f37f1ca8706aa3aef3 100644
--- a/compute/zgetrf_incpiv.c
+++ b/compute/zgetrf_incpiv.c
@@ -124,8 +124,8 @@ int MORSE_zgetrf_incpiv(int M, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zgetrf_nopiv.c b/compute/zgetrf_nopiv.c
index 5e56c4a8b6bd8dffd399385ebc61bcf2ac52ea36..447ed24f5d60e96d42d637f5ed1c865b3ca8cbc5 100644
--- a/compute/zgetrf_nopiv.c
+++ b/compute/zgetrf_nopiv.c
@@ -117,9 +117,8 @@ int MORSE_zgetrf_nopiv(int M, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N,
-                             sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile(  descA, A, NB, NB, LDA, N, 0, 0, N, N,*/
 /*                             sequence, &request);*/
diff --git a/compute/zgetrs_incpiv.c b/compute/zgetrs_incpiv.c
index 195b0895d444eb00ca8e7b5ad70bff8bd06a5800..d2a410344c6a1ed36401ad756192844927f94c31 100644
--- a/compute/zgetrs_incpiv.c
+++ b/compute/zgetrs_incpiv.c
@@ -143,10 +143,10 @@ int MORSE_zgetrs_incpiv(MORSE_enum trans, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/zgetrs_nopiv.c b/compute/zgetrs_nopiv.c
index f92c66abf05da77ee81aa117a5ac2f1d21411e03..72af580eaa3fc30251402d010dd606415cc379ff 100644
--- a/compute/zgetrs_nopiv.c
+++ b/compute/zgetrs_nopiv.c
@@ -137,10 +137,10 @@ int MORSE_zgetrs_nopiv(MORSE_enum trans, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/zheevd.c b/compute/zheevd.c
index 8094b590b35474f80f0740ba8a04389eeb557b6b..864d50eb0846720e100dfea1b4ae185b4e84adde 100644
--- a/compute/zheevd.c
+++ b/compute/zheevd.c
@@ -153,8 +153,8 @@ int MORSE_zheevd(MORSE_enum jobz, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) { */
-    morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N, sequence, &request,
-                        morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
     /* } else { */
     /*     morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N, */
     /*                         sequence, &requoest); */
diff --git a/compute/zhemm.c b/compute/zhemm.c
index 5b6b31852f6335f10dde0a428acb5988abb6338d..1aa351cce7a9679d1c2bd5b22bd2edb352af1e3c 100644
--- a/compute/zhemm.c
+++ b/compute/zhemm.c
@@ -174,12 +174,12 @@ int MORSE_zhemm(MORSE_enum side, MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, Am, 0, 0, Am, Am, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, N,  0, 0, M,  N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
-        morse_zooplap2tile( descC, C, NB, NB, LDC, N,  0, 0, M,  N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)); morse_desc_mat_free(&(descC)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, Am, Am, Am, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, N, M,  N, sequence, &request );
+    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+                     C, NB, NB, LDC, N, M,  N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, Am, 0, 0, Am, Am,*/
 /*                            sequence, &request);*/
diff --git a/compute/zher2k.c b/compute/zher2k.c
index e8f2e6d892b9bf8be8b7c8f3fff666afce446ece..b75b27348d2dec5237d40653b7bfbff833f9f592 100644
--- a/compute/zher2k.c
+++ b/compute/zher2k.c
@@ -179,12 +179,12 @@ int MORSE_zher2k(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, An, 0, 0, Am, An, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
-        morse_zooplap2tile( descC, C, NB, NB, LDC, N,  0, 0, N,  N,   sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)); morse_desc_mat_free(&(descC)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, An, Am, An, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, An, Am, An, sequence, &request );
+    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+                     C, NB, NB, LDC, N, N,  N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, */
 /*                            sequence, &request);*/
diff --git a/compute/zherk.c b/compute/zherk.c
index 6fbe72d552b780604b3b3026e7c68e3cb7452227..47e0048d7d6d833e82baffb56f38a7ec6a52116f 100644
--- a/compute/zherk.c
+++ b/compute/zherk.c
@@ -165,10 +165,10 @@ int MORSE_zherk(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descC, C, NB, NB, LDC, N,  0, 0, N,  N,   sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descC)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, An, Am, An, sequence, &request );
+    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+                     C, NB, NB, LDC, N, N,  N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, */
 /*                            sequence, &request);*/
diff --git a/compute/zhetrd.c b/compute/zhetrd.c
index e69bce8a9eb5f25e76f796a2cd2857f65df93daf..5bf4718f4222dd775d9c544d326c7eff666ada66 100644
--- a/compute/zhetrd.c
+++ b/compute/zhetrd.c
@@ -167,8 +167,8 @@ int MORSE_zhetrd(MORSE_enum jobz, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) { */
-    morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N, sequence, &request,
-                        morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
     /* } else { */
     /*     morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N, */
     /*                         sequence, &request); */
diff --git a/compute/zlacpy.c b/compute/zlacpy.c
index 3088442702a338f26aa23fbba300a5aa8e9bd9a9..9d7ca07851a75569e6422d6db0e1b73b96907ffa 100644
--- a/compute/zlacpy.c
+++ b/compute/zlacpy.c
@@ -131,10 +131,10 @@ int MORSE_zlacpy(MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile(  descA, A, NB, NB, LDA, N, 0, 0, M, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zlange.c b/compute/zlange.c
index 82831613fd334461bc4f2a1e1cf437d6eb328a03..1ab8a57ecc57da86b05879a6d24bba0bb2edfd6e 100644
--- a/compute/zlange.c
+++ b/compute/zlange.c
@@ -135,8 +135,8 @@ double MORSE_zlange(MORSE_enum norm, int M, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-    morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N, sequence, &request,
-                        morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile(  descA, A, NB, NB, LDA, N, 0, 0, M, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zlanhe.c b/compute/zlanhe.c
index e666221ace06405bf247ff7faab0d9b2cc7ec18d..6733527096347de1dc334dbaa35761144a2ea418 100644
--- a/compute/zlanhe.c
+++ b/compute/zlanhe.c
@@ -135,8 +135,8 @@ double MORSE_zlanhe(MORSE_enum norm, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile(  descA, A, NB, NB, LDA, N, 0, 0, N, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zlansy.c b/compute/zlansy.c
index 35df4fc8912e33279b04fa6af22974ec005a1e11..4186a9561239f2b774014a8f1c3ebfd92b82627e 100644
--- a/compute/zlansy.c
+++ b/compute/zlansy.c
@@ -135,8 +135,8 @@ double MORSE_zlansy(MORSE_enum norm, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile(  descA, A, NB, NB, LDA, N, 0, 0, N, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zlantr.c b/compute/zlantr.c
index 3f5e8f1eda3637f3c91541e8da96c816a732dbf6..bf288ccf3ee8b507bb01413e2bc79bd26bf9123d 100644
--- a/compute/zlantr.c
+++ b/compute/zlantr.c
@@ -155,8 +155,8 @@ double MORSE_zlantr(MORSE_enum norm, MORSE_enum uplo, MORSE_enum diag,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile(  descA, A, NB, NB, LDA, N, 0, 0, M, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zlascal.c b/compute/zlascal.c
index c86ca1da02ebad9066a30f628521088f95ad0d94..1ceb1ad8c665150288ae6db40cbecb022e44675f 100644
--- a/compute/zlascal.c
+++ b/compute/zlascal.c
@@ -114,8 +114,8 @@ int MORSE_zlascal(MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N , 0, 0, M, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zlaset.c b/compute/zlaset.c
index fab26797f9a563522dcb8d744d81070a9bc5dc0b..c9e404994f417c3ea43307ae0786380fd6068770 100644
--- a/compute/zlaset.c
+++ b/compute/zlaset.c
@@ -128,8 +128,8 @@ int MORSE_zlaset(MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile(  descA, A, NB, NB, LDA, N, 0, 0, M, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zlauum.c b/compute/zlauum.c
index 8ef3f032d56c4805b9e8fad10267a7cc1eb97a26..0102c3269097dbd0caf6b03e7183a030364f4e0a 100644
--- a/compute/zlauum.c
+++ b/compute/zlauum.c
@@ -122,8 +122,8 @@ int MORSE_zlauum(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile(  descA, A, NB, NB, LDA, N, 0, 0, N, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zposv.c b/compute/zposv.c
index 5fe1ab279a4feb38ac097f80ca68bfed70807a54..49af7c7e823b35da511128c54a351b9442a336e2 100644
--- a/compute/zposv.c
+++ b/compute/zposv.c
@@ -150,10 +150,10 @@ int MORSE_zposv(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/zpotri.c b/compute/zpotri.c
index 801f077cc45b83a80792ea563a91551e4be1f9e2..d7456beb8e5c63397b3cdcf2879d0bfe884af6f3 100644
--- a/compute/zpotri.c
+++ b/compute/zpotri.c
@@ -119,8 +119,8 @@ int MORSE_zpotri(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile(  descA, A, NB, NB, LDA, N, 0, 0, N, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zpotrimm.c b/compute/zpotrimm.c
index 180725746aa845cb28b197c915d64304e6e226e1..bd12cb16a04ac1220a42be61e988c88683725835 100644
--- a/compute/zpotrimm.c
+++ b/compute/zpotrimm.c
@@ -129,12 +129,12 @@ int MORSE_zpotrimm(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, N, 0, 0, N, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
-        morse_zooplap2tile( descC, C, NB, NB, LDC, N, 0, 0, N, N,  sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)); morse_desc_mat_free(&(descC)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, N, N, N, sequence, &request );
+    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+                     C, NB, NB, LDC, N, N, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile(  descA, A, NB, NB, LDA, N, 0, 0, N, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zpotrs.c b/compute/zpotrs.c
index 0494b688426132276bb426e911b8645bbd439e35..79cbe0d6e889e8366414fae74b8e299dc1c26fcf 100644
--- a/compute/zpotrs.c
+++ b/compute/zpotrs.c
@@ -134,10 +134,10 @@ int MORSE_zpotrs(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/zsymm.c b/compute/zsymm.c
index 344f04da6f07ecd8b3be760a95e8d3621aaee504..34aedb00effb262c79e44c8fa26a395c30871bc5 100644
--- a/compute/zsymm.c
+++ b/compute/zsymm.c
@@ -174,12 +174,12 @@ int MORSE_zsymm(MORSE_enum side, MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, Am, 0, 0, Am, Am, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, N,  0, 0, M,  N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
-        morse_zooplap2tile( descC, C, NB, NB, LDC, N,  0, 0, M,  N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)); morse_desc_mat_free(&(descC)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, Am, Am, Am, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, N, M,  N, sequence, &request );
+    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+                     C, NB, NB, LDC, N, M,  N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, Am, 0, 0, Am, Am,*/
 /*                            sequence, &request);*/
diff --git a/compute/zsyr2k.c b/compute/zsyr2k.c
index 50c9b234e36efeb66d03c3347ebc1c6e88a56f2d..dbc9ec1edd86fd36e98fa427b9f2521501c9c9ab 100644
--- a/compute/zsyr2k.c
+++ b/compute/zsyr2k.c
@@ -179,12 +179,12 @@ int MORSE_zsyr2k(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, An, 0, 0, Am, An, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
-        morse_zooplap2tile( descC, C, NB, NB, LDC, N,  0, 0, N,  N,   sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)); morse_desc_mat_free(&(descC)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, An, Am, An, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, An, Am, An, sequence, &request );
+    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+                     C, NB, NB, LDC, N, N,  N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, */
 /*                            sequence, &request);*/
diff --git a/compute/zsyrk.c b/compute/zsyrk.c
index 4b29d6b7f93eb1e267d901ae11a897b6119bc634..16383776eb134dcbee68a4d7e2a57943f1b9644c 100644
--- a/compute/zsyrk.c
+++ b/compute/zsyrk.c
@@ -165,10 +165,10 @@ int MORSE_zsyrk(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descC, C, NB, NB, LDC, N,  0, 0, N,  N,   sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descC)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, An, Am, An, sequence, &request );
+    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+                     C, NB, NB, LDC, N, N,  N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, */
 /*                            sequence, &request);*/
diff --git a/compute/zsysv.c b/compute/zsysv.c
index d39bda8bfff3341c1453dcd894478e17d9de50e2..f2419e6bb868ba22c628f957aa1131f16ddf618a 100644
--- a/compute/zsysv.c
+++ b/compute/zsysv.c
@@ -147,10 +147,10 @@ int MORSE_zsysv(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/zsytrf.c b/compute/zsytrf.c
index c2e3eeead99ea9237859064a13a66558fdc25360..a902fabdf328f8ed3493a6eb1be69d65afa73191 100644
--- a/compute/zsytrf.c
+++ b/compute/zsytrf.c
@@ -123,8 +123,8 @@ int MORSE_zsytrf(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zsytrs.c b/compute/zsytrs.c
index df6f7d9dea81ba12ef7e6f443d14f3f9105b2796..7649dd6ebc9b949d53de63c0b40c903311bfdde9 100644
--- a/compute/zsytrs.c
+++ b/compute/zsytrs.c
@@ -133,10 +133,10 @@ int MORSE_zsytrs(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/ztpgqrt.c b/compute/ztpgqrt.c
index bf6fee28d640f5e6345299766d1e983c74a5a7d3..4942e0d2f1168de89aaad78e70250919b227cc35 100644
--- a/compute/ztpgqrt.c
+++ b/compute/ztpgqrt.c
@@ -208,20 +208,14 @@ int MORSE_ztpgqrt( int M, int N, int K, int L,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descV1, V1, NB, NB, LDV1, K, 0, 0, M, K, sequence, &request,
-                            morse_desc_mat_free(&(descV1)) );
-        morse_zooplap2tile( descV2, V2, NB, NB, LDV2, K, 0, 0, M, K, sequence, &request,
-                            (morse_desc_mat_free(&(descV1)),
-                             morse_desc_mat_free(&(descV2))) );
-        morse_zooplap2tile( descQ1, Q1, NB, NB, LDQ1, N, 0, 0, K, N, sequence, &request,
-                            (morse_desc_mat_free(&(descV1)),
-                             morse_desc_mat_free(&(descV2)),
-                             morse_desc_mat_free(&(descQ1))) );
-        morse_zooplap2tile( descQ2, Q2, NB, NB, LDQ2, N, 0, 0, M, N, sequence, &request,
-                            (morse_desc_mat_free(&(descV1)),
-                             morse_desc_mat_free(&(descV2)),
-                             morse_desc_mat_free(&(descQ1)),
-                             morse_desc_mat_free(&(descQ2))) );
+    morse_zlap2tile( morse, &descV1l, &descV1t, MorseUpperLower,
+                     V1, NB, NB, LDV1, K, M, K, sequence, &request );
+    morse_zlap2tile( morse, &descV2l, &descV2t, MorseUpperLower,
+                     V2, NB, NB, LDV2, K, M, K, sequence, &request );
+    morse_zlap2tile( morse, &descQ1l, &descQ1t, MorseUpperLower,
+                     Q1, NB, NB, LDQ1, N, K, N, sequence, &request );
+    morse_zlap2tile( morse, &descQ2l, &descQ2t, MorseUpperLower,
+                     Q2, NB, NB, LDQ2, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descQ1, Q1, NB, NB, LDQ1, N, 0, 0, M, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/ztpqrt.c b/compute/ztpqrt.c
index 3298638e02705a80365fc645a57c1c906e76c021..a80b0c9110205fe01958dd086fa1b403b65659dd 100644
--- a/compute/ztpqrt.c
+++ b/compute/ztpqrt.c
@@ -186,10 +186,10 @@ int MORSE_ztpqrt( int M, int N, int L,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N, sequence, &request,
-                            morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, N, 0, 0, M, N, sequence, &request,
-                            (morse_desc_mat_free(&(descA)), morse_desc_mat_free(&(descB))) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/ztradd.c b/compute/ztradd.c
index 7bbf05f99cc7828f7c8f7201cf1d63258c5a605d..8deb69a6009417dba28778122c43d3847e1f0296 100644
--- a/compute/ztradd.c
+++ b/compute/ztradd.c
@@ -164,10 +164,10 @@ int MORSE_ztradd(MORSE_enum uplo, MORSE_enum trans, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) { */
-        morse_zooplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, An, Am, An, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, N, M, N, sequence, &request );
     /* } else { */
     /*     morse_ziplap2tile( descA, A, NB, NB, LDA, An, 0, 0, Am, An, */
     /*                         sequence, &request); */
diff --git a/compute/ztrmm.c b/compute/ztrmm.c
index 434621d6da5963f885d2e35142b9d1db28b8f22f..cf6a4b5df384567e1c181cfbf540447787af44f4 100644
--- a/compute/ztrmm.c
+++ b/compute/ztrmm.c
@@ -178,10 +178,10 @@ int MORSE_ztrmm(MORSE_enum side, MORSE_enum uplo,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, NA,   0, 0, NA, NA,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N,  NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, NA, NA, NA, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N,  NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, NA,   0, 0, NA, NA,  */
 /*                            sequence, &request);*/
diff --git a/compute/ztrsm.c b/compute/ztrsm.c
index db4e89dec01cd316b7933dd5faf1c798923cf1e1..10b23920427ec6936bc24927a075833a5a8b31da 100644
--- a/compute/ztrsm.c
+++ b/compute/ztrsm.c
@@ -176,10 +176,10 @@ int MORSE_ztrsm(MORSE_enum side, MORSE_enum uplo,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, NA,   0, 0, NA, NA,   sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N,  NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, NA, NA, NA, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N,  NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, NA,   0, 0, NA, NA,  */
 /*                            sequence, &request);*/
diff --git a/compute/ztrsmpl.c b/compute/ztrsmpl.c
index 0439834108f356cdb5ed263047c219f069596656..4666f2b8799ea508726bcb4b19aa0db807ba5fb7 100644
--- a/compute/ztrsmpl.c
+++ b/compute/ztrsmpl.c
@@ -131,10 +131,10 @@ int MORSE_ztrsmpl(int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,    sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descB)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N,    0, 0, N, N,   */
 /*                            sequence, &request);*/
diff --git a/compute/ztrtri.c b/compute/ztrtri.c
index 2f2d36c6040991076ab17946577becfde41f311a..522fe747a0023173d342163732b45d0e28179e55 100644
--- a/compute/ztrtri.c
+++ b/compute/ztrtri.c
@@ -131,8 +131,8 @@ int MORSE_ztrtri(MORSE_enum uplo, MORSE_enum diag, int N,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, N, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile(  descA, A, NB, NB, LDA, N, 0, 0, N, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zunglq.c b/compute/zunglq.c
index 7ececcb759dc1614ec1ec3b72f2691c541c6c841..73f6193e5c889ee3cc66f3422567114e5941a5ee 100644
--- a/compute/zunglq.c
+++ b/compute/zunglq.c
@@ -137,10 +137,10 @@ int MORSE_zunglq(int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, K, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descQ, Q, NB, NB, LDQ, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descQ)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, K, N, sequence, &request );
+    morse_zlap2tile( morse, &descQl, &descQt, MorseUpperLower,
+                     Q, NB, NB, LDQ, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, K, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zunglq_param.c b/compute/zunglq_param.c
index 5b6d30e6065194ea3f825b7304f889c8f9be2bb9..5f1a5ee3fe420aec9d5963219beb63c9fa713159 100644
--- a/compute/zunglq_param.c
+++ b/compute/zunglq_param.c
@@ -134,10 +134,10 @@ int MORSE_zunglq_param(const libhqr_tree_t *qrtree, int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, K, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descQ, Q, NB, NB, LDQ, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descQ)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, K, N, sequence, &request );
+    morse_zlap2tile( morse, &descQl, &descQt, MorseUpperLower,
+                     Q, NB, NB, LDQ, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, K, N,*/
 /*                            sequence, &request);*/
diff --git a/compute/zungqr.c b/compute/zungqr.c
index 822dc4e568f7c9bca64af7c37746b57105aeba7f..b62905220bc49c837b89bb782bf0971f81ba7d8a 100644
--- a/compute/zungqr.c
+++ b/compute/zungqr.c
@@ -136,10 +136,10 @@ int MORSE_zungqr(int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, K, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descQ, Q, NB, NB, LDQ, N, 0, 0, M, N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descQ)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, K, sequence, &request );
+    morse_zlap2tile( morse, &descQl, &descQt, MorseUpperLower,
+                     Q, NB, NB, LDQ, N, M, N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, K,*/
 /*                            sequence, &request);*/
diff --git a/compute/zungqr_param.c b/compute/zungqr_param.c
index af88ea598d0b1f9c13bfd1c328f5f5ec2e1170d3..c99631434b396f13643a10e24ec43d9bb8ff6256 100644
--- a/compute/zungqr_param.c
+++ b/compute/zungqr_param.c
@@ -135,10 +135,10 @@ int MORSE_zungqr_param(const libhqr_tree_t *qrtree,
     morse_sequence_create(morse, &sequence);
 
     /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-    morse_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, K, sequence, &request,
-                        morse_desc_mat_free(&(descA)) );
-    morse_zooplap2tile( descQ, Q, NB, NB, LDQ, N, 0, 0, M, N, sequence, &request,
-                        morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descQ)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, N, M, K, sequence, &request );
+    morse_zlap2tile( morse, &descQl, &descQt, MorseUpperLower,
+                     Q, NB, NB, LDQ, N, M, N, sequence, &request );
     /*    } else {*/
     /*        morse_ziplap2tile( descA, A, NB, NB, LDA, N, 0, 0, M, K,*/
     /*                            sequence, &request);*/
diff --git a/compute/zunmlq.c b/compute/zunmlq.c
index 81535c19d79ff71a24345609b2e319ad90c4056a..ba2f34e5d88d57664239b76ef1626705db686713 100644
--- a/compute/zunmlq.c
+++ b/compute/zunmlq.c
@@ -174,10 +174,10 @@ int MORSE_zunmlq(MORSE_enum side, MORSE_enum trans, int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, An, 0, 0, K, An, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descC, C, NB, NB, LDC, N, 0, 0, M,  N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descC)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, An, K, An, sequence, &request );
+    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+                     C, NB, NB, LDC, N, M,  N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, An, 0, 0, K, An,*/
 /*                            sequence, &request);*/
diff --git a/compute/zunmlq_param.c b/compute/zunmlq_param.c
index b6f746d02e23a78cbfdd0853a34953d6d04fdac5..36da968cfb829e0abdd5444de013ef61759ce546 100644
--- a/compute/zunmlq_param.c
+++ b/compute/zunmlq_param.c
@@ -173,10 +173,10 @@ int MORSE_zunmlq_param(const libhqr_tree_t *qrtree, MORSE_enum side, MORSE_enum
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, An, 0, 0, K, An, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descC, C, NB, NB, LDC, N, 0, 0, M,  N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descC)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, An, K, An, sequence, &request );
+    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+                     C, NB, NB, LDC, N, M,  N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, An, 0, 0, K, An,*/
 /*                            sequence, &request);*/
diff --git a/compute/zunmqr.c b/compute/zunmqr.c
index 4464aaecbe90f5d6bbf86bf4c644aa89ccbe87d5..6f8563d2e497204443284633fe396b93d22a6f70 100644
--- a/compute/zunmqr.c
+++ b/compute/zunmqr.c
@@ -177,10 +177,10 @@ int MORSE_zunmqr(MORSE_enum side, MORSE_enum trans, int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, K, 0, 0, Am, K, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descC, C, NB, NB, LDC, N, 0, 0, M,  N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descC)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, K, Am, K, sequence, &request );
+    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+                     C, NB, NB, LDC, N, M,  N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, K, 0, 0, Am, K,*/
 /*                            sequence, &request);*/
diff --git a/compute/zunmqr_param.c b/compute/zunmqr_param.c
index d285caabf0ce422062a6b621355c85bf309c4de4..5101156244a54a8ea8585d1667c93dafa5904118 100644
--- a/compute/zunmqr_param.c
+++ b/compute/zunmqr_param.c
@@ -178,10 +178,10 @@ int MORSE_zunmqr_param(const libhqr_tree_t *qrtree,
     morse_sequence_create(morse, &sequence);
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
-        morse_zooplap2tile( descA, A, NB, NB, LDA, K, 0, 0, Am, K, sequence, &request,
-                             morse_desc_mat_free(&(descA)) );
-        morse_zooplap2tile( descC, C, NB, NB, LDC, N, 0, 0, M,  N, sequence, &request,
-                             morse_desc_mat_free(&(descA)); morse_desc_mat_free(&(descC)));
+    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+                     A, NB, NB, LDA, K, Am, K, sequence, &request );
+    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+                     C, NB, NB, LDC, N, M,  N, sequence, &request );
 /*    } else {*/
 /*        morse_ziplap2tile( descA, A, NB, NB, LDA, K, 0, 0, Am, K,*/
 /*                            sequence, &request);*/