diff --git a/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.cpp b/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.cpp
index 44d7c1c65ec816b6980808f0f152aafa352f8979..10a4c50e0386a040790a6e8f36469f549466ce71 100644
--- a/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.cpp
+++ b/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.cpp
@@ -384,8 +384,7 @@ MeshLib::NodePartitionedMesh* NodePartitionedMeshReader::newMesh(
     return new MeshLib::NodePartitionedMesh(
         mesh_name, mesh_nodes, glb_node_ids, mesh_elems, properties,
         _mesh_info.global_base_nodes, _mesh_info.global_nodes,
-        _mesh_info.base_nodes, _mesh_info.active_base_nodes,
-        _mesh_info.active_nodes);
+        _mesh_info.active_base_nodes, _mesh_info.active_nodes);
 }
 
 void NodePartitionedMeshReader::setNodes(
diff --git a/MeshLib/Mesh.cpp b/MeshLib/Mesh.cpp
index 44f26b12c64bf47f00f248d6d80087a2cd76264f..6db16060a724cea69496c9553225329459b46bc8 100644
--- a/MeshLib/Mesh.cpp
+++ b/MeshLib/Mesh.cpp
@@ -37,8 +37,7 @@ Mesh::Mesh(std::string name,
                nodes,
            std::vector<Element*>
                elements,
-           Properties const& properties,
-           const std::size_t n_base_nodes)
+           Properties const& properties)
     : _id(global_mesh_counter++),
       _mesh_dimension(0),
       _edge_length(std::numeric_limits<double>::max(), 0),
@@ -46,20 +45,10 @@ Mesh::Mesh(std::string name,
       _name(std::move(name)),
       _nodes(std::move(nodes)),
       _elements(std::move(elements)),
-      _n_base_nodes(n_base_nodes),
       _properties(properties)
 {
-    assert(_n_base_nodes <= _nodes.size());
     this->resetNodeIDs();
     this->resetElementIDs();
-    if (_n_base_nodes == 0)
-    {
-        recalculateMaxBaseNodeId();
-    }
-    if (_n_base_nodes == 0 && hasNonlinearElement())
-    {
-        this->checkNonlinearNodeIDs();
-    }
     this->setDimension();
     this->setElementsConnectedToNodes();
     this->setElementNeighbors();
@@ -75,7 +64,6 @@ Mesh::Mesh(const Mesh& mesh)
       _name(mesh.getName()),
       _nodes(mesh.getNumberOfNodes()),
       _elements(mesh.getNumberOfElements()),
-      _n_base_nodes(mesh.getNumberOfBaseNodes()),
       _properties(mesh._properties)
 {
     const std::vector<Node*>& nodes(mesh.getNodes());
@@ -141,19 +129,6 @@ void Mesh::resetNodeIDs()
     }
 }
 
-void Mesh::recalculateMaxBaseNodeId()
-{
-    std::size_t max_basenode_ID = 0;
-    for (Element const* e : _elements)
-    {
-        for (std::size_t i = 0; i < e->getNumberOfBaseNodes(); i++)
-        {
-            max_basenode_ID = std::max(max_basenode_ID, getNodeIndex(*e, i));
-        }
-    }
-    _n_base_nodes = max_basenode_ID + 1;
-}
-
 void Mesh::resetElementIDs()
 {
     const std::size_t nElements(this->_elements.size());
@@ -234,28 +209,6 @@ void Mesh::setElementNeighbors()
     }
 }
 
-void Mesh::checkNonlinearNodeIDs() const
-{
-    for (MeshLib::Element const* e : _elements)
-    {
-        for (unsigned i = e->getNumberOfBaseNodes(); i < e->getNumberOfNodes();
-             i++)
-        {
-            if (getNodeIndex(*e, i) >= getNumberOfBaseNodes())
-            {
-                continue;
-            }
-
-            WARN(
-                "Found a nonlinear node whose ID ({:d}) is smaller than the "
-                "number of base node IDs ({:d}). Some functions may not work "
-                "properly.",
-                getNodeIndex(*e, i), getNumberOfBaseNodes());
-            return;
-        }
-    }
-}
-
 std::size_t Mesh::getNumberOfBaseNodes() const
 {
     return std::count_if(begin(_nodes), end(_nodes),
diff --git a/MeshLib/Mesh.h b/MeshLib/Mesh.h
index 34ecbaa9f97ee1a579835e1b57aab0d50e538029..2d384ac2185858b95385909c72f3e64a3d31951b 100644
--- a/MeshLib/Mesh.h
+++ b/MeshLib/Mesh.h
@@ -48,22 +48,15 @@ class Mesh
 public:
     /// Constructor using a mesh name and an array of nodes and elements
     /// @param name          Mesh name.
-    /// @param nodes         A vector of mesh nodes. In case nonlinear nodes are
-    ///                      involved, one should put them after line ones in
-    ///                      the vector and set "n_base_nodes" argument.
+    /// @param nodes         A vector of mesh nodes.
     /// @param elements      An array of mesh elements.
     /// @param properties    Mesh properties.
-    /// @param n_base_nodes  The number of base nodes. This is an optional
-    ///                      parameter for nonlinear case.  If the parameter is
-    ///                      set to zero, we consider there are no nonlinear
-    ///                      nodes.
     Mesh(std::string name,
          std::vector<Node*>
              nodes,
          std::vector<Element*>
              elements,
-         Properties const& properties = Properties(),
-         const std::size_t n_base_nodes = 0);
+         Properties const& properties = Properties());
 
     /// Copy constructor
     Mesh(const Mesh &mesh);
@@ -110,9 +103,6 @@ public:
     /// Resets the IDs of all mesh-nodes to their position in the node vector
     void resetNodeIDs();
 
-    /// Finds the maximum id among all of the base nodes.
-    void recalculateMaxBaseNodeId();
-
     /// Changes the name of the mesh.
     void setName(const std::string &name) { this->_name = name; }
 
@@ -147,9 +137,6 @@ protected:
     /// Note: Using this implementation, an element e can only have neighbors that have the same dimensionality as e.
     void setElementNeighbors();
 
-    /// Check if all the nonlinear nodes are stored at the end of the node vector
-    void checkNonlinearNodeIDs() const;
-
     std::size_t const _id;
     unsigned _mesh_dimension;
     /// The minimal and maximal edge length over all elements in the mesh
@@ -161,7 +148,6 @@ protected:
     std::string _name;
     std::vector<Node*> _nodes;
     std::vector<Element*> _elements;
-    std::size_t _n_base_nodes;
     Properties _properties;
 
     bool _is_axially_symmetric = false;
diff --git a/MeshLib/MeshGenerators/QuadraticMeshGenerator.cpp b/MeshLib/MeshGenerators/QuadraticMeshGenerator.cpp
index df5d8bd448ecd7b16848e8d8e50465bb07d8b833..375140ba8d5d1cf0a33063ec075960c0021655c7 100644
--- a/MeshLib/MeshGenerators/QuadraticMeshGenerator.cpp
+++ b/MeshLib/MeshGenerators/QuadraticMeshGenerator.cpp
@@ -190,8 +190,8 @@ std::unique_ptr<Mesh> createQuadraticOrderMesh(Mesh const& linear_mesh,
     return std::make_unique<MeshLib::Mesh>(
         linear_mesh.getName(), quadratic_mesh_nodes, quadratic_elements,
         linear_mesh.getProperties().excludeCopyProperties(
-            std::vector<MeshLib::MeshItemType>(1, MeshLib::MeshItemType::Node)),
-        linear_mesh.getNumberOfNodes());
+            std::vector<MeshLib::MeshItemType>(1,
+                                               MeshLib::MeshItemType::Node)));
 }
 
 }  // namespace MeshLib
diff --git a/MeshLib/NodePartitionedMesh.h b/MeshLib/NodePartitionedMesh.h
index 6a81cf06cf1687f0aa44903c9b1af4940608beb3..73fc94c3ca8d55e79bf9882850f5cc9328c6ebf0 100644
--- a/MeshLib/NodePartitionedMesh.h
+++ b/MeshLib/NodePartitionedMesh.h
@@ -59,7 +59,6 @@ public:
         \param properties    Mesh property.
         \param n_global_base_nodes Number of the base nodes of the global mesh.
         \param n_global_nodes      Number of all nodes of the global mesh.
-        \param n_base_nodes        Number of the base nodes.
         \param n_active_base_nodes Number of the active base nodes.
         \param n_active_nodes      Number of all active nodes.
     */
@@ -70,10 +69,9 @@ public:
                         Properties properties,
                         const std::size_t n_global_base_nodes,
                         const std::size_t n_global_nodes,
-                        const std::size_t n_base_nodes,
                         const std::size_t n_active_base_nodes,
                         const std::size_t n_active_nodes)
-        : Mesh(name, nodes, elements, properties, n_base_nodes),
+        : Mesh(name, nodes, elements, properties),
           _global_node_ids(glb_node_ids),
           _n_global_base_nodes(n_global_base_nodes),
           _n_global_nodes(n_global_nodes),