diff --git a/MeshLib/Mesh.cpp b/MeshLib/Mesh.cpp
index 758c7360c7b4f6c9e09e9584fc581a2c93f3b3e0..bb65d0a02ff720f5ede7995db93852e6e6eb8919 100644
--- a/MeshLib/Mesh.cpp
+++ b/MeshLib/Mesh.cpp
@@ -36,7 +36,7 @@ Mesh::Mesh(const std::string &name,
       _edge_length(std::numeric_limits<double>::max(), 0),
       _node_distance(std::numeric_limits<double>::max(), 0),
       _name(name), _nodes(nodes), _elements(elements),
-      _n_base_nodes(n_base_nodes==0 ? nodes.size() : n_base_nodes),
+      _n_base_nodes(n_base_nodes),
       _properties(properties)
 {
     assert(n_base_nodes <= nodes.size());
@@ -114,6 +114,15 @@ void Mesh::resetNodeIDs()
     const std::size_t nNodes (this->_nodes.size());
     for (unsigned i=0; i<nNodes; ++i)
         _nodes[i]->setID(i);
+
+    if (_n_base_nodes==0)
+    {
+        unsigned max_basenode_ID = 0;
+        for (Element const* e : _elements)
+            for (unsigned i=0; i<e->getNumberOfBaseNodes(); i++)
+                max_basenode_ID = std::max(max_basenode_ID, e->getNodeIndex(i));
+        _n_base_nodes = max_basenode_ID + 1;
+    }
 }
 
 void Mesh::resetElementIDs()