diff --git a/Common/SmoothNormals.cpp b/Common/SmoothNormals.cpp
index c2b9a45e546c3315c17f4edadab152fb86ff4b1c..acb5a94f04828ea74252c57f8bb21284afe9f83f 100644
--- a/Common/SmoothNormals.cpp
+++ b/Common/SmoothNormals.cpp
@@ -1,4 +1,4 @@
-// $Id: SmoothNormals.cpp,v 1.6 2006-01-14 17:13:14 geuzaine Exp $
+// $Id: SmoothNormals.cpp,v 1.7 2006-08-16 05:25:22 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -23,14 +23,18 @@
 #include "Numeric.h"
 #include "SmoothNormals.h"
 
-double xyzn::eps = 1.e-12;
+float xyzn::eps = 1.e-6;
 
-float xyzn::angle(int i, float nx, float ny, float nz)
+float xyzn::angle(int i, char nx, char ny, char nz)
 {
   // returns the angle (in [-180,180]) between the ith normal stored
   // at point xyz and the new normal nx,ny,nz
-  double a[3] = {n[i].nx, n[i].ny, n[i].nz};
-  double b[3] = {nx, ny, nz};
+  double a[3] = {char2float(n[i].nx), 
+		 char2float(n[i].ny), 
+		 char2float(n[i].nz)};
+  double b[3] = {char2float(nx), 
+		 char2float(ny), 
+		 char2float(nz)};
   norme(a);
   norme(b);
   double c[3];
@@ -42,29 +46,28 @@ float xyzn::angle(int i, float nx, float ny, float nz)
   return (float)(angplan * 180. / Pi);
 }
 
-void xyzn::update(float nx, float ny, float nz, double tol)
+void xyzn::update(char nx, char ny, char nz, float tol)
 {
-  int N = n.size();
-
-  if(N > 100){
-    // just ignore it if we have more than 100 clusters (think "more
-    // than 100 elements touching a single vertex")
-    return;
-  }
+  // just ignore it if we have more than 100 clusters
+  if(n.size() > 100) return;
 
   // we average by clusters of normals separated by tol; the result of
   // the averaging depends on the order in which we average (since we
   // store the average value as the cluster center as we go), but it
   // seems to work very nicely in practice (and it's faster than
   // storing everyting and averaging at the end)
-  for(int i = 0; i < N; i++){
+  for(unsigned int i = 0; i < n.size(); i++){
     if(tol >= 180. || fabs(angle(i, nx, ny, nz)) < tol){
-      float c1 = (float)(n[i].nb) / (float)(n[i].nb + 1);
-      float c2 = 1. / (float)(n[i].nb + 1);
-      n[i].nx = (c1 * n[i].nx + c2 * nx);
-      n[i].ny = (c1 * n[i].ny + c2 * ny);
-      n[i].nz = (c1 * n[i].nz + c2 * nz);
-      n[i].nb++;
+      // just ignore it if we have more than 100 contributions to a
+      // single point...
+      if(n[i].nb < 100){
+	float c1 = (float)(n[i].nb) / (float)(n[i].nb + 1);
+	float c2 = 1. / (float)(n[i].nb + 1);
+	n[i].nx = (char)(c1 * n[i].nx + c2 * nx);
+	n[i].ny = (char)(c1 * n[i].ny + c2 * ny);
+	n[i].nz = (char)(c1 * n[i].nz + c2 * nz);
+	n[i].nb++;
+      }
       return;
     }
   }
@@ -78,31 +81,35 @@ void smooth_normals::add(double x, double y, double z,
 			 double nx, double ny, double nz)
 {
   xyzn xyz(x, y, z);
-  xyzn_iter it = c.find(xyz);
+
+  std::set<xyzn, lessthanxyzn>::const_iterator it = c.find(xyz);
   if(it == c.end()) {
-    xyz.update((float)nx, (float)ny, (float)nz, tol);
+    xyz.update(float2char(nx), 
+	       float2char(ny), 
+	       float2char(nz), tol);
     c.insert(xyz);
   }
   else {
     xyzn *p = (xyzn *) & (*it);
-    p->update((float)nx, (float)ny, (float)nz, tol);
+    p->update(float2char(nx), 
+	      float2char(ny), 
+	      float2char(nz), tol);
   }    
 }
 
 bool smooth_normals::get(double x, double y, double z,
 			 double &nx, double &ny, double &nz)
 {
-  xyzn xyz(x, y, z);
-  xyzn_iter it = c.find(xyz);
+  std::set<xyzn, lessthanxyzn>::const_iterator it = c.find(xyzn(x, y, z));
   if(it == c.end())
     return false;
 
   xyzn *p = (xyzn *) & (*it);
   for(unsigned int i = 0; i < p->n.size(); i++){
-    if(fabs(p->angle(i, (float)nx, (float)ny, (float)nz)) < tol) {
-      nx = p->n[i].nx;
-      ny = p->n[i].ny;
-      nz = p->n[i].nz;
+    if(fabs(p->angle(i, float2char(nx), float2char(ny), float2char(nz))) < tol) {
+      nx = char2float(p->n[i].nx);
+      ny = char2float(p->n[i].ny);
+      nz = char2float(p->n[i].nz);
       break;
     }
   }
diff --git a/Common/SmoothNormals.h b/Common/SmoothNormals.h
index df2f8db328e190b72236dce114cbb8eafcd45783..a2b362188fb4442782195f31a0b6479261c12a80 100644
--- a/Common/SmoothNormals.h
+++ b/Common/SmoothNormals.h
@@ -24,23 +24,21 @@
 #include <vector>
 #include "Numeric.h"
 
-using namespace std;
-
 struct nnb
 {
-  float nx, ny, nz;
-  int nb;
+  char nx, ny, nz;
+  unsigned char nb;
 };
 
 struct xyzn
 {
-  double x, y, z;
-  vector<nnb> n;
-  static double eps;
-  xyzn(double xx, double yy, double zz) : x(xx), y(yy), z(zz){}
+  float x, y, z;
+  std::vector<nnb> n;
+  static float eps;
+  xyzn(float xx, float yy, float zz) : x(xx), y(yy), z(zz){}
   ~xyzn(){}
-  float angle(int i, float n0, float n1, float n2);
-  void update(float n0, float n1, float n2, double tol);
+  float angle(int i, char n0, char n1, char n2);
+  void update(char n0, char n1, char n2, float tol);
 };
 
 struct lessthanxyzn
@@ -61,13 +59,10 @@ struct lessthanxyzn
   }
 };
 
-typedef set < xyzn, lessthanxyzn > xyzn_cont;
-typedef xyzn_cont::const_iterator xyzn_iter;
-
 class smooth_normals{
  private:
-  double tol;
-  xyzn_cont c;  
+  float tol;
+  std::set<xyzn, lessthanxyzn> c;  
  public:
   smooth_normals(double angle) : tol(angle) {}
   void add(double x, double y, double z, double nx, double ny, double nz);
diff --git a/Common/VertexArray.cpp b/Common/VertexArray.cpp
index d08dfb87739c8cd10ad73d935307a0a01ba789a5..5bf9c69eadbad2f5bc964be13f9f69756fbacf82 100644
--- a/Common/VertexArray.cpp
+++ b/Common/VertexArray.cpp
@@ -1,4 +1,4 @@
-// $Id: VertexArray.cpp,v 1.11 2006-08-15 02:17:25 geuzaine Exp $
+// $Id: VertexArray.cpp,v 1.12 2006-08-16 05:25:22 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -38,7 +38,7 @@ VertexArray::VertexArray(int numNodesPerElement, int numElements)
     numElements = 1;
   int nb = numElements * numNodesPerElement;
   vertices = List_Create(nb * 3, 3000, sizeof(float));
-  normals = List_Create(nb * 3, 3000, sizeof(float));
+  normals = List_Create(nb * 3, 3000, sizeof(char));
   colors = List_Create(nb * 4, 4000, sizeof(unsigned char));
 }
 
@@ -57,16 +57,21 @@ int VertexArray::n()
 void VertexArray::add(float x, float y, float z, 
 		      float n0, float n1, float n2, unsigned int col)
 {
+  List_Add(vertices, &x);
+  List_Add(vertices, &y);
+  List_Add(vertices, &z);
+
+  char c0 = float2char(n0);
+  char c1 = float2char(n1);
+  char c2 = float2char(n2);
+  List_Add(normals, &c0);
+  List_Add(normals, &c1);
+  List_Add(normals, &c2);
+
   unsigned char r = CTX.UNPACK_RED(col);
   unsigned char g = CTX.UNPACK_GREEN(col);
   unsigned char b = CTX.UNPACK_BLUE(col);
   unsigned char a = CTX.UNPACK_ALPHA(col);
-  List_Add(vertices, &x);
-  List_Add(vertices, &y);
-  List_Add(vertices, &z);
-  List_Add(normals, &n0);
-  List_Add(normals, &n1);
-  List_Add(normals, &n2);
   List_Add(colors, &r);
   List_Add(colors, &g);
   List_Add(colors, &b);
@@ -75,13 +80,14 @@ void VertexArray::add(float x, float y, float z,
 
 void VertexArray::add(float x, float y, float z, unsigned int col)
 {
+  List_Add(vertices, &x);
+  List_Add(vertices, &y);
+  List_Add(vertices, &z);
+
   unsigned char r = CTX.UNPACK_RED(col);
   unsigned char g = CTX.UNPACK_GREEN(col);
   unsigned char b = CTX.UNPACK_BLUE(col);
   unsigned char a = CTX.UNPACK_ALPHA(col);
-  List_Add(vertices, &x);
-  List_Add(vertices, &y);
-  List_Add(vertices, &z);
   List_Add(colors, &r);
   List_Add(colors, &g);
   List_Add(colors, &b);
@@ -115,13 +121,15 @@ int compareTriEye(const void *a, const void *b)
 
 void VertexArray::sort(double eye[3])
 {
+  // sort assumes that the all the arrays are filled
+  if(!List_Nbr(vertices) || !List_Nbr(normals) || !List_Nbr(colors))
+    return;
+
   if(type != 3){
     Msg(GERROR, "VertexArray sort only implemented for triangles");
     return;
   }
-
-  // FIXME this assumes that the color and normals are always filled!
-
+  
   theeye[0] = eye[0];
   theeye[1] = eye[1];
   theeye[2] = eye[2];
diff --git a/Common/Views.cpp b/Common/Views.cpp
index 6d6890f10906f2856d92fe9ab572f72f2d13f5c4..16e1ab966254449a9be3f795c019e860d4c13a0c 100644
--- a/Common/Views.cpp
+++ b/Common/Views.cpp
@@ -1,4 +1,4 @@
-// $Id: Views.cpp,v 1.190 2006-08-08 04:35:22 geuzaine Exp $
+// $Id: Views.cpp,v 1.191 2006-08-16 05:25:22 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -1001,7 +1001,7 @@ struct lessthanxyzv {
 };
 
 double xyzv::eps = 1.e-12;
-typedef set < xyzv, lessthanxyzv > xyzv_cont;
+typedef std::set < xyzv, lessthanxyzv > xyzv_cont;
 typedef xyzv_cont::const_iterator xyzv_iter;
 
 void generate_connectivities(List_T * list, int nbList, int nbTimeStep, int nbVert,
diff --git a/Geo/MEdge.h b/Geo/MEdge.h
index efc5b8d260f66297eb5c1fdf470e26db10b8a34c..8cb94186acbda2d51c976d0e0d17658899782b8f 100644
--- a/Geo/MEdge.h
+++ b/Geo/MEdge.h
@@ -20,8 +20,8 @@
 // 
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
-#include <algorithm>
 #include "MVertex.h"
+#include "SVector3.h"
 
 class MElement;
 
@@ -45,6 +45,14 @@ class MEdge {
   inline int getNumVertices() const { return 2; }
   inline MVertex *getVertex(int i) const { return _v[i]; }
   inline MElement *getElement() const { return _element; }
+  SVector3 tangent()
+  {
+    SVector3 t(_v[1]->x() - _v[0]->x(), 
+	       _v[1]->y() - _v[0]->y(),
+	       _v[1]->z() - _v[0]->z());
+    t.normalize();
+    return t;
+  }
   SPoint3 barycenter()
   {
     return SPoint3(0.5 * (_v[0]->x() + _v[1]->x()), 
diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp
index ee014d9ef1b6a1204dee01c21b20bdd13515f7fd..0cb0a7cb2a2d636a3758ca834d82961d08cd8b45 100644
--- a/Graphics/Mesh.cpp
+++ b/Graphics/Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Mesh.cpp,v 1.168 2006-08-16 02:01:45 geuzaine Exp $
+// $Id: Mesh.cpp,v 1.169 2006-08-16 05:25:22 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -129,7 +129,7 @@ static void drawNormals(std::vector<T*> &elements)
 {
   glColor4ubv((GLubyte *) & CTX.color.mesh.normals);
   for(unsigned int i = 0; i < elements.size(); i++){
-    SVector3 n = elements[i]->getFace(0).normal();
+    SVector3 n = elements[i]->getFaceRep(0).normal();
     for(int j = 0; j < 3; j++)
       n[j] *= CTX.mesh.normals * CTX.pixel_equiv_x / CTX.s[j];
     SPoint3 pc = elements[i]->barycenter();
@@ -139,6 +139,21 @@ static void drawNormals(std::vector<T*> &elements)
   }
 }
 
+template<class T>
+static void drawTangents(std::vector<T*> &elements)
+{
+  glColor4ubv((GLubyte *) & CTX.color.mesh.tangents);
+  for(unsigned int i = 0; i < elements.size(); i++){
+    SVector3 t = elements[i]->getEdgeRep(0).tangent();
+    for(int j = 0; j < 3; j++)
+      t[j] *= CTX.mesh.tangents * CTX.pixel_equiv_x / CTX.s[j];
+    SPoint3 pc = elements[i]->barycenter();
+    Draw_Vector(CTX.vector_type, 0, CTX.arrow_rel_head_radius, 
+		CTX.arrow_rel_stem_length, CTX.arrow_rel_stem_radius,
+		pc.x(), pc.y(), pc.z(), t[0], t[1], t[2], CTX.mesh.light);
+  }
+}
+
 static void drawVertices(GEntity *e)
 {
   glColor4ubv((GLubyte *) & CTX.color.mesh.vertex);
@@ -294,29 +309,29 @@ static void addElementsInArrays(GEntity *e, VertexArray *va, std::vector<T*> &el
   }
 }
 
-static void drawArrays(VertexArray *va, GLint type, bool useColorArray, 
-		       bool useNormalArray, bool usePolygonOffset,
+static void drawArrays(VertexArray *va, GLint type, bool useNormalArray, 
+		       bool useColorArray, bool usePolygonOffset,
 		       unsigned int uniformColor, bool drawOutline=false)
 {
   if(!va) return;
 
   glVertexPointer(3, GL_FLOAT, 0, va->vertices->array);
+  glNormalPointer(GL_BYTE, 0, va->normals->array);
   glColorPointer(4, GL_UNSIGNED_BYTE, 0, va->colors->array);
-  glNormalPointer(GL_FLOAT, 0, va->normals->array);
   
   glEnableClientState(GL_VERTEX_ARRAY);
-  if(useColorArray)
-    glEnableClientState(GL_COLOR_ARRAY);
-  else{
-    glDisableClientState(GL_COLOR_ARRAY);
-    glColor4ubv((GLubyte *) & uniformColor);
-  }
   if(useNormalArray){
     glEnable(GL_LIGHTING);
     glEnableClientState(GL_NORMAL_ARRAY);
   }
   else
     glDisableClientState(GL_NORMAL_ARRAY);
+  if(useColorArray)
+    glEnableClientState(GL_COLOR_ARRAY);
+  else{
+    glDisableClientState(GL_COLOR_ARRAY);
+    glColor4ubv((GLubyte *) & uniformColor);
+  }
   
   if(usePolygonOffset) 
     glEnable(GL_POLYGON_OFFSET_FILL);
@@ -331,8 +346,8 @@ static void drawArrays(VertexArray *va, GLint type, bool useColorArray,
   glDisable(GL_LIGHTING);
   
   glDisableClientState(GL_VERTEX_ARRAY);
-  glDisableClientState(GL_COLOR_ARRAY);
   glDisableClientState(GL_NORMAL_ARRAY);
+  glDisableClientState(GL_COLOR_ARRAY);
 }
 
 // GVertex drawing routines
@@ -394,8 +409,8 @@ class drawMeshGEdge {
     MRep *m = e->meshRep;
 
     if(CTX.mesh.lines)
-      drawArrays(m->va_lines, GL_LINES, CTX.mesh.color_carousel == 3, 
-		 false, false,  getColor(e, false, CTX.color.mesh.line));
+      drawArrays(m->va_lines, GL_LINES, false, CTX.mesh.color_carousel == 3, 
+		 false,  getColor(e, false, CTX.color.mesh.line));
 
     if(CTX.mesh.lines_num) {
       const int labelStep = getLabelStep(e->lines.size());
@@ -406,9 +421,8 @@ class drawMeshGEdge {
     if(CTX.mesh.points || CTX.mesh.points_num)
       drawVertices(e);
 
-    if(CTX.mesh.tangents){
-      // TODO
-    }
+    if(CTX.mesh.tangents)
+      drawTangents(e->lines);
 
     if(CTX.render_mode == GMSH_SELECT) {
       glPopName();
@@ -461,7 +475,8 @@ class initMeshGFace {
     if(!f->meshRep)
       f->meshRep = new MRepFace(f);
 
-    bool useEdges = true;
+    //bool useEdges = true;
+    bool useEdges = false;
 
     if(CTX.mesh.explode != 1. || CTX.mesh.quality_sup || CTX.mesh.radius_sup || 
        CTX.mesh.use_cut_plane)
@@ -528,26 +543,26 @@ class drawMeshGFace {
 
     if(CTX.mesh.surfaces_edges){
       if(m->va_lines && m->va_lines->n()){
-	drawArrays(m->va_lines, GL_LINES, CTX.mesh.color_carousel == 3, 
-		   CTX.mesh.light && CTX.mesh.light_lines, false, 
+	drawArrays(m->va_lines, GL_LINES, CTX.mesh.light && CTX.mesh.light_lines, 
+		   CTX.mesh.color_carousel == 3, false, 
 		   getColor(f, CTX.mesh.surfaces_faces, CTX.color.mesh.line));
       }
       else{
-	drawArrays(m->va_triangles, GL_TRIANGLES, CTX.mesh.color_carousel == 3, 
-		   CTX.mesh.light && CTX.mesh.light_lines, false, 
+	drawArrays(m->va_triangles, GL_TRIANGLES, CTX.mesh.light && CTX.mesh.light_lines,
+		   CTX.mesh.color_carousel == 3, false, 
 		   getColor(f, CTX.mesh.surfaces_faces, CTX.color.mesh.line), true);
-	drawArrays(m->va_quads, GL_QUADS, CTX.mesh.color_carousel == 3, 
-		   CTX.mesh.light && CTX.mesh.light_lines, false, 
+	drawArrays(m->va_quads, GL_QUADS, CTX.mesh.light && CTX.mesh.light_lines, 
+		   CTX.mesh.color_carousel == 3, false, 
 		   getColor(f, CTX.mesh.surfaces_faces, CTX.color.mesh.line), true);
       }
     }
     
     if(CTX.mesh.surfaces_faces){
-      drawArrays(m->va_triangles, GL_TRIANGLES, CTX.mesh.color_carousel == 3, 
-		 CTX.mesh.light, CTX.polygon_offset, 
+      drawArrays(m->va_triangles, GL_TRIANGLES, CTX.mesh.light, 
+		 CTX.mesh.color_carousel == 3, CTX.polygon_offset, 
 		 getColor(f, 0, CTX.color.mesh.triangle));
-      drawArrays(m->va_quads, GL_QUADS, CTX.mesh.color_carousel == 3, 
-		 CTX.mesh.light, CTX.polygon_offset, 
+      drawArrays(m->va_quads, GL_QUADS, CTX.mesh.light, 
+		 CTX.mesh.color_carousel == 3, CTX.polygon_offset, 
 		 getColor(f, 0, CTX.color.mesh.quadrangle));
     }
 
diff --git a/Graphics/Post.cpp b/Graphics/Post.cpp
index 0079143b9df0e2e203b2791dfe74477fa4349554..a09552a002dc0fac8730e56fd6535675dcde341d 100644
--- a/Graphics/Post.cpp
+++ b/Graphics/Post.cpp
@@ -1,4 +1,4 @@
-// $Id: Post.cpp,v 1.109 2006-08-15 21:22:12 geuzaine Exp $
+// $Id: Post.cpp,v 1.110 2006-08-16 05:25:22 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -769,7 +769,7 @@ void Draw_Post(void)
 	}
 
 	glVertexPointer(3, GL_FLOAT, 0, v->TriVertexArray->vertices->array);
-	glNormalPointer(GL_FLOAT, 0, v->TriVertexArray->normals->array);
+	glNormalPointer(GL_BYTE, 0, v->TriVertexArray->normals->array);
 	glColorPointer(4, GL_UNSIGNED_BYTE, 0, v->TriVertexArray->colors->array);
 
 	glEnableClientState(GL_VERTEX_ARRAY);
@@ -786,8 +786,8 @@ void Draw_Post(void)
 	glDisable(GL_LIGHTING);
       
 	glDisableClientState(GL_VERTEX_ARRAY);
-	glDisableClientState(GL_COLOR_ARRAY);
 	glDisableClientState(GL_NORMAL_ARRAY);
+	glDisableClientState(GL_COLOR_ARRAY);
       }
 
       if(v->LinVertexArray && v->LinVertexArray->n()){
diff --git a/Numeric/Numeric.cpp b/Numeric/Numeric.cpp
index 74d9b8f5092c03b17f51008a37e4702f9a77281e..7eecfac74336f2f1eeedcbf810f9e7bde26f4785 100644
--- a/Numeric/Numeric.cpp
+++ b/Numeric/Numeric.cpp
@@ -1,4 +1,4 @@
-// $Id: Numeric.cpp,v 1.26 2006-08-08 01:10:05 geuzaine Exp $
+// $Id: Numeric.cpp,v 1.27 2006-08-16 05:25:22 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -299,6 +299,19 @@ double triangle_area(double p0[3], double p1[3], double p2[3])
   return (0.5 * sqrt(c[0] * c[0] + c[1] * c[1] + c[2] * c[2]));
 }
 
+char float2char(float f)
+{
+  // f is supposed to be normalized in [-1, 1]
+  f = (f > 1.) ? 1. : (f < -1.) ? -1 : f;
+  // char is in [-128, 127]
+  return (char)(-128 + (f + 1.)/2. * 255);
+}
+
+float char2float(char c)
+{
+  return -1. + (float)(c + 128)/255. * 2.;
+}
+
 double InterpolateIso(double *X, double *Y, double *Z,
                       double *Val, double V, int I1, int I2,
                       double *XI, double *YI, double *ZI)
diff --git a/Numeric/Numeric.h b/Numeric/Numeric.h
index 23a56da1368ddf0c9ae37503d6d30ce4f285949c..bdaf872207ea6e52e526fbb6e8c6884005ef66b7 100644
--- a/Numeric/Numeric.h
+++ b/Numeric/Numeric.h
@@ -77,6 +77,8 @@ double trace2 (double mat[3][3]);
 double inv3x3(double mat[3][3], double inv[3][3]);
 double angle_02pi(double A3);
 double triangle_area(double p0[3], double p1[3], double p2[3]);
+char float2char(float f);
+float char2float(char c);
 void eigenvalue(double mat[3][3], double re[3]);
 void FindCubicRoots(const double coeff[4], double re[3], double im[3]);
 void eigsort(double d[3]);
diff --git a/Parser/FunctionManager.cpp b/Parser/FunctionManager.cpp
index 7d07cfec5bae7c900d0be0e5f3f673c570497e2a..304a92b4a14d0c2b4aa3e2e9cb9573c1ea6da173 100644
--- a/Parser/FunctionManager.cpp
+++ b/Parser/FunctionManager.cpp
@@ -1,4 +1,4 @@
-// $Id: FunctionManager.cpp,v 1.22 2006-01-06 00:34:27 geuzaine Exp $
+// $Id: FunctionManager.cpp,v 1.23 2006-08-16 05:25:22 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -24,8 +24,6 @@
 #include <stack>
 #include "FunctionManager.h"
 
-using namespace std;
-
 struct ltstr
 {
   bool operator() (const char *s1, const char *s2)const
@@ -49,12 +47,13 @@ class File_Position
 class mystack
 {
 public:
-  stack < File_Position > s;
+  std::stack < File_Position > s;
 };
 
 class mymap
 {
-  public: map < char *, File_Position, ltstr > m;
+public: 
+  std::map < char *, File_Position, ltstr > m;
 };
 
 FunctionManager *FunctionManager::instance = 0;
diff --git a/Plugin/CutParametric.cpp b/Plugin/CutParametric.cpp
index 4841524801078f79c69a23454e704c1fbc1cb01b..8bf3a78efc247a257aea6f612664aba81b6a02ff 100644
--- a/Plugin/CutParametric.cpp
+++ b/Plugin/CutParametric.cpp
@@ -1,4 +1,4 @@
-// $Id: CutParametric.cpp,v 1.16 2006-01-06 00:34:32 geuzaine Exp $
+// $Id: CutParametric.cpp,v 1.17 2006-08-16 05:25:22 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -77,9 +77,9 @@ static double getU(int i)
 }
 
 int GMSH_CutParametricPlugin::recompute = 1;
-vector<double> GMSH_CutParametricPlugin::x;
-vector<double> GMSH_CutParametricPlugin::y;
-vector<double> GMSH_CutParametricPlugin::z;
+std::vector<double> GMSH_CutParametricPlugin::x;
+std::vector<double> GMSH_CutParametricPlugin::y;
+std::vector<double> GMSH_CutParametricPlugin::z;
 
 int GMSH_CutParametricPlugin::fillXYZ()
 {
diff --git a/Plugin/CutParametric.h b/Plugin/CutParametric.h
index 1ec4a1eb3645d288592654fea39ecc17750da18d..21dca61817b5c1e163c61dda0848d930bf89359a 100644
--- a/Plugin/CutParametric.h
+++ b/Plugin/CutParametric.h
@@ -37,7 +37,7 @@ private:
   static char *callbackStr(int num, int action, char *value, char **opt);
   static int fillXYZ();
   static int recompute;
-  static vector<double> x, y, z;
+  static std::vector<double> x, y, z;
 public:
   GMSH_CutParametricPlugin();
   void getName  (char *name) const;