diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp
index ea475303c2ba979dd4b0d0c4479ab1ad6b675e5e..6ad63cd699d37ec499fa17ba38b601bc15a785f7 100644
--- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp
+++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp
@@ -125,26 +125,32 @@ void splitOffHigherOrderNode(std::vector<MeshLib::Node*> const& nodes,
     }
 }
 
-void NodeWiseMeshPartitioner::findNonGhostNodesInPartition(
-    std::size_t const part_id,
-    const bool is_mixed_high_order_linear_elems,
-    std::vector<MeshLib::Node*>& extra_nodes)
-{
-    std::vector<MeshLib::Node*> const& nodes = _mesh->getNodes();
-    auto& partition = _partitions[part_id];
-    // -- Extra nodes for high order elements
-    for (std::size_t i = 0; i < _mesh->getNumberOfNodes(); i++)
+/// 1 copy pointers to nodes belonging to the partition part_id into base nodes
+/// vector, and
+/// 2 collect non-linear element nodes belonging to the partition part_id in
+/// extra nodes vector.
+/// \return a pair of base node and extra nodes.
+std::pair<std::vector<MeshLib::Node*>, std::vector<MeshLib::Node*>>
+findNonGhostNodesInPartition(std::size_t const part_id,
+                             const bool is_mixed_high_order_linear_elems,
+                             std::size_t const n_base_nodes,
+                             std::vector<MeshLib::Node*> const& nodes,
+                             std::vector<std::size_t> const& partition_ids)
+{
+    auto const n_nodes = nodes.size();
+
+    std::vector<MeshLib::Node*> base_nodes;
+    std::vector<MeshLib::Node*> extra_nodes;
+    for (std::size_t i = 0; i < n_nodes; i++)
     {
-        if (_nodes_partition_ids[i] == part_id)
+        if (partition_ids[i] == part_id)
         {
             splitOffHigherOrderNode(nodes, is_mixed_high_order_linear_elems, i,
-                                    _mesh->getNumberOfBaseNodes(),
-                                    partition.nodes, extra_nodes);
+                                    n_base_nodes, base_nodes, extra_nodes);
         }
     }
-    partition.number_of_non_ghost_base_nodes = partition.nodes.size();
-    partition.number_of_non_ghost_nodes =
-        partition.number_of_non_ghost_base_nodes + extra_nodes.size();
+
+    return {base_nodes, extra_nodes};
 }
 
 void NodeWiseMeshPartitioner::findElementsInPartition(std::size_t const part_id)
@@ -220,8 +226,16 @@ void NodeWiseMeshPartitioner::processPartition(
     std::size_t const part_id, const bool is_mixed_high_order_linear_elems)
 {
     std::vector<MeshLib::Node*> extra_nodes;
-    findNonGhostNodesInPartition(part_id, is_mixed_high_order_linear_elems,
-                                 extra_nodes);
+    std::tie(_partitions[part_id].nodes, extra_nodes) =
+        findNonGhostNodesInPartition(part_id, is_mixed_high_order_linear_elems,
+                                     _mesh->getNumberOfBaseNodes(),
+                                     _mesh->getNodes(), _nodes_partition_ids);
+
+    _partitions[part_id].number_of_non_ghost_base_nodes =
+        _partitions[part_id].nodes.size();
+    _partitions[part_id].number_of_non_ghost_nodes =
+        _partitions[part_id].number_of_non_ghost_base_nodes +
+        extra_nodes.size();
 
     findElementsInPartition(part_id);
     findGhostNodesInPartition(part_id, is_mixed_high_order_linear_elems,
diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h
index 4f295f9869b7819e5404388f3b44ce19d020c091..9d73713a640ebf71870ac8d5eb9a2aae5aa31e53 100644
--- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h
+++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h
@@ -117,14 +117,6 @@ private:
     /// interpolation
     void renumberNodeIndices(const bool is_mixed_high_order_linear_elems);
 
-    /// 1 copy pointers to nodes belonging to the partition part_id
-    /// 2 collect non-linear element nodes belonging to the partition part_id in
-    /// extra_nodes
-    void findNonGhostNodesInPartition(
-        std::size_t const part_id,
-        const bool is_mixed_high_order_linear_elems,
-        std::vector<MeshLib::Node*>& extra_nodes);
-
     /// 1 find elements belonging to the partition part_id:
     /// fills vector partition.regular_elements
     /// 2 find ghost elements belonging to the partition part_id