diff --git a/Plugin/Annotate.cpp b/Plugin/Annotate.cpp
index 15e7bd95d98d78662460b8af8c13fca7504739ee..f3cf70698e65ec73b8aab284c53b256547f4157c 100644
--- a/Plugin/Annotate.cpp
+++ b/Plugin/Annotate.cpp
@@ -1,4 +1,4 @@
-// $Id: Annotate.cpp,v 1.6 2005-01-17 05:19:59 geuzaine Exp $
+// $Id: Annotate.cpp,v 1.7 2005-03-09 02:19:09 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -29,23 +29,24 @@
 #if defined(HAVE_FLTK)
 #include "GmshUI.h"
 #include "GUI.h"
+#include "Draw.h"
 #endif
 
 extern Context_T CTX;
 
 StringXNumber AnnotateOptions_Number[] = {
-  {GMSH_FULLRC, "X", NULL, 50.},
-  {GMSH_FULLRC, "Y", NULL, 30.},
-  {GMSH_FULLRC, "Z", NULL, 0.},
-  {GMSH_FULLRC, "3D", NULL, 0.},
-  {GMSH_FULLRC, "FontSize", NULL, 14.},
+  {GMSH_FULLRC, "X", GMSH_AnnotatePlugin::callbackX, 50.},
+  {GMSH_FULLRC, "Y", GMSH_AnnotatePlugin::callbackY, 30.},
+  {GMSH_FULLRC, "Z", GMSH_AnnotatePlugin::callbackZ, 0.},
+  {GMSH_FULLRC, "3D", GMSH_AnnotatePlugin::callback3D, 0.},
+  {GMSH_FULLRC, "FontSize", GMSH_AnnotatePlugin::callbackFontSize, 14.},
   {GMSH_FULLRC, "iView", NULL, -1.}
 };
 
 StringXString AnnotateOptions_String[] = {
-  {GMSH_FULLRC, "Text", NULL, "My Text"},
-  {GMSH_FULLRC, "Font", NULL, "Helvetica"},
-  {GMSH_FULLRC, "Align", NULL, "Left"}
+  {GMSH_FULLRC, "Text", GMSH_AnnotatePlugin::callbackText, "My Text"},
+  {GMSH_FULLRC, "Font", GMSH_AnnotatePlugin::callbackFont, "Helvetica"},
+  {GMSH_FULLRC, "Align", GMSH_AnnotatePlugin::callbackAlign, "Left"}
 };
 
 extern "C"
@@ -61,6 +62,136 @@ GMSH_AnnotatePlugin::GMSH_AnnotatePlugin()
   ;
 }
 
+static double getStyle()
+{
+  int fontsize = (int)AnnotateOptions_Number[4].def, font = 0, align = 0;
+#if defined(HAVE_FLTK)
+  font = GetFontIndex(AnnotateOptions_String[1].def);
+  // align only makes sense in screen coordinates at the moment:
+  if(!AnnotateOptions_Number[3].def)
+    align = GetFontAlign(AnnotateOptions_String[2].def);
+#endif
+  return (double)((align<<16)|(font<<8)|(fontsize));
+}
+
+void GMSH_AnnotatePlugin::draw()
+{
+#if defined(HAVE_FLTK)
+  double X = AnnotateOptions_Number[0].def;
+  double Y = AnnotateOptions_Number[1].def;
+  double Z = AnnotateOptions_Number[2].def;
+  double style = getStyle();
+
+  glColor4ubv((GLubyte *) & CTX.color.fg);
+  if(AnnotateOptions_Number[3].def == 1){ // 3D
+    glRasterPos3d(X, Y, Z);
+    Draw_String(AnnotateOptions_String[0].def, style);
+    // draw 10-pixel marker
+    double d = 10 * CTX.pixel_equiv_x / CTX.s[0];
+    glBegin(GL_LINES);
+    glVertex3d(X-d,Y,Z); glVertex3d(X+d,Y,Z);
+    glVertex3d(X,Y-d,Z); glVertex3d(X,Y+d,Z);
+    glVertex3d(X,Y,Z-d); glVertex3d(X,Y,Z+d);
+    glEnd();
+  }
+  else{
+    double modelview[16], projection[16];
+    glGetDoublev(GL_PROJECTION_MATRIX, projection);
+    glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
+
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    glOrtho((double)CTX.viewport[0], (double)CTX.viewport[2],
+	    (double)CTX.viewport[1], (double)CTX.viewport[3], -1., 1.);
+    glMatrixMode(GL_MODELVIEW);
+    glLoadIdentity();
+    FixText2DCoordinates(&X, &Y);
+    glRasterPos2d(X, Y);
+    Draw_String(AnnotateOptions_String[0].def, style);
+    // draw 10-pixel marker
+    glBegin(GL_LINES);
+    glVertex2d(X-10,Y); glVertex2d(X+10,Y);
+    glVertex2d(X,Y-10); glVertex2d(X,Y+10);
+    glEnd();
+
+    glMatrixMode(GL_PROJECTION);
+    glLoadMatrixd(projection);
+    glMatrixMode(GL_MODELVIEW);
+    glLoadMatrixd(modelview);
+  }
+#endif
+}
+
+double GMSH_AnnotatePlugin::callback(int num, int action, double value, double *opt,
+				     double step, double min, double max)
+{
+  switch(action){ // configure the input field
+  case 1: return step;
+  case 2: return min;
+  case 3: return max;
+  default: break;
+  }
+  *opt = value;
+#if defined(HAVE_FLTK)
+  DrawPlugin(draw);
+#endif
+  return 0.;
+}
+
+char *GMSH_AnnotatePlugin::callbackStr(int num, int action, char *value, char **opt)
+{
+  *opt = value;
+#if defined(HAVE_FLTK)
+  DrawPlugin(draw);
+#endif
+  return NULL;
+}
+
+double GMSH_AnnotatePlugin::callbackX(int num, int action, double value)
+{
+  return callback(num, action, value, &AnnotateOptions_Number[0].def,
+		  0.5, -100., 100000.);
+}
+
+double GMSH_AnnotatePlugin::callbackY(int num, int action, double value)
+{
+  return callback(num, action, value, &AnnotateOptions_Number[1].def,
+		  0.5, -100., 100000.);
+}
+
+double GMSH_AnnotatePlugin::callbackZ(int num, int action, double value)
+{
+  return callback(num, action, value, &AnnotateOptions_Number[2].def,
+		  0.5, -100., 100000.);
+}
+
+double GMSH_AnnotatePlugin::callback3D(int num, int action, double value)
+{
+  return callback(num, action, value, &AnnotateOptions_Number[3].def,
+		  1, 0, 1);
+}
+
+double GMSH_AnnotatePlugin::callbackFontSize(int num, int action, double value)
+{
+  return callback(num, action, value, &AnnotateOptions_Number[4].def,
+		  1, 5, 100);
+}
+
+char *GMSH_AnnotatePlugin::callbackText(int num, int action, char *value)
+{
+  return callbackStr(num, action, value, &AnnotateOptions_String[0].def);
+}
+
+char *GMSH_AnnotatePlugin::callbackFont(int num, int action, char *value)
+{
+  return callbackStr(num, action, value, &AnnotateOptions_String[1].def);
+}
+
+char *GMSH_AnnotatePlugin::callbackAlign(int num, int action, char *value)
+{
+  return callbackStr(num, action, value, &AnnotateOptions_String[2].def);
+}
+
 void GMSH_AnnotatePlugin::getName(char *name) const
 {
   strcpy(name, "Annotate");
@@ -116,11 +247,9 @@ Post_View *GMSH_AnnotatePlugin::execute(Post_View * v)
   double Y = AnnotateOptions_Number[1].def;
   double Z = AnnotateOptions_Number[2].def;
   int dim3 = (int)AnnotateOptions_Number[3].def;
-  int fontsize = (int)AnnotateOptions_Number[4].def;
   int iView = (int)AnnotateOptions_Number[5].def;
   char *text = AnnotateOptions_String[0].def;
-  char *fontname = AnnotateOptions_String[1].def;
-  char *alignstr =  AnnotateOptions_String[2].def;
+  double style = getStyle();
 
   if(iView < 0)
     iView = v ? v->Index : 0;
@@ -130,18 +259,8 @@ Post_View *GMSH_AnnotatePlugin::execute(Post_View * v)
     return v;
   }
 
-  int font = 0, align = 0;
-#if defined(HAVE_FLTK)
-  font = GetFontIndex(fontname);
-  // align only makes sense in screen coordinates at the moment:
-  if(!dim3)
-    align = GetFontAlign(alignstr);
-#endif
-
   Post_View *v1 = *(Post_View **)List_Pointer(CTX.post.list, iView);
 
-  double style = (double)((align<<16)|(font<<8)|(fontsize));
-
   if(dim3){
     List_Add(v1->T3D, &X);
     List_Add(v1->T3D, &Y);
diff --git a/Plugin/Annotate.h b/Plugin/Annotate.h
index 8b180eea6c08301b5790456ab26ba56f4d748ce3..7ab31c5f39acfb10e513116d4a3233126211d0db 100644
--- a/Plugin/Annotate.h
+++ b/Plugin/Annotate.h
@@ -29,6 +29,10 @@ extern "C"
 
 class GMSH_AnnotatePlugin : public GMSH_Post_Plugin
 {
+private:
+  static double callback(int num, int action, double value, double *opt,
+			 double step, double min, double max);
+  static char *callbackStr(int num, int action, char *value, char **opt);
 public:
   GMSH_AnnotatePlugin();
   void getName(char *name) const;
@@ -39,6 +43,16 @@ public:
   int getNbOptionsStr() const;
   StringXString* getOptionStr(int iopt);  
   Post_View *execute(Post_View *);
+
+  static double callbackX(int, int, double);
+  static double callbackY(int, int, double);
+  static double callbackZ(int, int, double);
+  static double callback3D(int, int, double);
+  static double callbackFontSize(int, int, double);
+  static char *callbackText(int, int, char *);
+  static char *callbackFont(int, int, char *);
+  static char *callbackAlign(int, int, char *);
+  static void draw();
 };
 
 #endif
diff --git a/Plugin/CutParametric.cpp b/Plugin/CutParametric.cpp
index 0dd141877190c13e6926352967a39d6ceaa4bbd1..69ccc1cb715d9bb92d6485fead698a935edd3dff 100644
--- a/Plugin/CutParametric.cpp
+++ b/Plugin/CutParametric.cpp
@@ -1,4 +1,4 @@
-// $Id: CutParametric.cpp,v 1.13 2005-03-04 19:08:38 geuzaine Exp $
+// $Id: CutParametric.cpp,v 1.14 2005-03-09 02:19:09 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -25,6 +25,11 @@
 #include "Context.h"
 #include <math.h>
 
+#if defined(HAVE_FLTK)
+#include "GmshUI.h"
+#include "Draw.h"
+#endif
+
 #if defined(HAVE_MATH_EVAL)
 #include "matheval.h"
 #endif
@@ -32,23 +37,17 @@
 extern Context_T CTX;
 
 StringXNumber CutParametricOptions_Number[] = {
-  {GMSH_FULLRC, "MinU", NULL, 0.},
-  {GMSH_FULLRC, "MaxU", NULL, 2*M_PI},
-  {GMSH_FULLRC, "nPointsU", NULL, 360.},
-  //{GMSH_FULLRC, "MinV", NULL, 0.},
-  //{GMSH_FULLRC, "MaxV", NULL, 1.},
-  //{GMSH_FULLRC, "nPointsV", NULL, 0.},
-  //{GMSH_FULLRC, "MinW", NULL, 0.},
-  //{GMSH_FULLRC, "MaxW", NULL, 1.},
-  //{GMSH_FULLRC, "nPointsW", NULL, 0.},
-  {GMSH_FULLRC, "ConnectPoints", NULL, 0.},
+  {GMSH_FULLRC, "MinU", GMSH_CutParametricPlugin::callbackMinU, 0.},
+  {GMSH_FULLRC, "MaxU", GMSH_CutParametricPlugin::callbackMaxU, 2*M_PI},
+  {GMSH_FULLRC, "nPointsU", GMSH_CutParametricPlugin::callbackN, 360.},
+  {GMSH_FULLRC, "ConnectPoints", GMSH_CutParametricPlugin::callbackConnect, 0.},
   {GMSH_FULLRC, "iView", NULL, -1.}
 };
 
 StringXString CutParametricOptions_String[] = {
-  {GMSH_FULLRC, "X", NULL, "0 + 1 * Cos(u)"},
-  {GMSH_FULLRC, "Y", NULL, "0 + 1 * Sin(u)"},
-  {GMSH_FULLRC, "Z", NULL, "0"},
+  {GMSH_FULLRC, "X", GMSH_CutParametricPlugin::callbackX, "0 + 1 * Cos(u)"},
+  {GMSH_FULLRC, "Y", GMSH_CutParametricPlugin::callbackY, "0 + 1 * Sin(u)"},
+  {GMSH_FULLRC, "Z", GMSH_CutParametricPlugin::callbackZ, "0"},
 };
 
 extern "C"
@@ -65,6 +64,155 @@ GMSH_CutParametricPlugin::GMSH_CutParametricPlugin()
   ;
 }
 
+static double getU(int i)
+{
+  double minU = CutParametricOptions_Number[0].def;
+  double maxU = CutParametricOptions_Number[1].def;
+  int nbU = (int)CutParametricOptions_Number[2].def;
+  
+  if(nbU == 1)
+    return minU;
+  else
+    return minU + (double)(i)/(double)(nbU-1) * (maxU - minU);
+}
+
+int GMSH_CutParametricPlugin::recompute = 1;
+vector<double> GMSH_CutParametricPlugin::x;
+vector<double> GMSH_CutParametricPlugin::y;
+vector<double> GMSH_CutParametricPlugin::z;
+
+int GMSH_CutParametricPlugin::fillXYZ()
+{
+#if !defined(HAVE_MATH_EVAL)
+  Msg(GERROR, "MathEval is not compiled in this version of Gmsh");
+  return 0;
+#else
+  char *exprx = CutParametricOptions_String[0].def;
+  char *expry = CutParametricOptions_String[1].def;
+  char *exprz = CutParametricOptions_String[2].def;
+  int nbU = (int)CutParametricOptions_Number[2].def;
+
+  x.resize(nbU);
+  y.resize(nbU);
+  z.resize(nbU);
+  void *fx = evaluator_create(exprx);
+  if(!fx){
+    Msg(GERROR, "Invalid expression '%s'", exprx);
+    return 0;
+  }
+  void *fy = evaluator_create(expry);
+  if(!fy){
+    evaluator_destroy(fx);
+    Msg(GERROR, "Invalid expression '%s'", expry);
+    return 0;
+  }
+  void *fz = evaluator_create(exprz);
+  if(!fz){
+    Msg(GERROR, "Invalid expression '%s'", exprz);
+    evaluator_destroy(fx);
+    evaluator_destroy(fy);
+    return 0;
+  }
+  for(int i = 0; i < nbU; ++i){
+    char *names[] = { "u" };
+    double values[] = { getU(i) };
+    x[i] = evaluator_evaluate(fx, sizeof(names)/sizeof(names[0]), names, values);
+    y[i] = evaluator_evaluate(fy, sizeof(names)/sizeof(names[0]), names, values);
+    z[i] = evaluator_evaluate(fz, sizeof(names)/sizeof(names[0]), names, values);
+  }
+  return 1;
+#endif
+}
+
+void GMSH_CutParametricPlugin::draw()
+{
+#if defined(HAVE_FLTK)
+  if(recompute){
+    fillXYZ();
+    recompute = 0;
+  }
+  glColor4ubv((GLubyte *) & CTX.color.fg);
+  if(CutParametricOptions_Number[3].def && x.size() > 1){
+    glBegin(GL_LINES);
+    for(unsigned int i = 1; i < x.size(); ++i){
+      glVertex3d(x[i-1], y[i-1], z[i-1]);
+      glVertex3d(x[i], y[i], z[i]);
+    }
+    glEnd();
+  }
+  else{
+    for(unsigned int i = 0; i < x.size(); ++i)
+      Draw_Point(1, CTX.point_size, &x[i], &y[i], &z[i], 1);
+  }
+#endif
+}
+
+double GMSH_CutParametricPlugin::callback(int num, int action, double value, double *opt,
+					  double step, double min, double max)
+{
+  switch(action){ // configure the input field
+  case 1: return step;
+  case 2: return min;
+  case 3: return max;
+  default: break;
+  }
+  *opt = value;
+#if defined(HAVE_FLTK)
+  recompute = 1;
+  DrawPlugin(draw);
+#endif
+  return 0.;
+}
+
+char *GMSH_CutParametricPlugin::callbackStr(int num, int action, char *value, char **opt)
+{
+  *opt = value;
+#if defined(HAVE_FLTK)
+  recompute = 1;
+  DrawPlugin(draw);
+#endif
+  return NULL;
+}
+
+double GMSH_CutParametricPlugin::callbackMinU(int num, int action, double value)
+{
+  return callback(num, action, value, &CutParametricOptions_Number[0].def,
+		  0.01, 0., 10.);
+}
+
+double GMSH_CutParametricPlugin::callbackMaxU(int num, int action, double value)
+{
+  return callback(num, action, value, &CutParametricOptions_Number[1].def,
+		  0.01, 0., 10.);
+}
+
+double GMSH_CutParametricPlugin::callbackN(int num, int action, double value)
+{
+  return callback(num, action, value, &CutParametricOptions_Number[2].def,
+		  1, 1, 1000);
+}
+
+double GMSH_CutParametricPlugin::callbackConnect(int num, int action, double value)
+{
+  return callback(num, action, value, &CutParametricOptions_Number[3].def,
+		  1, 0, 1);
+}
+
+char *GMSH_CutParametricPlugin::callbackX(int num, int action, char *value)
+{
+  return callbackStr(num, action, value, &CutParametricOptions_String[0].def);
+}
+
+char *GMSH_CutParametricPlugin::callbackY(int num, int action, char *value)
+{
+  return callbackStr(num, action, value, &CutParametricOptions_String[1].def);
+}
+
+char *GMSH_CutParametricPlugin::callbackZ(int num, int action, char *value)
+{
+  return callbackStr(num, action, value, &CutParametricOptions_String[2].def);
+}
+
 void GMSH_CutParametricPlugin::getName(char *name) const
 {
   strcpy(name, "Cut Parametric");
@@ -154,86 +302,48 @@ Post_View *GMSH_CutParametricPlugin::execute(Post_View * v)
     return v;
   }
 
-#if !defined(HAVE_MATH_EVAL)
-
-  Msg(GERROR, "MathEval is not compiled in this version of Gmsh");
-  return v;
-
-#else
+  if(!fillXYZ())
+    return v;
 
-  double minU = CutParametricOptions_Number[0].def;
-  double maxU = CutParametricOptions_Number[1].def;
   int nbU = (int)CutParametricOptions_Number[2].def;
   int connect = (int)CutParametricOptions_Number[3].def;
   if(nbU < 2) connect = 0;
 
-  char *exprx = CutParametricOptions_String[0].def;
-  char *expry = CutParametricOptions_String[1].def;
-  char *exprz = CutParametricOptions_String[2].def;
-
-  void *fx = evaluator_create(exprx);
-  if(!fx){
-    Msg(GERROR, "Invalid expression '%s'", exprx);
-    return v;
-  }
-
-  void *fy = evaluator_create(expry);
-  if(!fy){
-    evaluator_destroy(fx);
-    Msg(GERROR, "Invalid expression '%s'", expry);
-    return v;
-  }
-
-  void *fz = evaluator_create(exprz);
-  if(!fz){
-    evaluator_destroy(fx);
-    evaluator_destroy(fy);
-    Msg(GERROR, "Invalid expression '%s'", exprz);
-    return v;
-  }
-
   Post_View *v1 = *(Post_View **)List_Pointer(CTX.post.list, iView);
   OctreePost o(v1);
 
   Post_View *v2 = BeginView(1);
   double *res0 = new double[9*v1->NbTimeStep];
-  double *res = new double[9*v1->NbTimeStep];
-  double x = 0., y = 0., z = 0., x0 = 0., y0 = 0., z0 = 0.;
+  double *res1 = new double[9*v1->NbTimeStep];
+  double x0 = 0., y0 = 0., z0 = 0., x1 = 0., y1 = 0., z1 = 0.;
 
-  for(int k = 0; k < 9*v1->NbTimeStep; ++k) res0[k] = res[k] = 0.;
+  for(int k = 0; k < 9*v1->NbTimeStep; ++k) res0[k] = res1[k] = 0.;
 
   for(int i = 0; i < nbU; ++i){
     if(i && connect){
-      x0 = x;
-      y0 = y;
-      z0 = z;
-      for(int k = 0; k < 9*v1->NbTimeStep; ++k) res0[k] = res[k];
+      x0 = x1;
+      y0 = y1;
+      z0 = z1;
+      for(int k = 0; k < 9*v1->NbTimeStep; ++k) res0[k] = res1[k];
     }
 
-    double u;
-    if(nbU == 1 || maxU == minU)
-      u = minU;
-    else
-      u = minU + (double)(i)/(double)(nbU-1) * (maxU - minU);
-    char *names[] = { "u" };
-    double values[] = { u };
-    x = evaluator_evaluate(fx, sizeof(names)/sizeof(names[0]), names, values);
-    y = evaluator_evaluate(fy, sizeof(names)/sizeof(names[0]), names, values);
-    z = evaluator_evaluate(fz, sizeof(names)/sizeof(names[0]), names, values);
+    x1 = x[i];
+    y1 = y[i];
+    z1 = z[i];
 
     if(v->NbST || v->NbSQ || v->NbSS || v->NbSH || v->NbSI || v->NbSY){
-      o.searchScalar(x, y, z, res);
-      addInView(connect, i, 1, v1->NbTimeStep, x0, y0, z0, res0, x, y, z, res,
+      o.searchScalar(x1, y1, z1, res1);
+      addInView(connect, i, 1, v1->NbTimeStep, x0, y0, z0, res0, x1, y1, z1, res1,
 		v2->SP, &v2->NbSP, v2->SL, &v2->NbSL);
     }
     if(v->NbVT || v->NbVQ || v->NbVS || v->NbVH || v->NbVI || v->NbVY){
-      o.searchVector(x, y, z, res);
-      addInView(connect, i, 3, v1->NbTimeStep, x0, y0, z0, res0, x, y, z, res,
+      o.searchVector(x1, y1, z1, res1);
+      addInView(connect, i, 3, v1->NbTimeStep, x0, y0, z0, res0, x1, y1, z1, res1,
 		v2->VP, &v2->NbVP, v2->VL, &v2->NbVL);
     }
     if(v->NbTT || v->NbTQ || v->NbTS || v->NbTH || v->NbTI || v->NbTY){
-      o.searchTensor(x, y, z, res);
-      addInView(connect, i, 9, v1->NbTimeStep, x0, y0, z0, res0, x, y, z, res,
+      o.searchTensor(x1, y1, z1, res1);
+      addInView(connect, i, 9, v1->NbTimeStep, x0, y0, z0, res0, x1, y1, z1, res1,
 		v2->TP, &v2->NbTP, v2->TL, &v2->NbTL);
     }
   }
@@ -243,13 +353,8 @@ Post_View *GMSH_CutParametricPlugin::execute(Post_View * v)
   sprintf(filename, "%s_CutParametric.pos", v1->Name);
   EndView(v2, 1, filename, name);
 
-  evaluator_destroy(fx);
-  evaluator_destroy(fy);
-  evaluator_destroy(fz);
   delete [] res0;
-  delete [] res;
+  delete [] res1;
 
   return v2;
-
-#endif
 }
diff --git a/Plugin/CutParametric.h b/Plugin/CutParametric.h
index d550b300ae4ba9575f8d73287845a8f6a9454b91..2b109b83bc52e7174269d80d8d3c24005ccca079 100644
--- a/Plugin/CutParametric.h
+++ b/Plugin/CutParametric.h
@@ -20,6 +20,8 @@
 // 
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
+#include <vector>
+
 #include "Plugin.h"
 
 extern "C"
@@ -29,6 +31,13 @@ extern "C"
 
 class GMSH_CutParametricPlugin : public GMSH_Post_Plugin 
 { 
+private:
+  static double callback(int num, int action, double value, double *opt,
+			 double step, double min, double max);
+  static char *callbackStr(int num, int action, char *value, char **opt);
+  static int fillXYZ();
+  static int recompute;
+  static vector<double> x, y, z;
 public:
   GMSH_CutParametricPlugin();
   void getName  (char *name) const;
@@ -41,6 +50,15 @@ public:
   int getNbOptionsStr() const;
   StringXString* getOptionStr(int iopt);  
   Post_View *execute (Post_View *);
+
+  static double callbackMinU(int, int, double);
+  static double callbackMaxU(int, int, double);
+  static double callbackN(int, int, double);
+  static double callbackConnect(int, int, double);
+  static char *callbackX(int, int, char *);
+  static char *callbackY(int, int, char *);
+  static char *callbackZ(int, int, char *);
+  static void draw();
 };
 
 #endif
diff --git a/Plugin/Makefile b/Plugin/Makefile
index f7df8d5847242455a3b0291866597de480c2ca5a..b909254a4e6760c9f0374c25d43426d7db94700a 100644
--- a/Plugin/Makefile
+++ b/Plugin/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.80 2005-03-02 07:49:41 geuzaine Exp $
+# $Id: Makefile,v 1.81 2005-03-09 02:19:09 geuzaine Exp $
 #
 # Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 #
@@ -123,7 +123,11 @@ CutParametric.o: CutParametric.cpp OctreePost.h Octree.h \
   OctreeInternals.h CutParametric.h Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h ../Common/SmoothNormals.h \
-  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/Context.h
+  ../Common/GmshMatrix.h ../Common/AdaptiveViews.h ../Common/Context.h \
+  ../Common/GmshUI.h ../Graphics/Draw.h ../Mesh/Mesh.h ../DataStr/Tree.h \
+  ../DataStr/avl.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h \
+  ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \
+  ../Mesh/DiscreteSurface.h ../Mesh/Metric.h ../Mesh/Matrix.h
 Lambda2.o: Lambda2.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h \
@@ -253,7 +257,7 @@ Annotate.o: Annotate.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../DataStr/avl.h ../Mesh/Vertex.h ../Mesh/Element.h ../Mesh/Simplex.h \
   ../Mesh/Face.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \
   ../Mesh/DiscreteSurface.h ../Mesh/Metric.h ../Mesh/Matrix.h \
-  ../Fltk/Colorbar_Window.h
+  ../Fltk/Colorbar_Window.h ../Graphics/Draw.h
 Remove.o: Remove.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h ../Common/SmoothNormals.h \
diff --git a/Plugin/Probe.cpp b/Plugin/Probe.cpp
index a4bcb99ac7e7a83a793765b66877dbd11914dac8..7f8c69a5b7e92aef70fb25f65bf6153e93834d80 100644
--- a/Plugin/Probe.cpp
+++ b/Plugin/Probe.cpp
@@ -1,4 +1,4 @@
-// $Id: Probe.cpp,v 1.9 2005-03-04 19:08:38 geuzaine Exp $
+// $Id: Probe.cpp,v 1.10 2005-03-09 02:19:09 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -78,7 +78,7 @@ void GMSH_ProbePlugin::draw()
     glEnd();
   }
   else{
-    // draw a small marker
+    // draw 10-pixel marker
     double d = 10 * CTX.pixel_equiv_x / CTX.s[0];
     glBegin(GL_LINES);
     glVertex3d(x-d,y,z); glVertex3d(x+d,y,z);