diff --git a/Gui/DataView/MeshLayerEditDialog.cpp b/Gui/DataView/MeshLayerEditDialog.cpp
index 88a92f4f681dfc6f274e643d1f5046c9192ee81e..c6d79d92f6115fc290f369586e3c8b1e7c3ed4cf 100644
--- a/Gui/DataView/MeshLayerEditDialog.cpp
+++ b/Gui/DataView/MeshLayerEditDialog.cpp
@@ -189,7 +189,7 @@ MeshLib::Mesh* MeshLayerEditDialog::createPrismMesh()
 	}
 
     MeshLayerMapper const mapper;
-	MeshLib::Mesh* new_mesh = mapper.createLayers(*_msh, layer_thickness);
+	MeshLib::Mesh* new_mesh = mapper.createStaticLayers(*_msh, layer_thickness);
 
 	if (_use_rasters)
 	{
@@ -248,7 +248,7 @@ MeshLib::Mesh* MeshLayerEditDialog::createTetMesh()
 		for (unsigned i=0; i<nLayers; ++i)
 			layer_thickness.push_back(this->_edits[i]->text().toFloat());
         MeshLayerMapper const mapper;
-		tg_mesh = mapper.createLayers(*_msh, layer_thickness);
+		tg_mesh = mapper.createStaticLayers(*_msh, layer_thickness);
 		std::vector<MeshLib::Node> tg_attr;
 		FileIO::TetGenInterface tetgen_interface;
 		tetgen_interface.writeTetGenSmesh(filename.toStdString(), *tg_mesh, tg_attr);
diff --git a/MeshLib/MeshGenerators/MeshLayerMapper.cpp b/MeshLib/MeshGenerators/MeshLayerMapper.cpp
index 038535da871cb0bcaf576cb7d143ae0ca0a3038a..51ee03ba327071a61476a70fe0706db83312dd6b 100644
--- a/MeshLib/MeshGenerators/MeshLayerMapper.cpp
+++ b/MeshLib/MeshGenerators/MeshLayerMapper.cpp
@@ -32,7 +32,7 @@
 #include "MeshSurfaceExtraction.h"
 #include "MathTools.h"
 
-MeshLib::Mesh* MeshLayerMapper::createLayers(MeshLib::Mesh const& mesh, std::vector<float> const& layer_thickness_vector) const
+MeshLib::Mesh* MeshLayerMapper::createStaticLayers(MeshLib::Mesh const& mesh, std::vector<float> const& layer_thickness_vector, std::string const& mesh_name) const
 {
 	std::vector<float> thickness;
 	for (std::size_t i=0; i<layer_thickness_vector.size(); ++i)
@@ -44,7 +44,7 @@ MeshLib::Mesh* MeshLayerMapper::createLayers(MeshLib::Mesh const& mesh, std::vec
 	const std::size_t nLayers(thickness.size());
 	if (nLayers < 1 || mesh.getDimension() != 2)
 	{
-		ERR("MshLayerMapper::CreateLayers(): A 2D mesh with nLayers > 0 is required as input.");
+		ERR("MeshLayerMapper::createStaticLayers(): A 2D mesh with nLayers > 0 is required as input.");
 		return nullptr;
 	}
 
@@ -56,8 +56,7 @@ MeshLib::Mesh* MeshLayerMapper::createLayers(MeshLib::Mesh const& mesh, std::vec
 	const std::size_t nOrgElems (mesh.getNElements());
 	const std::vector<MeshLib::Node*> &nodes = mesh.getNodes();
 	const std::vector<MeshLib::Element*> &elems = mesh.getElements();
-	std::vector<MeshLib::Node*> new_nodes;
-	new_nodes.reserve(nNodes + (nLayers * nNodes));
+	std::vector<MeshLib::Node*> new_nodes(nNodes + (nLayers * nNodes));
 	std::vector<MeshLib::Element*> new_elems;
 	new_elems.reserve(nElems * nLayers);
 	double z_offset (0.0);
@@ -67,11 +66,9 @@ MeshLib::Mesh* MeshLayerMapper::createLayers(MeshLib::Mesh const& mesh, std::vec
 		// add nodes for new layer
 		unsigned node_offset (nNodes * layer_id);
 		if (layer_id > 0) z_offset += thickness[layer_id-1];
-		for (unsigned i = 0; i < nNodes; ++i)
-		{
-			const double* coords = nodes[i]->getCoords();
-			new_nodes.push_back (new MeshLib::Node(coords[0], coords[1], coords[2]-z_offset, node_offset+i));
-		}
+
+        std::transform(nodes.cbegin(), nodes.cend(), new_nodes.begin() + node_offset,
+            [&z_offset](MeshLib::Node* node){ return new MeshLib::Node((*node)[0], (*node)[1], (*node)[2]-z_offset); });
 
 		// starting with 2nd layer create prism or hex elements connecting the last layer with the current one
 		if (layer_id > 0)
@@ -82,12 +79,8 @@ MeshLib::Mesh* MeshLayerMapper::createLayers(MeshLib::Mesh const& mesh, std::vec
 			for (unsigned i = 0; i < nOrgElems; ++i)
 			{
 				const MeshLib::Element* sfc_elem( elems[i] );
-				if (sfc_elem->getDimension() != 2)
-				{
-					WARN("MshLayerMapper::CreateLayers() - Method can only handle 2D mesh elements.");
-					WARN("Skipping Element %d of type \"%s\".", i, MeshElemType2String(sfc_elem->getGeomType()).c_str());
+				if (sfc_elem->getDimension() < 2) // ignore line-elements
 					continue;
-				}
 				
 				const unsigned nElemNodes(sfc_elem->getNNodes());
 				MeshLib::Node** e_nodes = new MeshLib::Node*[2*nElemNodes];
@@ -105,7 +98,7 @@ MeshLib::Mesh* MeshLayerMapper::createLayers(MeshLib::Mesh const& mesh, std::vec
 			}
 		}
 	}
-	return new MeshLib::Mesh("SubsurfaceMesh", new_nodes, new_elems);
+	return new MeshLib::Mesh(mesh_name, new_nodes, new_elems);
 }
 
 bool MeshLayerMapper::layerMapping(MeshLib::Mesh &new_mesh, const std::string &rasterfile,
diff --git a/MeshLib/MeshGenerators/MeshLayerMapper.h b/MeshLib/MeshGenerators/MeshLayerMapper.h
index 31f978ebcd6c0129a3343522b7864fb265c489c4..543896d0650edcc192407493acb25b5adcd93c72 100644
--- a/MeshLib/MeshGenerators/MeshLayerMapper.h
+++ b/MeshLib/MeshGenerators/MeshLayerMapper.h
@@ -39,9 +39,10 @@ public:
     * \param mesh The triangle/quad mesh that is the basis for the new prism/hex mesh
     * \param nLayers The number of layers of prism/hex elements that will be extruded from the triangle/quad elements of the original mesh
     * \param thickness The thickness of each of these newly added layers
+    * \param mesh_name The name of the newly created mesh
     * \return A mesh with the requested number of layers of prism/hex elements
     */
-    MeshLib::Mesh* createLayers(MeshLib::Mesh const& mesh, std::vector<float> const& layer_thickness_vector) const;
+    MeshLib::Mesh* createStaticLayers(MeshLib::Mesh const& mesh, std::vector<float> const& layer_thickness_vector, std::string const& mesh_name = "SubsurfaceMesh") const;
 
     /**
     * Maps the z-values of nodes in the designated layer of the given mesh according to the given raster.