diff --git a/MeshLib/IO/XDMF/MeshPropertyDataType.cpp b/MeshLib/IO/XDMF/MeshPropertyDataType.cpp
index 9b84fb063036e3ca4f85f61c027be1acabeba3a1..4b8e3fc725792f9bad7e43f64c8c25fc3d816599 100644
--- a/MeshLib/IO/XDMF/MeshPropertyDataType.cpp
+++ b/MeshLib/IO/XDMF/MeshPropertyDataType.cpp
@@ -11,86 +11,86 @@
 #include "MeshPropertyDataType.h"
 
 // See https://www.xdmf.org/index.php/XDMF_Model_and_Format#Topology (Arbitrary)
-std::string ParentDataType2String(ParentDataType p)
+std::pair<std::string, std::size_t> ParentDataType2String(ParentDataType p)
 {
     // not used in OGS ParentDataType::POLYGON, ParentDataType::POLYHEDRON,
     // ParentDataType::HEXAHEDRON_24
     if (p == ParentDataType::MIXED)
     {
-        return "Mixed";
+        return {"Mixed", 1};
     }
 
     if (p == ParentDataType::POLYVERTEX)
     {
-        return "Polyvertex";
+        return {"Polyvertex", 1};
     }
     if (p == ParentDataType::POLYLINE)
     {
-        return "Polyline";
+        return {"Polyline", 2};
     }
     if (p == ParentDataType::TRIANGLE)
     {
-        return "Triangle";
+        return {"Triangle", 3};
     }
     if (p == ParentDataType::QUADRILATERAL)
     {
-        return "Quadrilateral";
+        return {"Quadrilateral", 4};
     }
     if (p == ParentDataType::TETRAHEDRON)
     {
-        return "Tetrahedron";
+        return {"Tetrahedron", 4};
     }
     if (p == ParentDataType::PYRAMID)
     {
-        return "Pyramid";
+        return {"Pyramid", 5};
     }
     if (p == ParentDataType::WEDGE)
     {
-        return "Wedge";
+        return {"Wedge", 6};
     }
     if (p == ParentDataType::HEXAHEDRON)
     {
-        return "Hexahedron";
+        return {"Hexahedron", 8};
     }
     if (p == ParentDataType::EDGE_3)
     {
-        return "Edge_3";
+        return {"Edge_3", 3};
     }
     if (p == ParentDataType::QUADRILATERAL_9)
     {
-        return "Quadrilateral_9";
+        return {"Quadrilateral_9", 9};
     }
     if (p == ParentDataType::TRIANGLE_6)
     {
-        return "Triangle_6";
+        return {"Triangle_6", 6};
     }
     if (p == ParentDataType::QUADRILATERAL_8)
     {
-        return "Quadrilateral_8";
+        return {"Quadrilateral_8", 8};
     }
     if (p == ParentDataType::TETRAHEDRON_10)
     {
-        return "Tetrahedron_10";
+        return {"Tetrahedron_10", 10};
     }
     if (p == ParentDataType::PYRAMID_13)
     {
-        return "Pyramid_13";
+        return {"Pyramid_13", 13};
     }
     if (p == ParentDataType::WEDGE_15)
     {
-        return "Wedge_15";
+        return {"Wedge_15", 15};
     }
     if (p == ParentDataType::WEDGE_18)
     {
-        return "Wedge_18";
+        return {"Wedge_18", 18};
     }
     if (p == ParentDataType::HEXAHEDRON_20)
     {
-        return "Hexahedron_20";
+        return {"Hexahedron_20", 20};
     }
     if (p == ParentDataType::HEXAHEDRON_27)
     {
-        return "Hexahedron_27";
+        return {"Hexahedron_27", 27};
     }
-    return "Mixed";
+    return {"Mixed", 1};
 }
diff --git a/MeshLib/IO/XDMF/MeshPropertyDataType.h b/MeshLib/IO/XDMF/MeshPropertyDataType.h
index dc7899dafacd591d0c5773735acd37e1268de304..334019a6d057cb6d0becf60f5dcebc0e3a12b6c2 100644
--- a/MeshLib/IO/XDMF/MeshPropertyDataType.h
+++ b/MeshLib/IO/XDMF/MeshPropertyDataType.h
@@ -38,7 +38,7 @@ enum class ParentDataType
 {
     MIXED = 0,
     POLYVERTEX = 1,
-    POLYLINE = 2,
+    POLYLINE = 2,  // OGS polylines are supposed to contain exactly 2 nodes
     // POLYGON = 3, // not used in OGS
     TRIANGLE = 4,
     QUADRILATERAL = 5,
@@ -60,4 +60,4 @@ enum class ParentDataType
     HEXAHEDRON_27 = 50
 };
 
-std::string ParentDataType2String(ParentDataType p);
+std::pair<std::string, std::size_t> ParentDataType2String(ParentDataType p);
diff --git a/MeshLib/IO/XDMF/transformData.cpp b/MeshLib/IO/XDMF/transformData.cpp
index 1cff421eb70e058bac7dd186ce91598f1c001cb6..ae90e9f0b389f7318a89ba5fe3cfe3cf277753f0 100644
--- a/MeshLib/IO/XDMF/transformData.cpp
+++ b/MeshLib/IO/XDMF/transformData.cpp
@@ -370,10 +370,9 @@ std::pair<std::vector<std::size_t>, ParentDataType> transformToXDMFTopology(
     else if (topology_type == ParentDataType::POLYLINE)
     {
         // '+ 1' for number of nodes of the cell
-        values.reserve(elements.size() * (elements[0]->getNumberOfNodes() + 1));
+        values.reserve(elements.size() * elements[0]->getNumberOfNodes());
         for (auto const& cell : elements)
         {
-            values.push_back(cell->getNumberOfNodes());
             push_cellnode_ids_to_vector(cell);
         }
     }
diff --git a/MeshLib/IO/XDMF/writeXdmf.cpp b/MeshLib/IO/XDMF/writeXdmf.cpp
index 788d4be89f8037b5107e52a8e690bb44b194dbb0..70db150a464b06106f7050e36684e9482012736a 100644
--- a/MeshLib/IO/XDMF/writeXdmf.cpp
+++ b/MeshLib/IO/XDMF/writeXdmf.cpp
@@ -208,7 +208,7 @@ std::function<std::string(std::vector<double>)> write_xdmf(
                          "NumberOfElements=\"{number_of_elements}\">{dataitem}"
                          "\n\t</Topology>"),
             "topology_type"_a =
-                ParentDataType2String(*topology.parent_data_type),
+                ParentDataType2String(*topology.parent_data_type).first,
             "dataitem"_a = dataitem_transform(topology),
             "nodes_per_element"_a = nodes_per_element,
             "number_of_elements"_a = topology.size_partitioned_dim);
@@ -246,7 +246,7 @@ std::function<std::string(std::vector<double>)> write_xdmf(
                         "\n\t<Topology "
                         "Type=\"{topology_type}\">{dataitem}\n\t</Topology>"),
                     "topology_type"_a =
-                        ParentDataType2String(*topology.parent_data_type),
+                        ParentDataType2String(*topology.parent_data_type).first,
                     "dataitem"_a = dataitem_transform(topology));
         }
         OGS_FATAL("Could not transform unknown XDMF topology type");