diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index e80ee15a0250df717b240f405ba9be144b09fa82..35af79ed25f09113e6754dae09771a4e6339af71 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -449,6 +449,8 @@ StringXNumber ViewOptions_Number[] = {
     "Type of interval display (1=iso, 2=discrete, 3=continuous, 4=numeric)" },
   { F|O, "NbIso" , opt_view_nb_iso , 15. ,
     "Number of intervals" },
+  { F|O, "Boundary" , opt_view_boundary , 0 ,
+    "Draw the N-b dimensional boundary of the simplex (N=dimension, b=option value" },
   { F|O, "Light" , opt_view_light , 0. ,
     "Enable light sources?" },
   { F|O, "ShowElement" , opt_view_show_element , 0. ,
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 15608fa177a9a27b1553ac0c0fd8b34f1cb33d44..4cb161929281bb6e6c7686e594dcb648605023d3 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.28 2001-06-25 13:05:16 geuzaine Exp $
+// $Id: Options.cpp,v 1.29 2001-06-26 16:47:23 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -1735,6 +1735,19 @@ double opt_view_nb_iso(OPT_ARGS_NUM){
 #endif
   return v->NbIso;
 }
+double opt_view_boundary(OPT_ARGS_NUM){
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
+    v->Boundary = (int)val;
+    v->Changed = 1;
+  }
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
+    WID->view_value[11]->value(v->Boundary);
+  }
+#endif
+  return v->Boundary;
+}
 double opt_view_light(OPT_ARGS_NUM){
   GET_VIEW(0.) ;
   if(action & GMSH_SET){
diff --git a/Common/Options.h b/Common/Options.h
index d9da66cfea8f4d9453f5f812153bf936ccfae6b2..28bdb1a9e1774cb9419f8beff7351d0ded8104f6 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -187,9 +187,6 @@ double opt_solver_getdp_mergeviews(OPT_ARGS_NUM);
 double opt_post_scales(OPT_ARGS_NUM);
 double opt_post_link(OPT_ARGS_NUM);
 double opt_post_smooth(OPT_ARGS_NUM);
-double opt_post_initial_visibility(OPT_ARGS_NUM);
-double opt_post_initial_intervals(OPT_ARGS_NUM);
-double opt_post_initial_nbiso(OPT_ARGS_NUM);
 double opt_post_anim_delay(OPT_ARGS_NUM);
 double opt_post_nb_views(OPT_ARGS_NUM);
 double opt_post_color_scheme(OPT_ARGS_NUM);
@@ -209,6 +206,7 @@ double opt_view_arrow_scale(OPT_ARGS_NUM);
 double opt_view_visible(OPT_ARGS_NUM);
 double opt_view_intervals_type(OPT_ARGS_NUM);
 double opt_view_nb_iso(OPT_ARGS_NUM);
+double opt_view_boundary(OPT_ARGS_NUM);
 double opt_view_light(OPT_ARGS_NUM);
 double opt_view_show_element(OPT_ARGS_NUM);
 double opt_view_show_time(OPT_ARGS_NUM);
diff --git a/Common/Views.cpp b/Common/Views.cpp
index d18989e8e9b2fd9bb2ffadbe5427265adf4aad16..efcfebc20219b718684cdfac2e094716f22750be 100644
--- a/Common/Views.cpp
+++ b/Common/Views.cpp
@@ -1,4 +1,4 @@
-// $Id: Views.cpp,v 1.38 2001-05-24 10:11:28 geuzaine Exp $
+// $Id: Views.cpp,v 1.39 2001-06-26 16:47:23 geuzaine Exp $
 
 #include <set>
 #include "Gmsh.h"
@@ -402,6 +402,7 @@ void CopyViewOptions(Post_View *src, Post_View *dest){
   dest->ArrowScale = src->ArrowScale;
   dest->Visible = src->Visible;
   dest->IntervalsType = src->IntervalsType;
+  dest->Boundary = src->Boundary ;
   dest->NbIso = src->NbIso;
   dest->Light = src->Light ;
   dest->ShowElement = src->ShowElement;
diff --git a/Common/Views.h b/Common/Views.h
index 00c1433e7f1a8f0d47c0ed2c9e8f649f015d8cac..290b4133febced840aa625d4e74ba67cf64f7487 100644
--- a/Common/Views.h
+++ b/Common/Views.h
@@ -37,6 +37,7 @@ class Post_View{
   int TimeStep;
   int DrawPoints, DrawLines, DrawTriangles, DrawTetrahedra;
   int DrawScalars, DrawVectors, DrawTensors;
+  int Boundary;
   ColorTable CT;
 
   // dynamic
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index ddf2b119d67e7278acf5379b629277caaa9af104..bc006e3b1872ead99c1a468ed8408c1ba95a198b 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.62 2001-06-06 09:39:49 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.63 2001-06-26 16:47:23 geuzaine Exp $
 
 #include <sys/types.h>
 #include <signal.h>
@@ -1691,6 +1691,7 @@ void view_options_ok_cb(CALLBACK_ARGS){
       opt_view_raise2(i, GMSH_SET, WID->view_value[8]->value());
       opt_view_timestep(i, GMSH_SET, WID->view_value[9]->value());
       opt_view_arrow_scale(i, GMSH_SET, WID->view_value[10]->value());
+      opt_view_boundary(i, GMSH_SET, WID->view_value[11]->value());
       
       opt_view_name(i, GMSH_SET, (char*)WID->view_input[0]->value());
       opt_view_format(i, GMSH_SET, (char*)WID->view_input[1]->value());
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 2ff5539566a3efd49c01e6246570849693d14f33..3464dabf8e015b4218d15938b227e38324e70683 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.84 2001-06-13 11:04:23 geuzaine Exp $
+// $Id: GUI.cpp,v 1.85 2001-06-26 16:47:23 geuzaine Exp $
 
 // To make the interface as visually consistent as possible, please:
 // - use the BH, BW, WB, IW values for button heights/widths, window borders, etc.
@@ -1969,6 +1969,13 @@ void GUI::create_view_options_window(int num){
 	  view_butt[i]->labelsize(CTX.fontsize);
 	  view_butt[i]->selection_color(FL_YELLOW);
 	}
+	view_value[11] = new Fl_Value_Input(2*WB, 2*WB+ 6*BH, IW, BH, "Boundary operator");
+	view_value[11]->labelsize(CTX.fontsize);
+	view_value[11]->textsize(CTX.fontsize);
+	view_value[11]->type(FL_HORIZONTAL);
+	view_value[11]->align(FL_ALIGN_RIGHT);
+	view_value[11]->minimum(0); 
+	view_value[11]->maximum(3); 
         o->end();
       }
       // Offset and Raise
@@ -2123,6 +2130,7 @@ void GUI::update_view_window(int num){
   // intervals
   opt_view_nb_iso(num, GMSH_GUI, 0);
   opt_view_intervals_type(num, GMSH_GUI, 0);
+  opt_view_boundary(num, GMSH_GUI, 0);
 
   // offset/raise
   opt_view_offset0(num, GMSH_GUI, 0);
diff --git a/Graphics/PostSimplex.cpp b/Graphics/PostSimplex.cpp
index fdb1c10947431ed8c24cae09bc670d9ad9685bd4..7f4d514af57a5516eb9417ec7bb05d7ea9811e06 100644
--- a/Graphics/PostSimplex.cpp
+++ b/Graphics/PostSimplex.cpp
@@ -1,4 +1,4 @@
-// $Id: PostSimplex.cpp,v 1.16 2001-04-22 18:13:02 geuzaine Exp $
+// $Id: PostSimplex.cpp,v 1.17 2001-06-26 16:47:23 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -257,9 +257,28 @@ void Draw_ScalarTetrahedron(Post_View *View,
 			    double *V){
 
   int     k;
-  double  d, xx[4], yy[4], zz[4];
+  double  d, xx[4], yy[4], zz[4], vv[4];
   char Num[100];
 
+  if(View->Boundary == 2){
+    // boundary == 0 should draw the tet
+    // boundary == 1 should draw the faces
+    // boundary == 2 should draw the edges
+    // boundary == 3 should draw the vertices
+    Draw_ScalarLine(View, ValMin, ValMax, Raise, &X[0], &Y[0], &Z[0], &V[0]);//01
+    Draw_ScalarLine(View, ValMin, ValMax, Raise, &X[1], &Y[1], &Z[1], &V[1]);//12
+    Draw_ScalarLine(View, ValMin, ValMax, Raise, &X[2], &Y[2], &Z[2], &V[2]);//23
+    // beeek...
+    xx[0] = X[0]; yy[0] = Y[0]; zz[0] = Z[0]; vv[0] = V[0];
+    xx[1] = X[2]; yy[1] = Y[2]; zz[1] = Z[2]; vv[1] = V[2];
+    Draw_ScalarLine(View, ValMin, ValMax, Raise, xx, yy, zz, vv);//02
+    xx[1] = X[3]; yy[1] = Y[3]; zz[1] = Z[3]; vv[1] = V[3];
+    Draw_ScalarLine(View, ValMin, ValMax, Raise, xx, yy, zz, vv);//03
+    xx[0] = X[1]; yy[0] = Y[1]; zz[0] = Z[1]; vv[0] = V[1];
+    Draw_ScalarLine(View, ValMin, ValMax, Raise, xx, yy, zz, vv);//13
+    return;
+  }
+
   for(k=0 ; k<4 ; k++)
     RaiseFill(k, V[4*View->TimeStep+k], ValMin, Raise);
 
@@ -298,7 +317,6 @@ void Draw_ScalarTetrahedron(Post_View *View,
 
   }
   else{
-
     for(k=0 ; k<View->NbIso ; k++){
       if(!preproNormals)Palette(View,View->NbIso,k);
       IsoSimplex(View,preproNormals,