diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 12892ffab14d97acf5682fc4e50035ed5442b4be..8cede0c20a9daa2662389cb1631d258ab19ced24 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.481 2006-11-26 01:03:17 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.482 2006-11-26 01:11:01 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -3805,7 +3805,13 @@ void mesh_degree_cb(CALLBACK_ARGS)
 
 void mesh_optimize_cb(CALLBACK_ARGS)
 {
+  if(CTX.threads_lock) {
+    Msg(INFO, "I'm busy! Ask me that later...");
+    return;
+  }
+  CTX.threads_lock = 1;
   OptimizeMesh();
+  CTX.threads_lock = 0;
   CTX.mesh.changed = ENT_LINE | ENT_SURFACE | ENT_VOLUME;
   Draw();
   Msg(STATUS2N, " ");
diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index 5ecf50a35210cecabebf7a507de09fda2468c83c..be27f67bc431f9846a61ede7328477d0b2bb1edb 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -1,4 +1,4 @@
-// $Id: Generator.cpp,v 1.104 2006-11-25 23:29:27 geuzaine Exp $
+// $Id: Generator.cpp,v 1.105 2006-11-26 01:11:01 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -231,10 +231,12 @@ void Mesh3D()
 
 void OptimizeMesh()
 {
+  Msg(STATUS1, "Optimizing 3D...");
   double t1 = Cpu();
   std::for_each(GMODEL->firstRegion(), GMODEL->lastRegion(), optimizeMeshGRegion());
   double t2 = Cpu();
-  CTX.mesh_timer[2] = t2 - t1;
+  Msg(STATUS1, "Mesh");
+  Msg(INFO, "Mesh 3D optimization complete (%g s)", t2 - t1);
 }
 
 void GenerateMesh(int ask)
diff --git a/Mesh/meshGRegion.cpp b/Mesh/meshGRegion.cpp
index c93ce67dc34ee3644604966e0e25ca18ac3084be..c4601de0cb2f4f9aaf9979f1c934cdd4657fc539 100644
--- a/Mesh/meshGRegion.cpp
+++ b/Mesh/meshGRegion.cpp
@@ -1,4 +1,4 @@
-// $Id: meshGRegion.cpp,v 1.12 2006-11-26 01:03:17 geuzaine Exp $
+// $Id: meshGRegion.cpp,v 1.13 2006-11-26 01:11:01 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -493,6 +493,7 @@ void optimizeMeshGRegion::operator() (GRegion *gr)
 #if !defined(HAVE_NETGEN)
   Msg(GERROR, "Netgen is not compiled in this version of Gmsh");
 #else
+  Msg(STATUS2, "Optimizing volume %d", gr->tag());
   // import mesh into netgen, including volume tets
   std::vector<MVertex*> numberedV;
   Ng_Mesh *ngmesh = buildNetgenStructure(gr, true, numberedV);