diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp
index 679b52e8b43a8f042863aeca04ba82ab0930b5a0..61fe528ddc2d74a85e7a465ad5603ff8747722ba 100644
--- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp
+++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp
@@ -26,7 +26,6 @@
 #include "MeshLib/IO/VtkIO/VtuInterface.h"
 #include "MeshLib/IO/MPI_IO/PropertyVectorMetaData.h"
 
-#include "MeshLib/Node.h"
 #include "MeshLib/Elements/Element.h"
 
 namespace ApplicationUtils
@@ -212,7 +211,7 @@ void NodeWiseMeshPartitioner::processProperties()
                             return sum + p.nodes.size();
                         });
 
-    INFO("*** total number of tuples after partitioning: %d ***",
+    INFO("total number of tuples after partitioning: %d ",
          total_number_of_tuples);
     // 1 create new PV
     // 2 resize the PV with total_number_of_tuples
@@ -223,42 +222,23 @@ void NodeWiseMeshPartitioner::processProperties()
     {
         if (original_properties.existsPropertyVector<double>(name))
         {
-            auto const& pv(original_properties.getPropertyVector<double>(name));
-            auto partitioned_pv =
-                _partitioned_properties.createNewPropertyVector<double>(
-                    name, pv->getMeshItemType(), pv->getNumberOfComponents());
-            partitioned_pv->resize(total_number_of_tuples *
-                                   pv->getNumberOfComponents());
-            std::size_t cnt(0);
-            for (auto p : _partitions)
-            {
-                for (std::size_t i = 0; i < p.nodes.size(); ++i)
-                {
-                    const auto global_id = p.nodes[i]->getID();
-                    (*partitioned_pv)[cnt+i] = (*pv)[global_id];
-                }
-                cnt += p.nodes.size();
-            }
+            copyPropertyVector<double>(name, total_number_of_tuples);
         }
-        if (original_properties.existsPropertyVector<int>(name))
+        else if (original_properties.existsPropertyVector<float>(name))
         {
-            auto const& pv(original_properties.getPropertyVector<int>(name));
-            auto partitioned_pv =
-                _partitioned_properties.createNewPropertyVector<int>(
-                    name, pv->getMeshItemType(), pv->getNumberOfComponents());
-            partitioned_pv->resize(total_number_of_tuples *
-                                   pv->getNumberOfComponents());
-            std::size_t cnt(0);
-            for (auto p : _partitions)
-            {
-                for (std::size_t i = 0; i < p.nodes.size(); ++i)
-                {
-                    const auto global_id = p.nodes[i]->getID();
-                    (*partitioned_pv)[cnt+i] = (*pv)[global_id];
-                }
-                cnt += p.nodes.size();
-            }
-
+            copyPropertyVector<float>(name, total_number_of_tuples);
+        }
+        else if (original_properties.existsPropertyVector<int>(name))
+        {
+            copyPropertyVector<int>(name, total_number_of_tuples);
+        }
+        else if (original_properties.existsPropertyVector<long>(name))
+        {
+            copyPropertyVector<long>(name, total_number_of_tuples);
+        }
+        else if (original_properties.existsPropertyVector<std::size_t>(name))
+        {
+            copyPropertyVector<std::size_t>(name, total_number_of_tuples);
         }
     }
 }
diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h
index 5edd6c745e95266bb7df55dafcd0b403379a99c0..25e44f0d8afbf3830c36a3652b081ff06a22a98f 100644
--- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h
+++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h
@@ -21,6 +21,7 @@
 #include <fstream>
 
 #include "MeshLib/Mesh.h"
+#include "MeshLib/Node.h"
 
 namespace ApplicationUtils
 {
@@ -162,6 +163,29 @@ private:
 
     void processProperties();
 
+    template <typename T>
+    void copyPropertyVector(std::string const& name,
+                            std::size_t const total_number_of_tuples)
+    {
+        auto const& original_properties(_mesh->getProperties());
+        auto const& pv(original_properties.getPropertyVector<T>(name));
+        auto partitioned_pv =
+            _partitioned_properties.createNewPropertyVector<T>(
+                name, pv->getMeshItemType(), pv->getNumberOfComponents());
+        partitioned_pv->resize(total_number_of_tuples *
+                               pv->getNumberOfComponents());
+        std::size_t position_offset(0);
+        for (auto p : _partitions)
+        {
+            for (std::size_t i = 0; i < p.nodes.size(); ++i)
+            {
+                const auto global_id = p.nodes[i]->getID();
+                (*partitioned_pv)[position_offset + i] = (*pv)[global_id];
+            }
+            position_offset += p.nodes.size();
+        }
+    }
+
     template <typename T>
     void writePropertyVectorValuesBinary(
         std::ostream& os, MeshLib::PropertyVector<T> const& pv) const