diff --git a/Graphics/Draw.h b/Graphics/Draw.h
index 4c90ab2c76954fa363573e38a8f6bfcb00358ef7..ab050bc1632a5c0977c16edf377fdc0f64cffb69 100644
--- a/Graphics/Draw.h
+++ b/Graphics/Draw.h
@@ -43,9 +43,9 @@ void set_t(int i, double val);
 void set_s(int i, double val);
 
 void RaiseFill(int i, double Val, double ValMin, double Raise[3][8]);
-void Palette(Post_View * View, double min, double max, double val);
-void Palette1(Post_View * View, int nbi, int i);
-void Palette2(Post_View * v, double min, double max, double val);
+void PaletteContinuous(Post_View * View, double min, double max, double val);
+void PaletteContinuousLinear(Post_View * v, double min, double max, double val);
+void PaletteDiscrete(Post_View * View, int nbi, int i);
 void ColorSwitch(int i);
 
 int  SelectEntity(int type, Vertex **v, Curve **c, Surface **s);
diff --git a/Graphics/Graph2D.cpp b/Graphics/Graph2D.cpp
index daf036b0e40780c21498dc206bc9fd7cd33d8ab0..1b40a3515cd58a5727071bbfb2f77d4d6ebf13b8 100644
--- a/Graphics/Graph2D.cpp
+++ b/Graphics/Graph2D.cpp
@@ -1,4 +1,4 @@
-// $Id: Graph2D.cpp,v 1.31 2004-02-07 01:40:19 geuzaine Exp $
+// $Id: Graph2D.cpp,v 1.32 2004-04-20 19:15:14 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -80,7 +80,7 @@ static void addval(Post_View * v, double Abs, double Val,
     y = ybot + (Val - ValMin) / (ValMax - ValMin) * height;
 
   if(Val >= ValMin && Val <= ValMax) {
-    Palette2(v, ValMin, ValMax, Val);
+    PaletteContinuousLinear(v, ValMin, ValMax, Val);
     if(numeric) {
       glRasterPos2d(x + 3, y + 3);
       sprintf(label, v->Format, Val);
diff --git a/Graphics/Post.cpp b/Graphics/Post.cpp
index d1c13a9fe47d91b1438c1c677194444f46e27546..afb732443d42d254ae2a97274217bd44ca39d71e 100644
--- a/Graphics/Post.cpp
+++ b/Graphics/Post.cpp
@@ -1,4 +1,4 @@
-// $Id: Post.cpp,v 1.54 2004-04-20 18:14:31 geuzaine Exp $
+// $Id: Post.cpp,v 1.55 2004-04-20 19:15:14 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -85,8 +85,8 @@ int GiveIndexFromValue_Log(double ValMin, double ValMax, int NbIso,
     return NbIso / 2;
   if(ValMin <= 0.)
     return 0;
-  return (int)((log10(Val) - log10(ValMin)) * (NbIso - 1) / (log10(ValMax) -
-                                                             log10(ValMin)));
+  return (int)((log10(Val) - log10(ValMin)) * (NbIso - 1) / 
+	       (log10(ValMax) - log10(ValMin)));
 }
 
 int GiveIndexFromValue_DoubleLog(double ValMin, double ValMax, int NbIso,
@@ -97,36 +97,31 @@ int GiveIndexFromValue_DoubleLog(double ValMin, double ValMax, int NbIso,
     return NbIso / 2;
   if(ValMin <= 0.)
     return 0;
-  return (int)((log10(Val) - log10(ValMin)) * (NbIso - 1) / (log10(ValMax) -
-                                                             log10(ValMin)));
+  return (int)((log10(Val) - log10(ValMin)) * (NbIso - 1) / 
+	       (log10(ValMax) - log10(ValMin)));
 }
 
 
 // Color Palette
 
-void Palette(Post_View * v, double min, double max, double val)
+void PaletteContinuous(Post_View * v, double min, double max, double val)
 {       /* val in [min,max] */
   int index = v->GIFV(min, max, v->CT.size, val);
   glColor4ubv((GLubyte *) & v->CT.table[index]);
 }
 
-void Palette1(Post_View * v, int nbi, int i)
-{       /* i in [0,nbi-1] */
-  int index;
-
-  index = (nbi == 1) ?
-    v->CT.size / 2 : (int)(i / (double)(nbi - 1) * (v->CT.size - 1) + 0.5);
-
+void PaletteContinuousLinear(Post_View * v, double min, double max, double val)
+{       /* val in [min,max] */
+  int index = GiveIndexFromValue_Lin(min, max, v->CT.size, val);
   glColor4ubv((GLubyte *) & v->CT.table[index]);
 }
 
-void Palette2(Post_View * v, double min, double max, double val)
-{       /* val in [min,max] */
+void PaletteDiscrete(Post_View * v, int nbi, int i)
+{       /* i in [0,nbi-1] */
   int index;
 
-  index = (min == max) ?
-    v->CT.size / 2 :
-    (int)((val - min) / (max - min) * (v->CT.size - 1) + 0.5);
+  index = (nbi == 1) ?
+    v->CT.size / 2 : (int)(i / (double)(nbi - 1) * (v->CT.size - 1) + 0.5);
 
   glColor4ubv((GLubyte *) & v->CT.table[index]);
 }
diff --git a/Graphics/PostElement.cpp b/Graphics/PostElement.cpp
index f4042f924d6fad91cf86961043e22dbcc86b5443..67cb74394cf77b6a29790c2a86c2eaf7ff1daf55 100644
--- a/Graphics/PostElement.cpp
+++ b/Graphics/PostElement.cpp
@@ -1,4 +1,4 @@
-// $Id: PostElement.cpp,v 1.25 2004-04-20 18:14:31 geuzaine Exp $
+// $Id: PostElement.cpp,v 1.26 2004-04-20 19:15:14 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -255,7 +255,7 @@ void Draw_ScalarPoint(Post_View * View, int preproNormals,
     Draw_ElementBoundary(POINT, View, X, Y, Z, Raise);
 
   if(d >= ValMin && d <= ValMax) {
-    Palette(View, ValMin, ValMax, d);
+    PaletteContinuous(View, ValMin, ValMax, d);
     if(View->IntervalsType == DRAW_POST_NUMERIC) {
       glRasterPos3d(X[0] + Raise[0][0], Y[0] + Raise[1][0],
                     Z[0] + Raise[2][0]);
@@ -302,7 +302,7 @@ void Draw_ScalarLine(Post_View * View, int preproNormals,
     d = (Val[0] + Val[1]) / 2.;
 
     if(d >= ValMin && d <= ValMax) {
-      Palette(View, ValMin, ValMax, d);
+      PaletteContinuous(View, ValMin, ValMax, d);
       sprintf(Num, View->Format, d);
       glRasterPos3d((X[0] + Raise[0][0] + X[1] + Raise[0][1]) / 2.,
                     (Y[0] + Raise[1][0] + Y[1] + Raise[1][1]) / 2.,
@@ -319,15 +319,15 @@ void Draw_ScalarLine(Post_View * View, int preproNormals,
          Val[1] >= ValMin && Val[1] <= ValMax) {
         if(View->LineType) {
           // not perfect...
-          Palette(View, ValMin, ValMax, Val[0]);
+          PaletteContinuous(View, ValMin, ValMax, Val[0]);
           Draw_Line(View->LineType, View->LineWidth, X, Y, Z, Raise, View->Light);
         }
         else {
           glBegin(GL_LINES);
-          Palette(View, ValMin, ValMax, Val[0]);
+          PaletteContinuous(View, ValMin, ValMax, Val[0]);
           glVertex3d(X[0] + Raise[0][0], Y[0] + Raise[1][0],
                      Z[0] + Raise[2][0]);
-          Palette(View, ValMin, ValMax, Val[1]);
+          PaletteContinuous(View, ValMin, ValMax, Val[1]);
           glVertex3d(X[1] + Raise[0][1], Y[1] + Raise[1][1],
                      Z[1] + Raise[2][1]);
           glEnd();
@@ -340,7 +340,7 @@ void Draw_ScalarLine(Post_View * View, int preproNormals,
     }
     else {
       for(k = 0; k < View->NbIso; k++) {
-        Palette1(View, View->NbIso, k);
+        PaletteDiscrete(View, View->NbIso, k);
         if(View->IntervalsType == DRAW_POST_DISCRETE) {
           CutLine1D(X, Y, Z, &Val[0],
                     View->GVFI(ValMin, ValMax, View->NbIso + 1, k),
@@ -454,7 +454,7 @@ void Draw_ScalarTriangle(Post_View * View, int preproNormals,
 
     d = (Val[0] + Val[1] + Val[2]) / 3.;
     if(d >= ValMin && d <= ValMax) {
-      Palette(View, ValMin, ValMax, d);
+      PaletteContinuous(View, ValMin, ValMax, d);
       sprintf(Num, View->Format, d);
       glRasterPos3d((X[0] + Raise[0][0] + X[1] + Raise[0][1] + X[2] +
                      Raise[0][2]) / 3.,
@@ -476,15 +476,15 @@ void Draw_ScalarTriangle(Post_View * View, int preproNormals,
          Val[1] >= ValMin && Val[1] <= ValMax &&
          Val[2] >= ValMin && Val[2] <= ValMax) {
         glBegin(GL_TRIANGLES);
-        Palette(View, ValMin, ValMax, Val[0]);
+        PaletteContinuous(View, ValMin, ValMax, Val[0]);
         glNormal3dv(&norms[0]);
         glVertex3d(X[0] + Raise[0][0], Y[0] + Raise[1][0],
                    Z[0] + Raise[2][0]);
-        Palette(View, ValMin, ValMax, Val[1]);
+        PaletteContinuous(View, ValMin, ValMax, Val[1]);
         glNormal3dv(&norms[3]);
         glVertex3d(X[1] + Raise[0][1], Y[1] + Raise[1][1],
                    Z[1] + Raise[2][1]);
-        Palette(View, ValMin, ValMax, Val[2]);
+        PaletteContinuous(View, ValMin, ValMax, Val[2]);
         glNormal3dv(&norms[6]);
         glVertex3d(X[2] + Raise[0][2], Y[2] + Raise[1][2],
                    Z[2] + Raise[2][2]);
@@ -495,7 +495,7 @@ void Draw_ScalarTriangle(Post_View * View, int preproNormals,
         if(nb >= 3) {
           glBegin(GL_POLYGON);
           for(i = 0; i < nb; i++) {
-            Palette(View, ValMin, ValMax, value[i]);
+            PaletteContinuous(View, ValMin, ValMax, value[i]);
 	    RaiseFill(i, value[i], ValMin, Raise);
             glVertex3d(Xp[i] + Raise[0][i], Yp[i] + Raise[1][i],
                        Zp[i] + Raise[2][i]);
@@ -506,7 +506,7 @@ void Draw_ScalarTriangle(Post_View * View, int preproNormals,
     }
     else {
       for(k = 0; k < View->NbIso; k++) {
-	Palette1(View, View->NbIso, k);
+	PaletteDiscrete(View, View->NbIso, k);
         if(View->IntervalsType == DRAW_POST_DISCRETE) {
           CutTriangle2D(X, Y, Z, Val,
                         View->GVFI(ValMin, ValMax, View->NbIso + 1, k),
@@ -580,7 +580,7 @@ void Draw_ScalarTetrahedron(Post_View * View, int preproNormals,
 
     d = 0.25 * (Val[0] + Val[1] + Val[2] + Val[3]);
     if(d >= ValMin && d <= ValMax) {
-      Palette(View, ValMin, ValMax, d);
+      PaletteContinuous(View, ValMin, ValMax, d);
       sprintf(Num, View->Format, d);
       glRasterPos3d(0.25 * (X[0] + Raise[0][0] + X[1] + Raise[0][1] +
                             X[2] + Raise[0][2] + X[3] + Raise[0][3]),
@@ -595,7 +595,7 @@ void Draw_ScalarTetrahedron(Post_View * View, int preproNormals,
   else {
     for(k = 0; k < View->NbIso; k++) {
       if(!preproNormals)
-        Palette1(View, View->NbIso, k);
+        PaletteDiscrete(View, View->NbIso, k);
       IsoSimplex(View, preproNormals, X, Y, Z, Val,
                  View->GVFI(ValMin, ValMax, View->NbIso, k), Raise);
     }
@@ -832,7 +832,7 @@ void Draw_VectorElement(int type, Post_View * View,
             dz2 = V[3 * (ts - j - 1) + 2];
             dd = sqrt(dx * dx + dy * dy + dz * dz);
             // not perfect...
-            Palette(View, ValMin, ValMax, dd);
+            PaletteContinuous(View, ValMin, ValMax, dd);
             XX[0] = X[0] + fact * dx;
             XX[1] = X[0] + fact * dx2;
             YY[0] = Y[0] + fact * dy;
@@ -849,7 +849,7 @@ void Draw_VectorElement(int type, Post_View * View,
             dy = V[3 * (ts - j) + 1];
             dz = V[3 * (ts - j) + 2];
             dd = sqrt(dx * dx + dy * dy + dz * dz);
-            Palette(View, ValMin, ValMax, dd);
+            PaletteContinuous(View, ValMin, ValMax, dd);
             glVertex3d(X[0] + fact * dx + Raise[0][0],
                        Y[0] + fact * dy + Raise[1][0],
                        Z[0] + fact * dz + Raise[2][0]);
@@ -908,10 +908,10 @@ void Draw_VectorElement(int type, Post_View * View,
     // allow for some roundoff error due to the computation at the barycenter
     if(dd != 0.0 && dd >= ValMin * (1. - 1.e-15) && dd <= ValMax * (1. + 1.e-15)) {
       if(View->IntervalsType == DRAW_POST_CONTINUOUS)
-	Palette(View, ValMin, ValMax, dd);
+	PaletteContinuous(View, ValMin, ValMax, dd);
       else
-	Palette1(View, View->NbIso,
-		 View->GIFV(ValMin, ValMax, View->NbIso, dd));
+	PaletteDiscrete(View, View->NbIso,
+			View->GIFV(ValMin, ValMax, View->NbIso, dd));
       if(View->IntervalsType == DRAW_POST_NUMERIC) {
         glRasterPos3d(xc, yc, zc);
         sprintf(Num, View->Format, dd);
@@ -940,10 +940,10 @@ void Draw_VectorElement(int type, Post_View * View,
     for(k = 0; k < nbnod; k++) {
       if(d[k] != 0.0 && d[k] >= ValMin && d[k] <= ValMax) {
 	if(View->IntervalsType == DRAW_POST_CONTINUOUS)
-	  Palette(View, ValMin, ValMax, d[k]);
+	  PaletteContinuous(View, ValMin, ValMax, d[k]);
 	else
-	  Palette1(View, View->NbIso,
-		   View->GIFV(ValMin, ValMax, View->NbIso, d[k]));
+	  PaletteDiscrete(View, View->NbIso,
+			  View->GIFV(ValMin, ValMax, View->NbIso, d[k]));
         fact = CTX.pixel_equiv_x / CTX.s[0] * View->ArrowSize / ValMax;
         if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin > 0) {
           Val[k][0] /= d[k];
diff --git a/Graphics/Scale.cpp b/Graphics/Scale.cpp
index a5fb3fc109347d1599f1e060c1352cd1351293e5..b3e35a96724f33063d444aee298d590d43eaaf0e 100644
--- a/Graphics/Scale.cpp
+++ b/Graphics/Scale.cpp
@@ -1,4 +1,4 @@
-// $Id: Scale.cpp,v 1.40 2004-04-20 18:14:31 geuzaine Exp $
+// $Id: Scale.cpp,v 1.41 2004-04-20 19:15:14 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -108,7 +108,7 @@ void draw_scale(Post_View * v,
 
   for(i = 0; i < v->NbIso; i++) {
     if(v->IntervalsType == DRAW_POST_DISCRETE) {
-      Palette1(v, v->NbIso, i);
+      PaletteDiscrete(v, v->NbIso, i);
       glBegin(GL_QUADS);
       glVertex2d(xmin, ymin + i * cs_bh);
       glVertex2d(xmin + width, ymin + i * cs_bh);
@@ -118,19 +118,20 @@ void draw_scale(Post_View * v,
     }
     else if(v->IntervalsType == DRAW_POST_CONTINUOUS) {
       glBegin(GL_QUADS);
-      Palette2(v, ValMin, ValMax,
-               ValMin + i * (ValMax - ValMin) / (v->NbIso ? v->NbIso : 1));
+      PaletteContinuousLinear(v, ValMin, ValMax,
+			      ValMin + i * (ValMax - ValMin) / 
+			      (v->NbIso ? v->NbIso : 1));
       glVertex2d(xmin, ymin + i * cs_bh);
       glVertex2d(xmin + width, ymin + i * cs_bh);
-      Palette2(v, ValMin, ValMax,
-               ValMin + (i + 1) * (ValMax -
-                                   ValMin) / (v->NbIso ? v->NbIso : 1));
+      PaletteContinuousLinear(v, ValMin, ValMax,
+			      ValMin + (i + 1) * (ValMax - ValMin) / 
+			      (v->NbIso ? v->NbIso : 1));
       glVertex2d(xmin + width, ymin + (i + 1) * cs_bh);
       glVertex2d(xmin, ymin + (i + 1) * cs_bh);
       glEnd();
     }
     else {
-      Palette1(v, v->NbIso, i);
+      PaletteDiscrete(v, v->NbIso, i);
       glBegin(GL_LINES);
       glVertex2d(xmin, ymin + i * cs_bh + 0.5 * cs_bh);
       glVertex2d(xmin + width, ymin + i * cs_bh + 0.5 * cs_bh);