diff --git a/CMakeLists.txt b/CMakeLists.txt
index fb03c31524e060374dfdc66796ac5ecf896644b2..56241c740fc6d15948492f151ceca3d5f96dd7a5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -660,39 +660,40 @@ if( CHAMELEON_SCHED_STARPU )
             list(APPEND CMAKE_REQUIRED_FLAGS "-include" "starpu_simgrid_wrap.h")
         endif()
         string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
-        check_function_exists(starpu_data_idle_prefetch_on_node STARPU_IDLE_PREFETCH_FOUND)
-        if ( STARPU_IDLE_PREFETCH_FOUND )
-            set(HAVE_STARPU_IDLE_PREFETCH 1)
+        check_function_exists(starpu_data_idle_prefetch_on_node HAVE_STARPU_IDLE_PREFETCH)
+        if ( HAVE_STARPU_IDLE_PREFETCH )
             message("-- ${Blue}Add definition HAVE_STARPU_IDLE_PREFETCH${ColourReset}")
         endif()
-        check_function_exists(starpu_iteration_push STARPU_ITERATION_PUSH_FOUND)
-        if ( STARPU_ITERATION_PUSH_FOUND )
-            set(HAVE_STARPU_ITERATION_PUSH 1)
+        check_function_exists(starpu_iteration_push HAVE_STARPU_ITERATION_PUSH)
+        if ( HAVE_STARPU_ITERATION_PUSH )
             message("-- ${Blue}Add definition HAVE_STARPU_ITERATION_PUSH${ColourReset}")
         endif()
-        check_function_exists(starpu_data_wont_use STARPU_DATA_WONT_USE_FOUND)
-        if ( STARPU_DATA_WONT_USE_FOUND )
-            set(HAVE_STARPU_DATA_WONT_USE 1)
+        check_function_exists(starpu_data_wont_use HAVE_STARPU_DATA_WONT_USE)
+        if ( HAVE_STARPU_DATA_WONT_USE )
             message("-- ${Blue}Add definition HAVE_STARPU_DATA_WONT_USE${ColourReset}")
         endif()
-        check_function_exists(starpu_data_set_coordinates STARPU_DATA_SET_COORDINATES_FOUND)
-        if ( STARPU_DATA_SET_COORDINATES_FOUND )
-            set(HAVE_STARPU_DATA_SET_COORDINATES 1)
+        check_function_exists(starpu_data_set_coordinates HAVE_STARPU_DATA_SET_COORDINATES)
+        if ( HAVE_STARPU_DATA_SET_COORDINATES )
             message("-- ${Blue}Add definition HAVE_STARPU_DATA_SET_COORDINATES${ColourReset}")
         endif()
-        check_function_exists(starpu_malloc_on_node_set_default_flags STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS)
-        if ( STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS )
+        check_function_exists(starpu_malloc_on_node_set_default_flags HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS)
+        if ( HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS )
             set(HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS 1)
             message("-- ${Blue}Add definition HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS${ColourReset}")
         endif()
+        check_function_exists(starpu_mpi_data_migrate HAVE_STARPU_MPI_DATA_MIGRATE)
+        if ( HAVE_STARPU_MPI_DATA_MIGRATE )
+            message("-- ${Blue}Add definition HAVE_STARPU_MPI_DATA_MIGRATE${ColourReset}")
+        elseif(CHAMELEON_USE_MIGRATE)
+            set(CHAMELEON_USE_MIGRATE "OFF")
+            message("-- ${Blue}CHAMELEON_USE_MIGRATE is turned OFF because starpu_mpi_data_migrate not found${ColourReset}")
+        endif()
         if(CHAMELEON_ENABLE_TRACING)
             # check if fxt profiling is accessible in starpu and activate it in chameleon
-            unset(STARPU_FXT_START_PROFILING_FOUND CACHE)
-            check_function_exists(starpu_fxt_start_profiling STARPU_FXT_START_PROFILING_FOUND)
-            if ( STARPU_FXT_START_PROFILING_FOUND )
+            check_function_exists(starpu_fxt_start_profiling HAVE_STARPU_FXT_PROFILING)
+            if ( HAVE_STARPU_FXT_PROFILING )
                 message("-- ${Blue}Add definition HAVE_STARPU_FXT_PROFILING"
                 " - Activate FxT profiling through StarPU${ColourReset}")
-                set(HAVE_STARPU_FXT_PROFILING 1)
             else()
                 message("-- ${Red}Looking for starpu with fxt"
                 " - starpu_fxt_start_profiling() test fails in StarPU${ColourReset}")
@@ -701,36 +702,22 @@ if( CHAMELEON_SCHED_STARPU )
         endif()
         if (CHAMELEON_USE_MPI)
             # Check if a specific function exist
-            unset(STARPU_MPI_DATA_REGISTER_FOUND CACHE)
-            check_function_exists(starpu_mpi_data_register_comm STARPU_MPI_DATA_REGISTER_FOUND)
-            if ( STARPU_MPI_DATA_REGISTER_FOUND )
+            check_function_exists(starpu_mpi_data_register_comm HAVE_STARPU_MPI_DATA_REGISTER)
+            if ( HAVE_STARPU_MPI_DATA_REGISTER )
                 message("-- ${Blue}Add definition HAVE_STARPU_MPI_DATA_REGISTER - Activate"
                 " use of starpu_mpi_data_register() in Chameleon with StarPU${ColourReset}")
-                set(HAVE_STARPU_MPI_DATA_REGISTER 1)
-            else()
-                message("-- ${Red}Looking for starpu with starpu_mpi_data_register"
-                " - starpu_mpi_data_register() test fails in StarPU${ColourReset}")
-                message("-- ${Red}Check in CMakeFiles/CMakeError.log to figure out why it fails${ColourReset}")
             endif()
-            unset(STARPU_MPI_COMM_RANK_FOUND CACHE)
-            check_function_exists(starpu_mpi_comm_rank STARPU_MPI_COMM_RANK_FOUND)
-            if ( STARPU_MPI_COMM_RANK_FOUND )
+            check_function_exists(starpu_mpi_comm_rank HAVE_STARPU_MPI_COMM_RANK)
+            if ( HAVE_STARPU_MPI_COMM_RANK )
                 message("-- ${Blue}Add definition HAVE_STARPU_MPI_COMM_RANK - Activate"
                 " use of starpu_mpi_comm_rank() in Chameleon with StarPU${ColourReset}")
-                set(HAVE_STARPU_MPI_COMM_RANK 1)
-            else()
-                message("-- ${Red}Looking for starpu with starpu_mpi_comm_rank"
-                " - starpu_mpi_comm_rank() test fails in StarPU${ColourReset}")
-                message("-- ${Red}Check in CMakeFiles/CMakeError.log to figure out why it fails${ColourReset}")
             endif()
-            check_function_exists(starpu_mpi_cached_receive STARPU_MPI_CACHED_RECEIVE)
-            if ( STARPU_MPI_CACHED_RECEIVE )
-                set(HAVE_STARPU_MPI_CACHED_RECEIVE 1)
+            check_function_exists(starpu_mpi_cached_receive HAVE_STARPU_MPI_CACHED_RECEIVE)
+            if ( HAVE_STARPU_MPI_CACHED_RECEIVE )
                 message("-- ${Blue}Add definition HAVE_STARPU_MPI_CACHED_RECEIVE${ColourReset}")
             endif()
-            check_function_exists(starpu_mpi_comm_get_attr STARPU_MPI_COMM_GET_ATTR)
-            if ( STARPU_MPI_COMM_GET_ATTR )
-                set(HAVE_STARPU_MPI_COMM_GET_ATTR 1)
+            check_function_exists(starpu_mpi_comm_get_attr HAVE_STARPU_MPI_COMM_GET_ATTR)
+            if ( HAVE_STARPU_MPI_COMM_GET_ATTR )
                 message("-- ${Blue}Add definition HAVE_STARPU_MPI_COMM_GET_ATTR${ColourReset}")
             endif()
         endif()
diff --git a/cmake_modules/morse_cmake b/cmake_modules/morse_cmake
index 50671b7b85920f15297a489443b1548ceb6ebc53..3f67955ffafb59534a77f80e61776e7b8a850c32 160000
--- a/cmake_modules/morse_cmake
+++ b/cmake_modules/morse_cmake
@@ -1 +1 @@
-Subproject commit 50671b7b85920f15297a489443b1548ceb6ebc53
+Subproject commit 3f67955ffafb59534a77f80e61776e7b8a850c32
diff --git a/runtime/starpu/control/runtime_descriptor.c b/runtime/starpu/control/runtime_descriptor.c
index 8012760c55fb803875e31378503a174537f8a4a2..bd804a02c784f65e89bfc29847ad188b072a2ea9 100644
--- a/runtime/starpu/control/runtime_descriptor.c
+++ b/runtime/starpu/control/runtime_descriptor.c
@@ -4,7 +4,7 @@
  *
  * @copyright 2009-2014 The University of Tennessee and The University of
  *                      Tennessee Research Foundation. All rights reserved.
- * @copyright 2012-2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ * @copyright 2012-2018 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
  *                      Univ. Bordeaux. All rights reserved.
  *
  ***
@@ -358,6 +358,7 @@ static inline void
 chameleon_starpu_data_wont_use( starpu_data_handle_t handle ) {
     starpu_data_acquire_cb( handle, STARPU_R,
                             (void (*)(void*))&starpu_data_release, handle );
+}
 
 #endif
 
@@ -417,6 +418,7 @@ void RUNTIME_data_flush( const MORSE_sequence_t *sequence,
 void RUNTIME_data_migrate( const MORSE_sequence_t *sequence,
                            const MORSE_desc_t *A, int Am, int An, int new_rank )
 {
+#if defined(HAVE_STARPU_MPI_DATA_MIGRATE)
     starpu_data_handle_t *handle = (starpu_data_handle_t*)(A->schedopt);
     starpu_data_handle_t lhandle;
     handle += ((int64_t)(A->lmt) * (int64_t)An + (int64_t)Am);
@@ -430,6 +432,9 @@ void RUNTIME_data_migrate( const MORSE_sequence_t *sequence,
     starpu_mpi_data_migrate( MPI_COMM_WORLD, lhandle, new_rank );
 
     (void)sequence;
+#else
+    (void)sequence; (void)A; (void)Am; (void)An; (void)new_rank;
+#endif
 }
 #endif
 
diff --git a/runtime/starpu/include/chameleon_starpu.h.in b/runtime/starpu/include/chameleon_starpu.h.in
index 8b7d7cf625ebebbe256903bd236535b25f81cf62..699659c7ce6d813a1d8957944b369a377d0fbfbb 100644
--- a/runtime/starpu/include/chameleon_starpu.h.in
+++ b/runtime/starpu/include/chameleon_starpu.h.in
@@ -30,6 +30,7 @@
 #cmakedefine HAVE_STARPU_DATA_WONT_USE
 #cmakedefine HAVE_STARPU_DATA_SET_COORDINATES
 #cmakedefine HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS
+#cmakedefine HAVE_STARPU_MPI_DATA_MIGRATE
 #cmakedefine HAVE_STARPU_MPI_DATA_REGISTER
 #cmakedefine HAVE_STARPU_MPI_COMM_RANK
 #cmakedefine HAVE_STARPU_MPI_CACHED_RECEIVE