diff --git a/compute/zbuild.c b/compute/zbuild.c
index 140ad65fe3fe486b4e2b2d802bb5c4dff441997b..7f86afbf89eefe1242e988d0b7e666886b7a090f 100644
--- a/compute/zbuild.c
+++ b/compute/zbuild.c
@@ -127,7 +127,7 @@ int MORSE_zbuild( MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescOutput, uplo,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -135,7 +135,7 @@ int MORSE_zbuild( MORSE_enum uplo, int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescOutput, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgeadd.c b/compute/zgeadd.c
index 14306b560ec2317faa56a9ec35eb5d25ed800c56..aebbe1983a760fb557aafee932c3102d18018d76 100644
--- a/compute/zgeadd.c
+++ b/compute/zgeadd.c
@@ -155,17 +155,19 @@ int MORSE_zgeadd(MORSE_enum trans, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zgeadd_Tile_Async( trans, alpha, &descAt, beta, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgelqf.c b/compute/zgelqf.c
index a59c2c18520db339ba955f54f205792dd544b66b..a5471e2e76ae0216bbce98d193ca07319cc1bad5 100644
--- a/compute/zgelqf.c
+++ b/compute/zgelqf.c
@@ -123,7 +123,7 @@ int MORSE_zgelqf(int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -131,7 +131,7 @@ int MORSE_zgelqf(int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgelqf_param.c b/compute/zgelqf_param.c
index af72e1618663f1d9e5193f064001809adb3e45e0..1a938c6d2cae96ef0a82537ace5655e64b5ad980 100644
--- a/compute/zgelqf_param.c
+++ b/compute/zgelqf_param.c
@@ -120,7 +120,7 @@ int MORSE_zgelqf_param(const libhqr_tree_t *qrtree, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -128,7 +128,7 @@ int MORSE_zgelqf_param(const libhqr_tree_t *qrtree, int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgelqs.c b/compute/zgelqs.c
index 2e67806bc209b28f4a788bb55afc667131cc7234..7c2b19f2390fd232554d63842ce0cbeafa07c7c6 100644
--- a/compute/zgelqs.c
+++ b/compute/zgelqs.c
@@ -139,9 +139,9 @@ int MORSE_zgelqs(int M, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -149,9 +149,9 @@ int MORSE_zgelqs(int M, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgelqs_param.c b/compute/zgelqs_param.c
index 155e2ef2f75a3d771e8976ad0de8b54b1ad835ba..c0c7ccc55330bebc3d819ab3e86ac069579257aa 100644
--- a/compute/zgelqs_param.c
+++ b/compute/zgelqs_param.c
@@ -141,9 +141,9 @@ int MORSE_zgelqs_param(const libhqr_tree_t *qrtree, int M, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -151,9 +151,9 @@ int MORSE_zgelqs_param(const libhqr_tree_t *qrtree, int M, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgels.c b/compute/zgels.c
index 3cd04615754631aff34948f39dd0ca9cede649a9..2f26b7901fd2072fbf1d752dc97159b37e88a69b 100644
--- a/compute/zgels.c
+++ b/compute/zgels.c
@@ -174,15 +174,15 @@ int MORSE_zgels(MORSE_enum trans, int M, int N, int NRHS,
 
     /* Submit the matrix conversion */
     if ( M >= N ) {
-        morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+        morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                          A, NB, NB, LDA, N, M, N, sequence, &request );
-        morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+        morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                          B, NB, NB, LDB, NRHS, M, NRHS, sequence, &request );
     } else {
         /* Submit the matrix conversion */
-        morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+        morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                          A, NB, NB, LDA, N, M, N, sequence, &request );
-        morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+        morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                          B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
     }
 
@@ -191,9 +191,9 @@ int MORSE_zgels(MORSE_enum trans, int M, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgels_param.c b/compute/zgels_param.c
index 2b61beb07fccdf23b547a8c70d7191e0bd9f7dad..67239b6bba10361788aa3330d94d2ed8e2732e78 100644
--- a/compute/zgels_param.c
+++ b/compute/zgels_param.c
@@ -176,14 +176,14 @@ int MORSE_zgels_param(const libhqr_tree_t *qrtree, MORSE_enum trans, int M, int
 
     /* Submit the matrix conversion */
     if ( M >= N ) {
-        morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+        morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                          A, NB, NB, LDA, N, M, N, sequence, &request );
-        morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+        morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                          B, NB, NB, LDB, NRHS, M, NRHS, sequence, &request );
     } else {
-        morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+        morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                          A, NB, NB, LDA, N, M, N, sequence, &request );
-        morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+        morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                          B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
     }
 
@@ -192,9 +192,9 @@ int MORSE_zgels_param(const libhqr_tree_t *qrtree, MORSE_enum trans, int M, int
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgemm.c b/compute/zgemm.c
index 3251abede90c72c69503d5691c61788bac438c4e..fc7a79152e2c7ad0255626a71e0163d01a7fd69c 100644
--- a/compute/zgemm.c
+++ b/compute/zgemm.c
@@ -213,19 +213,23 @@ int MORSE_zgemm(MORSE_enum transA, MORSE_enum transB, int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInput, MorseUpperLower,
                      B, NB, NB, LDB, Bn, Bm, Bn, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zgemm_Tile_Async( transA, transB, alpha, &descAt, &descBt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
+    morse_ztile2lap( morse, &descBl, &descBt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgeqrf.c b/compute/zgeqrf.c
index 32bc10482e204f66c19b8a15913ec9301ec65ec9..8c9a96a38b6e434bf2f3eef178eacc773727ea66 100644
--- a/compute/zgeqrf.c
+++ b/compute/zgeqrf.c
@@ -122,7 +122,7 @@ int MORSE_zgeqrf(int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -130,7 +130,7 @@ int MORSE_zgeqrf(int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgeqrf_param.c b/compute/zgeqrf_param.c
index 6d3dd8bb42e21049c054a3a2312f10c60e93ca96..839cedd4b03d5e1ae166b8589a7afd69e2b32138 100644
--- a/compute/zgeqrf_param.c
+++ b/compute/zgeqrf_param.c
@@ -125,7 +125,7 @@ int MORSE_zgeqrf_param(const libhqr_tree_t *qrtree, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -133,7 +133,7 @@ int MORSE_zgeqrf_param(const libhqr_tree_t *qrtree, int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgeqrs.c b/compute/zgeqrs.c
index e5fa1d14dca363208fc74e8237ab631e99052f1c..713e8abb21984fe2eea11966b1bf382b51187072 100644
--- a/compute/zgeqrs.c
+++ b/compute/zgeqrs.c
@@ -139,9 +139,9 @@ int MORSE_zgeqrs(int M, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, M, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -149,9 +149,9 @@ int MORSE_zgeqrs(int M, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgeqrs_param.c b/compute/zgeqrs_param.c
index 9d702f0b02db97040df271330580ec1d5d6118f4..3f4e89f0e487ff8b598bd9838f4e1c6ac14429c1 100644
--- a/compute/zgeqrs_param.c
+++ b/compute/zgeqrs_param.c
@@ -134,9 +134,9 @@ int MORSE_zgeqrs_param(const libhqr_tree_t *qrtree, int M, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, M, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -144,9 +144,9 @@ int MORSE_zgeqrs_param(const libhqr_tree_t *qrtree, int M, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgesv_incpiv.c b/compute/zgesv_incpiv.c
index d20e9c52663cf9d4a6dcd7a7e1eec8d4dc3fea55..53278b297f0a2e3e3e4cda2e79be9b126f9bf490 100644
--- a/compute/zgesv_incpiv.c
+++ b/compute/zgesv_incpiv.c
@@ -138,9 +138,9 @@ int MORSE_zgesv_incpiv(int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -148,9 +148,9 @@ int MORSE_zgesv_incpiv(int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgesv_nopiv.c b/compute/zgesv_nopiv.c
index 6e9f421691feb1f69eb8de23c48fe66b90c87bc2..442df3b6e61a73cf17943ab83688324a043c9128 100644
--- a/compute/zgesv_nopiv.c
+++ b/compute/zgesv_nopiv.c
@@ -137,9 +137,9 @@ int MORSE_zgesv_nopiv(int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -147,9 +147,9 @@ int MORSE_zgesv_nopiv(int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgesvd.c b/compute/zgesvd.c
index b05aa6f4cc5dd588be2671a39d8f4e64faaebb02..d84f67c968546094def864c38836b1b6faedc230 100644
--- a/compute/zgesvd.c
+++ b/compute/zgesvd.c
@@ -215,7 +215,7 @@ int MORSE_zgesvd(MORSE_enum jobu, MORSE_enum jobvt,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB,  LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -223,7 +223,7 @@ int MORSE_zgesvd(MORSE_enum jobu, MORSE_enum jobvt,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgetrf_incpiv.c b/compute/zgetrf_incpiv.c
index 65ef98d875c29221b4960817e44147300f06c775..9628e1e13d324afbc9aa7e362e514edaaec7a295 100644
--- a/compute/zgetrf_incpiv.c
+++ b/compute/zgetrf_incpiv.c
@@ -124,7 +124,7 @@ int MORSE_zgetrf_incpiv(int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -132,7 +132,7 @@ int MORSE_zgetrf_incpiv(int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgetrf_nopiv.c b/compute/zgetrf_nopiv.c
index c4ea0f88f06bcb6385937c87e8288ecd5ec4a196..919699244dbebb132f82aecc000331130c1eeca3 100644
--- a/compute/zgetrf_nopiv.c
+++ b/compute/zgetrf_nopiv.c
@@ -117,7 +117,7 @@ int MORSE_zgetrf_nopiv(int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -125,7 +125,7 @@ int MORSE_zgetrf_nopiv(int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgetrs_incpiv.c b/compute/zgetrs_incpiv.c
index 418b598a116afbc91d11ba03720aabc196318e6b..b011994af3e426e6f423f191cb7be3a311b6f3c0 100644
--- a/compute/zgetrs_incpiv.c
+++ b/compute/zgetrs_incpiv.c
@@ -144,17 +144,19 @@ int MORSE_zgetrs_incpiv(MORSE_enum trans, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zgetrs_incpiv_Tile_Async( &descAt, descL, IPIV, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgetrs_nopiv.c b/compute/zgetrs_nopiv.c
index fc2a4f12b2ddac1a901aae5f4239446bfc84e5ef..8eff02ea1181a155eebd6f229a8ffdef96dd4dd4 100644
--- a/compute/zgetrs_nopiv.c
+++ b/compute/zgetrs_nopiv.c
@@ -138,17 +138,19 @@ int MORSE_zgetrs_nopiv(MORSE_enum trans, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zgetrs_nopiv_Tile_Async( &descAt, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zheevd.c b/compute/zheevd.c
index 3bc25f3f3ba0cd196549f96004b4acba240eaee6..1c763d06c9ea15f0ce5e0241540cbd5f37eb8887 100644
--- a/compute/zheevd.c
+++ b/compute/zheevd.c
@@ -153,7 +153,7 @@ int MORSE_zheevd(MORSE_enum jobz, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -161,7 +161,7 @@ int MORSE_zheevd(MORSE_enum jobz, MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zhemm.c b/compute/zhemm.c
index 57098b8209eaf9e4fcd76a117e0af751624bf307..d004a263f304aeca1aeeaf0090eca5809ce8a9f0 100644
--- a/compute/zhemm.c
+++ b/compute/zhemm.c
@@ -176,19 +176,23 @@ int MORSE_zhemm(MORSE_enum side, MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, Am, Am, Am, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInput, MorseUpperLower,
                      B, NB, NB, LDB, N, M,  N, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zhemm_Tile_Async(  side, uplo, alpha, &descAt, &descBt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
+    morse_ztile2lap( morse, &descBl, &descBt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zher2k.c b/compute/zher2k.c
index 9f88e2053b4ba54a23e0b94f44b3e8a147a3f178..6e573292fe9c816c3aa1cc11c62e0c4157f8be0e 100644
--- a/compute/zher2k.c
+++ b/compute/zher2k.c
@@ -181,19 +181,23 @@ int MORSE_zher2k(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInput, MorseUpperLower,
                      B, NB, NB, LDB, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, uplo,
                      C, NB, NB, LDC, N, N,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zher2k_Tile_Async( uplo, trans, alpha, &descAt, &descBt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
+    morse_ztile2lap( morse, &descBl, &descBt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zherk.c b/compute/zherk.c
index cda0eda2b11d963d6b60534ed69e217ca165d5be..035adf2071afdfb103651d2306385f5a3c6562f4 100644
--- a/compute/zherk.c
+++ b/compute/zherk.c
@@ -166,17 +166,19 @@ int MORSE_zherk(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, uplo,
                      C, NB, NB, LDC, N, N,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zherk_Tile_Async( uplo, trans, alpha, &descAt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zhetrd.c b/compute/zhetrd.c
index d29be08b2b510766c65c46f5ee6c55c47af26889..c2f53051400c82ab0cd92539c33ad71f6aa71ae4 100644
--- a/compute/zhetrd.c
+++ b/compute/zhetrd.c
@@ -167,7 +167,7 @@ int MORSE_zhetrd(MORSE_enum jobz, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -175,7 +175,7 @@ int MORSE_zhetrd(MORSE_enum jobz, MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlacpy.c b/compute/zlacpy.c
index 75885a39323ea2676693ec62ebe6dc4f2fba8473..e06df243754ba0f27715bd1e83354371696b4a4e 100644
--- a/compute/zlacpy.c
+++ b/compute/zlacpy.c
@@ -132,17 +132,19 @@ int MORSE_zlacpy(MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, uplo,
                      B, NB, NB, LDB, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zlacpy_Tile_Async( uplo, &descAt, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlange.c b/compute/zlange.c
index 362faddd84adad551eec34867bc599c81458c3bf..b0e9aacbc5f250037b92e7866056da2694d990e3 100644
--- a/compute/zlange.c
+++ b/compute/zlange.c
@@ -135,7 +135,7 @@ double MORSE_zlange(MORSE_enum norm, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -143,7 +143,7 @@ double MORSE_zlange(MORSE_enum norm, int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInput, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlanhe.c b/compute/zlanhe.c
index cad3fcdac8e2a725370fcb3420efc5fd24b19e67..c2a5a38f63a8dc68e2b7c7ae25a77b09004fe5c4 100644
--- a/compute/zlanhe.c
+++ b/compute/zlanhe.c
@@ -135,7 +135,7 @@ double MORSE_zlanhe(MORSE_enum norm, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -143,7 +143,7 @@ double MORSE_zlanhe(MORSE_enum norm, MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInput, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlansy.c b/compute/zlansy.c
index 16c8fd40ddfbd541aa12e57d61d83145c1f92007..f1100d215588e8233b6d0016d8c24ea203df8278 100644
--- a/compute/zlansy.c
+++ b/compute/zlansy.c
@@ -135,13 +135,15 @@ double MORSE_zlansy(MORSE_enum norm, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zlansy_Tile_Async( norm, uplo, &descAt, &value, sequence, &request );
 
-    /* Submit the matrix conversion */
+    /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlantr.c b/compute/zlantr.c
index 51b0539a3395164d7d969a6668df871cd4eb444f..aebf0fdb96ba05209aae170eae0c8273326f0c9d 100644
--- a/compute/zlantr.c
+++ b/compute/zlantr.c
@@ -155,13 +155,15 @@ double MORSE_zlantr(MORSE_enum norm, MORSE_enum uplo, MORSE_enum diag,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zlantr_Tile_Async( norm, uplo, diag, &descAt, &value, sequence, &request );
 
-    /* Submit the matrix conversion */
+    /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlascal.c b/compute/zlascal.c
index 4fe78a6dbaa98c3b140b9c4ef38cd8c1b0f73a5c..840530e4c12a4f77c4a8cfdfac7c855d6ab76706 100644
--- a/compute/zlascal.c
+++ b/compute/zlascal.c
@@ -114,7 +114,7 @@ int MORSE_zlascal(MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -122,8 +122,11 @@ int MORSE_zlascal(MORSE_enum uplo, int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
-    RUNTIME_sequence_wait(morse, sequence);
+                     MorseDescInout, uplo, sequence, &request );
+
+    morse_sequence_wait(morse, sequence);
+
+    /* Cleanup the temporary data */
     morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
diff --git a/compute/zlaset.c b/compute/zlaset.c
index 3799aaf4e16d7672a42d89524f1761233d811130..c167bebab7cbbac012093ee1c757599c8ed8dfcb 100644
--- a/compute/zlaset.c
+++ b/compute/zlaset.c
@@ -128,13 +128,15 @@ int MORSE_zlaset(MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zlaset_Tile_Async( uplo, alpha, beta, &descAt, sequence, &request );
 
-    /* Submit the matrix conversion */
+    /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlauum.c b/compute/zlauum.c
index 12661efe0f89da90d82e00db6962765d6b8493e1..3fb93a3fda45ad2e3e9bbae8f4445255376f2af4 100644
--- a/compute/zlauum.c
+++ b/compute/zlauum.c
@@ -122,7 +122,7 @@ int MORSE_zlauum(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -130,7 +130,7 @@ int MORSE_zlauum(MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zplghe.c b/compute/zplghe.c
index c2ffc15aadaa7f85dadb1ef6bd16c1460d32d741..6889182ed227f1ce13e24ee1b09574aed3ccdbb7 100644
--- a/compute/zplghe.c
+++ b/compute/zplghe.c
@@ -116,7 +116,7 @@ int MORSE_zplghe( double bump, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescOutput, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -124,7 +124,7 @@ int MORSE_zplghe( double bump, MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescOutput, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zplgsy.c b/compute/zplgsy.c
index 4da8ef7e8914435c2eb4349b1c538356547602e3..3c857fbd88e887c350327aa0dd09d08814ed3b8b 100644
--- a/compute/zplgsy.c
+++ b/compute/zplgsy.c
@@ -116,7 +116,7 @@ int MORSE_zplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescOutput, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -124,7 +124,7 @@ int MORSE_zplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescOutput, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zplrnt.c b/compute/zplrnt.c
index abca218fec21f7d523c7b59a4bd4a56a958da2af..431f9ea543626588fe470053f750b8dbd6b3eae5 100644
--- a/compute/zplrnt.c
+++ b/compute/zplrnt.c
@@ -114,7 +114,7 @@ int MORSE_zplrnt( int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescOutput, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -122,7 +122,7 @@ int MORSE_zplrnt( int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescOutput, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zposv.c b/compute/zposv.c
index 76032a3da05b930e3e2f04d25d581b04347f7c65..97099a30c14f32754b9cefe062ef095050fa77b6 100644
--- a/compute/zposv.c
+++ b/compute/zposv.c
@@ -151,9 +151,9 @@ int MORSE_zposv(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, uplo,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -161,9 +161,9 @@ int MORSE_zposv(MORSE_enum uplo, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zpotrf.c b/compute/zpotrf.c
index 2ec32c2d764276c33494496d4ce6b52b16abec86..950cb92202026560cbda738c618a6f5a0da10178 100644
--- a/compute/zpotrf.c
+++ b/compute/zpotrf.c
@@ -128,7 +128,7 @@ int MORSE_zpotrf(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -136,7 +136,7 @@ int MORSE_zpotrf(MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zpotri.c b/compute/zpotri.c
index 542ad704ce11a95306f73e53137ed239fd9d12e6..8778a473cba8d49163b5aa11fcd4a1f5cfebdfd3 100644
--- a/compute/zpotri.c
+++ b/compute/zpotri.c
@@ -119,7 +119,7 @@ int MORSE_zpotri(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -127,7 +127,7 @@ int MORSE_zpotri(MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zpotrimm.c b/compute/zpotrimm.c
index 2aab20b737f1f334d1c5bd5346ee1715a373ad3c..1850d998cfe244f6840e7dd8378d9a1558f8a2be 100644
--- a/compute/zpotrimm.c
+++ b/compute/zpotrimm.c
@@ -131,11 +131,11 @@ int MORSE_zpotrimm(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInput, MorseUpperLower,
                      B, NB, NB, LDB, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -143,11 +143,11 @@ int MORSE_zpotrimm(MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zpotrs.c b/compute/zpotrs.c
index 8d841fec458ed20e3ef0e232fa8d902885a05b61..162c6cb2974d6e1a8cad569e7b02d9d0307c5ad8 100644
--- a/compute/zpotrs.c
+++ b/compute/zpotrs.c
@@ -135,17 +135,19 @@ int MORSE_zpotrs(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zpotrs_Tile_Async( uplo, &descAt, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zsymm.c b/compute/zsymm.c
index d7826a9a620a20d5a93056276a767bf4c1c42f52..d2405343a9b91f44676ba642eaba5af1c436d28a 100644
--- a/compute/zsymm.c
+++ b/compute/zsymm.c
@@ -176,19 +176,23 @@ int MORSE_zsymm(MORSE_enum side, MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, Am, Am, Am, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInput, MorseUpperLower,
                      B, NB, NB, LDB, N, M,  N, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zsymm_Tile_Async(  side, uplo, alpha, &descAt, &descBt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
+    morse_ztile2lap( morse, &descBl, &descBt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zsyr2k.c b/compute/zsyr2k.c
index 88020a26bb659d746c145d45cc785fd9ba05b406..59e6790c51c43fdd3afdc159d9a42c76b1426425 100644
--- a/compute/zsyr2k.c
+++ b/compute/zsyr2k.c
@@ -181,19 +181,23 @@ int MORSE_zsyr2k(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInput, MorseUpperLower,
                      B, NB, NB, LDB, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, uplo,
                      C, NB, NB, LDC, N, N,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zsyr2k_Tile_Async( uplo, trans, alpha, &descAt, &descBt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
+    morse_ztile2lap( morse, &descBl, &descBt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zsyrk.c b/compute/zsyrk.c
index 237164df295eed8b3dfcfc9d3f8efe95103bc4b2..5cbe299755f62c6c88bd7f260d950813cb52a5d8 100644
--- a/compute/zsyrk.c
+++ b/compute/zsyrk.c
@@ -166,17 +166,19 @@ int MORSE_zsyrk(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, uplo,
                      C, NB, NB, LDC, N, N,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zsyrk_Tile_Async( uplo, trans, alpha, &descAt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zsysv.c b/compute/zsysv.c
index fa5c0153899c18541b23edf1d4e0ed1adc677853..4606240478785a893299cacd4b927b58287dd566 100644
--- a/compute/zsysv.c
+++ b/compute/zsysv.c
@@ -148,9 +148,9 @@ int MORSE_zsysv(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -158,9 +158,9 @@ int MORSE_zsysv(MORSE_enum uplo, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zsytrf.c b/compute/zsytrf.c
index 34df2fcee86e3fd1491f69ed7e26d8e70e4f231e..1d0875bb0ba85c010d0d894194458ac9d3415471 100644
--- a/compute/zsytrf.c
+++ b/compute/zsytrf.c
@@ -123,7 +123,7 @@ int MORSE_zsytrf(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -131,7 +131,7 @@ int MORSE_zsytrf(MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zsytrs.c b/compute/zsytrs.c
index 201561ad876c9c39c17274d4b808dc4d07250fdc..16812476d27b941bf06d04372a0c915e136713e7 100644
--- a/compute/zsytrs.c
+++ b/compute/zsytrs.c
@@ -134,17 +134,19 @@ int MORSE_zsytrs(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zsytrs_Tile_Async( uplo, &descAt, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztile.c b/compute/ztile.c
index 84a18d4b0417f28ab21e651b1e0b2496ec535cf4..a52368eb56116d03eb15e63656cfb83a5352e90b 100644
--- a/compute/ztile.c
+++ b/compute/ztile.c
@@ -97,7 +97,7 @@ int MORSE_zLapack_to_Tile(MORSE_Complex64_t *Af77, int LDA, MORSE_desc_t *A)
 
     RUNTIME_desc_flush( &B, sequence );
     RUNTIME_desc_flush(  A, sequence );
-    RUNTIME_sequence_wait( morse, sequence );
+    morse_sequence_wait( morse, sequence );
 
     RUNTIME_desc_destroy( &B );
 
@@ -177,7 +177,7 @@ int MORSE_zTile_to_Lapack(MORSE_desc_t *A, MORSE_Complex64_t *Af77, int LDA)
 
     RUNTIME_desc_flush(  A, sequence );
     RUNTIME_desc_flush( &B, sequence );
-    RUNTIME_sequence_wait( morse, sequence );
+    morse_sequence_wait( morse, sequence );
 
     RUNTIME_desc_destroy( &B );
 
diff --git a/compute/ztpgqrt.c b/compute/ztpgqrt.c
index faff5bee665364d6ca9bcf0f9db56ecde93dd72d..adf47e86cc28866725afcfbdf031a4b5622fff56 100644
--- a/compute/ztpgqrt.c
+++ b/compute/ztpgqrt.c
@@ -211,23 +211,27 @@ int MORSE_ztpgqrt( int M, int N, int K, int L,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descV1l, &descV1t, MorseUpperLower,
+    morse_zlap2tile( morse, &descV1l, &descV1t, MorseDescInput, MorseUpperLower,
                      V1, NB, NB, LDV1, K, M, K, sequence, &request );
-    morse_zlap2tile( morse, &descV2l, &descV2t, MorseUpperLower,
+    morse_zlap2tile( morse, &descV2l, &descV2t, MorseDescInput, MorseUpperLower,
                      V2, NB, NB, LDV2, K, M, K, sequence, &request );
-    morse_zlap2tile( morse, &descQ1l, &descQ1t, MorseUpperLower,
+    morse_zlap2tile( morse, &descQ1l, &descQ1t, MorseDescInout, MorseUpperLower,
                      Q1, NB, NB, LDQ1, N, K, N, sequence, &request );
-    morse_zlap2tile( morse, &descQ2l, &descQ2t, MorseUpperLower,
+    morse_zlap2tile( morse, &descQ2l, &descQ2t, MorseDescInout, MorseUpperLower,
                      Q2, NB, NB, LDQ2, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_ztpgqrt_Tile_Async( L, &descV1t, descT1, &descV2t, descT2, &descQ1t, &descQ2t, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descV1l, &descV1t,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
+    morse_ztile2lap( morse, &descV2l, &descV2t,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descQ1l, &descQ1t,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descQ2l, &descQ2t,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztpqrt.c b/compute/ztpqrt.c
index ba56c04a387017112024982aa27db367008f2f8b..bdbe287188e78daa8942e4669e6c0aaf4f3cf8a3 100644
--- a/compute/ztpqrt.c
+++ b/compute/ztpqrt.c
@@ -187,9 +187,9 @@ int MORSE_ztpqrt( int M, int N, int L,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpper,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -197,9 +197,9 @@ int MORSE_ztpqrt( int M, int N, int L,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztradd.c b/compute/ztradd.c
index 6883d04bde22ce323247175d4f2d655c4aa7a84b..2fa56e67a3b7aeb6429e5eab538bdb1a54d1bdb9 100644
--- a/compute/ztradd.c
+++ b/compute/ztradd.c
@@ -165,17 +165,19 @@ int MORSE_ztradd(MORSE_enum uplo, MORSE_enum trans, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, uplo,
                      B, NB, NB, LDB, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_ztradd_Tile_Async( uplo, trans, alpha, &descAt, beta, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztrmm.c b/compute/ztrmm.c
index 20f8c23305089164cd2c3c2cbde0d1efadd1db74..268ea9a5fca23ea403cbd6f5088c013efbc6da6d 100644
--- a/compute/ztrmm.c
+++ b/compute/ztrmm.c
@@ -179,17 +179,19 @@ int MORSE_ztrmm(MORSE_enum side, MORSE_enum uplo,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, NA, NA, NA, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
-                     B, NB, NB, LDB, NRHS, N,  NRHS, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_ztrmm_Tile_Async(  side, uplo, transA, diag, alpha, &descAt, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztrsm.c b/compute/ztrsm.c
index f58707ef320734c6afaffedd132e2de22cd44159..8313dcc5f011ca6f8f97d79d74cfbd26c5282bb9 100644
--- a/compute/ztrsm.c
+++ b/compute/ztrsm.c
@@ -177,17 +177,19 @@ int MORSE_ztrsm(MORSE_enum side, MORSE_enum uplo,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, NA, NA, NA, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N,  NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_ztrsm_Tile_Async(  side, uplo, transA, diag, alpha, &descAt, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztrsmpl.c b/compute/ztrsmpl.c
index ec0c750e761f81b918441b24f064f6364c069a4f..83195d5c6f9984357589e17d551e860067c5b21b 100644
--- a/compute/ztrsmpl.c
+++ b/compute/ztrsmpl.c
@@ -132,17 +132,19 @@ int MORSE_ztrsmpl(int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseLower,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_ztrsmpl_Tile_Async( &descAt, descL, IPIV, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztrtri.c b/compute/ztrtri.c
index f1f9ed70e6f86f882deb9de35c97e8e998fb948d..c1864a56f6c94e1c50e20d5b9a572c04919a5bee 100644
--- a/compute/ztrtri.c
+++ b/compute/ztrtri.c
@@ -126,12 +126,12 @@ int MORSE_ztrtri(MORSE_enum uplo, MORSE_enum diag, int N,
     }
 
     /* Set NT */
-    NB   = MORSE_NB;
+    NB = MORSE_NB;
 
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -139,7 +139,7 @@ int MORSE_ztrtri(MORSE_enum uplo, MORSE_enum diag, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zunglq.c b/compute/zunglq.c
index c6cf9ed57fa83acfb7b7a8104fa43fab9e74a6c2..4dbd23de5766299c462f1d9332cc2546030ebbbf 100644
--- a/compute/zunglq.c
+++ b/compute/zunglq.c
@@ -138,17 +138,19 @@ int MORSE_zunglq(int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpper,
                      A, NB, NB, LDA, N, K, N, sequence, &request );
-    morse_zlap2tile( morse, &descQl, &descQt, MorseUpperLower,
+    morse_zlap2tile( morse, &descQl, &descQt, MorseDescInout, MorseUpperLower,
                      Q, NB, NB, LDQ, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zunglq_Tile_Async( &descAt, descT, &descQt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descQl, &descQt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zunglq_param.c b/compute/zunglq_param.c
index e1c6607a4b3e7ef914a109ba739002933202ec05..deec8916a3fb7d2a0cba2e23fa9f153d5aacec4b 100644
--- a/compute/zunglq_param.c
+++ b/compute/zunglq_param.c
@@ -135,17 +135,19 @@ int MORSE_zunglq_param(const libhqr_tree_t *qrtree, int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpper,
                      A, NB, NB, LDA, N, K, N, sequence, &request );
-    morse_zlap2tile( morse, &descQl, &descQt, MorseUpperLower,
+    morse_zlap2tile( morse, &descQl, &descQt, MorseDescInout, MorseUpperLower,
                      Q, NB, NB, LDQ, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zunglq_param_Tile_Async( qrtree, &descAt, descTS, descTT, &descQt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descQl, &descQt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zungqr.c b/compute/zungqr.c
index 9e5ce555a44939294b0051e621107a0ddcb18d59..db36ac1729e59dd135531a4a4b3fd540321f2b1d 100644
--- a/compute/zungqr.c
+++ b/compute/zungqr.c
@@ -137,17 +137,19 @@ int MORSE_zungqr(int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseLower,
                      A, NB, NB, LDA, N, M, K, sequence, &request );
-    morse_zlap2tile( morse, &descQl, &descQt, MorseUpperLower,
+    morse_zlap2tile( morse, &descQl, &descQt, MorseDescInout, MorseUpperLower,
                      Q, NB, NB, LDQ, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zungqr_Tile_Async( &descAt, descT, &descQt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descQl, &descQt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zungqr_param.c b/compute/zungqr_param.c
index 342c12f3af851711a48d809c5955b413145e4773..32bb62d7a2d8d6ba6e5733aabc64ac3f046377ca 100644
--- a/compute/zungqr_param.c
+++ b/compute/zungqr_param.c
@@ -136,17 +136,19 @@ int MORSE_zungqr_param(const libhqr_tree_t *qrtree,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseLower,
                      A, NB, NB, LDA, N, M, K, sequence, &request );
-    morse_zlap2tile( morse, &descQl, &descQt, MorseUpperLower,
+    morse_zlap2tile( morse, &descQl, &descQt, MorseDescInout, MorseUpperLower,
                      Q, NB, NB, LDQ, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zungqr_param_Tile_Async( qrtree, &descAt, descTS, descTT, &descQt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descQl, &descQt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zunmlq.c b/compute/zunmlq.c
index f944588a975f6b463d5e2abdbd33b211262b2614..7ba6f30b7dc43fe2b32220747af093237b09ffc8 100644
--- a/compute/zunmlq.c
+++ b/compute/zunmlq.c
@@ -175,17 +175,19 @@ int MORSE_zunmlq(MORSE_enum side, MORSE_enum trans, int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpper,
                      A, NB, NB, LDA, An, K, An, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zunmlq_Tile_Async(  side, trans, &descAt, descT, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zunmlq_param.c b/compute/zunmlq_param.c
index b4ab58d0cf23994f65ebd5bb9bbc4345d1227c35..fce325bd750529f8939031862e20389a76ebddfa 100644
--- a/compute/zunmlq_param.c
+++ b/compute/zunmlq_param.c
@@ -174,17 +174,19 @@ int MORSE_zunmlq_param(const libhqr_tree_t *qrtree, MORSE_enum side, MORSE_enum
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpper,
                      A, NB, NB, LDA, An, K, An, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zunmlq_param_Tile_Async( qrtree, side, trans, &descAt, descTS, descTT, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zunmqr.c b/compute/zunmqr.c
index c2b513ef767fee698cd05b96e4e012b546274af6..5013005667dffaa2237d8b64eeecaca8fec9b87f 100644
--- a/compute/zunmqr.c
+++ b/compute/zunmqr.c
@@ -178,17 +178,19 @@ int MORSE_zunmqr(MORSE_enum side, MORSE_enum trans, int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseLower,
                      A, NB, NB, LDA, K, Am, K, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zunmqr_Tile_Async(  side, trans, &descAt, descT, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zunmqr_param.c b/compute/zunmqr_param.c
index 53656b7c3745e9247fb4b7ff300fd74e88ea3e03..d1f406be28f1d380a2a62d8c7d4150493f9e82be 100644
--- a/compute/zunmqr_param.c
+++ b/compute/zunmqr_param.c
@@ -179,17 +179,19 @@ int MORSE_zunmqr_param(const libhqr_tree_t *qrtree,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseLower,
                      A, NB, NB, LDA, K, Am, K, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zunmqr_param_Tile_Async( qrtree, side, trans, &descAt, descTS, descTT, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/control/common.h b/control/common.h
index 07c3adccc5e3dfa81028a14864f588a95fd87849..1df9385bafadfcc64fde9eb5a603035ad1e67915 100644
--- a/control/common.h
+++ b/control/common.h
@@ -107,7 +107,6 @@
 #define MorseIPT_Panel   1
 #define MorseIPT_All     2
 
-
 /*******************************************************************************
  *  Global array of LAPACK constants
  **/
diff --git a/control/compute_z.h b/control/compute_z.h
index 55a9de1752f2983ef15dbed4238358f9c51c78e3..7a1086edc9b5b223d1a020f85475e4142141b931 100644
--- a/control/compute_z.h
+++ b/control/compute_z.h
@@ -28,6 +28,13 @@
  *
  **/
 
+/*******************************************************************************
+ *  LAPACK/Tile Descriptor accesses
+ **/
+#define MorseDescInput  1
+#define MorseDescOutput 2
+#define MorseDescInout  3
+
 /***************************************************************************//**
  *  Macro for matrix conversion / Lapack interface
  **/
@@ -180,7 +187,8 @@ void morse_pzungqr_param(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_des
 static inline int
 morse_zlap2tile( MORSE_context_t *morse,
                  MORSE_desc_t *descAl, MORSE_desc_t *descAt,
-                 MORSE_enum uplo, MORSE_Complex64_t *A, int mb, int nb, int lm, int ln, int m, int n,
+                 MORSE_enum mode, MORSE_enum uplo,
+                 MORSE_Complex64_t *A, int mb, int nb, int lm, int ln, int m, int n,
                  MORSE_sequence_t *seq, MORSE_request_t *req )
 {
     /* Initialize the Lapack descriptor */
@@ -205,13 +213,17 @@ morse_zlap2tile( MORSE_context_t *morse,
             RUNTIME_desc_destroy( descAt );
             return MORSE_ERR_OUT_OF_RESOURCES;
         }
-        morse_pzlacpy( uplo, descAl, descAt, seq, req );
+        if ( mode & MorseDescInput ) {
+            morse_pzlacpy( uplo, descAl, descAt, seq, req );
+        }
     }
     else {
         morse_fatal_error( "morse_zlap2tile", "INPLACE translation not supported yet");
         descAt->mat = A;
-        /* MORSE_zgecfi_Async( lm, ln, A, MorseCM, mb, nb, */
-        /*                     MorseCCRB, mb, nb, seq, req ); */
+        if ( mode & MorseDescInput ) {
+            /* MORSE_zgecfi_Async( lm, ln, A, MorseCM, mb, nb, */
+            /*                     MorseCCRB, mb, nb, seq, req ); */
+        }
         return MORSE_ERR_NOT_SUPPORTED;
     }
 
@@ -224,16 +236,20 @@ morse_zlap2tile( MORSE_context_t *morse,
  */
 static inline int
 morse_ztile2lap( MORSE_context_t *morse, MORSE_desc_t *descAl, MORSE_desc_t *descAt,
-                 MORSE_enum uplo, MORSE_sequence_t *seq, MORSE_request_t *req )
+                 MORSE_enum mode, MORSE_enum uplo, MORSE_sequence_t *seq, MORSE_request_t *req )
 {
     if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {
-        morse_pzlacpy( uplo, descAt, descAl, seq, req );
+        if ( mode & MorseDescOutput ) {
+            morse_pzlacpy( uplo, descAt, descAl, seq, req );
+        }
     }
     else {
         morse_fatal_error( "morse_ztile2lap", "INPLACE translation not supported yet");
-        /* MORSE_zgecfi_Async( descAl->lm, descAl->ln, descAl->mat, */
-        /*                     MorseCCRB, descAl->mb, descAl->nb,   */
-        /*                     MorseCM, descAl->mb, descAl->nb, seq, req ); */
+        if ( mode & MorseDescOutput ) {
+            /* MORSE_zgecfi_Async( descAl->lm, descAl->ln, descAl->mat, */
+            /*                     MorseCCRB, descAl->mb, descAl->nb,   */
+            /*                     MorseCM, descAl->mb, descAl->nb, seq, req ); */
+        }
         return MORSE_ERR_NOT_SUPPORTED;
     }
     RUNTIME_desc_flush( descAl, seq );
diff --git a/include/chameleon/morse_constants.h b/include/chameleon/morse_constants.h
index 8ffe90dc0868c8d574dd5fde01cc92fe63724fba..5638145bd06671d87a12bd4fb17c540b9529beb1 100644
--- a/include/chameleon/morse_constants.h
+++ b/include/chameleon/morse_constants.h
@@ -109,7 +109,6 @@
 
 #define morse_const_neg(const) (((const-1)^0x01)+1)
 
-
 /** ****************************************************************************
  *  MORSE constants - boolean
  **/
@@ -119,7 +118,6 @@
 #define MORSE_CPU    ((1ULL)<<1)
 #define MORSE_CUDA   ((1ULL)<<3)
 
-
 /** ****************************************************************************
  *  State machine switches
  **/
@@ -149,7 +147,6 @@
 #define MORSE_INPLACE           1
 #define MORSE_OUTOFPLACE        2
 
-
 /** ****************************************************************************
  *  MORSE constants - success & error codes
  **/
@@ -166,7 +163,6 @@
 #define MORSE_ERR_UNEXPECTED       -110
 #define MORSE_ERR_SEQUENCE_FLUSHED -111
 
-
 /** ****************************************************************************
  * Kernels options
  **/
@@ -181,7 +177,6 @@
 #define CALLBACK        17
 #define REDUX           18
 
-
 /** ****************************************************************************
  *  MORSE ???
  **/