diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp
index 165f9e406dbf8f87a86a775119e9060862fa303f..655aea47637ba385c2fd0021514a57c767c71f90 100644
--- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp
+++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp
@@ -252,16 +252,18 @@ findElementsInPartition(
 /// findElementsInPartition).
 /// Finds ghost nodes and non-linear element ghost nodes by walking over
 /// ghost elements.
-void findGhostNodesInPartition(
+std::tuple<std::vector<MeshLib::Node*>, std::vector<MeshLib::Node*>>
+findGhostNodesInPartition(
     std::size_t const part_id,
     const bool is_mixed_high_order_linear_elems,
     std::size_t const number_of_base_nodes,
     std::vector<MeshLib::Node*> const& nodes,
     std::vector<MeshLib::Element const*> const& ghost_elements,
-    std::vector<std::size_t> const& partition_ids,
-    std::vector<MeshLib::Node*>& partition_nodes,
-    std::vector<MeshLib::Node*>& extra_nodes)
+    std::vector<std::size_t> const& partition_ids)
 {
+    std::vector<MeshLib::Node*> base_nodes;
+    std::vector<MeshLib::Node*> ghost_nodes;
+
     std::vector<bool> nodes_reserved(nodes.size(), false);
     for (const auto* ghost_elem : ghost_elements)
     {
@@ -277,11 +279,13 @@ void findGhostNodesInPartition(
             {
                 splitOffHigherOrderNode(nodes, is_mixed_high_order_linear_elems,
                                         node_id, number_of_base_nodes,
-                                        partition_nodes, extra_nodes);
+                                        base_nodes, ghost_nodes);
                 nodes_reserved[node_id] = true;
             }
         }
     }
+    return std::tuple<std::vector<MeshLib::Node*>, std::vector<MeshLib::Node*>>{
+        base_nodes, ghost_nodes};
 }
 
 void NodeWiseMeshPartitioner::processPartition(
@@ -303,18 +307,26 @@ void NodeWiseMeshPartitioner::processPartition(
              _partitions[part_id].ghost_elements) =
         findElementsInPartition(part_id, _mesh->getElements(),
                                 _nodes_partition_ids);
-    findGhostNodesInPartition(part_id, is_mixed_high_order_linear_elems,
-                              _mesh->getNumberOfBaseNodes(), _mesh->getNodes(),
-                              _partitions[part_id].ghost_elements,
-                              _nodes_partition_ids, _partitions[part_id].nodes,
-                              extra_nodes);
-    auto& partition = _partitions[part_id];
+    std::vector<MeshLib::Node*> base_ghost_nodes;
+    std::vector<MeshLib::Node*> higher_order_ghost_nodes;
+    std::tie(base_ghost_nodes, higher_order_ghost_nodes) =
+        findGhostNodesInPartition(part_id, is_mixed_high_order_linear_elems,
+                                  _mesh->getNumberOfBaseNodes(),
+                                  _mesh->getNodes(), partition.ghost_elements,
+                                  _nodes_partition_ids);
+
+    std::copy(begin(base_ghost_nodes), end(base_ghost_nodes),
+              std::back_inserter(partition.nodes));
+
     partition.number_of_base_nodes = partition.nodes.size();
 
     if (is_mixed_high_order_linear_elems)
     {
         partition.nodes.insert(partition.nodes.end(), extra_nodes.begin(),
                                extra_nodes.end());
+        std::copy(begin(higher_order_ghost_nodes),
+                  end(higher_order_ghost_nodes),
+                  std::back_inserter(partition.nodes));
     }
 
     // Set the node numbers of base and all mesh nodes.