diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index a5705a38d7cc7739c7c47a006b1360486fb1437a..cfd040d0b6e430b3c1b179a6ac4dbaa386ef0963 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.469 2006-11-04 14:14:12 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.470 2006-11-04 15:12:50 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -3598,8 +3598,6 @@ void mesh_delete_parts_cb(CALLBACK_ARGS)
       fac.clear();
     }
     if(ib == 'q') {
-      for(unsigned int i = 0; i < ele.size(); i++)
-	if(ele[i]->getVisibility() == 2) ele[i]->setVisibility(1);
       ZeroHighlight();
       break;
     }
@@ -3625,7 +3623,6 @@ void mesh_inspect_cb(CALLBACK_ARGS)
   std::vector<GFace*> faces;
   std::vector<GRegion*> regions;
   std::vector<MElement*> elements;
-  MElement *ele = 0;
 
   CTX.pick_elements = 1;
   CTX.mesh.changed = ENT_ALL;
@@ -3635,34 +3632,33 @@ void mesh_inspect_cb(CALLBACK_ARGS)
     Msg(ONSCREEN, "Select element\n[Press 'q' to abort]");
     char ib = SelectEntity(ENT_ALL, vertices, edges, faces, regions, elements);
     if(ib == 'l') {
-      if(ele) ele->setVisibility(1);
       if(elements.size()){
-	ele = elements[0];
-	ele->setVisibility(2);
-	Msg(DIRECT, "Element %d:", ele->getNum());
-	Msg(DIRECT, "  Type: %d", ele->getTypeForMSH()); 
-	Msg(DIRECT, "  Dimension: %d", ele->getDim());
-	Msg(DIRECT, "  Order: %d", ele->getPolynomialOrder()); 
-	Msg(DIRECT, "  Partition: %d", ele->getPartition()); 
+	ZeroHighlight();
+	elements[0]->setVisibility(2);
+	Msg(DIRECT, "Element %d:", elements[0]->getNum());
+	Msg(DIRECT, "  Type: %d", elements[0]->getTypeForMSH()); 
+	Msg(DIRECT, "  Dimension: %d", elements[0]->getDim());
+	Msg(DIRECT, "  Order: %d", elements[0]->getPolynomialOrder()); 
+	Msg(DIRECT, "  Partition: %d", elements[0]->getPartition()); 
 	char tmp1[256], tmp2[256];
 	sprintf(tmp2, "  Vertices:");
-	for(int i = 0; i < ele->getNumVertices(); i++){
-	  sprintf(tmp1, " %d", ele->getVertex(i)->getNum());
+	for(int i = 0; i < elements[0]->getNumVertices(); i++){
+	  sprintf(tmp1, " %d", elements[0]->getVertex(i)->getNum());
 	  strcat(tmp2, tmp1);
 	}
 	Msg(DIRECT, tmp2);
-	SPoint3 pt = ele->barycenter();
+	SPoint3 pt = elements[0]->barycenter();
 	Msg(DIRECT, "  Barycenter: (%g,%g,%g)", pt[0], pt[1], pt[2]);
-	Msg(DIRECT, "  Rho: %g", ele->rhoShapeMeasure());
-	Msg(DIRECT, "  Gamma: %g", ele->gammaShapeMeasure());
-	Msg(DIRECT, "  Eta: %g", ele->etaShapeMeasure());
+	Msg(DIRECT, "  Rho: %g", elements[0]->rhoShapeMeasure());
+	Msg(DIRECT, "  Gamma: %g", elements[0]->gammaShapeMeasure());
+	Msg(DIRECT, "  Eta: %g", elements[0]->etaShapeMeasure());
 	CTX.mesh.changed = ENT_ALL;
 	Draw();
 	WID->create_message_window();
       }
     }
     if(ib == 'q') {
-      if(ele) ele->setVisibility(1);
+      ZeroHighlight();
       break;
     }
   }
@@ -3693,7 +3689,6 @@ void mesh_optimize_cb(CALLBACK_ARGS)
   CTX.threads_lock = 1;
   Optimize_Netgen();
   CTX.threads_lock = 0;
-
   CTX.mesh.changed = ENT_LINE | ENT_SURFACE | ENT_VOLUME;
   Draw();
   Msg(STATUS2N, " ");
diff --git a/Graphics/SelectBuffer.cpp b/Graphics/SelectBuffer.cpp
index e0055c8d5349bd4e00e89af2b8c29b473aab114b..f9ee69633151aef038b21a2d1acc7cc7b3db4c35 100644
--- a/Graphics/SelectBuffer.cpp
+++ b/Graphics/SelectBuffer.cpp
@@ -1,4 +1,4 @@
-// $Id: SelectBuffer.cpp,v 1.8 2006-11-04 00:17:08 geuzaine Exp $
+// $Id: SelectBuffer.cpp,v 1.9 2006-11-04 15:12:50 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -281,4 +281,33 @@ void ZeroHighlight()
     ZeroHighlightEntity(*it);
   for(GModel::riter it = GMODEL->firstRegion(); it != GMODEL->lastRegion(); it++)
     ZeroHighlightEntity(*it);
+
+  for(GModel::eiter it = GMODEL->firstEdge(); it != GMODEL->lastEdge(); it++){
+    for(unsigned int i = 0; i < (*it)->lines.size(); i++)
+      if((*it)->lines[i]->getVisibility() == 2)
+	(*it)->lines[i]->setVisibility(1);
+  }
+  for(GModel::fiter it = GMODEL->firstFace(); it != GMODEL->lastFace(); it++){
+    for(unsigned int i = 0; i < (*it)->triangles.size(); i++)
+      if((*it)->triangles[i]->getVisibility() == 2)
+	(*it)->triangles[i]->setVisibility(1);
+    for(unsigned int i = 0; i < (*it)->quadrangles.size(); i++)
+      if((*it)->quadrangles[i]->getVisibility() == 2) 
+	(*it)->quadrangles[i]->setVisibility(1);
+  }
+  for(GModel::riter it = GMODEL->firstRegion(); it != GMODEL->lastRegion(); it++){
+    for(unsigned int i = 0; i < (*it)->tetrahedra.size(); i++)
+      if((*it)->tetrahedra[i]->getVisibility() == 2)
+	(*it)->tetrahedra[i]->setVisibility(1);
+    for(unsigned int i = 0; i < (*it)->hexahedra.size(); i++)
+      if((*it)->hexahedra[i]->getVisibility() == 2)
+	(*it)->hexahedra[i]->setVisibility(1);
+    for(unsigned int i = 0; i < (*it)->prisms.size(); i++)
+      if((*it)->prisms[i]->getVisibility() == 2)
+	(*it)->prisms[i]->setVisibility(1);
+    for(unsigned int i = 0; i < (*it)->pyramids.size(); i++)
+      if((*it)->pyramids[i]->getVisibility() == 2)
+	(*it)->pyramids[i]->setVisibility(1);
+  }
+  
 }