diff --git a/include/main.h b/include/main.h
index ad76a72bfa7677593264857fba5a3240a0a0f67b..28a329ba9a6621f798d6f9b8243290acdf74d4ed 100644
--- a/include/main.h
+++ b/include/main.h
@@ -18,6 +18,10 @@
 
 extern hmat_interface_t * interface;
 
+extern double epsilon;
+
+extern hmat_progress_t progress;
+
 /*! \brief Number of right hand sides for the test */
 extern int nbRHS;
 
@@ -68,6 +72,7 @@ int printHelp() ;
 void prepare_hmat(int, int, int, int, int*, int*, int*, int*, void*, hmat_block_info_t *);
 void advanced_compute_hmat(struct hmat_block_compute_context_t*);
 int init_hmat_interface() ;
+void update_progress(hmat_progress_t * ctx);
 
 struct HMAT_desc_s;
 typedef struct HMAT_desc_s HMAT_desc_t;
diff --git a/include/util.h b/include/util.h
index c558f55549354f9dc4138189364ce002a73a8c8a..6371b1e974d53b23f18659aa4c8707ec50921d43 100644
--- a/include/util.h
+++ b/include/util.h
@@ -32,21 +32,6 @@
 
 typedef enum { MPF_FALSE, MPF_TRUE } Logical;
 
-enum mpf_hmat_engine { mpf_hmat_seq, mpf_hmat_starpu, mpf_hmat_toyrt };
-struct mpf_hmat_settings_t {
-  /** hmat interfaces for all scalar types */
-  hmat_interface_t *interfaces[4];
-  bool interface_initialized;
-  enum mpf_hmat_engine engine;
-  hmat_factorization_t factorization_type;
-  hmat_progress_t progress;
-  int l0size;
-  hmat_compress_t compressionMethod;
-  double epsilon;
-  double acaEpsilon;
-  int max_leaf_size;
-};
-_EXTERN_TEST_FEMBEM_ struct mpf_hmat_settings_t mpf_hmat_settings;
 struct mpf_hmat_create_compression_args_t {
   int method;
   double threshold;
diff --git a/src/hmat.c b/src/hmat.c
index ad9d5c4aba0ff6ab89c9f08b60991bf8793d9b4a..e2e241f770d984d763c96c9955fcb07c1ddc022f 100644
--- a/src/hmat.c
+++ b/src/hmat.c
@@ -170,57 +170,6 @@ advanced_compute_hmat(struct hmat_block_compute_context_t *b) {
   } /* for (j = 0; ... */
 }
 
-/*! \brief Computes a block for the matrix of interactions.
-
-  This routines works for double complex and double precision matrices only. It is compliant with
-  the description given \ref pageCalculerBloc "here"
-
-  \param LigInf first row of the block
-  \param LigSup last row of the block
-  \param ColInf first column of the block
-  \param ColSup last column of the block
-  \param ___Inf first matrix to compute
-  \param ___Sup last matrix to compute
-  \param iloc initial row for writing in \a bloc
-  \param jloc initial column for writing in \a bloc
-  \param tailleS dimension of each page of  \a bloc
-  \param tailleL leading dimension of \a bloc
-  \param bloc   output buffer
-  \param context Pointer on the user's context, set with MpfSetUserContext()
-*/
-void computeDenseBlockFEMBEM(int *LigInf, int *LigSup, int *ColInf, int *ColSup,
-                             int *___Inf, int *___Sup, int *iloc, int *jloc,
-                             int *tailleS, int *tailleL, void *bloc, void *context) {
-  ASSERTA(*iloc==1);
-  ASSERTA(*jloc==1);
-  ASSERTA(*___Inf==0);
-  ASSERTA(*___Sup==1);
-  ASSERTA(context);
-
-  // Call prepare_block() to initialize the data for computing this matrix block
-  hmat_block_info_t block_info;
-  memset(&block_info, 0, sizeof(hmat_block_info_t));
-  prepare_hmat(*LigInf-1, *LigSup-*LigInf+1, *ColInf-1, *ColSup-*ColInf+1,
-               NULL, NULL, NULL, NULL, // All the mappings are NULL
-               context, &block_info);
-  // Set the actual leading dimension of 'bloc'
-  ((block_data_t*)block_info.user_data)->leadingDim = *tailleL;
-
-  struct hmat_block_compute_context_t b;
-  b.user_data = block_info.user_data;
-  b.row_start = 0;
-  b.row_count = *LigSup-*LigInf+1;
-  b.col_start = 0;
-  b.col_count = *ColSup-*ColInf+1;
-  b.block = bloc;
-  b.stratum = -1;
-
-  advanced_compute_hmat(&b);
-
-  // We free the data allocated by prepare_block()
-  free_block_data(block_info.user_data);
-}
-
 HMAT_desc_t *HMAT_generate_matrix( hmat_interface_t *hi ) {
 
   HMAT_desc_t *hdesc = MpfCalloc( 1, sizeof(HMAT_desc_t) );
@@ -230,10 +179,6 @@ HMAT_desc_t *HMAT_generate_matrix( hmat_interface_t *hi ) {
   hmat_cluster_tree_builder_t *ct_builder;
 
   clustering = hmat_create_clustering_median();
-  if(mpf_hmat_settings.max_leaf_size > 0) {
-    printf("HMat maximum leaf size: %d\n", mpf_hmat_settings.max_leaf_size);
-    clustering = hmat_create_clustering_max_dof(clustering, mpf_hmat_settings.max_leaf_size);
-  }
   hmat_set_clustering_divider(clustering, 2);
   ct_builder = hmat_create_cluster_tree_builder( clustering );
 
@@ -256,17 +201,17 @@ HMAT_desc_t *HMAT_generate_matrix( hmat_interface_t *hi ) {
   //  hmat_admissibility_t *admissibilityCondition = hmat_create_admissibility_standard(3.0);
   hmat_matrix_t* hmatrix = hi->create_empty_hmatrix_admissibility(cluster_tree, cluster_tree, 1, admissibilityCondition);
 
-  hi->set_low_rank_epsilon(hmatrix, mpf_hmat_settings.epsilon);
+  hi->set_low_rank_epsilon(hmatrix, epsilon);
 
   /* Assembly the Matrix */
   struct mpf_hmat_create_compression_args_t compression_ctx;
-  compression_ctx.method = mpf_hmat_settings.compressionMethod;
-  compression_ctx.threshold = mpf_hmat_settings.acaEpsilon;
+  compression_ctx.method = hmat_compress_aca_plus;
+  compression_ctx.threshold = epsilon;
   compression_ctx.output = hmat_create_compression_aca_plus(compression_ctx.threshold);
 
   hmat_assemble_context_t ctx;
   hmat_assemble_context_init(&ctx);
-  ctx.progress = &mpf_hmat_settings.progress;
+  ctx.progress = &progress;
   ctx.progress->user_data = NULL;
   ctx.factorization = hmat_factorization_none;
   ctx.lower_symmetric = 1;
diff --git a/src/main.c b/src/main.c
index 0faa448fd13a6a2244936573dc1e5241fd75eaeb..d4b404f955ea870a5607a3795d6931b2e2e20dc2 100644
--- a/src/main.c
+++ b/src/main.c
@@ -3,6 +3,8 @@
 #include "main.h"
 
 hmat_interface_t * interface = NULL;
+double epsilon = 1e-3;
+hmat_progress_t progress;
 
 // instantiation of globales defined in main.h
 int nbRHS = 1;
@@ -19,6 +21,10 @@ char *sTYPE_ELEMENT_ARRAY_test_fembem[] = {NULL};
 int coupled = 0;
 double lambda;
 
+void update_progress(hmat_progress_t * ctx) {
+  Mpf_progressBar(ctx->current, ctx->max);
+}
+
 /*! \brief Main routine
   \return 0 for success
 */
@@ -32,6 +38,7 @@ int main(int argc, char **argv) {
 
   ierr=SCAB_Init(&argc, &argv) ; CHKERRQ(ierr) ;
   ierr = init_hmat_interface(); CHKERRQ(ierr);
+  progress.update = update_progress;
 
   /* ------------------------------------------------------------------------- */
   /* ---------------------  DECODAGE DE LA LIGNE D'OPTIONS  -------------------*/
diff --git a/src/testHMAT.c b/src/testHMAT.c
index 4d2bc4aba690e03d1bf982bf9072ca235a535101..e68d593c50392e362ea2505c82b86398e2080ae8 100644
--- a/src/testHMAT.c
+++ b/src/testHMAT.c
@@ -8,8 +8,7 @@ int testHMAT(double * relative_error) {
   int ierr;
   double temps_initial, temps_final, temps_cpu;
 
-  printf("<PERFTESTS> HAcaAccuracy = %.4e \n", mpf_hmat_settings.acaEpsilon);
-  printf("<PERFTESTS> HRecompressionAccuracy = %.4e \n", mpf_hmat_settings.epsilon);
+  printf("<PERFTESTS> Epsilon = %.4e \n", epsilon);
 
   // String to append to the timer printed when doing asynchronous computation
   char *postfix_async = hmat_get_sync_exec() ? "" : "_submission";
@@ -25,13 +24,6 @@ int testHMAT(double * relative_error) {
   temps_initial = getTime ();
   printf("\n**** Creating HMAT...\n") ;
 
-  // hmat_factorization_none mean the user did not chose a factorization so we
-  // must choose one for him
-  if(mpf_hmat_settings.factorization_type == hmat_factorization_none) {
-    // use LDLT for real matrices
-    mpf_hmat_settings.factorization_type = hmat_factorization_ldlt;
-  }
-
   HMAT_desc_t *hdesc;
   hdesc = HMAT_generate_matrix( interface );
   hmat_matrix_t *hmatrix = hdesc->hmatrix;
@@ -59,9 +51,9 @@ int testHMAT(double * relative_error) {
 
   hmat_factorization_context_t ctx;
   hmat_factorization_context_init(&ctx);
-  ctx.progress = &mpf_hmat_settings.progress;
+  ctx.progress = &progress;
   ctx.progress->user_data = NULL;
-  ctx.factorization = mpf_hmat_settings.factorization_type;
+  ctx.factorization = hmat_factorization_ldlt;
   ierr = interface->factorize_generic(hmatrix, &ctx); CHKERRQ(ierr);
 
   temps_final = getTime ();
diff --git a/src/util.c b/src/util.c
index 844bc4765108751e85ab6d243f21927027ff2cb2..09475b527a0e2397c0336a4ac66ec6bc2d8cbb20 100644
--- a/src/util.c
+++ b/src/util.c
@@ -467,22 +467,11 @@ int hmat_get_sync_exec(void) {
   return 1;
 }
 /* ================================================================================== */
-static void update_progress(hmat_progress_t * ctx) {
-  Mpf_progressBar(ctx->current, ctx->max);
-}
-/* ================================================================================== */
 int SCAB_Init(int* argc, char*** argv) {
   int ierr;
 
   printf( "HMATRIX solver\n");
 
-  memset(&mpf_hmat_settings, 0, sizeof(mpf_hmat_settings));
-  mpf_hmat_settings.factorization_type = hmat_factorization_none;
-  mpf_hmat_settings.acaEpsilon = 1e-3;
-  mpf_hmat_settings.compressionMethod = hmat_compress_aca_plus;
-  mpf_hmat_settings.epsilon = 1e-3;
-  mpf_hmat_settings.max_leaf_size = -1;
-    mpf_hmat_settings.engine = mpf_hmat_seq;
   if(strcmp(hmat_get_version(), HMAT_VERSION))
     printf( "***\n*** hmat version %s (compiled with version %s)\n", hmat_get_version(), HMAT_VERSION);
   else
@@ -491,13 +480,10 @@ int SCAB_Init(int* argc, char*** argv) {
   hmat_get_build_date(&d, &t);
   printf("*** Built on %s at %s\n***\n", d, t);
 
-  if (MpfArgGetDouble( argc, *argv, 1, "-epsilon" , &mpf_hmat_settings.epsilon  )) {
-    mpf_hmat_settings.acaEpsilon = mpf_hmat_settings.epsilon;
-    printf("[HMat] Compression/Recompression epsilon: %e\n", mpf_hmat_settings.epsilon );
+  if (MpfArgGetDouble( argc, *argv, 1, "-epsilon" , &epsilon  )) {
+    printf("[HMat] Compression/Recompression epsilon: %e\n", epsilon );
   }
 
-  mpf_hmat_settings.progress.update = update_progress;
-
   /*! \brief Abort timer (in seconds)
 
      Abort timer: it is the initial value of the countdown timer started by setitimer().