diff --git a/control/CMakeLists.txt b/control/CMakeLists.txt
index 0fd19f58836468a32c90843685864374aa455d46..5cc1b6b04e00f3351d4d80b872c6b3ed7f121d59 100644
--- a/control/CMakeLists.txt
+++ b/control/CMakeLists.txt
@@ -50,7 +50,6 @@ set(CHAMELEON_HDRS
     global.h
     morse_f77.h
     morsewinthread.h
-    tile.h
     workspace.h
     )
 
diff --git a/control/common.h b/control/common.h
index 81bce72c4f73839e0f48a2bcfaba627df088d34f..07c3adccc5e3dfa81028a14864f588a95fd87849 100644
--- a/control/common.h
+++ b/control/common.h
@@ -78,7 +78,6 @@
 #include "control/auxiliary.h"
 #include "control/context.h"
 #include "control/descriptor.h"
-#include "control/tile.h"
 #include "control/async.h"
 
 /*******************************************************************************
diff --git a/control/tile.c b/control/tile.c
index ea216a770a6767745e2659cc27e4f312a3161808..34491a21260fa402403a38b13909ef56436d95cd 100644
--- a/control/tile.c
+++ b/control/tile.c
@@ -29,10 +29,8 @@
  * @brief Group routines exposed to users for matrices conversion LAPACK-Tile
  *
  */
-
 #include "control/common.h"
 #include "control/auxiliary.h"
-#include "control/tile.h"
 
 /** ***************************************************************************
  *
@@ -62,6 +60,7 @@ int MORSE_Lapack_to_Tile(void *Af77, int LDA, MORSE_desc_t *A)
     MORSE_context_t  *morse;
     MORSE_sequence_t *sequence = NULL;
     MORSE_request_t   request;
+    MORSE_desc_t B;
     int status;
 
     morse = morse_context_self();
@@ -74,36 +73,27 @@ int MORSE_Lapack_to_Tile(void *Af77, int LDA, MORSE_desc_t *A)
         morse_error("MORSE_Lapack_to_Tile", "invalid descriptor");
         return MORSE_ERR_ILLEGAL_VALUE;
     }
+
+    /* Create the B descriptor to handle the Lapack format matrix */
+    B = morse_desc_init_user(
+        A->dtyp, A->mb, A->nb, A->bsiz,
+        LDA, A->n, 0, 0, A->m, A->n, 1, 1,
+        morse_getaddr_cm, morse_getblkldd_cm, NULL );
+    B.mat  = Af77;
+    B.styp = MorseCM;
+
+    RUNTIME_desc_create( &B );
+
     morse_sequence_create(morse, &sequence);
-    switch( A->dtyp ) {
-#if defined(PRECISION_s)
-    case MorseRealFloat:
-        morse_pslapack_to_tile(Af77, LDA, A, sequence, &request);
-        break;
-#endif
-
-#if defined(PRECISION_d)
-    case MorseRealDouble:
-        morse_pdlapack_to_tile(Af77, LDA, A, sequence, &request);
-        break;
-#endif
-
-#if defined(PRECISION_c)
-    case MorseComplexFloat:
-        morse_pclapack_to_tile(Af77, LDA, A, sequence, &request);
-        break;
-#endif
-
-#if defined(PRECISION_z)
-    case MorseComplexDouble:
-        morse_pzlapack_to_tile(Af77, LDA, A, sequence, &request);
-        break;
-#endif
-
-    default:
-        morse_error("MORSE_Lapack_to_Tile", "Type unknown");
-    }
-    RUNTIME_barrier(morse);
+
+    morse_pzlacpy( MorseUpperLower, &B, A, sequence, &request );
+
+    RUNTIME_desc_flush( &B, sequence );
+    RUNTIME_desc_flush(  A, sequence );
+    RUNTIME_sequence_wait( morse, sequence );
+
+    RUNTIME_desc_destroy( &B );
+
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
@@ -137,6 +127,7 @@ int MORSE_Tile_to_Lapack(MORSE_desc_t *A, void *Af77, int LDA)
     MORSE_context_t  *morse;
     MORSE_sequence_t *sequence = NULL;
     MORSE_request_t   request;
+    MORSE_desc_t      B;
     int status;
 
     morse = morse_context_self();
@@ -149,36 +140,26 @@ int MORSE_Tile_to_Lapack(MORSE_desc_t *A, void *Af77, int LDA)
         morse_error("MORSE_Tile_to_Lapack", "invalid descriptor");
         return MORSE_ERR_ILLEGAL_VALUE;
     }
+
+    /* Create the B descriptor to handle the Lapack format matrix */
+    B = morse_desc_init_user(
+        A->dtyp, A->mb, A->nb, A->bsiz,
+        LDA, A->n, 0, 0, A->m, A->n, 1, 1,
+        morse_getaddr_cm, morse_getblkldd_cm, NULL );
+    B.mat  = Af77;
+    B.styp = MorseCM;
+
+    RUNTIME_desc_create( &B );
+
     morse_sequence_create(morse, &sequence);
-    switch( A->dtyp ) {
-#if defined(PRECISION_s)
-    case MorseRealFloat:
-        morse_pstile_to_lapack(A, Af77, LDA, sequence, &request);
-        break;
-#endif
-
-#if defined(PRECISION_d)
-    case MorseRealDouble:
-        morse_pdtile_to_lapack(A, Af77, LDA, sequence, &request);
-        break;
-#endif
-
-#if defined(PRECISION_c)
-    case MorseComplexFloat:
-        morse_pctile_to_lapack(A, Af77, LDA, sequence, &request);
-        break;
-#endif
-
-#if defined(PRECISION_z)
-    case MorseComplexDouble:
-        morse_pztile_to_lapack(A, Af77, LDA, sequence, &request);
-        break;
-#endif
-
-    default:
-        morse_error("MORSE_Tile_to_Lapack", "Type unknown");
-    }
-    RUNTIME_barrier(morse);
+    morse_pzlacpy( MorseUpperLower, A, &B, sequence, &request );
+
+    RUNTIME_desc_flush(  A, sequence );
+    RUNTIME_desc_flush( &B, sequence );
+    RUNTIME_sequence_wait( morse, sequence );
+
+    RUNTIME_desc_destroy( &B );
+
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
diff --git a/control/tile.h b/control/tile.h
deleted file mode 100644
index 95f61e65a7fb542fb14ca6492b2138c465a86df9..0000000000000000000000000000000000000000
--- a/control/tile.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- *
- * @copyright (c) 2009-2014 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2014 Inria. All rights reserved.
- * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
- *
- **/
-
-/**
- *
- * @file tile.h
- *
- *  MORSE auxiliary routines
- *  MORSE is a software package provided by Univ. of Tennessee,
- *  Univ. of California Berkeley and Univ. of Colorado Denver
- *
- * @version 0.9.0
- * @author Jakub Kurzak
- * @author Cedric Castagnede
- * @date 2010-11-15
- *
- **/
-#ifndef _MORSE_TILE_H_
-#define _MORSE_TILE_H_
-
-#if defined( _WIN32 ) || defined( _WIN64 )
-typedef __int64 int64_t;
-#else
-#include <inttypes.h>
-#endif
-
-#define ELTADDR(A, type, m, n)  (type *)morse_geteltaddr(A, m, n)
-#define ELTLDD(A, k) ( ( (((k)-1)/(A).mb) + (A).i/(A).mb) < (A).lm1 ? (A).mb : (A).lm%(A).mb )
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
- *  Internal routines - dynamic scheduling
- **/
-void morse_pztile_to_lapack(MORSE_desc_t*, MORSE_Complex64_t*, int, MORSE_sequence_t *sequence, MORSE_request_t *request);
-void morse_pctile_to_lapack(MORSE_desc_t*, MORSE_Complex32_t*, int, MORSE_sequence_t *sequence, MORSE_request_t *request);
-void morse_pdtile_to_lapack(MORSE_desc_t*, double*, int, MORSE_sequence_t *sequence, MORSE_request_t *request);
-void morse_pstile_to_lapack(MORSE_desc_t*, float*, int, MORSE_sequence_t *sequence, MORSE_request_t *request);
-
-void morse_pzlapack_to_tile(MORSE_Complex64_t*, int, MORSE_desc_t*, MORSE_sequence_t *sequence, MORSE_request_t *request);
-void morse_pclapack_to_tile(MORSE_Complex32_t*, int, MORSE_desc_t*, MORSE_sequence_t *sequence, MORSE_request_t *request);
-void morse_pdlapack_to_tile(double*, int, MORSE_desc_t*, MORSE_sequence_t *sequence, MORSE_request_t *request);
-void morse_pslapack_to_tile(float*, int, MORSE_desc_t*, MORSE_sequence_t *sequence, MORSE_request_t *request);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif