diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 6c7ea0e58403001d3959da01cc552649f1f57752..4c969e9c5fb451b30a61b38a0d38f9aad8928ba0 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.77 2001-08-12 14:23:36 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.78 2001-08-13 16:13:14 geuzaine Exp $
 
 #include <sys/types.h>
 #include <signal.h>
@@ -658,8 +658,8 @@ void geometry_elementary_add_new_circle_cb(CALLBACK_ARGS){
 
   n=0;
   while(1){
-    if(n == 0) Msg(STATUS3N,"Select center Point ('q'=quit)");
-    if(n == 1) Msg(STATUS3N,"Select start Point ('q'=quit)");
+    if(n == 0) Msg(STATUS3N,"Select start Point ('q'=quit)");
+    if(n == 1) Msg(STATUS3N,"Select center Point ('q'=quit)");
     if(n == 2) Msg(STATUS3N,"Select end Point ('q'=quit)");
     ib = SelectEntity(ENT_POINT, &v,&c,&s);
     if(ib == 1) { /* left mouse butt */
@@ -672,7 +672,7 @@ void geometry_elementary_add_new_circle_cb(CALLBACK_ARGS){
       break;
     }
     if(n == 3){
-      add_circ(p[1],p[0],p[2],CTX.filename); /* begin, center, end */
+      add_circ(p[0],p[1],p[2],CTX.filename); /* begin, center, end */
       ZeroHighlight(&M);
       Draw();
       n=0;
@@ -694,9 +694,9 @@ void geometry_elementary_add_new_ellipsis_cb(CALLBACK_ARGS){
 
   n=0;
   while(1){
-    if(n == 0) Msg(STATUS3N,"Select center Point ('q'=quit)");
-    if(n == 1) Msg(STATUS3N,"Select axis Point ('q'=quit)");
-    if(n == 2) Msg(STATUS3N,"Select start Point ('q'=quit)");
+    if(n == 0) Msg(STATUS3N,"Select start Point ('q'=quit)");
+    if(n == 1) Msg(STATUS3N,"Select center Point ('q'=quit)");
+    if(n == 2) Msg(STATUS3N,"Select major axis Point ('q'=quit)");
     if(n == 3) Msg(STATUS3N,"Select end Point ('q'=quit)");
     ib = SelectEntity(ENT_POINT, &v,&c,&s);
     if(ib == 1) { /* left mouse butt */
@@ -709,7 +709,7 @@ void geometry_elementary_add_new_ellipsis_cb(CALLBACK_ARGS){
       break;
     }
     if(n == 4){
-      add_ell(p[3],p[2],p[0],p[1],CTX.filename);
+      add_ell(p[0],p[1],p[2],p[3],CTX.filename);
       ZeroHighlight(&M);
       Draw();
       n=0;
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index b14a2d656adb6b4cc5adbf6292dfa8eb702345e1..f4fef3866322e7ce1f354dd51e075acdb3c718a9 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -174,7 +174,7 @@
 #line 1 "Gmsh.y"
  
 
-// $Id: Gmsh.tab.cpp,v 1.106 2001-08-12 14:24:50 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.107 2001-08-13 16:13:14 geuzaine Exp $
 
   //
   // Generaliser sprintf avec des chaines de caracteres
@@ -334,7 +334,7 @@ static const short yyprhs[] = {     0,
    920,   952,   954,   956,   958,   960,   962,   964,   966,   971,
    979,   989,   996,  1000,  1007,  1014,  1024,  1031,  1041,  1047,
   1056,  1065,  1077,  1084,  1094,  1104,  1114,  1122,  1131,  1144,
-  1151,  1157,  1165,  1173,  1186,  1194,  1204,  1222,  1230,  1239,
+  1151,  1157,  1165,  1173,  1186,  1194,  1202,  1212,  1230,  1239,
   1248,  1256,  1268,  1274,  1283,  1296,  1305,  1328,  1349,  1358,
   1367,  1373,  1382,  1390,  1399,  1405,  1417,  1423,  1433,  1435,
   1437,  1439,  1440,  1443,  1448,  1453,  1460,  1464,  1468,  1472,
@@ -475,10 +475,10 @@ static const short yyrhs[] = {   190,
      7,   263,     6,     0,    43,   179,   255,   180,     7,   263,
      6,     0,    69,    41,   263,     7,   185,   255,   184,   255,
    184,   255,   186,     6,     0,    39,   179,   255,   180,     7,
-   263,     6,     0,    39,   179,   255,   180,     7,   263,    49,
-   257,     6,     0,    47,   179,   255,   180,     7,   185,   255,
-   184,   255,   184,     5,   184,     5,   184,     5,   186,     6,
-     0,    40,   179,   255,   180,     7,   263,     6,     0,    53,
+   263,     6,     0,    40,   179,   255,   180,     7,   263,     6,
+     0,    39,   179,   255,   180,     7,   263,    49,   257,     6,
+     0,    47,   179,   255,   180,     7,   185,   255,   184,   255,
+   184,     5,   184,     5,   184,     5,   186,     6,     0,    53,
     41,   179,   255,   180,     7,   263,     6,     0,    41,    64,
    179,   255,   180,     7,   263,     6,     0,    83,   179,   255,
    180,     7,   263,     6,     0,    84,   179,   255,   180,     7,
@@ -598,7 +598,7 @@ static const short yyrline[] = { 0,
    736,   748,   750,   751,   752,   753,   755,   757,   759,   790,
    824,   871,   886,   895,   910,   922,   936,   959,   983,   995,
   1009,  1021,  1035,  1051,  1067,  1080,  1100,  1111,  1117,  1136,
-  1147,  1155,  1161,  1167,  1186,  1192,  1208,  1215,  1221,  1227,
+  1147,  1155,  1161,  1167,  1186,  1192,  1198,  1214,  1221,  1227,
   1233,  1239,  1258,  1270,  1276,  1295,  1316,  1324,  1330,  1336,
   1342,  1354,  1360,  1366,  1378,  1384,  1389,  1394,  1401,  1403,
   1404,  1407,  1412,  1423,  1441,  1449,  1454,  1465,  1533,  1553,
@@ -723,7 +723,7 @@ static const short yyr2[] = {     0,
     31,     1,     1,     1,     1,     1,     1,     1,     4,     7,
      9,     6,     3,     6,     6,     9,     6,     9,     5,     8,
      8,    11,     6,     9,     9,     9,     7,     8,    12,     6,
-     5,     7,     7,    12,     7,     9,    17,     7,     8,     8,
+     5,     7,     7,    12,     7,     7,     9,    17,     8,     8,
      7,    11,     5,     8,    12,     8,    22,    20,     8,     8,
      5,     8,     7,     8,     5,    11,     5,     9,     1,     1,
      1,     0,     2,     4,     4,     6,     3,     3,     3,     7,
@@ -831,7 +831,7 @@ static const short yydefact[] = {     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,   272,
    279,   280,   281,     0,   340,   339,   336,     0,   132,     0,
      0,     0,     0,   140,     0,     0,     0,     0,     0,   331,
-    68,   157,   165,     0,   168,     0,   162,     0,   163,   183,
+    68,   157,   165,     0,   166,     0,   162,     0,   163,   183,
      0,     0,   318,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,   200,     0,     0,     0,
      0,   192,     0,     0,     0,     0,     0,   219,     0,     0,
@@ -851,7 +851,7 @@ static const short yydefact[] = {     0,
      0,     0,     0,     0,    47,     0,     0,     0,     0,     0,
     52,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,   141,   146,   148,     0,
-   154,     0,     0,     0,   166,   322,     0,   229,   228,   155,
+   154,     0,     0,     0,   167,   322,     0,   229,   228,   155,
    156,   192,     0,   188,     0,     0,     0,     0,     0,     0,
      0,   310,     0,   309,     0,     0,     0,     0,     0,     0,
    308,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -881,7 +881,7 @@ static const short yydefact[] = {     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,   222,     0,     0,     0,     0,     0,
      0,    46,    22,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    85,    87,    89,    91,    93,    95,   167,     0,
+     0,     0,    85,    87,    89,    91,    93,    95,   168,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,    98,   102,   106,   225,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -4068,6 +4068,14 @@ case 165:
     break;}
 case 166:
 #line 1193 "Gmsh.y"
+{
+      Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_ELLI,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
+      yyval.s.Type = MSH_SEGM_ELLI ;
+      yyval.s.Num  = (int)yyvsp[-4].d;
+    ;
+    break;}
+case 167:
+#line 1199 "Gmsh.y"
 {
       List_T *temp;
       int i,j;
@@ -4084,22 +4092,14 @@ case 166:
       yyval.s.Num  = (int)yyvsp[-6].d;
     ;
     break;}
-case 167:
-#line 1210 "Gmsh.y"
+case 168:
+#line 1216 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-14].d,MSH_SEGM_PARAMETRIC,2,NULL,NULL,-1,-1,yyvsp[-10].d,yyvsp[-8].d,yyvsp[-6].c,yyvsp[-4].c,yyvsp[-2].c);
       yyval.s.Type = MSH_SEGM_PARAMETRIC ;
       yyval.s.Num  = (int)yyvsp[-14].d;
     ;
     break;}
-case 168:
-#line 1216 "Gmsh.y"
-{
-      Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_ELLI,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
-      yyval.s.Type = MSH_SEGM_ELLI ;
-      yyval.s.Num  = (int)yyvsp[-4].d;
-    ;
-    break;}
 case 169:
 #line 1222 "Gmsh.y"
 {
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index ab99f027ef00d2c9dfbe57d6b059707ab71593ee..50c082ddc6532be45300ccb891da7ee43c2f8203 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,6 +1,6 @@
 %{ 
 
-// $Id: Gmsh.y,v 1.92 2001-08-12 14:24:50 geuzaine Exp $
+// $Id: Gmsh.y,v 1.93 2001-08-13 16:13:14 geuzaine Exp $
 
   //
   // Generaliser sprintf avec des chaines de caracteres
@@ -1189,6 +1189,12 @@ Shape :
       $$.Type = MSH_SEGM_CIRC ;
       $$.Num  = (int)$3;
     }
+  | tEllipsis '(' FExpr ')'  tAFFECT ListOfDouble tEND
+    {
+      Cdbseg101((int)$3,MSH_SEGM_ELLI,2,$6,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
+      $$.Type = MSH_SEGM_ELLI ;
+      $$.Num  = (int)$3;
+    }
   | tCircle '(' FExpr ')'  tAFFECT ListOfDouble tPlane VExpr tEND
     {
       List_T *temp;
@@ -1212,12 +1218,6 @@ Shape :
       $$.Type = MSH_SEGM_PARAMETRIC ;
       $$.Num  = (int)$3;
     }
-  | tEllipsis '(' FExpr ')'  tAFFECT ListOfDouble tEND
-    {
-      Cdbseg101((int)$3,MSH_SEGM_ELLI,2,$6,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
-      $$.Type = MSH_SEGM_ELLI ;
-      $$.Num  = (int)$3;
-    }
   | tPhysical tLine '(' FExpr ')' tAFFECT ListOfDouble tEND
     {
       Cdbz101((int)$4,MSH_PHYSICAL_LINE,0,0,0,0,0,NULL,$7,NULL);
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index c7bee26d07fd8b019eaa073f6232acb0d7028cad..39e72f27feeebbf1edcad8c1fa95ee6d8d433bc9 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.106 2001-08-12 14:24:51 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.107 2001-08-13 16:13:14 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -995,7 +995,7 @@ char *yytext;
 #define INITIAL 0
 #line 2 "Gmsh.l"
 
-// $Id: Gmsh.yy.cpp,v 1.106 2001-08-12 14:24:51 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.107 2001-08-13 16:13:14 geuzaine Exp $
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/doc/VERSIONS b/doc/VERSIONS
index bcaf0f0d2e10822d7781c97201f2e850729f8d67..93f3a92d03bf5d84687958e305402945cfccd738 100644
--- a/doc/VERSIONS
+++ b/doc/VERSIONS
@@ -1,11 +1,12 @@
-$Id: VERSIONS,v 1.53 2001-08-12 14:24:51 geuzaine Exp $
+$Id: VERSIONS,v 1.54 2001-08-13 16:13:14 geuzaine Exp $
 
 New in 1.23: Fixed duplicate elements generation with Extrude; Better
-display of displacement maps; boundary operator generalization; new
-explode option for post-processing views; enhanced link view behaviour
-(to update only the changed items); new default plugins: Skin,
-Transform, Smooth; various other bug fixes and clean-ups (mostly in
-the post-processing module and for extruded meshes);
+display of displacement maps; fixed interactive ellipsis construction;
+generalized boundary operator; added new explode option for
+post-processing views; enhanced link view behaviour (to update only
+the changed items); added new default plugins: Skin, Transform,
+Smooth; fixed various other small bugs (mostly in the post-processing
+module and for extruded meshes);
 
 New in 1.22: Fixed (yet another) bug for 2D mesh in the mean plane;
 fixed surface coherence bug in extruded meshes; new double logarithmic