Index: /issm/trunk/src/c/objects/Bamg/Geometry.cpp
===================================================================
--- /issm/trunk/src/c/objects/Bamg/Geometry.cpp	(revision 9201)
+++ /issm/trunk/src/c/objects/Bamg/Geometry.cpp	(revision 9202)
@@ -48,5 +48,5 @@
 	Geometry::~Geometry() {
 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, MeshGeom.cpp/~Geometry)*/
-		if(NbRef>0)    _error_("Trying to delete geometry and NbRef>0");
+		if(NbRef>0){   printf("Trying to delete geometry and NbRef>0, probably due to an error"); return;}
 		if(vertices)   delete [] vertices;  vertices=0;
 		if(edges)      delete [] edges;     edges=0;
Index: /issm/trunk/src/c/objects/Bamg/Mesh.cpp
===================================================================
--- /issm/trunk/src/c/objects/Bamg/Mesh.cpp	(revision 9201)
+++ /issm/trunk/src/c/objects/Bamg/Mesh.cpp	(revision 9202)
@@ -265,4 +265,5 @@
 		Metric M1(1);
 		int verbose=0;
+		bool* nodeflags=NULL;
 
 		nbv=nods;
@@ -287,4 +288,6 @@
 		if (verbose) printf("Reading triangles (%i)\n",nbt);
 		triangles =new Triangle[maxnbt]; //we cannot allocate only nbt triangles since 
+		nodeflags=(bool*)xmalloc(nbv*sizeof(bool));
+		for(i=0;i<nbv;i++) nodeflags[i]=false;
 		//other triangles will be added for each edge
 		for (i=0;i<nbt;i++){
@@ -295,4 +298,5 @@
 			t=Triangle(this,i1,i2,i3);
 			t.color=1;
+			nodeflags[i1]=nodeflags[i2]=nodeflags[i3]=true;
 		}
 
@@ -302,4 +306,17 @@
 		if (verbose) printf("Completing geometry\n");
 		Gh.PostRead();
+
+		/*Check that there is no orphan*/
+		bool isorphan=false;
+		for(i=0;i<nbv;i++){
+			if(!nodeflags[i]){
+				printf("Vertex %i does not belong to any element\n",i+1);
+				isorphan=true;
+			}
+		}
+		if(isorphan) _error_("Orphan found in mesh, see ids above");
+
+		/*Clean up*/
+		xfree((void**)&nodeflags);
 	}
 	/*}}}1*/
