diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7ad68e4242a8014cccea65e34e9168dd0dae6fd8..15ea0144e1860d88c8d9b87ba0464dfb46a92df0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,7 +4,7 @@
 #
 # @copyright 2009-2014 The University of Tennessee and The University of
 #                      Tennessee Research Foundation. All rights reserved.
-# @copyright 2012-2019 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+# @copyright 2012-2020 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
 #                      Univ. Bordeaux. All rights reserved.
 #
 ###
@@ -501,13 +501,6 @@ else (NOT CHAMELEON_SIMULATION)
         set(CHAMELEON_ENABLE_EXAMPLE OFF)
         message("-- ${BoldBlue}CHAMELEON_ENABLE_EXAMPLE is set to ON but we turn it OFF.")
     endif ()
-    if (CHAMELEON_ENABLE_TESTING)
-        set(CHAMELEON_ENABLE_TESTING OFF)
-        message("-- ${BoldBlue}CHAMELEON_ENABLE_TESTING is set to ON but we turn it OFF."
-            "\n   Because we are compiling the simulation mode (CHAMELEON_SIMULATION=ON),"
-            "\n   there is no sense in compiling testing drivers that are used to check"
-            "\n   numerical correctness of algorithms and kernels.${ColourReset}")
-    endif ()
 
     # Simulation mode: we depend on SimGrid
     find_package(SIMGRID REQUIRED)
@@ -995,10 +988,13 @@ if(CHAMELEON_ENABLE_EXAMPLE AND NOT CHAMELEON_SIMULATION)
 endif(CHAMELEON_ENABLE_EXAMPLE AND NOT CHAMELEON_SIMULATION)
 
 # Testing executables
-if(CHAMELEON_ENABLE_TESTING AND NOT CHAMELEON_SIMULATION)
-  add_subdirectory(testing)
+if(CHAMELEON_ENABLE_TESTING)
   add_subdirectory(new-testing)
-endif(CHAMELEON_ENABLE_TESTING AND NOT CHAMELEON_SIMULATION)
+endif(CHAMELEON_ENABLE_TESTING)
+
+if(CHAMELEON_ENABLE_EXAMPLE AND NOT CHAMELEON_SIMULATION)
+  add_subdirectory(testing)
+endif(CHAMELEON_ENABLE_EXAMPLE AND NOT CHAMELEON_SIMULATION)
 
 # Timing executables
 if(CHAMELEON_ENABLE_TIMING)
diff --git a/cmake_modules/local_subs.py b/cmake_modules/local_subs.py
index 56ab5e9854df20288f5406da4e4b8fa3fd0bbf82..27be0cb14e5f6f323c43da7db0c28a862b50c46a 100644
--- a/cmake_modules/local_subs.py
+++ b/cmake_modules/local_subs.py
@@ -78,6 +78,7 @@ subs = {
         ('testing_p',            'testing_s',            'testing_d',            'testing_c',            'testing_z'           ),
         ('timing_p',             'timing_s',             'timing_d',             'timing_c',             'timing_z'            ),
         ('workspace_p',          'workspace_s',          'workspace_d',          'workspace_c',          'workspace_z'         ),
+        ('check_p',              'check_s',              'check_d',              'check_c',              'check_z'             ),
 #        ('CORE_P',               'CORE_S',               'CORE_D',               'CORE_C',               'CORE_Z'              ),
 #        ('vec_p',                'vec_s',                'vec_d',                'vec_c',                'vec_z'               ),
 
diff --git a/new-testing/CMakeLists.txt b/new-testing/CMakeLists.txt
index b228fe0f1c58416dbad41302c30b938fff7abea3..cafc9d720f2c6d2d8412d004c9565cf9720cf23b 100644
--- a/new-testing/CMakeLists.txt
+++ b/new-testing/CMakeLists.txt
@@ -4,7 +4,7 @@
 #
 # @copyright 2009-2014 The University of Tennessee and The University of
 #                      Tennessee Research Foundation. All rights reserved.
-# @copyright 2012-2019 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+# @copyright 2012-2020 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
 #                      Univ. Bordeaux. All rights reserved.
 #
 ###
@@ -25,9 +25,6 @@
 #  @date 2014-11-16
 #
 ###
-if (CHAMELEON_SIMULATION)
-  message(ERROR "new-testing directory should not be included when simulation is enabled")
-endif()
 
 # Generate chameleon auxiliary testing sources for all possible precisions
 # --------------------------------------------------------------------
@@ -128,10 +125,14 @@ foreach(_precision ${CHAMELEON_PRECISION} )
     )
   add_dependencies(${_precision}new-testing
     chameleon_include
-    coreblas_include
     control_include
     new-testing_include
     )
+if(NOT CHAMELEON_SIMULATION)
+  add_dependencies(${_precision}new-testing
+    coreblas_include
+    )
+endif(NOT CHAMELEON_SIMULATION)
   set_property(TARGET ${_precision}new-testing PROPERTY LINKER_LANGUAGE Fortran)
   target_link_libraries(${_precision}new-testing ${libs_for_tests})
 
diff --git a/new-testing/testing_zcheck.c b/new-testing/testing_zcheck.c
index d2f33920eee681d4a84140c4e62a522e7ca9abc3..66d2289aa5721e7d5147508f3140927834a6134e 100644
--- a/new-testing/testing_zcheck.c
+++ b/new-testing/testing_zcheck.c
@@ -2,7 +2,7 @@
  *
  * @file testing_zcheck.c
  *
- * @copyright 2019-2019 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ * @copyright 2019-2020 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
  *                      Univ. Bordeaux. All rights reserved.
  *
  ***
@@ -20,6 +20,10 @@
 #include <string.h>
 #include <math.h>
 #include <chameleon.h>
+
+
+#if !defined(CHAMELEON_SIMULATION)
+
 #include <coreblas/cblas.h>
 #include <coreblas/lapacke.h>
 #include <coreblas.h>
@@ -1878,3 +1882,4 @@ int check_zgels( run_arg_list_t *args, cham_trans_t trans, CHAM_desc_t *descA, C
     return info_solution;
 }
 
+#endif /* defined(CHAMELEON_SIMULATION) */
diff --git a/new-testing/testing_zcheck.h b/new-testing/testing_zcheck.h
index 0afd9af28235c839b8d96fbfa8222a23aefa45e8..e03346267c6570edf8d1b2c7a685111942edbd34 100644
--- a/new-testing/testing_zcheck.h
+++ b/new-testing/testing_zcheck.h
@@ -30,6 +30,40 @@
 #define CHECK_TRMM 3
 #define CHECK_TRSM 4
 
+#if defined(CHAMELEON_SIMULATION)
+
+static inline int check_zmatrices     ( run_arg_list_t *args, cham_uplo_t uplo, CHAM_desc_t *descA, CHAM_desc_t *descB ) { return 0; }
+static inline int check_znorm         ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_normtype_t norm_type, cham_uplo_t uplo,
+                                        cham_diag_t diag, double norm_cham, CHAM_desc_t *descA ) { return 0; }
+static inline int check_zsum          ( run_arg_list_t *args, cham_uplo_t uplo, cham_trans_t trans, CHAMELEON_Complex64_t alpha, CHAM_desc_t *descA,
+                                        CHAMELEON_Complex64_t beta, CHAM_desc_t *descBref, CHAM_desc_t *descBcham ) { return 0; }
+static inline int check_zscale        ( run_arg_list_t *args, cham_uplo_t uplo, CHAMELEON_Complex64_t alpha, CHAM_desc_t *descA1, CHAM_desc_t *descA2 ) { return 0; }
+static inline int check_zgemm         ( run_arg_list_t *args, cham_trans_t transA, cham_trans_t transB, CHAMELEON_Complex64_t alpha, CHAM_desc_t *descA,
+                                        CHAM_desc_t *descB, CHAMELEON_Complex64_t beta, CHAM_desc_t *descCref, CHAM_desc_t *descC ) { return 0; }
+static inline int check_zsymm         ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_side_t side, cham_uplo_t uplo, CHAMELEON_Complex64_t alpha, CHAM_desc_t *descA, CHAM_desc_t *descB,
+                                        CHAMELEON_Complex64_t beta, CHAM_desc_t *descCref, CHAM_desc_t *descC ) { return 0; }
+static inline int check_zsyrk         ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_uplo_t uplo, cham_trans_t trans, CHAMELEON_Complex64_t alpha, CHAM_desc_t *descA,
+                                        CHAM_desc_t *descB, CHAMELEON_Complex64_t beta, CHAM_desc_t *descCref, CHAM_desc_t *descC ) { return 0; }
+static inline int check_ztrmm         ( run_arg_list_t *args, int check_func, cham_side_t side, cham_uplo_t uplo, cham_trans_t trans, cham_diag_t diag,
+                                        CHAMELEON_Complex64_t alpha, CHAM_desc_t *descA, CHAM_desc_t *descB, CHAM_desc_t *descBref ) { return 0; }
+static inline int check_zlauum        ( run_arg_list_t *args, cham_uplo_t uplo, CHAM_desc_t *descA1, CHAM_desc_t *descA2 ) { return 0; }
+static inline int check_zxxtrf        ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_uplo_t uplo, CHAM_desc_t *descA1, CHAM_desc_t *descA2 ) { return 0; }
+static inline int check_zsolve        ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_trans_t trans, cham_uplo_t uplo,
+                                        CHAM_desc_t *descA, CHAM_desc_t *descX, CHAM_desc_t *descB ) { return 0; }
+static inline int check_ztrtri        ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_uplo_t uplo, cham_diag_t diag,
+                                        CHAM_desc_t *descA, CHAM_desc_t *descAi ) { return 0; }
+
+/* Using QR factorization */
+static inline int check_zortho        ( run_arg_list_t *args, CHAM_desc_t *descQ ) { return 0; }
+static inline int check_zgeqrf        ( run_arg_list_t *args, CHAM_desc_t *descA, CHAM_desc_t *descAF, CHAM_desc_t *descQ ) { return 0; }
+static inline int check_zgelqf        ( run_arg_list_t *args, CHAM_desc_t *descA, CHAM_desc_t *descAF, CHAM_desc_t *descQ ) { return 0; }
+static inline int check_zgels         ( run_arg_list_t *args, cham_trans_t trans, CHAM_desc_t *descA, CHAM_desc_t *descX, CHAM_desc_t *descB ) { return 0; }
+static inline int check_zgeqrs        ( run_arg_list_t *args, cham_trans_t trans, CHAM_desc_t *descA, double Bnorm, CHAM_desc_t *descR ) { return 0; }
+static inline int check_zgelqs        ( run_arg_list_t *args, cham_trans_t trans, CHAM_desc_t *descA, double Bnorm, CHAM_desc_t *descR ) { return 0; }
+static inline int check_zqc           ( run_arg_list_t *args, cham_side_t side, cham_trans_t trans, CHAM_desc_t *descC, CHAM_desc_t *descQ, CHAM_desc_t *descCC ) { return 0; }
+
+#else /* !defined(CHAMELEON_SIMULATION) */
+
 int check_zmatrices     ( run_arg_list_t *args, cham_uplo_t uplo, CHAM_desc_t *descA, CHAM_desc_t *descB );
 int check_znorm         ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_normtype_t norm_type, cham_uplo_t uplo,
                           cham_diag_t diag, double norm_cham, CHAM_desc_t *descA );
@@ -60,5 +94,7 @@ int check_zgeqrs        ( run_arg_list_t *args, cham_trans_t trans, CHAM_desc_t
 int check_zgelqs        ( run_arg_list_t *args, cham_trans_t trans, CHAM_desc_t *descA, double Bnorm, CHAM_desc_t *descR );
 int check_zqc           ( run_arg_list_t *args, cham_side_t side, cham_trans_t trans, CHAM_desc_t *descC, CHAM_desc_t *descQ, CHAM_desc_t *descCC );
 
+#endif /* defined(CHAMELEON_SIMULATION) */
+
 #endif
 
diff --git a/new-testing/values.c b/new-testing/values.c
index 13f711436fed7803393d1d8707fc6c98cd6168df..28f59bff5ae902ed5eccfaffe7fcd4882c88e7f4 100644
--- a/new-testing/values.c
+++ b/new-testing/values.c
@@ -2,7 +2,7 @@
  *
  * @file values.c
  *
- * @copyright 2019-2019 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ * @copyright 2019-2020 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
  *                      Univ. Bordeaux. All rights reserved.
  ***
  *
@@ -15,7 +15,6 @@
  *
  */
 #include "testings.h"
-#include <coreblas.h>
 
 /**
  * @brief Convert the input string to an integer
@@ -569,6 +568,32 @@ char *sprint_string( val_t val, int human, int nbchar, char *str_in )
     return str_in+rc;
 }
 
+#define Rnd64_A 6364136223846793005ULL
+#define Rnd64_C 1ULL
+#define RndF_Mul 5.4210108624275222e-20f
+
+/**
+ * @brief Generate a random number
+ */
+static inline unsigned long long int
+testing_Rnd64_jump(unsigned long long int n, unsigned long long int seed ) {
+  unsigned long long int a_k, c_k, ran;
+  int i;
+
+  a_k = Rnd64_A;
+  c_k = Rnd64_C;
+
+  ran = seed;
+  for (i = 0; n; n >>= 1, ++i) {
+    if (n & 1)
+      ran = a_k * ran + c_k;
+    c_k *= (a_k + 1);
+    a_k *= a_k;
+  }
+
+  return ran;
+}
+
 /**
  * @brief Generate a random float
  */
@@ -576,7 +601,14 @@ float
 testing_salea()
 {
     float val;
-    CORE_splrnt( 1, 1, &val, 1, 1, 1, 0, random() );
+    unsigned long long int ran;
+
+    ran = testing_Rnd64_jump( 2, random() );
+
+    /* Real part */
+    val = 0.5f - ran * RndF_Mul;
+    ran  = Rnd64_A * ran + Rnd64_C;
+
     return val;
 }
 
@@ -587,7 +619,14 @@ double
 testing_dalea()
 {
     double val;
-    CORE_dplrnt( 1, 1, &val, 1, 1, 1, 0, random() );
+    unsigned long long int ran;
+
+    ran = testing_Rnd64_jump( 2, random() );
+
+    /* Real part */
+    val = 0.5f - ran * RndF_Mul;
+    ran  = Rnd64_A * ran + Rnd64_C;
+
     return val;
 }
 
@@ -598,7 +637,18 @@ CHAMELEON_Complex32_t
 testing_calea()
 {
     CHAMELEON_Complex32_t val;
-    CORE_cplrnt( 1, 1, &val, 1, 1, 1, 0, random() );
+    unsigned long long int ran;
+
+    ran = testing_Rnd64_jump( 2, random() );
+
+    /* Real part */
+    val = 0.5f - ran * RndF_Mul;
+    ran  = Rnd64_A * ran + Rnd64_C;
+
+    /* Imaginary part */
+    val += I*(0.5f - ran * RndF_Mul);
+    ran  = Rnd64_A * ran + Rnd64_C;
+
     return val;
 }
 
@@ -609,6 +659,17 @@ CHAMELEON_Complex64_t
 testing_zalea()
 {
     CHAMELEON_Complex64_t val;
-    CORE_zplrnt( 1, 1, &val, 1, 1, 1, 0, random() );
+    unsigned long long int ran;
+
+    ran = testing_Rnd64_jump( 2, random() );
+
+    /* Real part */
+    val = 0.5f - ran * RndF_Mul;
+    ran  = Rnd64_A * ran + Rnd64_C;
+
+    /* Imaginary part */
+    val += I*(0.5f - ran * RndF_Mul);
+    ran  = Rnd64_A * ran + Rnd64_C;
+
     return val;
 }