diff --git a/coreblas/compute/CMakeLists.txt b/coreblas/compute/CMakeLists.txt
index bd4ad9f215c9f38927f1f6ef25ba0a272ffc14cd..137adfbba9179c7f5dc49ca0d0ad8f4bc1ac1dbe 100644
--- a/coreblas/compute/CMakeLists.txt
+++ b/coreblas/compute/CMakeLists.txt
@@ -164,9 +164,6 @@ endif()
 target_link_libraries(coreblas PRIVATE MORSE::LAPACKE)
 target_link_libraries(coreblas PRIVATE MORSE::CBLAS)
 target_link_libraries(coreblas PUBLIC MORSE::M)
-if (CHAMELEON_USE_MPI)
-  target_link_libraries(coreblas PUBLIC MPI::MPI_C)
-endif()
 
 # export target coreblas
 install(EXPORT coreblasTargets
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
index d65ef6a754fd127c67c202ac88dae49134684bf9..3196000d390c7c82cbe07ff9c3f02a24f65e4b67 100644
--- a/include/CMakeLists.txt
+++ b/include/CMakeLists.txt
@@ -54,6 +54,7 @@ set(CHAMELEON_HDRS
   chameleon/runtime_struct.h
   chameleon/simulate.h
   chameleon/struct.h
+  chameleon/struct_context.h
   chameleon/tasks.h
   chameleon/timer.h
   chameleon/types.h
diff --git a/include/chameleon.h b/include/chameleon.h
index 9d658fbb07a5003992c62fbe769274da7771aab4..16786cb604c7c5ef85b9b5620e0b0fb699bdf20b 100644
--- a/include/chameleon.h
+++ b/include/chameleon.h
@@ -33,6 +33,7 @@
 #include "chameleon/constants.h"
 #include "chameleon/types.h"
 #include "chameleon/struct.h"
+#include "chameleon/struct_context.h"
 #include "chameleon/descriptor_helpers.h"
 
 #if defined(CHAMELEON_USE_MPI)
diff --git a/include/chameleon/struct.h b/include/chameleon/struct.h
index 539049e3cf1914590283d7598a781e8a3558eada..abcaade243c8df0b320eafb65bf4bda755beabca 100644
--- a/include/chameleon/struct.h
+++ b/include/chameleon/struct.h
@@ -25,21 +25,7 @@
 #ifndef _chameleon_struct_h_
 #define _chameleon_struct_h_
 
-#include "chameleon/config.h"
-#include "chameleon/types.h"
 #include "chameleon/constants.h"
-#include "chameleon/runtime_struct.h"
-
-#if defined(CHAMELEON_USE_MPI)
-#include <mpi.h>
-#else
-#ifndef MPI_Comm
-typedef uintptr_t MPI_Comm;
-#endif
-#ifndef MPI_COMM_WORLD
-#define MPI_COMM_WORLD 0
-#endif
-#endif
 
 BEGIN_C_DECLS
 
@@ -174,37 +160,6 @@ typedef struct chameleon_piv_s {
     int     n;              /**> The number of column considered (must be updated for each panel) */
 } CHAM_ipiv_t;
 
-/**
- *  CHAMELEON request uniquely identifies each asynchronous function call.
- */
-typedef struct chameleon_context_s {
-    RUNTIME_id_t       scheduler;
-    int                nworkers;
-    int                ncudas;
-    int                nthreads_per_worker;
-
-    /* Boolean flags */
-    cham_bool_t        warnings_enabled;
-    cham_bool_t        autotuning_enabled;
-    cham_bool_t        parallel_enabled;
-    cham_bool_t        statistics_enabled;
-    cham_bool_t        progress_enabled;
-    cham_bool_t        generic_enabled;
-    cham_bool_t        autominmax_enabled;
-    cham_bool_t        runtime_paused;
-
-    cham_householder_t householder;        // "domino" (flat) or tree-based (reduction) Householder
-    cham_translation_t translation;        // In place or Out of place layout conversion
-
-    int                nb;
-    int                ib;
-    int                rhblock;            // block size for tree-based (reduction) Householder
-    int                lookahead;          // depth of the look ahead in algorithms
-    void              *schedopt;           // structure for runtimes
-    int                mpi_outer_init;     // MPI has been initialized outside our functions
-    MPI_Comm           comm;               // MPI communicator
-} CHAM_context_t;
-
 static inline void *
 CHAM_tile_get_ptr( const CHAM_tile_t *tile )
 {
diff --git a/include/chameleon/struct_context.h b/include/chameleon/struct_context.h
new file mode 100644
index 0000000000000000000000000000000000000000..ea8fde105d41665b1bc265471761a8a114ba42ca
--- /dev/null
+++ b/include/chameleon/struct_context.h
@@ -0,0 +1,73 @@
+/**
+ *
+ * @file struct_context.h
+ *
+ * @copyright 2009-2014 The University of Tennessee and The University of
+ *                      Tennessee Research Foundation. All rights reserved.
+ * @copyright 2012-2024 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                      Univ. Bordeaux. All rights reserved.
+ *
+ ***
+ *
+ * @brief Chameleon structures
+ *
+ * @version 1.3.0
+ * @author Mathieu Faverge
+ * @author Florent Pruvost
+ * @date 2024-02-12
+ *
+ */
+#ifndef _struct_context_h_
+#define _struct_context_h_
+
+#include "chameleon/types.h"
+#include "chameleon/constants.h"
+#include "chameleon/runtime_struct.h"
+
+#if defined(CHAMELEON_USE_MPI)
+#include <mpi.h>
+#else
+#ifndef MPI_Comm
+typedef uintptr_t MPI_Comm;
+#endif
+#ifndef MPI_COMM_WORLD
+#define MPI_COMM_WORLD 0
+#endif
+#endif
+
+BEGIN_C_DECLS
+
+/**
+ *  CHAMELEON request uniquely identifies each asynchronous function call.
+ */
+typedef struct chameleon_context_s {
+    RUNTIME_id_t       scheduler;
+    int                nworkers;
+    int                ncudas;
+    int                nthreads_per_worker;
+
+    /* Boolean flags */
+    cham_bool_t        warnings_enabled;
+    cham_bool_t        autotuning_enabled;
+    cham_bool_t        parallel_enabled;
+    cham_bool_t        statistics_enabled;
+    cham_bool_t        progress_enabled;
+    cham_bool_t        generic_enabled;
+    cham_bool_t        autominmax_enabled;
+    cham_bool_t        runtime_paused;
+
+    cham_householder_t householder;        // "domino" (flat) or tree-based (reduction) Householder
+    cham_translation_t translation;        // In place or Out of place layout conversion
+
+    int                nb;
+    int                ib;
+    int                rhblock;            // block size for tree-based (reduction) Householder
+    int                lookahead;          // depth of the look ahead in algorithms
+    void              *schedopt;           // structure for runtimes
+    int                mpi_outer_init;     // MPI has been initialized outside our functions
+    MPI_Comm           comm;               // MPI communicator
+} CHAM_context_t;
+
+END_C_DECLS
+
+#endif /* _struct_context_h_ */