diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index 5b7716066cbb38d90db66f54458d22ed19a31e01..3f873d58ae10205cfb79c6122dda70ca15dc707b 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -879,7 +879,7 @@ StringXNumber ViewOptions_Number[] = {
   { F|O, "PointSize" , opt_view_point_size , 2. , 
     "Display size of points (in pixels)" },
   { F|O, "PointType" , opt_view_point_type , 0. , 
-    "Display points as solid colors or 3D spheres" },
+    "Display points as solid color dots or 3D spheres" },
   { F|O, "PositionX" , opt_view_position0 , 80. , 
     "Horizontal position (in pixels) of the upper left corner of the scale or 2D graph" }, 
   { F|O, "PositionY" , opt_view_position1 , 50. , 
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 531ed7ca7293c5a05ed5a8536725866f48286c65..b91aec231f7e69fadbf376e14f572284f2ae7e45 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.81 2002-06-15 17:41:35 geuzaine Exp $
+// $Id: Options.cpp,v 1.82 2002-06-15 21:25:27 geuzaine Exp $
 //
 // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle
 //
@@ -2315,10 +2315,12 @@ double opt_view_intervals_type(OPT_ARGS_NUM){
   }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
-    WID->view_butt[30]->value(v->IntervalsType==DRAW_POST_ISO);
-    WID->view_butt[31]->value(v->IntervalsType==DRAW_POST_DISCRETE);
-    WID->view_butt[32]->value(v->IntervalsType==DRAW_POST_CONTINUOUS);
-    WID->view_butt[33]->value(v->IntervalsType==DRAW_POST_NUMERIC);
+    switch(v->IntervalsType){
+    case DRAW_POST_ISO: WID->view_choice[0]->value(0); break;
+    case DRAW_POST_DISCRETE: WID->view_choice[0]->value(1); break;
+    case DRAW_POST_CONTINUOUS: WID->view_choice[0]->value(2); break;
+    case DRAW_POST_NUMERIC: WID->view_choice[0]->value(3); break;
+    }
   }
 #endif
   return v->IntervalsType;
@@ -2659,9 +2661,11 @@ double opt_view_scale_type(OPT_ARGS_NUM){
   }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
-    WID->view_butt[35]->value(v->ScaleType==DRAW_POST_LINEAR);
-    WID->view_butt[36]->value(v->ScaleType==DRAW_POST_LOGARITHMIC);
-    WID->view_butt[37]->value(v->ScaleType==DRAW_POST_DOUBLELOGARITHMIC);
+    switch(v->ScaleType){
+    case DRAW_POST_LINEAR: WID->view_choice[0]->value(0); break;
+    case DRAW_POST_LOGARITHMIC: WID->view_choice[0]->value(1); break;
+    case DRAW_POST_DOUBLELOGARITHMIC: WID->view_choice[0]->value(2); break;
+    }
   }
 #endif
   return v->ScaleType;
@@ -2686,8 +2690,10 @@ double opt_view_tensor_type(OPT_ARGS_NUM){
   }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
-    WID->view_butt[66]->value(v->TensorType==DRAW_POST_VONMISES);
-    WID->view_butt[67]->value(v->TensorType==DRAW_POST_EIGENVECTORS);
+    switch(v->ScaleType){
+    case DRAW_POST_VONMISES: WID->view_choice[4]->value(0); break;
+    case DRAW_POST_EIGENVECTORS: WID->view_choice[4]->value(1); break;
+    }
   }
 #endif
   return v->TensorType;
@@ -2700,10 +2706,14 @@ double opt_view_arrow_type(OPT_ARGS_NUM){
   }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
-    WID->view_butt[60]->value(v->ArrowType==DRAW_POST_SEGMENT);
-    WID->view_butt[61]->value(v->ArrowType==DRAW_POST_ARROW);
-    WID->view_butt[62]->value(v->ArrowType==DRAW_POST_CONE);
-    WID->view_butt[63]->value(v->ArrowType==DRAW_POST_DISPLACEMENT);
+    switch(v->ScaleType){
+    case DRAW_POST_SEGMENT: WID->view_choice[2]->value(0); break;
+    case DRAW_POST_ARROW: WID->view_choice[2]->value(1); break;
+    case DRAW_POST_ARROW3D: WID->view_choice[2]->value(2); break;
+    case DRAW_POST_CONE: WID->view_choice[2]->value(3); break;
+    case DRAW_POST_CONE3D: WID->view_choice[2]->value(4); break;
+    case DRAW_POST_DISPLACEMENT: WID->view_choice[2]->value(5); break;
+    }
   }
 #endif
   return v->ArrowType;
@@ -2716,8 +2726,10 @@ double opt_view_arrow_location(OPT_ARGS_NUM){
   }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
-    WID->view_butt[64]->value(v->ArrowLocation==DRAW_POST_LOCATE_COG);
-    WID->view_butt[65]->value(v->ArrowLocation==DRAW_POST_LOCATE_VERTEX);
+    switch(v->ScaleType){
+    case DRAW_POST_LOCATE_COG: WID->view_choice[3]->value(0); break;
+    case DRAW_POST_LOCATE_VERTEX: WID->view_choice[3]->value(1); break;
+    }
   }
 #endif
   return v->ArrowLocation;
@@ -2752,6 +2764,11 @@ double opt_view_point_type(OPT_ARGS_NUM){
     v->PointType = (int)val;
     v->Changed = 1;
   }
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
+    WID->view_choice[5]->value(v->PointType?1:0);
+  }
+#endif
   return v->PointType;
 }
 
diff --git a/Common/Views.cpp b/Common/Views.cpp
index b46dde6b177f7b698917cd1c05d8340b605125eb..1dc6d871ab851eb3bb05ec4551463a4d8e30b76d 100644
--- a/Common/Views.cpp
+++ b/Common/Views.cpp
@@ -1,4 +1,4 @@
-// $Id: Views.cpp,v 1.71 2002-06-15 17:41:35 geuzaine Exp $
+// $Id: Views.cpp,v 1.72 2002-06-15 21:25:27 geuzaine Exp $
 //
 // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle
 //
@@ -66,6 +66,7 @@ Post_View * BeginView(int allocate){
 
   v->Index = i;
   v->Dirty = 1;
+  v->DisplayListNum = -1;
   v->NbTimeStep = 0;
   v->NbSP = v->NbVP = v->NbTP = 0;
   v->NbSL = v->NbVL = v->NbTL = 0;
diff --git a/Common/Views.h b/Common/Views.h
index 6f5c7c10614bf34804a86efb723b05876f60b2e3..c1aa2b744add084d7cc894f85eaa382a6645ef7d 100644
--- a/Common/Views.h
+++ b/Common/Views.h
@@ -27,7 +27,7 @@ class smooth_container;
 class Post_View{
   public :
   // intrinsic to a view
-  int Num, Index, Changed, DuplicateOf, Links, Dirty;
+  int Num, Index, Changed, DuplicateOf, Links, Dirty, DisplayListNum;
   char FileName[256], Name[256], AbscissaName[256];
 
   // the data
@@ -98,7 +98,8 @@ class Post_View{
 #define DRAW_POST_PYRAMID      3
 #define DRAW_POST_CONE         4
 #define DRAW_POST_DISPLACEMENT 5
-#define DRAW_POST_ARROW_HEAD   6
+#define DRAW_POST_ARROW3D      6
+#define DRAW_POST_CONE3D       7
 
 // ArrowLocation
 #define DRAW_POST_LOCATE_COG     1
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 2e095f31d5a5db3d3ae2fb51d69409330e79db34..e4eb9669c570baf12b9c94f0a32538ceeabbabb6 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.128 2002-05-28 21:00:56 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.129 2002-06-15 21:25:27 geuzaine Exp $
 //
 // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle
 //
@@ -2130,50 +2130,70 @@ void view_options_ok_cb(CALLBACK_ARGS){
 		      WID->view_butt[2]->value()?DRAW_POST_2D_SPACE:
 		      DRAW_POST_2D_TIME);
 
-      if(force || WID->view_butt[35]->changed() ||
-	 WID->view_butt[36]->changed() ||
-	 WID->view_butt[37]->changed())
-	opt_view_scale_type(i, GMSH_SET, 
-			    WID->view_butt[35]->value()?DRAW_POST_LINEAR:
-			    WID->view_butt[36]->value()?DRAW_POST_LOGARITHMIC:
-			    DRAW_POST_DOUBLELOGARITHMIC);
+      if(force || WID->view_choice[1]->changed()){
+	int val;
+	switch(WID->view_choice[1]->value()){
+	case 0 : val = DRAW_POST_LINEAR; break;
+	case 1 : val = DRAW_POST_LOGARITHMIC; break;
+	default : val = DRAW_POST_DOUBLELOGARITHMIC; break;
+	}
+	opt_view_scale_type(i, GMSH_SET, val);
+      }
 
       if(force || WID->view_butt[38]->changed())
 	opt_view_saturate_values(i, GMSH_SET, 
 				 WID->view_butt[38]->value());
-      
-      if(force || WID->view_butt[30]->changed() ||
-	 WID->view_butt[31]->changed() ||
-	 WID->view_butt[32]->changed() ||
-	 WID->view_butt[33]->changed())
-	opt_view_intervals_type(i, GMSH_SET, 
-				WID->view_butt[30]->value()?DRAW_POST_ISO:
-				WID->view_butt[31]->value()?DRAW_POST_DISCRETE:
-				WID->view_butt[32]->value()?DRAW_POST_CONTINUOUS:
-				DRAW_POST_NUMERIC);
-
-      if(force || WID->view_butt[60]->changed() ||
-	 WID->view_butt[61]->changed() ||
-	 WID->view_butt[62]->changed() ||
-	 WID->view_butt[63]->changed())
-	opt_view_arrow_type(i, GMSH_SET, 
-			    WID->view_butt[60]->value()?DRAW_POST_SEGMENT:
-			    WID->view_butt[61]->value()?DRAW_POST_ARROW:
-			    WID->view_butt[62]->value()?DRAW_POST_CONE:
-			    DRAW_POST_DISPLACEMENT);
-
-
-      if(force || WID->view_butt[66]->changed() ||
-	 WID->view_butt[67]->changed())
-	opt_view_tensor_type(i, GMSH_SET, 
-			    WID->view_butt[66]->value()?DRAW_POST_VONMISES:
-			    DRAW_POST_EIGENVECTORS);      
-
-      if(force || WID->view_butt[64]->changed() ||
-	 WID->view_butt[65]->changed())
-	opt_view_arrow_location(i, GMSH_SET, 
-				WID->view_butt[64]->value()?DRAW_POST_LOCATE_COG:
-				DRAW_POST_LOCATE_VERTEX);
+
+      if(force || WID->view_choice[0]->changed()){
+	int val;
+	switch(WID->view_choice[0]->value()){
+	case 0 : val = DRAW_POST_ISO; break;
+	case 1 : val = DRAW_POST_DISCRETE; break;
+	case 2 : val = DRAW_POST_CONTINUOUS; break;
+	default : val = DRAW_POST_NUMERIC; break;
+	}
+	opt_view_intervals_type(i, GMSH_SET, val);
+      }
+
+      if(force || WID->view_choice[5]->changed()){
+	int val;
+	switch(WID->view_choice[5]->value()){
+	case 0 : val = 0; break;
+	default : val = 1; break;
+	}
+	opt_view_point_type(i, GMSH_SET, val);
+      }
+
+      if(force || WID->view_choice[2]->changed()){
+	int val;
+	switch(WID->view_choice[2]->value()){
+	case 0 : val = DRAW_POST_SEGMENT; break;
+	case 1 : val = DRAW_POST_ARROW; break;
+	case 2 : val = DRAW_POST_ARROW3D; break;
+	case 3 : val = DRAW_POST_CONE; break;
+	case 4 : val = DRAW_POST_CONE3D; break;
+	default : val = DRAW_POST_DISPLACEMENT; break;
+	}
+	opt_view_arrow_type(i, GMSH_SET, val);
+      }
+
+      if(force || WID->view_choice[3]->changed()){
+	int val;
+	switch(WID->view_choice[3]->value()){
+	case 0 : val = DRAW_POST_LOCATE_COG; break;
+	default : val = DRAW_POST_LOCATE_VERTEX; break;
+	}
+	opt_view_arrow_location(i, GMSH_SET, val);
+      }
+
+      if(force || WID->view_choice[4]->changed()){
+	int val;
+	switch(WID->view_choice[4]->value()){
+	case 0 : val = DRAW_POST_VONMISES; break;
+	default : val = DRAW_POST_EIGENVECTORS; break;
+	}
+	opt_view_tensor_type(i, GMSH_SET, val);
+      }
 
       if(force || WID->view_butt[10]->changed())
 	opt_view_show_element(i, GMSH_SET, WID->view_butt[10]->value());
@@ -2314,6 +2334,7 @@ void view_options_ok_cb(CALLBACK_ARGS){
     if(WID->view_butt[i]) WID->view_butt[i]->clear_changed();
     if(WID->view_value[i]) WID->view_value[i]->clear_changed();
     if(WID->view_input[i]) WID->view_input[i]->clear_changed();
+    if(WID->view_choice[i]) WID->view_choice[i]->clear_changed();
     WID->view_colorbar_window->clear_changed();
   }
 
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 85f9b87cd27e04dc64abf229e55a0207cae873a7..39b9554bf52f453ac0905f93d733858e0c12fb18 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.179 2002-05-23 17:25:09 geuzaine Exp $
+// $Id: GUI.cpp,v 1.180 2002-06-15 21:25:27 geuzaine Exp $
 //
 // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle
 //
@@ -2208,6 +2208,7 @@ void GUI::create_view_options_window(int num){
     view_butt[i] = NULL;
     view_value[i] = NULL;
     view_input[i] = NULL;
+    view_choice[i] = NULL;
   }
   
   view_window = new Fl_Window(width,height);
@@ -2359,50 +2360,44 @@ void GUI::create_view_options_window(int num){
       view_value[30]->maximum(256); 
       view_value[30]->step(1);
       view_value[30]->callback(set_changed_cb, 0);
-      
-      {
-	Fl_Group *o2 = new Fl_Group(2*WB, 2*WB+2*BH, width/2, 4*BH, 0);
-	view_butt[30] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW/2-WB, BH, "Iso-values");
-	view_butt[31] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW/2-WB, BH, "Filled iso-values");
-	view_butt[32] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW/2-WB, BH, "Continuous map");
-	view_butt[33] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW/2-WB, BH, "Numeric values");
-	for(i=30 ; i<=33 ; i++){
-	  view_butt[i]->type(FL_RADIO_BUTTON);
-	  view_butt[i]->down_box(RADIO_BOX);
-	  view_butt[i]->selection_color(RADIO_COLOR);
-	  view_butt[i]->callback(set_changed_cb, 0);
-	}
-	o2->end();
-      }
-      
-      view_butt[34] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW/2-WB, BH, "Custom range");
+
+      static Fl_Menu_Item menu_iso[] = {
+	{"Iso-values",        0, 0, 0},
+	{"Filled iso-values", 0, 0, 0},
+	{"Continuous map",    0, 0, 0},
+	{"Numeric values",    0, 0, 0},
+	{0}
+      };
+      view_choice[0] = new Fl_Choice(2*WB, 2*WB+2*BH, IW, BH, "Intervals type");
+      view_choice[0]->menu(menu_iso);
+      view_choice[0]->align(FL_ALIGN_RIGHT);
+      view_choice[0]->callback(set_changed_cb, 0);
+
+      view_butt[34] = new Fl_Check_Button(2*WB, 2*WB+3*BH, IW, BH, "Custom range");
       view_butt[34]->type(FL_TOGGLE_BUTTON);
       view_butt[34]->down_box(TOGGLE_BOX);
       view_butt[34]->selection_color(TOGGLE_COLOR);
       //no set_changed since customrange has its own callback
       
-      view_value[31] = new Fl_Value_Input(width/2, 2*WB+3*BH, IW, BH, "Minimum");
-      view_value[32] = new Fl_Value_Input(width/2, 2*WB+4*BH, IW, BH, "Maximum");
+      view_value[31] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Minimum");
+      view_value[32] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW, BH, "Maximum");
       for(i=31 ; i<=32 ; i++){
 	view_value[i]->align(FL_ALIGN_RIGHT);
 	view_value[i]->callback(set_changed_cb, 0);
       }
+
+      static Fl_Menu_Item menu_scale[] = {
+	{"Linear",             0, 0, 0},
+	{"Logarithmic",        0, 0, 0},
+	{"Double logarithmic", 0, 0, 0},
+	{0}
+      };
+      view_choice[1] = new Fl_Choice(2*WB, 2*WB+6*BH, IW, BH, "Scale");
+      view_choice[1]->menu(menu_scale);
+      view_choice[1]->align(FL_ALIGN_RIGHT);
+      view_choice[1]->callback(set_changed_cb, 0);
       
-      {
-	Fl_Group *o2 = new Fl_Group(width/2, 2*WB+5*BH, width-4*WB, 3*BH, 0);
-	view_butt[35] = new Fl_Check_Button(width/2, 2*WB+5*BH, BW/2-WB, BH, "Linear");
-	view_butt[36] = new Fl_Check_Button(width/2, 2*WB+6*BH, BW/2-WB, BH, "Logarithmic");
-	view_butt[37] = new Fl_Check_Button(width/2, 2*WB+7*BH, BW/2-WB, BH, "Double logarithmic");
-	for(i=35 ; i<=37 ; i++){
-	  view_butt[i]->type(FL_RADIO_BUTTON);
-	  view_butt[i]->down_box(RADIO_BOX);
-	  view_butt[i]->selection_color(RADIO_COLOR);
-	  view_butt[i]->callback(set_changed_cb, 0);
-	}
-	o2->end();
-      }
-      
-      view_butt[38] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW/2-WB, BH, "Saturate values");
+      view_butt[38] = new Fl_Check_Button(2*WB, 2*WB+7*BH, IW, BH, "Saturate values");
       view_butt[38]->type(FL_TOGGLE_BUTTON);
       view_butt[38]->down_box(TOGGLE_BOX);
       view_butt[38]->selection_color(TOGGLE_COLOR);
@@ -2431,53 +2426,75 @@ void GUI::create_view_options_window(int num){
       Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect");
       o->hide();
       
-      {
-	view_vector = new Fl_Group(width/2, WB+BH, width-2*WB, height-3*WB-2*BH, 0);
-	{
-	  Fl_Group *o = new Fl_Group(width/2, 2*WB+2*BH, width-4*WB, 4*BH, 0);
-	  view_butt[60] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW/2-WB, BH, "Line");
-	  view_butt[61] = new Fl_Check_Button(width/2, 2*WB+3*BH, BW/2-WB, BH, "Arrow");
-	  view_butt[62] = new Fl_Check_Button(width/2, 2*WB+4*BH, BW/2-WB, BH, "Cone");
-	  view_butt[63] = new Fl_Check_Button(width/2, 2*WB+5*BH, BW/2-WB, BH, "Displacement");
-	  o->end();
-	}
-	{
-	  Fl_Group *o = new Fl_Group(width/2, 2*WB+6*BH, width-4*WB, 2*BH, 0);
-	  view_butt[64] = new Fl_Check_Button(width/2, 2*WB+6*BH, BW/2-WB, BH, "Cell centered");
-	  view_butt[65] = new Fl_Check_Button(width/2, 2*WB+7*BH, BW/2-WB, BH, "Vertex centered");
-	  o->end();
-	}
-	{
-	  Fl_Group *o = new Fl_Group(width/2, 2*WB+8*BH, width-4*WB, 2*BH, 0);
-	  view_butt[66] = new Fl_Check_Button(width/2, 2*WB+8*BH, BW/2-WB, BH, "Von-Mises");
-	  view_butt[67] = new Fl_Check_Button(width/2, 2*WB+9*BH, BW/2-WB, BH, "Eigenvectors");
-	  o->end();
-	}
-	for(i=60 ; i<=67 ; i++){
-	  view_butt[i]->type(FL_RADIO_BUTTON);
-	  view_butt[i]->down_box(RADIO_BOX);
-	  view_butt[i]->selection_color(RADIO_COLOR);
-	  view_butt[i]->callback(set_changed_cb, 0);
-	}
-	
-	view_value[60] = new Fl_Value_Input(width/2, 2*WB+ 1*BH, IW, BH, "Vector size");
-	view_value[60]->minimum(0); 
-	view_vector->end();
-      }
-      
       view_value[61] = new Fl_Value_Input(2*WB, 2*WB+ 1*BH, IW, BH, "Point size");
       view_value[61]->minimum(0.1); 
       view_value[61]->maximum(50);
       view_value[61]->step(0.1);
-      view_value[62] = new Fl_Value_Input(2*WB, 2*WB+ 2*BH, IW, BH, "Line width");
+      view_value[61]->align(FL_ALIGN_RIGHT);
+      view_value[61]->callback(set_changed_cb, 0);
+
+      static Fl_Menu_Item menu_pointtype[] = {
+	{"Color dot",   0, 0, 0},
+	{"3D Sphere",   0, 0, 0},
+	{0}
+      };
+      view_choice[5] = new Fl_Choice(2*WB, 2*WB+ 2*BH, IW, BH, "Point type");
+      view_choice[5]->menu(menu_pointtype);
+      view_choice[5]->align(FL_ALIGN_RIGHT);
+      view_choice[5]->callback(set_changed_cb, 0);
+      
+      view_value[62] = new Fl_Value_Input(2*WB, 2*WB+ 3*BH, IW, BH, "Line width");
       view_value[62]->minimum(0.1); 
       view_value[62]->maximum(50);
       view_value[62]->step(0.1);
-      for(i=60 ; i<=62 ; i++){
-	view_value[i]->align(FL_ALIGN_RIGHT);
-	view_value[i]->callback(set_changed_cb, 0);
-      }
+      view_value[62]->align(FL_ALIGN_RIGHT);
+      view_value[62]->callback(set_changed_cb, 0);
 
+      {
+	view_vector = new Fl_Group(2*WB, 2*WB+ 4*BH, width/2, 5*BH, 0);
+
+	view_value[60] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Vector size");
+	view_value[60]->minimum(0); 
+	view_value[60]->align(FL_ALIGN_RIGHT);
+	view_value[60]->callback(set_changed_cb, 0);
+
+	static Fl_Menu_Item menu_vectype[] = {
+	  {"Line",         0, 0, 0},
+	  {"Arrow",        0, 0, 0},
+	  {"3D Arrow",     0, 0, 0},
+	  {"Cone",         0, 0, 0},
+	  {"3D cone",      0, 0, 0},
+	  {"Displacement", 0, 0, 0},
+	  {0}
+	};
+	view_choice[2] = new Fl_Choice(2*WB, 2*WB+5*BH, IW, BH, "Arrow type");
+	view_choice[2]->menu(menu_vectype);
+	view_choice[2]->align(FL_ALIGN_RIGHT);
+	view_choice[2]->callback(set_changed_cb, 0);
+
+	static Fl_Menu_Item menu_vecloc[] = {
+	  {"Cell centered",   0, 0, 0},
+	  {"Vertex centered", 0, 0, 0},
+	  {0}
+	};
+	view_choice[3] = new Fl_Choice(2*WB, 2*WB+6*BH, IW, BH, "Arrow location");
+	view_choice[3]->menu(menu_vecloc);
+	view_choice[3]->align(FL_ALIGN_RIGHT);
+	view_choice[3]->callback(set_changed_cb, 0);
+
+	static Fl_Menu_Item menu_tensor[] = {
+	  {"Von-Mises",    0, 0, 0},
+	  {"Eigenvectors", 0, 0, 0},
+	  {0}
+	};
+	view_choice[4] = new Fl_Choice(2*WB, 2*WB+7*BH, IW, BH, "Tensor type");
+	view_choice[4]->menu(menu_tensor);
+	view_choice[4]->align(FL_ALIGN_RIGHT);
+	view_choice[4]->callback(set_changed_cb, 0);
+	
+	view_vector->end();
+      }
+      
       o->end();
     }
     // Colors
@@ -2629,6 +2646,7 @@ void GUI::update_view_window(int num){
   if(v->ScalarOnly) view_vector->deactivate();
   else view_vector->activate();
   opt_view_point_size(num, GMSH_GUI, 0);
+  opt_view_point_type(num, GMSH_GUI, 0);
   opt_view_line_width(num, GMSH_GUI, 0);
   opt_view_arrow_type(num, GMSH_GUI, 0);
   opt_view_arrow_scale(num, GMSH_GUI, 0);
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index a0d8ac2a4dcd8ab9c8afb83e362b7814bf7d77ab..47ac8d3e10ff4906b9e314ea45ff16213c8c65be 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -206,6 +206,7 @@ public:
   Fl_Value_Input   *view_value[VIEW_OPT_BUTT] ;
   Fl_Input         *view_input[VIEW_OPT_BUTT] ;
   Fl_Repeat_Button *view_butt_rep[VIEW_OPT_BUTT] ;
+  Fl_Choice        *view_choice[VIEW_OPT_BUTT] ;
 
   Colorbar_Window  *view_colorbar_window ;
   Fl_Return_Button *view_ok ;
diff --git a/Fltk/Message.cpp b/Fltk/Message.cpp
index 909b53fd58da41a66fb0db686b4b1de03a5510eb..5104126cdd5a2f51098072fa6e99cc317cac31b3 100644
--- a/Fltk/Message.cpp
+++ b/Fltk/Message.cpp
@@ -1,4 +1,4 @@
-// $Id: Message.cpp,v 1.28 2002-05-20 18:28:25 geuzaine Exp $
+// $Id: Message.cpp,v 1.29 2002-06-15 21:25:27 geuzaine Exp $
 //
 // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle
 //
@@ -154,6 +154,8 @@ void Msg(int level, char *fmt, ...){
     va_end (args);
   }
 
+  if(CTX.terminal) fflush(stderr);
+
   if(abort){
     Debug();
     if(WID){