diff --git a/FileIO/Legacy/MeshIO.cpp b/FileIO/Legacy/MeshIO.cpp
index fd822d5eeeb922b3edb8c61b65df71cf30cc8996..93d9aed5ceee488687e5598d746671f8552b2660 100644
--- a/FileIO/Legacy/MeshIO.cpp
+++ b/FileIO/Legacy/MeshIO.cpp
@@ -64,28 +64,28 @@ MeshLib::Mesh* MeshIO::loadMeshFromFile(const std::string& file_name)
 			else if (line_string.find("$NODES") != std::string::npos)
 			{
 				double x, y, z, double_dummy;
-				unsigned nNodes, idx;
-				in >> nNodes >> std::ws;
+				unsigned idx;
+				getline(in, line_string);
+				trim(line_string);
+				unsigned nNodes = atoi(line_string.c_str());
 				std::string s;
-				std::ios::pos_type position = in.tellg();
 				for (unsigned i = 0; i < nNodes; i++)
 				{
-					in >> idx >> x >> y >> z;
-					MeshLib::Node* node(new MeshLib::Node(x, y, z, nodes.size()));
+					getline(in, line_string);
+					std::stringstream iss(line_string);
+					iss >> idx >> x >> y >> z;
+					MeshLib::Node* node(new MeshLib::Node(x, y, z, idx));
 					nodes.push_back(node);
-					position = in.tellg();
-					in >> s;
+					iss >> s;
 					if (s.find("$AREA") != std::string::npos)
-						in >> double_dummy;
-					else
-						in.seekg(position, std::ios::beg);
-					in >> std::ws;
+						iss >> double_dummy;
 				}
 			}
 			else if (line_string.find("$ELEMENTS") != std::string::npos)
 			{
-				unsigned nElements;
-				in >> nElements >> std::ws;
+				getline(in, line_string);
+				trim(line_string);
+				unsigned nElements = atoi(line_string.c_str());
 				for (unsigned i = 0; i < nElements; i++)
 				{
 					getline(in, line_string);
diff --git a/MeshLib/Mesh.cpp b/MeshLib/Mesh.cpp
index c332dc66b735080ad35634974c15e31e1ed3af4d..e6117acb8ae1e834fa68df7d7ebb4f74fc327d3b 100644
--- a/MeshLib/Mesh.cpp
+++ b/MeshLib/Mesh.cpp
@@ -125,6 +125,13 @@ void Mesh::setElementInformationForNodes()
 		for (unsigned j=0; j<nNodes; j++)
 			_elements[i]->_nodes[j]->addElement(_elements[i]);
 	}
+#ifdef NDEBUG
+	// search for nodes that are not part of any element
+	const size_t nNodes (_nodes.size());
+	for (unsigned i=0; i<nNodes; i++)
+		if (_nodes[i]->getNElements() == 0)
+			std::cout << "Warning: Node " << i << " is not part of any element." << std::endl;
+#endif
 }
 
 void Mesh::setEdgeLengthRange(const double &min_length, const double &max_length)