diff --git a/compute/pmap.c b/compute/pmap.c
index bcc1a868e82fb6c7defec63d90ffcbdbed311e58..ef30f09de23cf92e71d20b6ae86ac69cc83da819 100644
--- a/compute/pmap.c
+++ b/compute/pmap.c
@@ -11,7 +11,7 @@
  *
  * @version 1.3.0
  * @author Mathieu Faverge
- * @date 2024-03-11
+ * @date 2024-03-14
  *
  */
 #include "control/common.h"
@@ -28,31 +28,34 @@ void chameleon_pmap( cham_uplo_t uplo, int ndata, cham_map_data_t *data,
     CHAM_context_t *chamctxt;
     RUNTIME_option_t options;
     const CHAM_desc_t *A = data[0].desc;
-    int m, n;
+    int m, n, minmn;
 
     chamctxt = chameleon_context_self();
     if (sequence->status != CHAMELEON_SUCCESS)
         return;
     RUNTIME_options_init( &options, chamctxt, sequence, request );
 
+    minmn = chameleon_min( A->mt, A->nt );
+
     switch( uplo ) {
     case ChamUpper:
-        for (n = 0; n < A->nt; n++) {
-            for (m = 0; m < n; m++) {
+        for (m = 0; m < minmn; m++) {
+            INSERT_TASK_map(
+                &options, uplo, m, m,
+                ndata, data,
+                op_fct, op_args );
+
+            for (n = m+1; n < A->nt; n++) {
                 INSERT_TASK_map(
                     &options, ChamUpperLower, m, n,
                     ndata, data,
                     op_fct, op_args );
             }
-            INSERT_TASK_map(
-                &options, uplo, n, n,
-                ndata, data,
-                op_fct, op_args );
         }
         break;
 
     case ChamLower:
-        for (n = 0; n < A->nt; n++) {
+        for (n = 0; n < minmn; n++){
             INSERT_TASK_map(
                 &options, uplo, n, n,
                 ndata, data,