diff --git a/runtime/starpu/CMakeLists.txt b/runtime/starpu/CMakeLists.txt
index 2fdfe5266a4f03e16b811a94ff2644ea6dbfecaa..e073ad6f9763c79d515f6d771d7e759ff9b9b24d 100644
--- a/runtime/starpu/CMakeLists.txt
+++ b/runtime/starpu/CMakeLists.txt
@@ -84,8 +84,11 @@ if ( STARPU_FOUND )
       set(CHAMELEON_USE_MIGRATE "OFF")
       message("-- ${Blue}CHAMELEON_USE_MIGRATE is turned OFF because starpu_mpi_data_migrate not found${ColourReset}")
     endif()
+    check_function_exists(starpu_mpi_interface_datatype_node_register HAVE_STARPU_MPI_INTERFACE_DATATYPE_NODE_REGISTER)
     check_function_exists(starpu_mpi_interface_datatype_register HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER)
-    if ( HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER )
+    if ( HAVE_STARPU_MPI_INTERFACE_DATATYPE_NODE_REGISTER )
+      message("-- ${Blue}Add definition HAVE_STARPU_MPI_INTERFACE_DATATYPE_NODE_REGISTER${ColourReset}")
+    elseif ( HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER )
       message("-- ${Blue}Add definition HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER${ColourReset}")
     else()
       if( CHAMELEON_USE_MPI_DATATYPES )
diff --git a/runtime/starpu/include/chameleon_starpu.h.in b/runtime/starpu/include/chameleon_starpu.h.in
index 89e6fc7848ec3335b238cd0708a03ceeb6363809..848f5c175e9b450ce61b2f3e3322163f4c8a97a5 100644
--- a/runtime/starpu/include/chameleon_starpu.h.in
+++ b/runtime/starpu/include/chameleon_starpu.h.in
@@ -38,9 +38,10 @@
 #cmakedefine HAVE_STARPU_MPI_COMM_GET_ATTR
 #cmakedefine HAVE_STARPU_MPI_INIT_CONF
 #cmakedefine HAVE_STARPU_MPI_WAIT_FOR_ALL
+#cmakedefine HAVE_STARPU_MPI_INTERFACE_DATATYPE_NODE_REGISTER
 #cmakedefine HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER
 
-#if !defined(HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER) && defined(CHAMELEON_USE_MPI_DATATYPES)
+#if (!defined(HAVE_STARPU_MPI_INTERFACE_DATATYPE_NODE_REGISTER) && !defined(HAVE_STARPU_MPI_INTERFACE_DATATYPE_REGISTER)) && defined(CHAMELEON_USE_MPI_DATATYPES)
 #error "This version of StarPU does not support MPI datatypes (Please compile with -DCHAMELEON_USE_MPI_DATATYPES=OFF)"
 #endif
 
diff --git a/runtime/starpu/interface/cham_tile_interface.c b/runtime/starpu/interface/cham_tile_interface.c
index ea335c6404d8d52ec38a477c73c11c7909bc1c90..019cc78c1ed3fd6789a4bc1784cb8c5f4a9532c7 100644
--- a/runtime/starpu/interface/cham_tile_interface.c
+++ b/runtime/starpu/interface/cham_tile_interface.c
@@ -500,13 +500,14 @@ cti_handle_get_allocsize( starpu_data_handle_t handle )
 
 #if defined(CHAMELEON_USE_MPI_DATATYPES)
 int
-cti_allocate_datatype( starpu_data_handle_t handle,
-                       MPI_Datatype        *datatype )
+cti_allocate_datatype_node( starpu_data_handle_t handle,
+                            unsigned             node,
+                            MPI_Datatype        *datatype )
 {
     int ret;
 
     starpu_cham_tile_interface_t *cham_tile_interface = (starpu_cham_tile_interface_t *)
-        starpu_data_get_interface_on_node( handle, STARPU_MAIN_RAM );
+        starpu_data_get_interface_on_node( handle, node );
 
     size_t m  = cham_tile_interface->tile.m;
     size_t n  = cham_tile_interface->tile.n;
@@ -522,6 +523,13 @@ cti_allocate_datatype( starpu_data_handle_t handle,
     return 0;
 }
 
+int
+cti_allocate_datatype( starpu_data_handle_t handle,
+                       MPI_Datatype        *datatype )
+{
+    return cti_allocate_datatype_node( handle, STARPU_MAIN_RAM, datatype );
+}
+
 void
 cti_free_datatype( MPI_Datatype *datatype )
 {
@@ -536,9 +544,15 @@ starpu_cham_tile_interface_init()
     {
         starpu_interface_cham_tile_ops.interfaceid = starpu_data_interface_get_next_id();
 #if defined(CHAMELEON_USE_MPI_DATATYPES)
+  #if defined(HAVE_STARPU_MPI_INTERFACE_DATATYPE_NODE_REGISTER)
+        starpu_mpi_interface_datatype_node_register( starpu_interface_cham_tile_ops.interfaceid,
+                                                    cti_allocate_datatype_node,
+                                                    cti_free_datatype );
+  #else
         starpu_mpi_interface_datatype_register( starpu_interface_cham_tile_ops.interfaceid,
                                                 cti_allocate_datatype,
                                                 cti_free_datatype );
+  #endif
 #endif
     }
 }