diff --git a/Common/SmoothNormals.cpp b/Common/SmoothNormals.cpp
index 687053c74243aa2453ae7e133c88b21b0cc3296a..c2b9a45e546c3315c17f4edadab152fb86ff4b1c 100644
--- a/Common/SmoothNormals.cpp
+++ b/Common/SmoothNormals.cpp
@@ -1,4 +1,4 @@
-// $Id: SmoothNormals.cpp,v 1.5 2006-01-14 16:24:53 geuzaine Exp $
+// $Id: SmoothNormals.cpp,v 1.6 2006-01-14 17:13:14 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -27,8 +27,8 @@ double xyzn::eps = 1.e-12;
 
 float xyzn::angle(int i, float nx, float ny, float nz)
 {
-  // computes the angle between the ith normal stored at point xyz and
-  // the new normal nx,ny,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};
   norme(a);
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 5365f53eaef8550510614c82015377fa93a6b978..dc71d936881ecd8f379716194cbc87c12a65d014 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.395 2006-01-14 16:24:53 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.396 2006-01-14 17:13:14 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -1492,7 +1492,7 @@ void visibility_sort_cb(CALLBACK_ARGS)
     delete [] state;
   }
   else if(val == -2){ // create new parameter name for selection
-    for(int i = 1; i < WID->vis_browser->size(); i++){
+    for(int i = 1; i <= WID->vis_browser->size(); i++){
       if(WID->vis_browser->selected(i)){
 	Entity *e = (Entity *) WID->vis_browser->data(i);
 	sprintf(tmpstr, "%d", e->Num());
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 0adc4aa37403dc88e52b637dfb8c68434bc3a0da..08c6760b1a0e5f7f98bebbf0b5df26a4ebbcf91d 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.480 2006-01-11 05:37:35 geuzaine Exp $
+// $Id: GUI.cpp,v 1.481 2006-01-14 17:13:14 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -4233,7 +4233,7 @@ void GUI::create_geometry_context_window(int num)
       context_geometry_input[0] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Name");
       context_geometry_input[0]->value("lc");
       context_geometry_input[1] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Value");
-      context_geometry_input[1]->value("1.0");
+      context_geometry_input[1]->value("0.1");
       for(i = 0; i < 2; i++) {
         context_geometry_input[i]->align(FL_ALIGN_RIGHT);
       }
@@ -4247,11 +4247,11 @@ void GUI::create_geometry_context_window(int num)
     {
       g[1] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Point");
       context_geometry_input[2] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X coordinate");
-      context_geometry_input[2]->value("0.0");
+      context_geometry_input[2]->value("0");
       context_geometry_input[3] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y coordinate");
-      context_geometry_input[3]->value("0.0");
+      context_geometry_input[3]->value("0");
       context_geometry_input[4] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z coordinate");
-      context_geometry_input[4]->value("0.0");
+      context_geometry_input[4]->value("0");
       context_geometry_input[5] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Characteristic length");
       context_geometry_input[5]->value("0.1");
       for(i = 2; i < 6; i++) {
@@ -4274,11 +4274,11 @@ void GUI::create_geometry_context_window(int num)
     {
       g[2] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Translation");
       context_geometry_input[6] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X component");
-      context_geometry_input[6]->value("0.0");
+      context_geometry_input[6]->value("0");
       context_geometry_input[7] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y component");
-      context_geometry_input[7]->value("0.0");
+      context_geometry_input[7]->value("0");
       context_geometry_input[8] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z component");
-      context_geometry_input[8]->value("1.0");
+      context_geometry_input[8]->value("1");
       for(i = 6; i < 9; i++) {
         context_geometry_input[i]->align(FL_ALIGN_RIGHT);
       }
@@ -4288,17 +4288,17 @@ void GUI::create_geometry_context_window(int num)
     {
       g[3] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Rotation");
       context_geometry_input[9] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X coordinate of an axis point");
-      context_geometry_input[9]->value("0.0");
+      context_geometry_input[9]->value("0");
       context_geometry_input[10] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y coordinate of an axis point");
-      context_geometry_input[10]->value("0.0");
+      context_geometry_input[10]->value("0");
       context_geometry_input[11] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z coordinate of an axis point");
-      context_geometry_input[11]->value("0.0");
+      context_geometry_input[11]->value("0");
       context_geometry_input[12] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "X component of axis direction");
-      context_geometry_input[12]->value("0.0");
+      context_geometry_input[12]->value("0");
       context_geometry_input[13] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Y component of axis direction");
-      context_geometry_input[13]->value("1.0");
+      context_geometry_input[13]->value("1");
       context_geometry_input[14] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Z component of axis direction");
-      context_geometry_input[14]->value("0.0");
+      context_geometry_input[14]->value("0");
       context_geometry_input[15] = new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Angle in radians");
       context_geometry_input[15]->value("Pi/4");
       for(i = 9; i < 16; i++) {
@@ -4310,13 +4310,13 @@ void GUI::create_geometry_context_window(int num)
     {
       g[4] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Scale");
       context_geometry_input[16] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X component of direction");
-      context_geometry_input[16]->value("1.0");
+      context_geometry_input[16]->value("0");
       context_geometry_input[17] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y component of direction");
-      context_geometry_input[17]->value("0.0");
+      context_geometry_input[17]->value("0");
       context_geometry_input[18] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z component of direction");
-      context_geometry_input[18]->value("0.0");
+      context_geometry_input[18]->value("0");
       context_geometry_input[19] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Factor");
-      context_geometry_input[19]->value("2.0");
+      context_geometry_input[19]->value("0.5");
       for(i = 16; i < 20; i++) {
         context_geometry_input[i]->align(FL_ALIGN_RIGHT);
       }
@@ -4325,14 +4325,14 @@ void GUI::create_geometry_context_window(int num)
     // 5: Symmetry
     {
       g[5] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Symmetry");
-      context_geometry_input[20] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "1st plane equation coefficient");
-      context_geometry_input[20]->value("1.0");
-      context_geometry_input[21] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "2nd plane equation coefficient");
-      context_geometry_input[21]->value("0.0");
-      context_geometry_input[22] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "3rd plane equation coefficient");
-      context_geometry_input[22]->value("0.0");
-      context_geometry_input[23] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "4th plane equation coefficient");
-      context_geometry_input[23]->value("1.0");
+      context_geometry_input[20] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "A");
+      context_geometry_input[20]->value("1");
+      context_geometry_input[21] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "B");
+      context_geometry_input[21]->value("0");
+      context_geometry_input[22] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "C");
+      context_geometry_input[22]->value("0");
+      context_geometry_input[23] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "D");
+      context_geometry_input[23]->value("1");
       for(i = 20; i < 24; i++) {
         context_geometry_input[i]->align(FL_ALIGN_RIGHT);
       }
@@ -4391,7 +4391,7 @@ void GUI::create_mesh_context_window(int num)
     {
       g[0] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Charact. Length");
       context_mesh_input[0] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Value");
-      context_mesh_input[0]->value("1.0");
+      context_mesh_input[0]->value("0.1");
       context_mesh_input[0]->align(FL_ALIGN_RIGHT);
       g[0]->end();
     }
@@ -4401,7 +4401,7 @@ void GUI::create_mesh_context_window(int num)
       context_mesh_input[1] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Number of points");
       context_mesh_input[1]->value("10");
       context_mesh_input[2] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Parameter");
-      context_mesh_input[2]->value("1.0");
+      context_mesh_input[2]->value("1");
       for(int i = 1; i < 3; i++) {
         context_mesh_input[i]->align(FL_ALIGN_RIGHT);
       }
diff --git a/TODO b/TODO
index afdbdbc277389f077ce5ed978e69c11c8f024884..d344369997b1f2ef9e0d850d5254831378f6b711 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,4 @@
-$Id: TODO,v 1.113 2006-01-07 20:30:25 geuzaine Exp $
+$Id: TODO,v 1.114 2006-01-14 17:13:14 geuzaine Exp $
 
 ********************************************************************
 
@@ -23,6 +23,13 @@ On Windows WITHOUT Cygwin:
 
 ********************************************************************
 
+introduce new syntax for Extrude that matches the syntax for the other
+transformations ("Extrude {...} { Line{...}; <Layers{...};> }"). would
+allow multiple extrusions in one command + nicer ret[] = Extrude{}{};
+syntax
+
+********************************************************************
+
 allow mixed 1st/2nd order meshes (2nd order only where the geometry
 requires it). Add this as an advanced option since it will create
 meshes with hanging nodes.
diff --git a/demos/cone.geo b/demos/cone.geo
new file mode 100644
index 0000000000000000000000000000000000000000..d1d28fd2f80e13aa617134897bf73240f970511a
--- /dev/null
+++ b/demos/cone.geo
@@ -0,0 +1,15 @@
+lc = 0.2;
+Point(1) = {0,0,0,lc};
+Point(2) = {1,0,0,lc};
+Point(6) = {0,0,3,lc};
+Line(1) = {1,2};
+Line(2) = {2,6};
+Line(3) = {6,1};
+Line Loop(4) = {2,3,1};
+Plane Surface(5) = {4};
+Extrude Surface {5, {0,0,1}, {0,0,0}, Pi/2};
+Extrude Surface {17, {0,0,1}, {0,0,0}, Pi/2};
+Extrude Surface {29, {0,0,1}, {0,0,0}, Pi/2};
+Extrude Surface {41, {0,0,1}, {0,0,0}, Pi/2};
+Physical Surface(53) = {12,24,36,48,52,40,28,16};
+ExteriorShell = 53;