diff --git a/compute/pzgetrf_incpiv.c b/compute/pzgetrf_incpiv.c
index 4d3bd0958439ec2a9f841989c05481bbbc116a27..1053772a11cb20216bdd66897aba3006cbb93726 100644
--- a/compute/pzgetrf_incpiv.c
+++ b/compute/pzgetrf_incpiv.c
@@ -41,7 +41,7 @@
  *  Parallel tile LU factorization - dynamic scheduling
  */
 void chameleon_pzgetrf_incpiv( CHAM_desc_t *A, CHAM_desc_t *L, CHAM_desc_t *D, int *IPIV,
-                           RUNTIME_sequence_t *sequence, RUNTIME_request_t *request )
+                               RUNTIME_sequence_t *sequence, RUNTIME_request_t *request )
 {
     CHAM_context_t *chamctxt;
     RUNTIME_option_t options;
diff --git a/compute/pzhetrd_he2hb.c b/compute/pzhetrd_he2hb.c
index 1aedeae6946e3e656cb3c28cf41faaf4a924ad74..2ed482692e36ac69dec366958af4f0244c4755cb 100644
--- a/compute/pzhetrd_he2hb.c
+++ b/compute/pzhetrd_he2hb.c
@@ -436,11 +436,8 @@ void chameleon_pzhetrd_he2hb(cham_uplo_t uplo,
     RUNTIME_options_finalize(&options, chamctxt);
 
     CHAMELEON_Sequence_Wait(sequence);
-    chameleon_desc_mat_free(D);
-    free(D);
-
-    chameleon_desc_mat_free(AT);
-    free(AT);
+    CHAMELEON_Desc_Destroy( &D );
+    CHAMELEON_Desc_Destroy( &AT );
 
     (void)E;
 }
diff --git a/compute/zgelqf.c b/compute/zgelqf.c
index d6dfbee953810fa8126a373fc1f31cbc2c423563..db512fc7e5c072844191b4c51d3d2d9fe7c5a321 100644
--- a/compute/zgelqf.c
+++ b/compute/zgelqf.c
@@ -297,6 +297,7 @@ int CHAMELEON_zgelqf_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *T,
         CHAMELEON_Desc_Flush( T, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgelqf_param.c b/compute/zgelqf_param.c
index a86809cf45fa7cb864465563d66764dfe6030e3e..b967339ad8baf835d546ed277995d485ac3e1f3d 100644
--- a/compute/zgelqf_param.c
+++ b/compute/zgelqf_param.c
@@ -297,6 +297,7 @@ int CHAMELEON_zgelqf_param_Tile_Async( const libhqr_tree_t *qrtree, CHAM_desc_t
         CHAMELEON_Desc_Flush( TT, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgelqs.c b/compute/zgelqs.c
index 4b74ebf46e68bd104707545aa641e4c831cdee54..4b1483a7cea1eeb4f929b6a2c8ca704042990b28 100644
--- a/compute/zgelqs.c
+++ b/compute/zgelqs.c
@@ -339,6 +339,7 @@ int CHAMELEON_zgelqs_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *T, CHAM_desc_t *B,
         CHAMELEON_Desc_Flush( T, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgelqs_param.c b/compute/zgelqs_param.c
index 997117abd463de6e8c1b05b0dafb656ca238947b..758775ab8f0338d3c7b2e4d26b1cd6d3052bf86e 100644
--- a/compute/zgelqs_param.c
+++ b/compute/zgelqs_param.c
@@ -346,6 +346,7 @@ int CHAMELEON_zgelqs_param_Tile_Async( const libhqr_tree_t *qrtree, CHAM_desc_t
         CHAMELEON_Desc_Flush( TT, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgels.c b/compute/zgels.c
index cd75e4513051fd7e48fb3cb2d75fa903c0696365..4612948cb28b76c531bbc1450802d98682048b1a 100644
--- a/compute/zgels.c
+++ b/compute/zgels.c
@@ -435,6 +435,7 @@ int CHAMELEON_zgels_Tile_Async( cham_trans_t trans, CHAM_desc_t *A,
         CHAMELEON_Desc_Flush( B, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgels_param.c b/compute/zgels_param.c
index 6547a537102a5eb7b3195a513ceaea2854ba3310..15233f0a6275186fb04e6f42426c89666edaa8ea 100644
--- a/compute/zgels_param.c
+++ b/compute/zgels_param.c
@@ -427,6 +427,7 @@ int CHAMELEON_zgels_param_Tile_Async( const libhqr_tree_t *qrtree, cham_trans_t
         CHAMELEON_Desc_Flush( TT, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgeqrf.c b/compute/zgeqrf.c
index 67679772b664b810ebc1924919dda4cbe3fe4899..6a16dbd2abf11b5995f75eaeaf973c68375e0e95 100644
--- a/compute/zgeqrf.c
+++ b/compute/zgeqrf.c
@@ -296,6 +296,7 @@ int CHAMELEON_zgeqrf_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *T,
         CHAMELEON_Desc_Flush( T, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgeqrf_param.c b/compute/zgeqrf_param.c
index cb728042234d6d746cef095c0613da40ad221315..17f2a2a3d32f9c210f105e55b2b12165ba0133d2 100644
--- a/compute/zgeqrf_param.c
+++ b/compute/zgeqrf_param.c
@@ -307,6 +307,7 @@ int CHAMELEON_zgeqrf_param_Tile_Async( const libhqr_tree_t *qrtree, CHAM_desc_t
         CHAMELEON_Desc_Flush( TT, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgeqrs.c b/compute/zgeqrs.c
index 4d79422695e0420e4d590fc63c15486d432539de..dc42e323f2f88d548af24ad876ff87f1de2447c1 100644
--- a/compute/zgeqrs.c
+++ b/compute/zgeqrs.c
@@ -334,6 +334,7 @@ int CHAMELEON_zgeqrs_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *T, CHAM_desc_t *B,
         CHAMELEON_Desc_Flush( T, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgeqrs_param.c b/compute/zgeqrs_param.c
index 66db5b743dc6105af8bff4794e40cd5993db04ec..306ea555c63caf3cbc61e861c9c77542442b49b7 100644
--- a/compute/zgeqrs_param.c
+++ b/compute/zgeqrs_param.c
@@ -335,6 +335,7 @@ int CHAMELEON_zgeqrs_param_Tile_Async( const libhqr_tree_t *qrtree,
         CHAMELEON_Desc_Flush( TT, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgesv_incpiv.c b/compute/zgesv_incpiv.c
index 90a800eb15bbfd355c3563b9639d3b58b43a2a7a..7494b34cf20778c0ab2bec59cb3f5a45252d7f73 100644
--- a/compute/zgesv_incpiv.c
+++ b/compute/zgesv_incpiv.c
@@ -331,6 +331,7 @@ int CHAMELEON_zgesv_incpiv_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *L, int *IPIV
         CHAMELEON_Desc_Flush( Dptr, sequence );
         CHAMELEON_Desc_Flush( B, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgesvd.c b/compute/zgesvd.c
index de759169c0cc9071b4f8f2acdafc954c42983bc3..7b8e96a9311ac918ab6ee16c94dd2b91829582ae 100644
--- a/compute/zgesvd.c
+++ b/compute/zgesvd.c
@@ -632,6 +632,7 @@ int CHAMELEON_zgesvd_Tile_Async( cham_job_t jobu, cham_job_t jobvt,
 
     free(E);
     if ( Dptr ) {
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgetrf_incpiv.c b/compute/zgetrf_incpiv.c
index bdd9c476cf94eb46bf1b4d923df1a8ec7b35bfb6..0a68aa4028bf714c0e1feecafc8f05702e90a5c3 100644
--- a/compute/zgetrf_incpiv.c
+++ b/compute/zgetrf_incpiv.c
@@ -298,6 +298,7 @@ int CHAMELEON_zgetrf_incpiv_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *L, int *IPI
         CHAMELEON_Desc_Flush( L, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zheevd.c b/compute/zheevd.c
index a203a877cd56b10f0753a7d22faac68aa2bf13ae..505bb279a67acbea1da6fc20c1771b905a47533c 100644
--- a/compute/zheevd.c
+++ b/compute/zheevd.c
@@ -535,6 +535,7 @@ int CHAMELEON_zheevd_Tile_Async( cham_job_t jobz, cham_uplo_t uplo,
     free(V);
     free(E);
     if (Dptr != NULL) {
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zhetrd.c b/compute/zhetrd.c
index 660bd5b91ab2cff4664a7e20d542ffd08f9c896a..e3d43c5e04531dbaadbd34084679f65d6b90fa96 100644
--- a/compute/zhetrd.c
+++ b/compute/zhetrd.c
@@ -430,6 +430,7 @@ int CHAMELEON_zhetrd_Tile_Async( cham_job_t jobz,
     }
 #endif /* !defined(CHAMELEON_SIMULATION) */
     if (Dptr != NULL) {
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     chameleon_desc_mat_free( &descAB );
diff --git a/compute/ztpgqrt.c b/compute/ztpgqrt.c
index f3a65b6a6955d6b47c2b81309bf94d3e24d9524a..a89ef3dbbf71cd80e3cee0ea6a76907b6e5bd299 100644
--- a/compute/ztpgqrt.c
+++ b/compute/ztpgqrt.c
@@ -426,6 +426,7 @@ int CHAMELEON_ztpgqrt_Tile_Async( int L,
         CHAMELEON_Desc_Flush( Q2, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zunglq.c b/compute/zunglq.c
index e40953f9c6c0411f7fe3c2c01d03f3bb363b03da..63ff7233b1203da8bd629e37dc676e3d459344c0 100644
--- a/compute/zunglq.c
+++ b/compute/zunglq.c
@@ -322,6 +322,7 @@ int CHAMELEON_zunglq_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *T, CHAM_desc_t *Q,
         CHAMELEON_Desc_Flush( T, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zunglq_param.c b/compute/zunglq_param.c
index fefc20d57f0a598d7ef55d660221b6b52ddf7ed1..10855cc2d814d839b3c88549961ddc6893953ee8 100644
--- a/compute/zunglq_param.c
+++ b/compute/zunglq_param.c
@@ -321,6 +321,7 @@ int CHAMELEON_zunglq_param_Tile_Async( const libhqr_tree_t *qrtree, CHAM_desc_t
         CHAMELEON_Desc_Flush( TT, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zungqr.c b/compute/zungqr.c
index 25b4e8375f284520f1e4e1c9e6c70467749e8bdd..dae14adb3d825be86fb2e7ad9e33051abcfefa9a 100644
--- a/compute/zungqr.c
+++ b/compute/zungqr.c
@@ -319,6 +319,7 @@ int CHAMELEON_zungqr_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *T, CHAM_desc_t *Q,
         CHAMELEON_Desc_Flush( T, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zungqr_param.c b/compute/zungqr_param.c
index 6dd11ada6aed5af5be59fe611277f960466a75dd..52f3b857fcd50cb8734a1e3d7f93c08d83c6b96e 100644
--- a/compute/zungqr_param.c
+++ b/compute/zungqr_param.c
@@ -319,6 +319,7 @@ int CHAMELEON_zungqr_param_Tile_Async( const libhqr_tree_t *qrtree, CHAM_desc_t
         CHAMELEON_Desc_Flush( TT, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zunmlq.c b/compute/zunmlq.c
index 6d246cd57ff383a885314d96efb6af20bf6dd96b..89e0ca1dce95f1013307026398896f9ab0cc8e6a 100644
--- a/compute/zunmlq.c
+++ b/compute/zunmlq.c
@@ -383,6 +383,7 @@ int CHAMELEON_zunmlq_Tile_Async( cham_side_t side, cham_trans_t trans,
         CHAMELEON_Desc_Flush( T, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zunmlq_param.c b/compute/zunmlq_param.c
index 9eda1ebc75b7cb69f7be1051d9a40f8e0859407a..1ddd96335dbd3ff3336677255d050c89bca0634a 100644
--- a/compute/zunmlq_param.c
+++ b/compute/zunmlq_param.c
@@ -382,6 +382,7 @@ int CHAMELEON_zunmlq_param_Tile_Async( const libhqr_tree_t *qrtree, cham_side_t
         CHAMELEON_Desc_Flush( TT, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zunmqr.c b/compute/zunmqr.c
index b6f1e16916932cb72c596e89ef71797677a0547a..5f275c61b9aa1662f27c286e88c2723198a2d136 100644
--- a/compute/zunmqr.c
+++ b/compute/zunmqr.c
@@ -390,6 +390,7 @@ int CHAMELEON_zunmqr_Tile_Async( cham_side_t side, cham_trans_t trans,
         CHAMELEON_Desc_Flush( T, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zunmqr_param.c b/compute/zunmqr_param.c
index e53ed50a781343d87609838285e4454828fbf3bd..cc1c09c50ca94a794bd44700c039d41cdf76ac07 100644
--- a/compute/zunmqr_param.c
+++ b/compute/zunmqr_param.c
@@ -389,6 +389,7 @@ int CHAMELEON_zunmqr_param_Tile_Async( const libhqr_tree_t *qrtree,
         CHAMELEON_Desc_Flush( TT, sequence );
         CHAMELEON_Desc_Flush( Dptr, sequence );
         chameleon_sequence_wait( chamctxt, sequence );
+        RUNTIME_desc_destroy( Dptr );
         chameleon_desc_mat_free( Dptr );
     }
     (void)D;