diff --git a/doc/user/chapters/installing.org b/doc/user/chapters/installing.org
index 5e2edd43bf946151d0c15b29c6a0dcc8557e669c..2a50258bfcc869163d8c0a6b08053212fab9de63 100644
--- a/doc/user/chapters/installing.org
+++ b/doc/user/chapters/installing.org
@@ -31,7 +31,7 @@ Finally some packages or also available for [[sec:ug:debian][Debian/Ubuntu]] and
 
     To install Chameleon's libraries, header files, and executables, one
     needs:
-    - CMake (version 2.8 minimum): the build system
+    - CMake (version 3.3 minimum, 3.17 to compile with the H-Mat support): the build system
     - C and Fortran compilers: GNU compiler suite, Clang, Intel or IBM
       can be used
     - python: to generate files in the different precisions
@@ -263,7 +263,9 @@ Finally some packages or also available for [[sec:ug:debian][Debian/Ubuntu]] and
     <<sec:ug:cmake>>
     Compilation of Chameleon libraries and executables are done with
     CMake (http://www.cmake.org/). This version has been tested with
-    CMake 3.10.2 but any version superior to 2.8 should be fine.
+    CMake 3.10.2 but any version superior to 3.3 should be fine,
+    unless you enable the H-Mat support that requires the minimum
+    revision to be 3.17.
 
     Here the steps to configure, build, test and install
     1. configure:
diff --git a/runtime/starpu/control/runtime_descriptor.c b/runtime/starpu/control/runtime_descriptor.c
index f8db757c4067a4a47603f8862e83a4600e42ebbf..ee0698dff7f140da49c46f6cde749320256a8dea 100644
--- a/runtime/starpu/control/runtime_descriptor.c
+++ b/runtime/starpu/control/runtime_descriptor.c
@@ -448,39 +448,42 @@ void *RUNTIME_data_getaddr( const CHAM_desc_t *A, int m, int n )
     starpu_data_handle_t *ptrtile = A->schedopt;
     ptrtile += ((int64_t)A->lmt) * nn + mm;
 
-    if (*ptrtile == NULL) {
-        int home_node = -1;
-        int myrank = A->myrank;
-        int owner  = A->get_rankof( A, m, n );
-        CHAM_tile_t *tile = A->get_blktile( A, m, n );
-
-        if ( myrank == owner ) {
-            if ( (tile->format & CHAMELEON_TILE_HMAT) ||
-                 (tile->mat != NULL) )
-            {
-                home_node = STARPU_MAIN_RAM;
-            }
+    if ( *ptrtile != NULL ) {
+        return *ptrtile;
+    }
+
+    int home_node = -1;
+    int myrank = A->myrank;
+    int owner  = A->get_rankof( A, m, n );
+    CHAM_tile_t *tile = A->get_blktile( A, m, n );
+
+    if ( myrank == owner ) {
+        if ( (tile->format & CHAMELEON_TILE_HMAT) ||
+             (tile->mat != NULL) )
+        {
+            home_node = STARPU_MAIN_RAM;
         }
+    }
 
-        starpu_cham_tile_register( ptrtile, home_node, tile, A->dtyp );
+    starpu_cham_tile_register( ptrtile, home_node, tile, A->dtyp );
 
 #if defined(HAVE_STARPU_DATA_SET_OOC_FLAG)
-        if ( A->ooc == 0 ) {
-            starpu_data_set_ooc_flag( *ptrtile, 0 );
-        }
+    if ( A->ooc == 0 ) {
+        starpu_data_set_ooc_flag( *ptrtile, 0 );
+    }
 #endif
 
 #if defined(HAVE_STARPU_DATA_SET_COORDINATES)
-        starpu_data_set_coordinates( *ptrtile, 2, m, n );
+    starpu_data_set_coordinates( *ptrtile, 2, m, n );
 #endif
 
 #if defined(CHAMELEON_USE_MPI)
-        {
-            int64_t block_ind = A->lmt * nn + mm;
-            starpu_mpi_data_register(*ptrtile, (((int64_t)A->id) << tag_sep) | block_ind, owner);
-        }
-#endif /* defined(CHAMELEON_USE_MPI) */
+    {
+        int64_t block_ind = A->lmt * nn + mm;
+        starpu_mpi_data_register(*ptrtile, (((int64_t)A->id) << tag_sep) | block_ind, owner);
     }
+#endif /* defined(CHAMELEON_USE_MPI) */
 
+    assert( *ptrtile );
     return *ptrtile;
 }
diff --git a/testing/testing_zcheck.c b/testing/testing_zcheck.c
index fa92829bb871f6df36d18509d65df224332d7aca..4b6fbadd2f0c1122786c1fc45e268170baabccae 100644
--- a/testing/testing_zcheck.c
+++ b/testing/testing_zcheck.c
@@ -90,19 +90,19 @@ int check_zmatrices_std( run_arg_list_t *args, cham_uplo_t uplo, int M, int N, C
     }
     else {
         Anorm = LAPACKE_zlantr_work( LAPACK_COL_MAJOR, 'M', chameleon_lapack_const(uplo), 'N',
-                                        M, N, A, LDA, work );
+                                     M, N, A, LDA, work );
     }
 
     /* Computes the difference with the core function */
-    CORE_zgeadd( ChamNoTrans, M, N, 1, A, LDA, -1, B, LDA );
+    CORE_zgeadd( ChamNoTrans, M, N, 1, A, LDA, -1, B, LDB );
 
     /* Computes the residual's norm */
     if ( uplo == ChamUpperLower ) {
-        Rnorm = LAPACKE_zlange_work( LAPACK_COL_MAJOR, 'M', M, N, B, LDA, work );
+        Rnorm = LAPACKE_zlange_work( LAPACK_COL_MAJOR, 'M', M, N, B, LDB, work );
     }
     else {
         Rnorm = LAPACKE_zlantr_work( LAPACK_COL_MAJOR, 'M', chameleon_lapack_const(uplo), 'N',
-                                        M, N, B, LDA, work );
+                                     M, N, B, LDB, work );
     }
     if ( Anorm != 0. ) {
         result = Rnorm / (Anorm * eps);