diff --git a/MeshLib/MeshSurfaceExtraction.cpp b/MeshLib/MeshSurfaceExtraction.cpp
index cae5b39ead40fb89b5407f09cd70f86ea8371d65..c6856eed5cf609e69cd37970053626bcf79037cd 100644
--- a/MeshLib/MeshSurfaceExtraction.cpp
+++ b/MeshLib/MeshSurfaceExtraction.cpp
@@ -131,29 +131,8 @@ std::vector<MeshLib::Element*> createSfcElementVector(
     new_elements.reserve(sfc_elements.size());
     for (auto sfc_element : sfc_elements)
     {
-        unsigned const n_elem_nodes(sfc_element->getNumberOfBaseNodes());
-        auto** new_nodes = new MeshLib::Node*[n_elem_nodes];
-        for (unsigned k(0); k < n_elem_nodes; k++)
-        {
-            new_nodes[k] =
-                sfc_nodes[node_id_map[sfc_element->getNode(k)->getID()]];
-        }
-        switch (sfc_element->getGeomType())
-        {
-            case MeshElemType::TRIANGLE:
-                new_elements.push_back(new MeshLib::Tri(new_nodes));
-                break;
-            case MeshElemType::QUAD:
-                new_elements.push_back(new MeshLib::Quad(new_nodes));
-                break;
-            case MeshElemType::LINE:
-                new_elements.push_back(new MeshLib::Line(new_nodes));
-                break;
-            default:
-                OGS_FATAL(
-                    "createSfcElementVector Unknown element type '%s'.",
-                    MeshElemType2String(sfc_element->getGeomType()).c_str());
-        }
+        new_elements.push_back(
+            MeshLib::copyElement(sfc_element, sfc_nodes, &node_id_map));
     }
     return new_elements;
 }