diff --git a/Applications/Utils/MeshEdit/CMakeLists.txt b/Applications/Utils/MeshEdit/CMakeLists.txt
index 48108cfd792f836d9fb6d2640e3a2c6bd5fa21e9..84eda26edb2796b832b50dfa495d36ca69ad7246 100644
--- a/Applications/Utils/MeshEdit/CMakeLists.txt
+++ b/Applications/Utils/MeshEdit/CMakeLists.txt
@@ -51,4 +51,5 @@ target_link_libraries(
 )
 target_link_libraries(createLayeredMeshFromRasters ApplicationsFileIO)
 target_link_libraries(MapGeometryToMeshSurface MeshGeoToolsLib)
+target_link_libraries(MeshMapping ApplicationsFileIO)
 target_link_libraries(ResetPropertiesInPolygonalRegion ApplicationsFileIO)
diff --git a/Applications/Utils/MeshEdit/MeshMapping.cpp b/Applications/Utils/MeshEdit/MeshMapping.cpp
index a9e5dc9cc2e56705fc4007974e19c20bb9c42cee..32fdd4a87b644dbf5016905e2fc6d9e1cb541e11 100644
--- a/Applications/Utils/MeshEdit/MeshMapping.cpp
+++ b/Applications/Utils/MeshEdit/MeshMapping.cpp
@@ -18,14 +18,18 @@
 #include <mpi.h>
 #endif
 
+
+#include "Applications/FileIO/AsciiRasterInterface.h"
 #include "BaseLib/FileTools.h"
 #include "GeoLib/AABB.h"
+#include "GeoLib/Raster.h"
 #include "InfoLib/GitInfo.h"
 #include "MathLib/MathTools.h"
 #include "MeshLib/IO/readMeshFromFile.h"
 #include "MeshLib/IO/writeMeshToFile.h"
 #include "MeshLib/Mesh.h"
 #include "MeshLib/MeshEditing/ProjectPointOnMesh.h"
+#include "MeshLib/MeshGenerators/MeshLayerMapper.h"
 #include "MeshLib/MeshSearch/MeshElementGrid.h"
 #include "MeshLib/Node.h"
 
@@ -65,7 +69,7 @@ int main(int argc, char* argv[])
         ' ', GitInfoLib::GitInfo::ogs_version);
     TCLAP::SwitchArg lowpass_arg(
         "", "lowpass",
-        "Apply a lowpass filter to elevation over connected nodes", false);
+        "Applies a lowpass filter to elevation over connected nodes.", false);
     cmd.add(lowpass_arg);
     TCLAP::ValueArg<double> max_dist_arg(
         "d", "distance",
@@ -75,9 +79,20 @@ int main(int argc, char* argv[])
         false, 1, "number");
     cmd.add(max_dist_arg);
     TCLAP::ValueArg<std::string> map_mesh_arg(
-        "m", "mesh", "2D *.vtu mesh file to map the input file on", false, "",
+        "m", "mesh", "2D mesh file (*.vtu) to map the input file on.", false, "",
         "string");
     cmd.add(map_mesh_arg);
+    TCLAP::ValueArg<double> nodata_arg(
+        "n", "nodata",
+        "Replacement value to use if there is no corresponding data for input "
+        "mesh nodes on the raster it should be "
+        "mapped on. (Default value: 0)",
+        false, 0, "number");
+    cmd.add(nodata_arg);
+    TCLAP::ValueArg<std::string> map_raster_arg(
+        "r", "raster", "Raster file (*.asc) to map the input file on.", false, "",
+        "string");
+    cmd.add(map_raster_arg);
     TCLAP::ValueArg<std::string> output_arg(
         "o", "output", "Output mesh file (*.vtu)", true, "", "string");
     cmd.add(output_arg);
@@ -97,6 +112,36 @@ int main(int argc, char* argv[])
         return EXIT_FAILURE;
     }
 
+    if (map_raster_arg.isSet() && map_mesh_arg.isSet())
+    {
+        ERR("Please select mapping based on *either* a mesh or a raster file.");
+#ifdef USE_PETSC
+        MPI_Finalize();
+#endif
+        return EXIT_FAILURE;
+    }
+
+    // Maps the elevation of mesh nodes according to raster
+    if (map_raster_arg.isSet())
+    {
+        std::string const raster_path = map_raster_arg.getValue();
+        std::ifstream file_stream(raster_path, std::ifstream::in);
+        if (!file_stream.good())
+        {
+            ERR("Opening raster file {} failed.", raster_path);
+#ifdef USE_PETSC
+            MPI_Finalize();
+#endif
+            return EXIT_FAILURE;
+        }
+        file_stream.close();
+
+        GeoLib::Raster const* const raster =
+            FileIO::AsciiRasterInterface::readRaster(raster_path);
+        MeshLib::MeshLayerMapper::layerMapping(*mesh, *raster,
+                                               nodata_arg.getValue());
+    }
+
     // Maps the elevation of mesh nodes according to a ground truth mesh
     if (map_mesh_arg.isSet())
     {