diff --git a/MeshToolsLib/MeshEditing/ConvertToLinearMesh.cpp b/MeshToolsLib/MeshEditing/ConvertToLinearMesh.cpp
index 38d15583c3399ceb629016044d5caf31ea0da7b3..ed73dae293e026533c786006b0eb5a79c2fbb569 100644
--- a/MeshToolsLib/MeshEditing/ConvertToLinearMesh.cpp
+++ b/MeshToolsLib/MeshEditing/ConvertToLinearMesh.cpp
@@ -120,7 +120,6 @@ std::unique_ptr<MeshLib::Mesh> convertToLinearMesh(
                                                MeshLib::MeshItemType::Node)));
 
     // copy property vectors for nodes
-    auto const number_of_base_nodes = org_mesh.computeNumberOfBaseNodes();
     for (auto [name, property] : org_mesh.getProperties())
     {
         if (property->getMeshItemType() != MeshLib::MeshItemType::Node)
@@ -139,17 +138,17 @@ std::unique_ptr<MeshLib::Mesh> convertToLinearMesh(
                 name, MeshLib::MeshItemType::Node, n_src_comp);
         new_prop->resize(new_mesh->getNumberOfNodes() * n_src_comp);
 
-        // copy only base node values
-        for (unsigned i = 0; i < number_of_base_nodes; i++)
+        for (std::size_t k = 0; k < org_nodes.size(); ++k)
         {
-            for (int j = 0; j < n_src_comp; j++)
+            if (!marked_base_nodes[k])
             {
-                (*new_prop)[i * n_src_comp + j] =
-                    (*double_property)[i * n_src_comp + j];
+                continue;
             }
+            std::copy_n(double_property->begin() + k * n_src_comp,
+                        n_src_comp,
+                        new_prop->begin() + base_node_map[k] * n_src_comp);
         }
     }
-
     return new_mesh;
 }