diff --git a/compute/zgemm.c b/compute/zgemm.c
index 21cc76313bbd36b3de7114f9a0c531db8a9a5fd2..7aa73aa9e4a6845ae7667a705564c066a75da0b3 100644
--- a/compute/zgemm.c
+++ b/compute/zgemm.c
@@ -28,6 +28,28 @@
  **/
 #include "control/common.h"
 
+/**
+ *
+ * @defgroup MORSE_Complex64_t
+ * @brief Linear algebra routines exposed to users. LAPACK matrix data storage
+ *
+ */
+
+/**
+ *
+ * @defgroup MORSE_Complex64_t_Tile
+ * @brief Linear algebra routines exposed to users. Tile matrix data storage
+ *
+ */
+
+/**
+ *
+ * @defgroup MORSE_Complex64_t_Tile_Async
+ * @brief Linear algebra routines exposed to users. Tile matrix data storage,
+ *  asynchronous interface.
+ *
+ */
+
 /***************************************************************************//**
  *
  * @ingroup MORSE_Complex64_t
diff --git a/control/CMakeLists.txt b/control/CMakeLists.txt
index 85daf5fd86e0f1dd6e1fc767e382e94df15764a0..1e2ef3e9d5346235bfb7b27ae24406f944f941a2 100644
--- a/control/CMakeLists.txt
+++ b/control/CMakeLists.txt
@@ -51,29 +51,19 @@ set(CHAMELEON_HDRS
     morsewinthread.h
     tile.h
     workspace.h
-    ${CHAMELEON_HDRS_GENERATED}
     )
 
+set(HDR_INSTALL ${CHAMELEON_HDRS})
+foreach( hdr_file ${CHAMELEON_HDRS_GENERATED} )
+    list(APPEND HDR_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/${hdr_file})
+endforeach()
+
+list(APPEND CHAMELEON_HDRS ${CHAMELEON_HDRS_GENERATED})
+
 # Force generation of headers
 # ---------------------------
 add_custom_target(control_include ALL SOURCES ${CHAMELEON_HDRS})
 
-set(HDR_INSTALL
-    async.h
-    auxiliary.h
-    bulge.h
-    common.h
-    context.h
-    descriptor.h
-    gkkleader.h
-    global.h
-    morsewinthread.h
-    tile.h
-    workspace.h
-    )
-foreach( hdr_file ${CHAMELEON_HDRS_GENERATED} )
-    list(APPEND HDR_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/${hdr_file})
-endforeach()
 
 # installation
 # ------------
diff --git a/control/async.c b/control/async.c
index 5c32c73e071c68203eded6d176a888d8256584bf..b3df48acf9a14235153bb2f28f73ded963dc8b15 100644
--- a/control/async.c
+++ b/control/async.c
@@ -23,6 +23,14 @@
  * @date 2012-09-15
  *
  **/
+
+/**
+ *
+ * @defgroup Sequences
+ * @brief Group routines exposed to users to handle asynchronous tasks execution
+ *
+ */
+
 #include <stdlib.h>
 #include "control/common.h"
 #include "runtime.h"
@@ -73,23 +81,23 @@ int morse_sequence_wait(MORSE_context_t *morse, MORSE_sequence_t *sequence)
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Sequences
  *
  *  MORSE_Sequence_Create - Create a squence.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[out] sequence
  *          Identifies a set of routines sharing common exception handling.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Sequence_Create(MORSE_sequence_t **sequence)
 {
     MORSE_context_t *morse;
@@ -104,23 +112,23 @@ int MORSE_Sequence_Create(MORSE_sequence_t **sequence)
     return status;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Sequences
  *
  *  MORSE_Sequence_Destroy - Destroy a sequence.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] sequence
  *          Identifies a set of routines sharing common exception handling.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Sequence_Destroy(MORSE_sequence_t *sequence)
 {
     MORSE_context_t *morse;
@@ -139,23 +147,23 @@ int MORSE_Sequence_Destroy(MORSE_sequence_t *sequence)
     return status;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Sequences
  *
  *  MORSE_Sequence_Wait - Wait for the completion of a sequence.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] sequence
  *          Identifies a set of routines sharing common exception handling.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Sequence_Wait(MORSE_sequence_t *sequence)
 {
     MORSE_context_t *morse;
@@ -174,13 +182,13 @@ int MORSE_Sequence_Wait(MORSE_sequence_t *sequence)
     return status;
 }
 
-/******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Sequences
  *
  *  MORSE_Sequence_Flush - Terminate a sequence.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] sequence
  *          Identifies a set of routines sharing common exception handling.
@@ -188,12 +196,12 @@ int MORSE_Sequence_Wait(MORSE_sequence_t *sequence)
  * @param[in] request
  *          The flush request.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Sequence_Flush(MORSE_sequence_t *sequence, MORSE_request_t *request)
 {
     MORSE_context_t *morse;
diff --git a/control/auxiliary.c b/control/auxiliary.c
index 3147fcdf17c5e66382f7cf26107ad89237b94b2e..82e0b5f6a736fa2ae73fd0c1fb1c704547e33c47 100644
--- a/control/auxiliary.c
+++ b/control/auxiliary.c
@@ -24,6 +24,14 @@
  * @date 2012-09-15
  *
  **/
+
+/**
+ *
+ * @defgroup Auxiliary
+ * @brief Group auxiliary routines exposed to users
+ *
+ */
+
 #include "control/common.h"
 #include "control/auxiliary.h"
 
@@ -100,24 +108,6 @@ void morse_fatal_error(const char *func_name, char* msg_text)
     exit(0);
 }
 
-/*******************************************************************************
- *
- **/
-int morse_element_size(int type)
-{
-    switch(type) {
-        case MorseByte:          return          1;
-        case MorseInteger:       return   sizeof(int);
-        case MorseRealFloat:     return   sizeof(float);
-        case MorseRealDouble:    return   sizeof(double);
-        case MorseComplexFloat:  return 2*sizeof(float);
-        case MorseComplexDouble: return 2*sizeof(double);
-        default: morse_fatal_error("morse_element_size", "undefined type");
-                 return MORSE_ERR_ILLEGAL_VALUE;
-
-    }
-}
-
 /*******************************************************************************
  *  Returns core id
  **/
@@ -139,13 +129,13 @@ int morse_tune(MORSE_enum func, int M, int N, int NRHS)
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
  * @ingroup Auxiliary
  *
  *  MORSE_Version - Reports MORSE version number.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[out] ver_major
  *          MORSE major version number.
@@ -156,12 +146,12 @@ int morse_tune(MORSE_enum func, int M, int N, int NRHS)
  * @param[out] ver_micro
  *          MORSE micro version number.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Version(int *ver_major, int *ver_minor, int *ver_micro)
 {
     if (! ver_major && ! ver_minor && ! ver_micro)
@@ -178,3 +168,70 @@ int MORSE_Version(int *ver_major, int *ver_minor, int *ver_micro)
 
     return MORSE_SUCCESS;
 }
+
+/** ***************************************************************************
+ *
+ * @ingroup Auxiliary
+ *
+ *  MORSE_Element_Size - Reports the size in bytes of a MORSE precision type
+ *  (e.g. MorseInteger, MorseRealFloat, etc).
+ *
+ ******************************************************************************
+ *
+ * @param[in] type
+ *          MORSE element type, can be one of the following:
+ *          - MorseByte
+ *          - MorseInteger
+ *          - MorseRealFloat
+ *          - MorseRealDouble
+ *          - MorseComplexFloat
+ *          - MorseComplexDouble
+ *
+ ******************************************************************************
+ *
+ * @return
+ *          \retval Element size in bytes
+ *
+ *****************************************************************************/
+int MORSE_Element_Size(int type)
+{
+    switch(type) {
+        case MorseByte:          return          1;
+        case MorseInteger:       return   sizeof(int);
+        case MorseRealFloat:     return   sizeof(float);
+        case MorseRealDouble:    return   sizeof(double);
+        case MorseComplexFloat:  return 2*sizeof(float);
+        case MorseComplexDouble: return 2*sizeof(double);
+        default: morse_fatal_error("MORSE_Element_Size", "undefined type");
+                 return MORSE_ERR_ILLEGAL_VALUE;
+
+    }
+}
+
+/** ***************************************************************************
+ *
+ * @ingroup Auxiliary
+ *
+ *  MORSE_My_Mpi_Rank - Return the MPI rank of the calling process.
+ *
+ ******************************************************************************
+ *
+ ******************************************************************************
+ *
+ * @return
+ *          \retval MPI rank
+ *
+ *****************************************************************************/
+int MORSE_My_Mpi_Rank(void)
+{
+#if defined(CHAMELEON_USE_MPI)
+    MORSE_context_t *morse = morse_context_self();
+    if (morse == NULL) {
+        morse_error("MORSE_Finalize()", "MORSE not initialized");
+        return MORSE_ERR_NOT_INITIALIZED;
+    }
+    return MORSE_MPI_RANK;
+#else
+    return MORSE_SUCCESS;
+#endif
+}
diff --git a/control/auxiliary.h b/control/auxiliary.h
index fd528e7a171161c0a66b415997a8bf450375b86c..15b9699f30114cfb73b9c15e9972d20e32863380 100644
--- a/control/auxiliary.h
+++ b/control/auxiliary.h
@@ -39,15 +39,9 @@ extern "C" {
 void morse_warning      (const char *func_name, char* msg_text);
 void morse_error        (const char *func_name, char* msg_text);
 void morse_fatal_error  (const char *func_name, char* msg_text);
-int  morse_element_size (int type);
 int  morse_rank         (MORSE_context_t *morse);
 int  morse_tune         (MORSE_enum func, int M, int N, int NRHS);
 
-/*******************************************************************************
- *  User routines
- **/
-int MORSE_Version (int *ver_major, int *ver_minor, int *ver_micro);
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/control/context.c b/control/context.c
index ae3d63b015656a61de36f7d63478d23ccfe1303d..1861bf6a499e2b55efa60ab7fcb27a59ad76824e 100644
--- a/control/context.c
+++ b/control/context.c
@@ -24,6 +24,13 @@
  *
  **/
 
+/**
+ *
+ * @defgroup Options
+ * @brief Group routines exposed to users to handle options
+ *
+ */
+
 #include <stdlib.h>
 #if defined( _WIN32 ) || defined( _WIN64 )
 #include "control/morsewinthread.h"
@@ -109,15 +116,15 @@ int morse_context_destroy(){
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Options
  *
  *  MORSE_Enable - Enable MORSE feature.
  *
  *******************************************************************************
  *
- * @param[in] lever
+ * @param[in] option
  *          Feature to be enabled:
  *          @arg MORSE_WARNINGS   printing of warning messages,
  *          @arg MORSE_ERRORS     printing of error messages,
@@ -170,15 +177,15 @@ int MORSE_Enable(MORSE_enum option)
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Options
  *
  *  MORSE_Disable - Disable MORSE feature.
  *
  *******************************************************************************
  *
- * @param[in] lever
+ * @param[in] option
  *          Feature to be disabled:
  *          @arg MORSE_WARNINGS   printing of warning messages,
  *          @arg MORSE_ERRORS     printing of error messages,
@@ -228,9 +235,9 @@ int MORSE_Disable(MORSE_enum option)
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Options
  *
  *  MORSE_Set - Set MORSE parameter.
  *
@@ -322,9 +329,9 @@ int MORSE_Set(MORSE_enum param, int value)
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Options
  *
  *  MORSE_Get - Get value of MORSE parameter.
  *
diff --git a/control/control.c b/control/control.c
index 480bf89a1600741879cd8a2828be91dca4dc1938..f0fffbe273404767fcddbee621dfb97a42b447e5 100644
--- a/control/control.c
+++ b/control/control.c
@@ -23,63 +23,69 @@
  * @date 2012-09-15
  *
  **/
+
+/**
+ *
+ * @defgroup Control
+ * @brief Group routines exposed to users to control MORSE state
+ *
+ */
+
 #include <stdio.h>
 #include <stdlib.h>
 #include "control/auxiliary.h"
 #include "control/common.h"
 #include "runtime.h"
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Control
  *
  *  MORSE_Init - Initialize MORSE.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] cores
- *          Number of cores to use (threads to launch).
- *          If cores = 0, cores = MORSE_NUM_THREADS if it is set, the
- *          system number of core otherwise.
+ *          Number of cores to use.
  *
- *******************************************************************************
+ * @param[in] gpus
+ *          Number of cuda devices to use.
+ *
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Init(int cores, int gpus)
 {
     return MORSE_InitPar(cores, gpus, -1);
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Control
  *
- *  MORSE_Init_Affinity - Initialize MORSE.
+ *  MORSE_InitPar - Initialize MORSE.
  *
- *******************************************************************************
+ ******************************************************************************
  *
- * @param[in] cores
- *          Number of cores to use (threads to launch).
- *          If cores = 0, cores = MORSE_NUM_THREADS if it is set, the
- *          system number of core otherwise.
+ * @param[in] ncpus
+ *          Number of cores to use.
  *
- * @param[in] coresbind
- *          Array to specify where to bind each thread.
- *          Each thread i is binded to coresbind[hwloc(i)] if hwloc is
- *          provided, or to coresbind[i] otherwise.
- *          If coresbind = NULL, coresbind = MORSE_AFF_THREADS if it
- *          is set, the identity function otherwise.
+ * @param[in] ncudas
+ *          Number of cuda devices to use.
  *
- *******************************************************************************
+ * @param[in] nthreads_per_worker
+ *          Number of threads per worker (cpu, cuda device).
+ *
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
-int MORSE_InitPar(int nworkers, int ncudas, int nthreads_per_worker)
+ *****************************************************************************/
+int MORSE_InitPar(int ncpus, int ncudas, int nthreads_per_worker)
 {
     MORSE_context_t *morse;
 
@@ -90,33 +96,6 @@ int MORSE_InitPar(int nworkers, int ncudas, int nthreads_per_worker)
         return MORSE_ERR_OUT_OF_RESOURCES;
     }
 
-#if 0
-    /* Init number of cores and topology */
-    morse_topology_init();
-
-    /* Set number of nworkers */
-    if ( nworkers < 1 ) {
-        morse->world_size = morse_get_numthreads();
-        if ( morse->world_size == -1 ) {
-            morse->world_size = 1;
-            morse_warning("MORSE_Init", "Could not find the number of cores: the thread number is set to 1");
-        }
-    }
-    else
-      morse->world_size = nworkers;
-
-    if (morse->world_size <= 0) {
-        morse_fatal_error("MORSE_Init", "failed to get system size");
-        return MORSE_ERR_NOT_FOUND;
-    }
-    nworkers = morse->world_size;
-
-    /* Get the size of each NUMA node */
-    morse->group_size = morse_get_numthreads_numa();
-    while ( ((morse->world_size)%(morse->group_size)) != 0 ) 
-        (morse->group_size)--;
-#endif
-
 #if defined(CHAMELEON_USE_MPI)
     {
       int flag = 0, provided = 0;
@@ -130,22 +109,22 @@ int MORSE_InitPar(int nworkers, int ncudas, int nthreads_per_worker)
 #if defined(CHAMELEON_USE_MAGMA)
     magma_init();
 #endif
-    RUNTIME_init_scheduler( morse, nworkers, ncudas, nthreads_per_worker );
+    RUNTIME_init_scheduler( morse, ncpus, ncudas, nthreads_per_worker );
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Control
  *
  *  MORSE_Finalize - Finalize MORSE.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Finalize(void)
 {
     MORSE_context_t *morse = morse_context_self();
@@ -168,46 +147,18 @@ int MORSE_Finalize(void)
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
- *
- * @ingroup Auxiliary
- *
- *  MORSE_My_Mpi_Rank - Return the MPI rank of the calling process.
- *
- *******************************************************************************
- *
- *******************************************************************************
- *
- * @return
- *          \retval MPI rank
- *
- ******************************************************************************/
-int MORSE_My_Mpi_Rank(void)
-{
-#if defined(CHAMELEON_USE_MPI)
-    MORSE_context_t *morse = morse_context_self();
-    if (morse == NULL) {
-        morse_error("MORSE_Finalize()", "MORSE not initialized");
-        return MORSE_ERR_NOT_INITIALIZED;
-    }
-    return MORSE_MPI_RANK;
-#else
-    return MORSE_SUCCESS;
-#endif
-}
-
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Control
  *
  *  MORSE_Pause - Suspend MORSE runtime to poll for new tasks.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Pause(void)
 {
     MORSE_context_t *morse = morse_context_self();
@@ -219,19 +170,19 @@ int MORSE_Pause(void)
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Control
  *
  *  MORSE_Resume - Symmetrical call to MORSE_Pause,
  *  used to resume the workers polling for new tasks.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Resume(void)
 {
     MORSE_context_t *morse = morse_context_self();
diff --git a/control/descriptor.c b/control/descriptor.c
index b0ed101444b101c6e82ed8018e6e46bdc17a5e18..8ceed3733f97cef1f2e9c17152f04326f3cd07a7 100644
--- a/control/descriptor.c
+++ b/control/descriptor.c
@@ -22,6 +22,14 @@
  * @date 2010-11-15
  *
  **/
+
+/**
+ *
+ * @defgroup Descriptor
+ * @brief Group descriptor routines exposed to users
+ *
+ */
+
 #include <stdlib.h>
 #include <assert.h>
 #include "control/common.h"
@@ -299,7 +307,7 @@ int morse_desc_mat_alloc( MORSE_desc_t *desc )
 {
 
     size_t size = (size_t)(desc->llm) * (size_t)(desc->lln)
-      * (size_t)morse_element_size(desc->dtyp);
+      * (size_t)MORSE_Element_Size(desc->dtyp);
     if ((desc->mat = malloc(size)) == NULL) {
         morse_error("morse_desc_mat_alloc", "malloc() failed");
         return MORSE_ERR_OUT_OF_RESOURCES;
@@ -329,13 +337,13 @@ int morse_desc_mat_free( MORSE_desc_t *desc )
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Descriptor
  *
  *  MORSE_Desc_Create - Create matrix descriptor.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[out] desc
  *          On exit, descriptor of the matrix.
@@ -378,12 +386,12 @@ int morse_desc_mat_free( MORSE_desc_t *desc )
  * @param[in] n
  *          Number of columns of the submatrix.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Desc_Create(MORSE_desc_t **desc, void *mat, MORSE_enum dtyp, int mb, int nb, int bsiz,
                       int lm, int ln, int i, int j, int m, int n, int p, int q)
 {
@@ -411,7 +419,7 @@ int MORSE_Desc_Create(MORSE_desc_t **desc, void *mat, MORSE_enum dtyp, int mb, i
         /* TODO: a call to morse_desc_mat_alloc should be made, but require to
         move the call to RUNTIME_desc_create within the function */
         size_t size = (size_t)((*desc)->llm) * (size_t)((*desc)->lln)
-            * (size_t)morse_element_size((*desc)->dtyp);
+            * (size_t)MORSE_Element_Size((*desc)->dtyp);
 
         if (((**desc).mat = malloc(size)) == NULL) {
             morse_error("MORSE_Desc_Create", "malloc() failed");
@@ -437,13 +445,13 @@ int MORSE_Desc_Create(MORSE_desc_t **desc, void *mat, MORSE_enum dtyp, int mb, i
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Descriptor
  *
  *  MORSE_Desc_Create_User - Create matrix descriptor for general applications.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[out] desc
  *          On exit, descriptor of the matrix.
@@ -484,12 +492,12 @@ int MORSE_Desc_Create(MORSE_desc_t **desc, void *mat, MORSE_enum dtyp, int mb, i
  * @param[in] (*get_rankof)( const MORSE_desc_t *A, int m, int n)
  *          A function that return the MPI rank of the tile A(m,n).
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Desc_Create_User(MORSE_desc_t **desc, void *mat, MORSE_enum dtyp, int mb, int nb, int bsiz,
                            int lm, int ln, int i, int j, int m, int n, int p, int q,
                            void* (*get_blkaddr)( const MORSE_desc_t*, int, int ),
@@ -537,23 +545,23 @@ int MORSE_Desc_Create_User(MORSE_desc_t **desc, void *mat, MORSE_enum dtyp, int
     return MORSE_SUCCESS;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Descriptor
  *
  *  MORSE_Desc_Destroy - Destroys matrix descriptor.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] desc
  *          Matrix descriptor.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Desc_Destroy(MORSE_desc_t **desc)
 {
     MORSE_context_t *morse;
@@ -575,15 +583,69 @@ int MORSE_Desc_Destroy(MORSE_desc_t **desc)
     return MORSE_SUCCESS;
 }
 
-
+/** ***************************************************************************
+ *
+ * @ingroup Descriptor
+ *
+ *  MORSE_Desc_Acquire - Ensures that all data of the descriptor are
+ *  up-to-date.
+ *
+ ******************************************************************************
+ *
+ * @param[in] desc
+ *          Matrix descriptor.
+ *
+ ******************************************************************************
+ *
+ * @return
+ *          \retval MORSE_SUCCESS successful exit
+ *
+ *****************************************************************************/
 int MORSE_Desc_Acquire (MORSE_desc_t  *desc) {
   return RUNTIME_desc_acquire( desc );
 }
 
+/** ***************************************************************************
+ *
+ * @ingroup Descriptor
+ *
+ *  MORSE_Desc_Release - Release the data of the descriptor acquired by the
+ *  application. Should be called if MORSE_Desc_Acquire has been called on the
+ *  descriptor and if you do not need to access to its data anymore.
+ *
+ ******************************************************************************
+ *
+ * @param[in] desc
+ *          Matrix descriptor.
+ *
+ ******************************************************************************
+ *
+ * @return
+ *          \retval MORSE_SUCCESS successful exit
+ *
+ *****************************************************************************/
 int MORSE_Desc_Release (MORSE_desc_t  *desc) {
   return RUNTIME_desc_release( desc );
 }
 
+/** ***************************************************************************
+ *
+ * @ingroup Descriptor
+ *
+ *  MORSE_Desc_Getoncpu - Apply an acquire and a release on the data of the
+ *  descriptors so that its values are up-to-date in the main memory.
+ *
+ ******************************************************************************
+ *
+ * @param[in] desc
+ *          Matrix descriptor.
+ *
+ ******************************************************************************
+ *
+ * @return
+ *          \retval MORSE_SUCCESS successful exit
+ *
+ *****************************************************************************/
 int MORSE_Desc_Getoncpu(MORSE_desc_t  *desc) {
   return RUNTIME_desc_getoncpu( desc );
 }
diff --git a/control/descriptor.h b/control/descriptor.h
index f3fe886b024c9253b98e6874c1c58cfc7a9cfc09..3f2f49cf8d45b10a2d08863342381dcc95101e67 100644
--- a/control/descriptor.h
+++ b/control/descriptor.h
@@ -71,7 +71,7 @@ inline static void* morse_getaddr_ccrb(const MORSE_desc_t *A, int m, int n)
 {
     size_t mm = m + A->i / A->mb;
     size_t nn = n + A->j / A->nb;
-    size_t eltsize = morse_element_size(A->dtyp);
+    size_t eltsize = MORSE_Element_Size(A->dtyp);
     size_t offset = 0;
 
 #if defined(CHAMELEON_USE_MPI)
@@ -103,7 +103,7 @@ inline static void *morse_getaddr_cm(const MORSE_desc_t *A, int m, int n)
 {
     size_t mm = m + A->i / A->mb;
     size_t nn = n + A->j / A->nb;
-    size_t eltsize = morse_element_size(A->dtyp);
+    size_t eltsize = MORSE_Element_Size(A->dtyp);
     size_t offset = 0;
 
 #if defined(CHAMELEON_USE_MPI)
diff --git a/control/tile.c b/control/tile.c
index bbd105736e2f4d8d41e159d39d48ab10bbc93e3b..992949a9a606584d2511bf4745521cccca3dcb8f 100644
--- a/control/tile.c
+++ b/control/tile.c
@@ -22,17 +22,25 @@
  * @date 2010-11-15
  *
  **/
+
+/**
+ *
+ * @defgroup Tile
+ * @brief Group routines exposed to users for matrices conversion LAPACK-Tile
+ *
+ */
+
 #include "control/common.h"
 #include "control/auxiliary.h"
 #include "control/tile.h"
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Tile
  *
  *  MORSE_Lapack_to_Tile - Conversion from LAPACK layout to tile layout.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] Af77
  *          LAPACK matrix.
@@ -43,12 +51,12 @@
  * @param[out] A
  *          Descriptor of the MORSE matrix in tile layout.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Lapack_to_Tile(void *Af77, int LDA, MORSE_desc_t *A)
 {
     MORSE_context_t  *morse;
@@ -101,13 +109,13 @@ int MORSE_Lapack_to_Tile(void *Af77, int LDA, MORSE_desc_t *A)
     return status;
 }
 
-/*******************************************************************************
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Tile
  *
  *  MORSE_Tile_to_Lapack - Conversion from tile layout to LAPACK layout.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[out] A
  *          Descriptor of the MORSE matrix in tile layout.
@@ -118,12 +126,12 @@ int MORSE_Lapack_to_Tile(void *Af77, int LDA, MORSE_desc_t *A)
  * @param[in] LDA
  *          The leading dimension of the matrix Af77.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Tile_to_Lapack(MORSE_desc_t *A, void *Af77, int LDA)
 {
     MORSE_context_t  *morse;
diff --git a/control/workspace.c b/control/workspace.c
index fabbd7b0e955a55588f6a064ad1d532bebe45ac8..192b1a0058b0870c29222f92ee7a3dd38a0e848f 100644
--- a/control/workspace.c
+++ b/control/workspace.c
@@ -22,6 +22,14 @@
  * @date 2012-09-15
  *
  **/
+
+/**
+ *
+ * @defgroup Workspace
+ * @brief Group routines exposed to users about specific workspaces management
+ *
+ */
+
 #include <stdlib.h>
 #include "control/common.h"
 #include "control/auxiliary.h"
@@ -159,7 +167,7 @@ int morse_alloc_ipiv(int M, int N, MORSE_enum func, int type, MORSE_desc_t **des
 
 /*******************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
  *  MORSE_Dealloc_Worksapce - Deallocate workspace descriptor allocated by
  *                            any workspace allocation routine.
diff --git a/control/workspace_z.c b/control/workspace_z.c
index ce0da55bc48bebd927217fb81f9c1a7dd42dbd95..3e784b04ea1aa9c208e9d57bec927d38f3f8d3c8 100644
--- a/control/workspace_z.c
+++ b/control/workspace_z.c
@@ -32,59 +32,63 @@
 #include "control/common.h"
 #include "control/workspace.h"
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
- *  MORSE_Alloc_Workspace_zgeev - Allocates workspace for MORSE_zgeev or MORSE_zgeev_Tile routine.
+ *  MORSE_Alloc_Workspace_zgeev - Allocates workspace for MORSE_zgeev or
+ *  MORSE_zgeev_Tile routine.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] N
  *          The order of the matrix A.  N >= 0.
  *
  * @param[out] descT
- *          On exit, workspace handle for storage of the extra T factors required by the tile Hessenberg.
+ *          On exit, workspace handle for storage of the extra T factors
+ *          required by the tile Hessenberg.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Alloc_Workspace_zgeev(int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(N, N, MORSE_FUNC_ZGEEV, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
- *  MORSE_Alloc_Workspace_zgehrd - Allocates workspace for MORSE_zgehrd or MORSE_zgehrd_Tile routine.
+ *  MORSE_Alloc_Workspace_zgehrd - Allocates workspace for MORSE_zgehrd or
+ *  MORSE_zgehrd_Tile routine.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] N
  *          The number of columns of the matrix A.  N >= 0.
  *
  * @param[out] descT
- *          On exit, workspace handle for storage of the extra T factors required by the tile Hessenberg.
+ *          On exit, workspace handle for storage of the extra T factors
+ *          required by the tile Hessenberg.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Alloc_Workspace_zgehrd(int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(N, N, MORSE_FUNC_ZGEHRD, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
  *  MORSE_Alloc_Workspace_zgebrd - Allocates workspace for MORSE_zgebrd or MORSE_zgebrd_Tile routine.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] M
  *          The number of rows of the matrix A. M >= 0.
@@ -93,24 +97,26 @@ int MORSE_Alloc_Workspace_zgehrd(int N, MORSE_desc_t **descT) {
  *          The number of columns of the matrix A.  N >= 0.
  *
  * @param[out] descT
- *          On exit, workspace handle for storage of the extra T factors required by the tile BRD.
+ *          On exit, workspace handle for storage of the extra T factors
+ *          required by the tile BRD.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Alloc_Workspace_zgebrd(int M, int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(M, N, MORSE_FUNC_ZGEBRD, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
- *  MORSE_Alloc_Workspace_zgels - Allocates workspace for MORSE_zgels or MORSE_zgels_Tile routine.
+ *  MORSE_Alloc_Workspace_zgels - Allocates workspace for MORSE_zgels or
+ *  MORSE_zgels_Tile routine.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] M
  *          The number of rows of the matrix A. M >= 0.
@@ -119,26 +125,26 @@ int MORSE_Alloc_Workspace_zgebrd(int M, int N, MORSE_desc_t **descT) {
  *          The number of columns of the matrix A.  N >= 0.
  *
  * @param[out] descT
- *          On exit, workspace handle for storage of the extra T factors required by the tile QR
- *          or the tile LQ factorization.
+ *          On exit, workspace handle for storage of the extra T factors
+ *          required by the tile QR or the tile LQ factorization.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Alloc_Workspace_zgels(int M, int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(M, N, MORSE_FUNC_ZGELS, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
-@@ -192,33 +120,6 @@
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
- *  MORSE_Alloc_Workspace_zgels_Tile - Allocates tile workspace for MORSE_zgels_Tile routine.
+ *  MORSE_Alloc_Workspace_zgels_Tile - Allocates tile workspace for
+ *  MORSE_zgels_Tile routine.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] M
  *          The number of rows of the matrix A. M >= 0.
@@ -147,25 +153,26 @@ int MORSE_Alloc_Workspace_zgels(int M, int N, MORSE_desc_t **descT) {
  *          The number of columns of the matrix A.  N >= 0.
  *
  * @param[out] descT
- *          On exit, MORSE_desc_t *on workspace handle for storage of the extra T factors required by the tile QR
- *          or the tile LQ factorization.
+ *          On exit, MORSE_desc_t *on workspace handle for storage of the extra
+ *          T factors required by the tile QR or the tile LQ factorization.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Alloc_Workspace_zgels_Tile(int M, int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(M, N, MORSE_FUNC_ZGELS, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
- *  MORSE_Alloc_Workspace_zgeqrf - Allocates workspace for MORSE_zgeqrf or MORSE_zgeqrf_Tile routine.
+ *  MORSE_Alloc_Workspace_zgeqrf - Allocates workspace for MORSE_zgeqrf or
+ *  MORSE_zgeqrf_Tile routine.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] M
  *          The number of rows of the matrix A. M >= 0.
@@ -174,25 +181,26 @@ int MORSE_Alloc_Workspace_zgels_Tile(int M, int N, MORSE_desc_t **descT) {
  *          The number of columns of the matrix A.  N >= 0.
  *
  * @param[out] descT
- *          On exit, workspace handle for storage of the extra T factors required by the tile QR
- *          factorization.
+ *          On exit, workspace handle for storage of the extra T factors
+ *          required by the tile QR factorization.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Alloc_Workspace_zgeqrf(int M, int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(M, N, MORSE_FUNC_ZGELS, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
- *  MORSE_Alloc_Workspace_zgeqrf_Tile - Allocates tile workspace for MORSE_zgels_Tile routine.
+ *  MORSE_Alloc_Workspace_zgeqrf_Tile - Allocates tile workspace for
+ *  MORSE_zgels_Tile routine.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] M
  *          The number of rows of the matrix A. M >= 0.
@@ -201,25 +209,26 @@ int MORSE_Alloc_Workspace_zgeqrf(int M, int N, MORSE_desc_t **descT) {
  *          The number of columns of the matrix A.  N >= 0.
  *
  * @param[out] descT
- *          On exit, MORSE_desc_t *on workspace handle for storage of the extra T factors required by the tile QR
- *          or the tile LQ factorization.
+ *          On exit, MORSE_desc_t *on workspace handle for storage of the extra
+ *          T factors required by the tile QR or the tile LQ factorization.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Alloc_Workspace_zgeqrf_Tile(int M, int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(M, N, MORSE_FUNC_ZGELS, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
- *  MORSE_Alloc_Workspace_zgelqf - Allocates workspace for MORSE_zgelqf or MORSE_zgelqf_Tile routines.
+ *  MORSE_Alloc_Workspace_zgelqf - Allocates workspace for MORSE_zgelqf or
+ *  MORSE_zgelqf_Tile routines.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] M
  *          The number of rows of the matrix A. M >= 0.
@@ -231,22 +240,22 @@ int MORSE_Alloc_Workspace_zgeqrf_Tile(int M, int N, MORSE_desc_t **descT) {
  *          On exit, workspace handle for storage of the extra T factors required by the tile LQ
  *          factorization.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Alloc_Workspace_zgelqf(int M, int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(M, N, MORSE_FUNC_ZGELS, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
  *  MORSE_Alloc_Workspace_zgelqf_Tile - Allocates tile workspace for MORSE_zgels_Tile routine.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] M
  *          The number of rows of the matrix A. M >= 0.
@@ -255,80 +264,85 @@ int MORSE_Alloc_Workspace_zgelqf(int M, int N, MORSE_desc_t **descT) {
  *          The number of columns of the matrix A.  N >= 0.
  *
  * @param[out] descT
- *          On exit, MORSE_desc_t *on workspace handle for storage of the extra T factors required by the tile QR
- *          or the tile LQ factorization.
+ *          On exit, MORSE_desc_t *on workspace handle for storage of the extra
+ *          T factors required by the tile QR or the tile LQ factorization.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Alloc_Workspace_zgelqf_Tile(int M, int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(M, N, MORSE_FUNC_ZGELS, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
- *  MORSE_Alloc_Workspace_zgesv - Allocates workspace for MORSE_zgesv or MORSE_zgesv_Tile routines.
+ *  MORSE_Alloc_Workspace_zgesv - Allocates workspace for MORSE_zgesv or
+ *  MORSE_zgesv_Tile routines.
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @param[in] N
- *          The number of linear equations, i.e., the order of the matrix A. N >= 0.
+ *          The number of linear equations, i.e., the order of the matrix A.
+ *          N >= 0.
  *
  * @param[out] descL
- *          On exit, workspace handle for storage of the extra L factors required by the tile LU
- *          factorization.
+ *          On exit, workspace handle for storage of the extra L factors
+ *          required by the tile LU factorization.
  *
  * @param[out] IPIV
- *          On exit, workspace handle for storage of pivot indexes required by the tile LU
- *          factorization (not equivalent to LAPACK).
+ *          On exit, workspace handle for storage of pivot indexes required
+ *          by the tile LU factorization (not equivalent to LAPACK).
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Alloc_Workspace_zgesv_incpiv(int N, MORSE_desc_t **descL, int **IPIV) {
     return morse_alloc_ipiv(N, N, MORSE_FUNC_ZGESV, MorseComplexDouble, descL, (void**)IPIV); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
- *  MORSE_Alloc_Workspace_zgesv_Tile - Allocates workspace for MORSE_zgesv_Tile routines.
+ *  MORSE_Alloc_Workspace_zgesv_Tile - Allocates workspace for MORSE_zgesv_Tile
+ *  routines.
  *
  *******************************************************************************
  *
  * @param[in] N
- *          The number of linear equations, i.e., the order of the matrix A. N >= 0.
+ *          The number of linear equations, i.e., the order of the matrix A.
+ *          N >= 0.
  *
  * @param[out] descL
- *          On exit, MORSE descriptor on workspace handle for storage of the extra
- *          L factors required by the tile LU factorization.
+ *          On exit, MORSE descriptor on workspace handle for storage of the
+ *          extra L factors required by the tile LU factorization.
  *
  * @param[out] IPIV
- *          On exit, workspace handle for storage of pivot indexes required by the tile LU
- *          factorization (not equivalent to LAPACK).
+ *          On exit, workspace handle for storage of pivot indexes required by
+ *          the tile LU factorization (not equivalent to LAPACK).
  *
- *******************************************************************************
+ ******************************************************************************
  *
  * @return
  *          \retval MORSE_SUCCESS successful exit
  *
- ******************************************************************************/
+ *****************************************************************************/
 int MORSE_Alloc_Workspace_zgesv_incpiv_Tile(int N, MORSE_desc_t **descL, int **IPIV)
 {
     return morse_alloc_ipiv(N, N, MORSE_FUNC_ZGESV, MorseComplexDouble, descL, (void**)IPIV);
 }
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
- *  MORSE_Alloc_Workspace_zgesvd - Allocates workspace for MORSE_zgesvd or MORSE_zgesvd_Tile routine.
+ *  MORSE_Alloc_Workspace_zgesvd - Allocates workspace for MORSE_zgesvd or
+ *  MORSE_zgesvd_Tile routine.
  *
  *******************************************************************************
  *
@@ -350,8 +364,9 @@ int MORSE_Alloc_Workspace_zgesv_incpiv_Tile(int N, MORSE_desc_t **descL, int **I
 int MORSE_Alloc_Workspace_zgesvd(int M, int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(M, N, MORSE_FUNC_ZGESVD, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
- * @ingroup Auxiliary
+/** ***************************************************************************
+ *
+ * @ingroup Workspace
  *
  *  MORSE_Alloc_Workspace_zgetrf_incpiv - Allocates workspace for
  *  MORSE_zgetrf_incpiv or MORSE_zgetrf_incpiv_Tile or
@@ -388,9 +403,9 @@ int MORSE_Alloc_Workspace_zgesvd(int M, int N, MORSE_desc_t **descT) {
 int MORSE_Alloc_Workspace_zgetrf_incpiv(int M, int N, MORSE_desc_t **descL, int **IPIV) {
     return morse_alloc_ipiv(M, N, MORSE_FUNC_ZGESV, MorseComplexDouble, descL, (void**)IPIV); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
  *  MORSE_Alloc_Workspace_zgetrf_incpiv_Tile - Allocates workspace for
  *  MORSE_zgesv_incpiv_Tile or MORSE_zgesv_incpiv_Tile_Async routines.
@@ -418,9 +433,9 @@ int MORSE_Alloc_Workspace_zgetrf_incpiv_Tile(int N, MORSE_desc_t **descL, int **
 {
     return morse_alloc_ipiv(N, N, MORSE_FUNC_ZGESV, MorseComplexDouble, descL, (void**)IPIV);
 }
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
  *  MORSE_Alloc_Workspace_zheev - Allocates workspace for MORSE_zheev or MORSE_zheev_Tile routine.
  *
@@ -444,9 +459,9 @@ int MORSE_Alloc_Workspace_zgetrf_incpiv_Tile(int N, MORSE_desc_t **descL, int **
 int MORSE_Alloc_Workspace_zheev(int M, int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(M, N, MORSE_FUNC_ZHEEV, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
  *  MORSE_Alloc_Workspace_zheevd - Allocates workspace for MORSE_zheevd or MORSE_zheevd_Tile routine.
  *
@@ -470,9 +485,9 @@ int MORSE_Alloc_Workspace_zheev(int M, int N, MORSE_desc_t **descT) {
 int MORSE_Alloc_Workspace_zheevd(int M, int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(M, N, MORSE_FUNC_ZHEEVD, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
  *  MORSE_Alloc_Workspace_zhegv - Allocates workspace for MORSE_zhegv or MORSE_zhegv_Tile routine.
  *
@@ -496,9 +511,9 @@ int MORSE_Alloc_Workspace_zheevd(int M, int N, MORSE_desc_t **descT) {
 int MORSE_Alloc_Workspace_zhegv(int M, int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(M, N, MORSE_FUNC_ZHEGV, MorseComplexDouble, descT); }
 
-/***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
  *  MORSE_Alloc_Workspace_zhegvd - Allocates workspace for MORSE_zhegvd or MORSE_zhegvd_Tile routine.
  *
@@ -522,9 +537,9 @@ int MORSE_Alloc_Workspace_zhegv(int M, int N, MORSE_desc_t **descT) {
 int MORSE_Alloc_Workspace_zhegvd(int M, int N, MORSE_desc_t **descT) {
     return morse_alloc_ibnb_tile(M, N, MORSE_FUNC_ZHEGVD, MorseComplexDouble, descT); }
 
- /***************************************************************************//**
+/** ***************************************************************************
  *
- * @ingroup Auxiliary
+ * @ingroup Workspace
  *
  *  MORSE_Alloc_Workspace_zhetrd - Allocates workspace for MORSE_zhetrd or MORSE_zhetrd_Tile routine.
  *
diff --git a/coreblas/compute/core_dzasum.c b/coreblas/compute/core_dzasum.c
index 440bfefd0e7d06a90151b5b1bd2368dc3d57bd0d..f0af36164ecc9ca098f87ad006250860851b8fb1 100644
--- a/coreblas/compute/core_dzasum.c
+++ b/coreblas/compute/core_dzasum.c
@@ -28,6 +28,13 @@
 #include <math.h>
 #include "coreblas/include/coreblas.h"
 
+/**
+ *
+ * @defgroup CORE_MORSE_Complex64_t
+ * @brief Linear algebra routines exposed to users. CPU functions.
+ *
+ */
+
 /***************************************************************************//**
  *
  * @ingroup CORE_MORSE_Complex64_t
diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
index c7d4213fa3e586942a70a04658b6b1c13e2313fd..12a5bd615bf0ad7c3cf64ee91ea72f4d3c3f2611 100644
--- a/docs/CMakeLists.txt
+++ b/docs/CMakeLists.txt
@@ -33,7 +33,7 @@ cmake_minimum_required(VERSION 2.8)
 #      Compilation of documentation         #
 #                                           #
 #############################################
-#add_subdirectory(doxygen)
+add_subdirectory(doxygen)
 add_subdirectory(texinfo)
 
 ###
diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
index b5761406b6ff37461234717c351b11522773223e..14034acf62605d977e8e810951e1a325a188cce5 100644
--- a/docs/doxygen/CMakeLists.txt
+++ b/docs/doxygen/CMakeLists.txt
@@ -35,40 +35,26 @@ find_package(Doxygen)
 # Generate documentation
 # ----------------------
 if(DOXYGEN_EXECUTABLE)
+
     # Create file chameleon.dox
     # ---------------------------
-    if(MORSE_SCHED_STARPU)
-        if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../../../scratch)
-            configure_file("conf-dev-starpu.dox.in"
-                           "chameleon.dox"
-                           @ONLY)
-        else()
-            configure_file("conf-usr-starpu.dox.in"
-                           "chameleon.dox"
-                           @ONLY)
-        endif()
+    if(CHAMELEON_SCHED_STARPU)
+
+        configure_file("conf-dev-starpu.dox.in"
+                       "chameleon-dev.dox"
+                       @ONLY)
+#        configure_file("conf-usr-starpu.dox.in"
+#                       "chameleon-usr.dox"
+#                       @ONLY)
 
-    elseif(MORSE_SCHED_QUARK)
-        if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../../../scratch)
-            configure_file("conf-dev-quark.dox.in"
-                           "chameleon.dox"
-                            @ONLY)
-        else()
-            configure_file("conf-usr-quark.dox.in"
-                           "chameleon.dox"
-                           @ONLY)
-        endif()
+    elseif(CHAMELEON_SCHED_QUARK)
 
-    else()
-        if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../../../scratch)
-            configure_file("conf-dev-starpu.dox.in"
-                           "chameleon.dox"
-                           @ONLY)
-        else()
-            configure_file("conf-usr-starpu.dox.in"
-                           "chameleon.dox"
-                           @ONLY)
-        endif()
+        configure_file("conf-dev-quark.dox.in"
+                       "chameleon-dev.dox"
+                        @ONLY)
+#        configure_file("conf-usr-quark.dox.in"
+#                       "chameleon-usr.dox"
+#                       @ONLY)
 
     endif()
 
@@ -78,56 +64,27 @@ if(DOXYGEN_EXECUTABLE)
 
     # User's documentation
     # --------------------
-    add_custom_command(OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/out
+    add_custom_command(OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/out-dev
                        COMMAND ${DOXYGEN_EXECUTABLE}
-                       ARGS    ${CMAKE_CURRENT_BINARY_DIR}/chameleon.dox
-                       DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/chameleon.dox
+                       ARGS    ${CMAKE_CURRENT_BINARY_DIR}/chameleon-dev.dox
+                       DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/chameleon-dev.dox
                       )
+#    add_custom_command(OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/out-usr
+#                       COMMAND ${DOXYGEN_EXECUTABLE}
+#                       ARGS    ${CMAKE_CURRENT_BINARY_DIR}/chameleon-usr.dox
+#                       DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/chameleon-usr.dox
+#                      )
     add_custom_target(doxygen-out ALL
-                      DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/out)
-
-    # Compilation and installation for latex version
-    # ----------------------------------------------
-    find_package(LATEX)
-    if(PDFLATEX_COMPILER AND MAKEINDEX_COMPILER)
-        # Message
-        # -------
-        message(STATUS "Looking for pdflatex - found")
-        message(STATUS "Looking for makeindex - found")
-
-        # Compile pdf
-        # -----------
-        add_custom_command(OUTPUT            refman.pdf
-                           COMMAND           ${CMAKE_MAKE_PROGRAM}
-                           ARGS              refman.pdf
-                           WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/out/latex
-                           )
-        add_custom_target(doxygen-user_guide-chameleon ALL
-                          DEPENDS refman.pdf ${CMAKE_CURRENT_BINARY_DIR}/out) 
-
-        # Installation of produced pdf
-        # ----------------------------
-        if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../../../scratch)
-            install(FILES       ${CMAKE_CURRENT_BINARY_DIR}/out/latex/refman.pdf
-                    RENAME      magma-morse-devguide-${MAGMA_VERSION_NUMBER}.pdf
-                    DESTINATION share/chameleon/pdf)
-        else()
-            install(FILES       ${CMAKE_CURRENT_BINARY_DIR}/out/latex/refman.pdf
-                    RENAME      magma-morse-usersguide-${MAGMA_VERSION_NUMBER}.pdf
-                    DESTINATION share/chameleon/pdf)
-        endif()
-
-    endif()
+                      DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/out-dev
+                              #${CMAKE_CURRENT_BINARY_DIR}/out-usr
+                              )
 
     # Installation for html version
     # -----------------------------
-    install(DIRECTORY   ${CMAKE_CURRENT_BINARY_DIR}/out/html
-            DESTINATION share/chameleon/doxygen)
-
-    # Installation for man version
-    # ----------------------------
-    install(DIRECTORY   ${CMAKE_CURRENT_BINARY_DIR}/out/man
-            DESTINATION share/chameleon)
+    install(DIRECTORY   ${CMAKE_CURRENT_BINARY_DIR}/out-dev/html
+            DESTINATION share/chameleon/doxygen/dev)
+#    install(DIRECTORY   ${CMAKE_CURRENT_BINARY_DIR}/out-usr/html
+#            DESTINATION share/chameleon/doxygen/usr)
 
 else()
     message(STATUS "Looking for doxygen - not found")
diff --git a/docs/doxygen/conf-dev-quark.dox.in b/docs/doxygen/conf-dev-quark.dox.in
index 43c8d56f3ee0545d365987254f9ce651bfe13048..bb483d48417d9f874499f0ebb73eb84677dea9cc 100644
--- a/docs/doxygen/conf-dev-quark.dox.in
+++ b/docs/doxygen/conf-dev-quark.dox.in
@@ -38,7 +38,7 @@ PROJECT_NUMBER         = @CHAMELEON_VERSION_NUMBER@
 # If a relative path is entered, it will be relative to the location
 # where doxygen was started. If left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = @CMAKE_CURRENT_BINARY_DIR@/out/
+OUTPUT_DIRECTORY       = @CMAKE_CURRENT_BINARY_DIR@/out-dev
 
 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
 # 4096 sub-directories (in 2 levels) under the output directory of each output
@@ -298,7 +298,7 @@ SYMBOL_CACHE_SIZE      = 0
 # Private class members and static file members will be hidden unless
 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 
-EXTRACT_ALL            = YES
+EXTRACT_ALL            = NO
 
 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class
 # will be included in the documentation.
@@ -585,22 +585,17 @@ WARN_LOGFILE           =
 #                          @CMAKE_CURRENT_SOURCE_DIR@/../../timing                 \
 #                          @CMAKE_CURRENT_BINARY_DIR@/../../timing
 
-INPUT                  =  @CMAKE_CURRENT_SOURCE_DIR@/groups-dev.dox               \
+INPUT                  =  @CMAKE_CURRENT_SOURCE_DIR@/main.dox                     \
                           @CMAKE_CURRENT_SOURCE_DIR@/../../include                \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../include                \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../control                \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../control                \
                           @CMAKE_CURRENT_SOURCE_DIR@/../../compute                \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../compute                \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../coreblas/include       \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../coreblas/include       \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../coreblas/compute       \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../coreblas               \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/quark/include  \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../runtime/quark/include  \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/quark/control  \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/quark/codelets \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../runtime/quark
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../coreblas               \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../control                \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/quark          \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../simucore
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../include                \
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../compute                \
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../coreblas/              \
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../runtime/quark
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -617,7 +612,7 @@ INPUT_ENCODING         = UTF-8
 # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
 # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
 
-FILE_PATTERNS          =
+FILE_PATTERNS          = *.c
 
 # The RECURSIVE tag can be used to turn specify whether or not subdirectories
 # should be searched for input files as well. Possible values are YES and NO.
@@ -643,7 +638,7 @@ EXCLUDE_SYMLINKS       = NO
 # against the file with absolute path, so to exclude all test directories
 # for example use the pattern */test/*
 
-EXCLUDE_PATTERNS       = 
+EXCLUDE_PATTERNS       =
 
 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
 # (namespaces, classes, functions, etc.) that should be excluded from the
@@ -881,7 +876,7 @@ HTML_DYNAMIC_SECTIONS  = NO
 # directory and running "make install" will install the docset in
 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
 # it at startup.
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# See http:/developer.apple.com/tools/creatingdocsetswithdoxygen.html
 # for more information.
 
 GENERATE_DOCSET        = NO
@@ -1104,7 +1099,7 @@ SERVER_BASED_SEARCH    = NO
 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
 # generate Latex output.
 
-GENERATE_LATEX         = YES
+GENERATE_LATEX         = NO
 
 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
@@ -1232,7 +1227,7 @@ RTF_EXTENSIONS_FILE    =
 # If the GENERATE_MAN tag is set to YES (the default) Doxygen will
 # generate man pages
 
-GENERATE_MAN           = YES
+GENERATE_MAN           = NO
 
 # The MAN_OUTPUT tag is used to specify where the man pages will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
diff --git a/docs/doxygen/conf-dev-starpu.dox.in b/docs/doxygen/conf-dev-starpu.dox.in
index 6c5148f8104b2bfc5ddf3f37709a969b58eed63b..0609533c2dd0075dce416b77790b4a34774ef0fa 100644
--- a/docs/doxygen/conf-dev-starpu.dox.in
+++ b/docs/doxygen/conf-dev-starpu.dox.in
@@ -38,7 +38,7 @@ PROJECT_NUMBER         = @CHAMELEON_VERSION_NUMBER@
 # If a relative path is entered, it will be relative to the location
 # where doxygen was started. If left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = @CMAKE_CURRENT_BINARY_DIR@/out/
+OUTPUT_DIRECTORY       = @CMAKE_CURRENT_BINARY_DIR@/out-dev
 
 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
 # 4096 sub-directories (in 2 levels) under the output directory of each output
@@ -298,7 +298,7 @@ SYMBOL_CACHE_SIZE      = 0
 # Private class members and static file members will be hidden unless
 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 
-EXTRACT_ALL            = YES
+EXTRACT_ALL            = NO
 
 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class
 # will be included in the documentation.
@@ -585,22 +585,17 @@ WARN_LOGFILE           =
 #                          @CMAKE_CURRENT_SOURCE_DIR@/../../timing                  \
 #                          @CMAKE_CURRENT_BINARY_DIR@/../../timing
 
-INPUT                  =  @CMAKE_CURRENT_SOURCE_DIR@/groups-dev.dox                \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../include                 \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../include                 \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../control                 \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../control                 \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../compute                 \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../compute                 \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../coreblas/include        \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../coreblas/include        \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../coreblas/compute        \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../coreblas                \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/starpu/include  \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../runtime/starpu/include  \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/starpu/control  \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/starpu/codelets \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../runtime/starpu
+INPUT                  =  @CMAKE_CURRENT_SOURCE_DIR@/main.dox                     \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../include                \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../compute                \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../coreblas               \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../control                \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/starpu         \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../simucore
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../include                \
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../compute                \
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../coreblas/              \
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../runtime/starpu
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -617,7 +612,7 @@ INPUT_ENCODING         = UTF-8
 # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
 # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
 
-FILE_PATTERNS          =
+FILE_PATTERNS          = *.c
 
 # The RECURSIVE tag can be used to turn specify whether or not subdirectories
 # should be searched for input files as well. Possible values are YES and NO.
@@ -881,7 +876,7 @@ HTML_DYNAMIC_SECTIONS  = NO
 # directory and running "make install" will install the docset in
 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
 # it at startup.
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# See http:/developer.apple.com/tools/creatingdocsetswithdoxygen.html
 # for more information.
 
 GENERATE_DOCSET        = NO
@@ -1104,7 +1099,7 @@ SERVER_BASED_SEARCH    = NO
 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
 # generate Latex output.
 
-GENERATE_LATEX         = YES
+GENERATE_LATEX         = NO
 
 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
@@ -1232,7 +1227,7 @@ RTF_EXTENSIONS_FILE    =
 # If the GENERATE_MAN tag is set to YES (the default) Doxygen will
 # generate man pages
 
-GENERATE_MAN           = YES
+GENERATE_MAN           = NO
 
 # The MAN_OUTPUT tag is used to specify where the man pages will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
diff --git a/docs/doxygen/conf-usr-quark.dox.in b/docs/doxygen/conf-usr-quark.dox.in
index 97bebf86bb082b43381052d672b9cdb63558a560..abada6612b60ff40ece0b016c61ae539b932532e 100644
--- a/docs/doxygen/conf-usr-quark.dox.in
+++ b/docs/doxygen/conf-usr-quark.dox.in
@@ -38,7 +38,7 @@ PROJECT_NUMBER         = @CHAMELEON_VERSION_NUMBER@
 # If a relative path is entered, it will be relative to the location
 # where doxygen was started. If left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = @CMAKE_CURRENT_BINARY_DIR@/out/
+OUTPUT_DIRECTORY       = @CMAKE_CURRENT_BINARY_DIR@/out-usr
 
 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
 # 4096 sub-directories (in 2 levels) under the output directory of each output
@@ -581,22 +581,17 @@ WARN_LOGFILE           =
 # directories like "/usr/src/myproject". Separate the files or directories
 # with spaces.
 
-INPUT                  =  @CMAKE_CURRENT_SOURCE_DIR@/groups-dev.dox               \
+INPUT                  =  @CMAKE_CURRENT_SOURCE_DIR@/main.dox                     \
                           @CMAKE_CURRENT_SOURCE_DIR@/../../include                \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../include                \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../control                \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../control                \
                           @CMAKE_CURRENT_SOURCE_DIR@/../../compute                \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../compute                \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../coreblas/include       \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../coreblas/include       \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../coreblas/compute       \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../coreblas               \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/quark/include  \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../runtime/quark/include  \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/quark/control  \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/quark/codelets \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../runtime/quark
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../coreblas               \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../control                \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/quark          \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../simucore
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../include                \
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../compute                \
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../coreblas/              \
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../runtime/quark
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -613,7 +608,7 @@ INPUT_ENCODING         = UTF-8
 # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
 # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
 
-FILE_PATTERNS          =
+FILE_PATTERNS          = *.c
 
 # The RECURSIVE tag can be used to turn specify whether or not subdirectories
 # should be searched for input files as well. Possible values are YES and NO.
@@ -877,7 +872,7 @@ HTML_DYNAMIC_SECTIONS  = NO
 # directory and running "make install" will install the docset in
 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
 # it at startup.
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# See http:/developer.apple.com/tools/creatingdocsetswithdoxygen.html
 # for more information.
 
 GENERATE_DOCSET        = NO
@@ -1100,7 +1095,7 @@ SERVER_BASED_SEARCH    = NO
 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
 # generate Latex output.
 
-GENERATE_LATEX         = YES
+GENERATE_LATEX         = NO
 
 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
@@ -1227,8 +1222,8 @@ RTF_EXTENSIONS_FILE    =
 
 # If the GENERATE_MAN tag is set to YES (the default) Doxygen will
 # generate man pages
-  
-GENERATE_MAN           = YES
+
+GENERATE_MAN           = NO
 
 # The MAN_OUTPUT tag is used to specify where the man pages will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
diff --git a/docs/doxygen/conf-usr-starpu.dox.in b/docs/doxygen/conf-usr-starpu.dox.in
index 63dd476b4f93453ef9c90c344d40d0d670299a9a..071edeb988a15964826321ef489be76b84cdffd7 100644
--- a/docs/doxygen/conf-usr-starpu.dox.in
+++ b/docs/doxygen/conf-usr-starpu.dox.in
@@ -38,7 +38,7 @@ PROJECT_NUMBER         = @CHAMELEON_VERSION_NUMBER@
 # If a relative path is entered, it will be relative to the location
 # where doxygen was started. If left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = @CMAKE_CURRENT_BINARY_DIR@/out/
+OUTPUT_DIRECTORY       = @CMAKE_CURRENT_BINARY_DIR@/out-usr
 
 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
 # 4096 sub-directories (in 2 levels) under the output directory of each output
@@ -581,22 +581,17 @@ WARN_LOGFILE           =
 # directories like "/usr/src/myproject". Separate the files or directories
 # with spaces.
 
-INPUT                  =  @CMAKE_CURRENT_SOURCE_DIR@/groups-dev.dox                \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../include                 \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../include                 \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../control                 \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../control                 \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../compute                 \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../compute                 \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../coreblas/include        \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../coreblas/include        \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../coreblas/compute        \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../coreblas                \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/starpu/include  \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../runtime/starpu/include  \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/starpu/control  \
-                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/starpu/codelets \
-                          @CMAKE_CURRENT_BINARY_DIR@/../../runtime/starpu
+INPUT                  =  @CMAKE_CURRENT_SOURCE_DIR@/main.dox                     \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../include                \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../compute                \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../coreblas               \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../control                \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../runtime/starpu         \
+                          @CMAKE_CURRENT_SOURCE_DIR@/../../simucore
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../include                \
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../compute                \
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../coreblas/              \
+#                          @CMAKE_CURRENT_BINARY_DIR@/../../runtime/starpu
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -613,7 +608,7 @@ INPUT_ENCODING         = UTF-8
 # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
 # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
 
-FILE_PATTERNS          =
+FILE_PATTERNS          = *.c
 
 # The RECURSIVE tag can be used to turn specify whether or not subdirectories
 # should be searched for input files as well. Possible values are YES and NO.
@@ -877,7 +872,7 @@ HTML_DYNAMIC_SECTIONS  = NO
 # directory and running "make install" will install the docset in
 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
 # it at startup.
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# See http:/developer.apple.com/tools/creatingdocsetswithdoxygen.html
 # for more information.
 
 GENERATE_DOCSET        = NO
@@ -1100,7 +1095,7 @@ SERVER_BASED_SEARCH    = NO
 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
 # generate Latex output.
 
-GENERATE_LATEX         = YES
+GENERATE_LATEX         = NO
 
 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
@@ -1227,8 +1222,8 @@ RTF_EXTENSIONS_FILE    =
 
 # If the GENERATE_MAN tag is set to YES (the default) Doxygen will
 # generate man pages
-  
-GENERATE_MAN           = YES
+
+GENERATE_MAN           = NO
 
 # The MAN_OUTPUT tag is used to specify where the man pages will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
diff --git a/docs/doxygen/main.dox b/docs/doxygen/main.dox
new file mode 100644
index 0000000000000000000000000000000000000000..ef752aaa9896a051d6a0b3df23d94d73f9c68bc9
--- /dev/null
+++ b/docs/doxygen/main.dox
@@ -0,0 +1,20 @@
+/*!
+@mainpage Chameleon, a dense linear algebra library for scalable multi-core architectures and GPGPUs
+
+This document aims at describing Chameleon's API and internal functions.
+
+@section sec_auxiliary Auxiliary and control routines
+- @ref Auxiliary
+- @ref Control
+- @ref Descriptor
+- @ref Options
+- @ref Sequences
+- @ref Tile
+- @ref Workspace
+
+@section sec_linalg Linear algebra routines
+- @ref MORSE_Complex64_t "LAPACK matrix layout"
+- @ref MORSE_Complex64_t_Tile "Tile matrix layout"
+- @ref MORSE_Complex64_t_Tile_Async "Tile matrix layout, asynchronous interface"
+
+*/
diff --git a/include/morse.h b/include/morse.h
index 09e4907d99694e5a2c3e2b992faf9039a2f1501d..9f34a8eeb04693cffd8141bb027e9aae74a29df8 100644
--- a/include/morse.h
+++ b/include/morse.h
@@ -36,35 +36,34 @@
 #define CHAMELEON_VERSION_MICRO 0
 
 
-/** ****************************************************************************
+/* ****************************************************************************
  * MORSE types and constants
- **/
-//#include "morse_mangling.h"
+ */
 #include "morse_types.h"
 #include "morse_struct.h"
 #include "morse_constants.h"
 
 
-/** ****************************************************************************
+/* ****************************************************************************
  * RUNTIME Functions
  */
 #include "runtime.h"
 
 
-/** ****************************************************************************
+/* ****************************************************************************
  * For Simulation mode
  */
 #include "morse_simulate.h"
 
 
-/** ****************************************************************************
+/* ****************************************************************************
  * Set of routines which can be useful fo users
  */
 #include "control/context.h"
 #include "control/descriptor.h"
 
 
-/** ****************************************************************************
+/* ****************************************************************************
  * MORSE Functions
  */
 #ifdef __cplusplus
@@ -73,10 +72,11 @@ extern "C" {
 
 /* Auxiliary */
 int MORSE_Version        (int *ver_major, int *ver_minor, int *ver_micro);
+int MORSE_Element_Size(int type);
+int MORSE_My_Mpi_Rank    (void);
 int MORSE_Init           (int nworkers, int ncudas);
 int MORSE_InitPar        (int nworkers, int ncudas, int nthreads_per_worker);
 int MORSE_Finalize       (void);
-int MORSE_My_Mpi_Rank    (void);
 int MORSE_Pause          (void);
 int MORSE_Resume         (void);
 int MORSE_Lapack_to_Tile (void *Af77, int LDA, MORSE_desc_t *A);
diff --git a/include/morse_constants.h b/include/morse_constants.h
index 4fa7a6c41e04d63eadf7b072b6c9a075ba414b7f..5c6b73a8503c107d67b8ba07bda7a4cc9144cefe 100644
--- a/include/morse_constants.h
+++ b/include/morse_constants.h
@@ -31,7 +31,7 @@
 /** ****************************************************************************
  *
  *  MORSE constants - CBLAS & LAPACK
- *  The naming and numbering is consisten with:
+ *  The naming and numbering is consistent with:
  *
  *    1) CBLAS from Netlib (http://www.netlib.org/blas/blast-forum/cblas.tgz),
  *    2) C Interface to LAPACK from Netlib (http://www.netlib.org/lapack/lapwrapc/).
diff --git a/include/morse_kernels.h b/include/morse_kernels.h
index 6f7e2de8dc65b7dc5f3a374aa056cd346cbc9f12..0680893add97d4c6ca45f27cdf902ea3e3cf7cc5 100644
--- a/include/morse_kernels.h
+++ b/include/morse_kernels.h
@@ -26,6 +26,9 @@
 #ifndef _MORSE_KERNELS_H_
 #define _MORSE_KERNELS_H_
 
+/** ****************************************************************************
+ * Used to apply operations on specific kernels
+ **/
 typedef enum morse_kernel_e {
 
   MORSE_GEMM,