diff --git a/src/TNL/Meshes/MeshDetails/Traverser_impl.h b/src/TNL/Meshes/MeshDetails/Traverser_impl.h
index 666b19915e50325f39b9881ad1c4bf346f4b90b7..9d449c87517414de96a5fd191271b7e9f71d916a 100644
--- a/src/TNL/Meshes/MeshDetails/Traverser_impl.h
+++ b/src/TNL/Meshes/MeshDetails/Traverser_impl.h
@@ -87,7 +87,7 @@ template< int EntitiesDimension,
           typename Mesh,
           typename UserData >
 __global__ void
-MeshTraverserBoundaryEntitiesKernel( Mesh* mesh,
+MeshTraverserBoundaryEntitiesKernel( const Mesh* mesh,
                                      UserData* userData,
                                      typename Mesh::GlobalIndexType entitiesCount )
 {
@@ -95,10 +95,10 @@ MeshTraverserBoundaryEntitiesKernel( Mesh* mesh,
         i < entitiesCount;
         i += blockDim.x * gridDim.x )
    {
-      const auto entityIndex = mesh.template getBoundaryEntityIndex< EntitiesDimension >( i );
-      auto& entity = mesh.template getEntity< EntitiesDimension >( entityIndex );
+      const auto entityIndex = mesh->template getBoundaryEntityIndex< EntitiesDimension >( i );
+      auto& entity = mesh->template getEntity< EntitiesDimension >( entityIndex );
       // TODO: if the Mesh::IdType is void, then we should also pass the entityIndex
-      EntitiesProcessor::processEntity( mesh, userData, entity );
+      EntitiesProcessor::processEntity( *mesh, *userData, entity );
    }
 }
 
@@ -107,7 +107,7 @@ template< int EntitiesDimension,
           typename Mesh,
           typename UserData >
 __global__ void
-MeshTraverserInteriorEntitiesKernel( Mesh* mesh,
+MeshTraverserInteriorEntitiesKernel( const Mesh* mesh,
                                      UserData* userData,
                                      typename Mesh::GlobalIndexType entitiesCount )
 {
@@ -115,10 +115,10 @@ MeshTraverserInteriorEntitiesKernel( Mesh* mesh,
         i < entitiesCount;
         i += blockDim.x * gridDim.x )
    {
-      const auto entityIndex = mesh.template getInteriorEntityIndex< EntitiesDimension >( i );
-      auto& entity = mesh.template getEntity< EntitiesDimension >( entityIndex );
+      const auto entityIndex = mesh->template getInteriorEntityIndex< EntitiesDimension >( i );
+      auto& entity = mesh->template getEntity< EntitiesDimension >( entityIndex );
       // TODO: if the Mesh::IdType is void, then we should also pass the entityIndex
-      EntitiesProcessor::processEntity( mesh, userData, entity );
+      EntitiesProcessor::processEntity( *mesh, *userData, entity );
    }
 }
 
@@ -127,7 +127,7 @@ template< int EntitiesDimension,
           typename Mesh,
           typename UserData >
 __global__ void
-MeshTraverserAllEntitiesKernel( Mesh* mesh,
+MeshTraverserAllEntitiesKernel( const Mesh* mesh,
                                 UserData* userData,
                                 typename Mesh::GlobalIndexType entitiesCount )
 {
@@ -135,9 +135,9 @@ MeshTraverserAllEntitiesKernel( Mesh* mesh,
         entityIndex < entitiesCount;
         entityIndex += blockDim.x * gridDim.x )
    {
-      auto& entity = mesh.template getEntity< EntitiesDimension >( entityIndex );
+      auto& entity = mesh->template getEntity< EntitiesDimension >( entityIndex );
       // TODO: if the Mesh::IdType is void, then we should also pass the entityIndex
-      EntitiesProcessor::processEntity( mesh, userData, entity );
+      EntitiesProcessor::processEntity( *mesh, *userData, entity );
    }
 }
 
@@ -170,7 +170,7 @@ processBoundaryEntities( const MeshPointer& meshPointer,
    Devices::Cuda::synchronizeDevice();
    MeshTraverserBoundaryEntitiesKernel< EntitiesDimension, EntitiesProcessor >
       <<< gridSize, blockSize >>>
-      ( &meshPointer.template modifyData< Devices::Cuda >(),
+      ( &meshPointer.template getData< Devices::Cuda >(),
         &userDataPointer.template modifyData< Devices::Cuda >(),
         entitiesCount );
 #else
@@ -200,7 +200,7 @@ processInteriorEntities( const MeshPointer& meshPointer,
    Devices::Cuda::synchronizeDevice();
    MeshTraverserInteriorEntitiesKernel< EntitiesDimension, EntitiesProcessor >
       <<< gridSize, blockSize >>>
-      ( &meshPointer.template modifyData< Devices::Cuda >(),
+      ( &meshPointer.template getData< Devices::Cuda >(),
         &userDataPointer.template modifyData< Devices::Cuda >(),
         entitiesCount );
 #else
@@ -230,7 +230,7 @@ processAllEntities( const MeshPointer& meshPointer,
    Devices::Cuda::synchronizeDevice();
    MeshTraverserAllEntitiesKernel< EntitiesDimension, EntitiesProcessor >
       <<< gridSize, blockSize >>>
-      ( &meshPointer.template modifyData< Devices::Cuda >(),
+      ( &meshPointer.template getData< Devices::Cuda >(),
         &userDataPointer.template modifyData< Devices::Cuda >(),
         entitiesCount );
 #else