diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp
index 2fbb78c353282bbd6de23252cfaeba59761f3cc3..29df7a2d25f13ae509525b59696c85690bc2d4a0 100644
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@ -1,4 +1,4 @@
-/* $Id: Geo.cpp,v 1.10 2000-12-11 16:23:11 geuzaine Exp $ */
+/* $Id: Geo.cpp,v 1.11 2000-12-13 13:56:58 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "Const.h"
@@ -17,8 +17,8 @@ char attrdec_text[100] = "2.0";
 char px_text[100] = "0.0", py_text[100] = "0.0", pz_text[100] = "0.0" ;
 char angle_text[100] = "3.14159/2" ;
 char ax_text[100] = "0.0", ay_text[100] = "0.0", az_text[100] = "1.0";
-char dx_text[100] = "0.0", dy_text[100] = "0.0", dz_text[100] = "0.0";
-char df_text[100] = "1.0";
+char dx_text[100] = "0.0", dy_text[100] = "0.0", dz_text[100] = "0.0", df_text[100] = "1.0";
+char sa_text[100] = "0.0", sb_text[100] = "0.0", sc_text[100] = "0.0", sd_text[100] = "0.0";
 char nb_pts[100] ="10", mode_value[100] = "1";
 char trsf_pts_text[100] = "2", trsf_type_text[100] = "Power 1.0";
 char trsf_vol_text[100] = "1";
@@ -527,6 +527,18 @@ void dilate(int add, int s, char *fich, char *quoi){
   add_infile(text,fich);
 }
 
+void symmetry(int add, int s, char *fich, char *quoi){
+  char text[BUFFSIZE];
+
+  if(add)
+    sprintf(text,"Symmetry { %s,%s,%s,%s } {\n  Duplicata { %s{%d}; }\n}",
+            sa_text,sb_text,sc_text,sd_text, quoi,s);
+  else
+    sprintf(text,"Symmetry { %s,%s,%s,%s } {\n   %s{%d};\n  }",
+            sa_text,sb_text,sc_text,sd_text, quoi,s);
+  add_infile(text,fich);
+
+}
 
 void protude(int s, char *fich, char *what){
   char text[BUFFSIZE];
diff --git a/Geo/Geo.h b/Geo/Geo.h
index 36d97bd7b0d0988a8901150062dafe192c602613..2e76dbccccb327f49fad7204928aa8fa567ec5d0 100644
--- a/Geo/Geo.h
+++ b/Geo/Geo.h
@@ -1,4 +1,4 @@
-/* $Id: Geo.h,v 1.4 2000-11-26 15:43:45 geuzaine Exp $ */
+/* $Id: Geo.h,v 1.5 2000-12-13 13:56:58 geuzaine Exp $ */
 #ifndef _GEO_H_
 #define _GEO_H_
 
@@ -108,6 +108,7 @@ void translate_surf(int add, int s, char *fich);
 void translate_pt(int add, int s, char *fich);
 void rotate(int add, int s, char *fich, char *quoi);
 void dilate(int add, int s, char *fich, char *quoi);
+void symmetry(int add, int s, char *fich, char *quoi);
 void protude(int s, char *fich, char *what);
 
 #endif
diff --git a/Unix/CbContext.cpp b/Unix/CbContext.cpp
index b6fe7fa6320a27bd2224f654f6a6e9d106b2ba49..1c0f3a286dc75a43a07374ceea018545b8e7eb8a 100644
--- a/Unix/CbContext.cpp
+++ b/Unix/CbContext.cpp
@@ -1,4 +1,4 @@
-/* $Id: CbContext.cpp,v 1.7 2000-12-09 15:21:17 geuzaine Exp $ */
+/* $Id: CbContext.cpp,v 1.8 2000-12-13 13:57:00 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -376,6 +376,7 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
       ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_ADD_DILATE,call_data);
       break;
     case 5: 
+      XtManageChild(WID.GD.symmDialog);
       ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_ADD_SYMMETRY,call_data); 
       break;
     }
@@ -419,12 +420,15 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
     case 1: geom_event_handler(GEOM_ELEM_ADD_DILATE_POINT); break ;
     case 2: geom_event_handler(GEOM_ELEM_ADD_DILATE_LINE); break ;
     case 3: geom_event_handler(GEOM_ELEM_ADD_DILATE_SURF); break ;
-    case 4: break ;
     }
     break;
 
   case CONTEXT_GEOM_ELEM_ADD_SYMMETRY :
-    Msg(WARNING, "Add Symmetry not done yet"); 
+    switch((long int)client_data){
+    case 1: geom_event_handler(GEOM_ELEM_ADD_SYMMETRY_POINT); break ;
+    case 2: geom_event_handler(GEOM_ELEM_ADD_SYMMETRY_LINE); break ;
+    case 3: geom_event_handler(GEOM_ELEM_ADD_SYMMETRY_SURF); break ;
+    }
     break;
      
   case CONTEXT_GEOM_ELEM_MOVE :
@@ -442,6 +446,7 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
       ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_MOVE_DILATE,call_data);
       break;
     case 4:
+      XtManageChild(WID.GD.symmDialog);
       ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_MOVE_SYMMETRY,call_data);
       break;
     }
@@ -468,12 +473,15 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
     case 1: geom_event_handler(GEOM_ELEM_MOVE_DILATE_POINT); break ;
     case 2: geom_event_handler(GEOM_ELEM_MOVE_DILATE_LINE); break ;
     case 3: geom_event_handler(GEOM_ELEM_MOVE_DILATE_SURF); break ;
-    case 4: break ;
     }
     break;
 
   case CONTEXT_GEOM_ELEM_MOVE_SYMMETRY :
-    Msg(WARNING, "Move Symmetry not done yet"); 
+    switch((long int)client_data){
+    case 1: geom_event_handler(GEOM_ELEM_MOVE_SYMMETRY_POINT); break ;
+    case 2: geom_event_handler(GEOM_ELEM_MOVE_SYMMETRY_LINE); break ;
+    case 3: geom_event_handler(GEOM_ELEM_MOVE_SYMMETRY_SURF); break ;
+    }
     break;
 
   case CONTEXT_GEOM_ELEM_EXTRUDE :
@@ -491,6 +499,7 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
       ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_EXTRUDE_DILATE,call_data);
       break;
     case 4:
+      XtManageChild(WID.GD.symmDialog);
       ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_EXTRUDE_SYMMETRY,call_data);
       break;
     }
@@ -513,11 +522,11 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
     break;
     
   case CONTEXT_GEOM_ELEM_EXTRUDE_DILATE :
-    Msg(WARNING, "Extrude Dilate not done yet!"); 
+    Msg(WARNING, "Extrude Dilate is not implemented"); 
     break;
 
   case CONTEXT_GEOM_ELEM_EXTRUDE_SYMMETRY :
-    Msg(WARNING, "Extrude Symmetry not done yet!"); 
+    Msg(WARNING, "Extrude Symmetry is not implemented"); 
     break;
      
   case CONTEXT_GEOM_ELEM_DELETE :
diff --git a/Unix/CbGeom.cpp b/Unix/CbGeom.cpp
index c5d01cadc1ee5e127be91213bb81050208bde093..9fc58a4870663e7d1f9808552cd88f35e3e231cb 100644
--- a/Unix/CbGeom.cpp
+++ b/Unix/CbGeom.cpp
@@ -1,4 +1,4 @@
-/* $Id: CbGeom.cpp,v 1.8 2000-12-13 13:18:49 geuzaine Exp $ */
+/* $Id: CbGeom.cpp,v 1.9 2000-12-13 13:57:00 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -15,16 +15,17 @@
 extern Context_T  CTX;
 extern Widgets_T  WID;
 
-extern Mesh       M;
-extern char       TheFileName[256];
+extern Mesh  M;
+extern char  TheFileName[256];
 
-extern char     x_text[100], y_text[100], z_text[100], l_text[100];
-extern char     tx_text[100], ty_text[100], tz_text[100];
-extern char     px_text[100], py_text[100], pz_text[100], angle_text[100];
-extern char     ax_text[100], ay_text[100], az_text[100], angle_text[100];
-extern char     dx_text[100], dy_text[100], dz_text[100], df_text[100];
-
-static char     name_text[100], value_text[100];
+extern char  x_text[100], y_text[100], z_text[100], l_text[100];
+extern char  tx_text[100], ty_text[100], tz_text[100];
+extern char  px_text[100], py_text[100], pz_text[100], angle_text[100];
+extern char  ax_text[100], ay_text[100], az_text[100], angle_text[100];
+extern char  dx_text[100], dy_text[100], dz_text[100], df_text[100];
+extern char  sa_text[100], sb_text[100], sc_text[100], sd_text[100];
+	     
+static char  name_text[100], value_text[100];
 
 int SelectContour (int type, int num, List_T *Liste1){
   int      k,ip,i;
@@ -382,6 +383,8 @@ void geom_event_handler (int event) {
 
   case GEOM_ELEM_ADD_DILATE_POINT :
   case GEOM_ELEM_MOVE_DILATE_POINT :
+  case GEOM_ELEM_ADD_SYMMETRY_POINT :
+  case GEOM_ELEM_MOVE_SYMMETRY_POINT :
     while(1){
       Msg(STATUS,"Select Point ('q'=quit)");
       if(!SelectEntity(ENT_POINT, &v,&c,&s)){
@@ -389,13 +392,28 @@ void geom_event_handler (int event) {
         Replot();
         break;
       }
-      dilate(event==GEOM_ELEM_ADD_DILATE_POINT?1:0,v->Num,TheFileName,"Point");
+      switch(event){
+      case GEOM_ELEM_ADD_DILATE_POINT :
+	dilate(1,v->Num,TheFileName,"Point");
+	break;
+      case GEOM_ELEM_MOVE_DILATE_POINT :
+	dilate(0,v->Num,TheFileName,"Point");
+	break;
+      case GEOM_ELEM_ADD_SYMMETRY_POINT :
+	symmetry(1,v->Num,TheFileName,"Point");
+	break;
+      case GEOM_ELEM_MOVE_SYMMETRY_POINT :
+	symmetry(0,v->Num,TheFileName,"Point");
+	break;
+      }
       ZeroHighlight(&M);
       Replot();
     }
     break;
   case GEOM_ELEM_ADD_DILATE_LINE :
   case GEOM_ELEM_MOVE_DILATE_LINE :
+  case GEOM_ELEM_ADD_SYMMETRY_LINE :
+  case GEOM_ELEM_MOVE_SYMMETRY_LINE :
     while(1){
       Msg(STATUS,"Select Line ('q'=quit)");
       if(!SelectEntity(ENT_LINE, &v,&c,&s)){
@@ -403,13 +421,28 @@ void geom_event_handler (int event) {
         Replot();
         break;
       }
-      dilate(event==GEOM_ELEM_ADD_DILATE_LINE?1:0,c->Num,TheFileName,"Line");
+      switch(event){
+      case GEOM_ELEM_ADD_DILATE_LINE :
+	dilate(1,c->Num,TheFileName,"Line");
+	break;
+      case GEOM_ELEM_MOVE_DILATE_LINE :
+	dilate(0,c->Num,TheFileName,"Line");
+	break;
+      case GEOM_ELEM_ADD_SYMMETRY_LINE :
+	symmetry(1,c->Num,TheFileName,"Line");
+	break;
+      case GEOM_ELEM_MOVE_SYMMETRY_LINE :
+	symmetry(0,c->Num,TheFileName,"Line");
+	break;
+      }
       ZeroHighlight(&M);
       Replot();
     }
     break;
   case GEOM_ELEM_ADD_DILATE_SURF :
   case GEOM_ELEM_MOVE_DILATE_SURF :
+  case GEOM_ELEM_ADD_SYMMETRY_SURF :
+  case GEOM_ELEM_MOVE_SYMMETRY_SURF :
     while(1){
       Msg(STATUS,"Select Surface ('q'=quit)");
       if(!SelectEntity(ENT_SURFACE, &v,&c,&s)){
@@ -417,7 +450,20 @@ void geom_event_handler (int event) {
         Replot();
         break;
       }
-      dilate(event==GEOM_ELEM_ADD_DILATE_SURF?1:0,s->Num,TheFileName,"Surface");
+      switch(event){
+      case GEOM_ELEM_ADD_DILATE_SURF :
+	dilate(1,s->Num,TheFileName,"Surface");
+	break;
+      case GEOM_ELEM_MOVE_DILATE_SURF :
+	dilate(0,s->Num,TheFileName,"Surface");
+	break;
+      case GEOM_ELEM_ADD_SYMMETRY_SURF :
+	symmetry(1,s->Num,TheFileName,"Surface");
+	break;
+      case GEOM_ELEM_MOVE_SYMMETRY_SURF :
+	symmetry(0,s->Num,TheFileName,"Surface");
+	break;
+      }
       ZeroHighlight(&M);
       Replot();
     }
@@ -566,7 +612,10 @@ void GeomCb (Widget w, XtPointer client_data, XtPointer call_data){
   case GEOM_DILAT_Y    : strcpy(dy_text,XmTextGetString(w)); break;
   case GEOM_DILAT_Z    : strcpy(dz_text,XmTextGetString(w)); break;
   case GEOM_DILAT_F    : strcpy(df_text,XmTextGetString(w)); break;
-
+  case GEOM_SYMMETRY_A : strcpy(sa_text,XmTextGetString(w)); break;
+  case GEOM_SYMMETRY_B : strcpy(sb_text,XmTextGetString(w)); break;
+  case GEOM_SYMMETRY_C : strcpy(sc_text,XmTextGetString(w)); break;
+  case GEOM_SYMMETRY_D : strcpy(sd_text,XmTextGetString(w)); break;
   default :
     Msg(WARNING, "Unknown Value in GeomCb (%d)", (long int)client_data); 
     break;
diff --git a/Unix/CbGeom.h b/Unix/CbGeom.h
index 890420ebab57e2741d1f74bdaa1112c0e7874f7b..20167497e55973449c1994df93b7a6d60064eef0 100644
--- a/Unix/CbGeom.h
+++ b/Unix/CbGeom.h
@@ -1,4 +1,4 @@
-/* $Id: CbGeom.h,v 1.2 2000-11-23 14:11:41 geuzaine Exp $ */
+/* $Id: CbGeom.h,v 1.3 2000-12-13 13:57:00 geuzaine Exp $ */
 #ifndef _CB_GEOM_H_
 #define _CB_GEOM_H_
 
@@ -25,34 +25,40 @@
 #define  GEOM_ELEM_ADD_DILATE_POINT          19
 #define  GEOM_ELEM_ADD_DILATE_LINE           20
 #define  GEOM_ELEM_ADD_DILATE_SURF           21
-#define  GEOM_ELEM_MOVE_TRANSLATE_POINT      22
-#define  GEOM_ELEM_MOVE_TRANSLATE_LINE       23
-#define  GEOM_ELEM_MOVE_TRANSLATE_SURF       24
-#define  GEOM_ELEM_MOVE_ROTATE_POINT         25
-#define  GEOM_ELEM_MOVE_ROTATE_LINE          26
-#define  GEOM_ELEM_MOVE_ROTATE_SURF          27
-#define  GEOM_ELEM_MOVE_DILATE_POINT         28
-#define  GEOM_ELEM_MOVE_DILATE_LINE          29
-#define  GEOM_ELEM_MOVE_DILATE_SURF          30
-#define  GEOM_ELEM_EXTRUDE_TRANSLATE_POINT   31
-#define  GEOM_ELEM_EXTRUDE_TRANSLATE_LINE    32
-#define  GEOM_ELEM_EXTRUDE_TRANSLATE_SURF    33
-#define  GEOM_ELEM_EXTRUDE_ROTATE_POINT      34
-#define  GEOM_ELEM_EXTRUDE_ROTATE_LINE       35
-#define  GEOM_ELEM_EXTRUDE_ROTATE_SURF       36
-#define  GEOM_ELEM_DELETE_POINT              37
-#define  GEOM_ELEM_DELETE_LINE               38
-#define  GEOM_ELEM_DELETE_SURF               39
-#define  GEOM_ELEM_SKETCH                    40
-#define  GEOM_PHYS_ADD_POINT                 41
-#define  GEOM_PHYS_ADD_LINE                  42
-#define  GEOM_PHYS_ADD_SURF                  43
-#define  GEOM_PHYS_ADD_VOLUME                44
-#define  GEOM_PHYS_DELETE_POINT              45
-#define  GEOM_PHYS_DELETE_LINE               46
-#define  GEOM_PHYS_DELETE_SURF               47
-#define  GEOM_PHYS_DELETE_VOLUME             48
-#define  GEOM_PARSE                          49
+#define  GEOM_ELEM_ADD_SYMMETRY_POINT        22
+#define  GEOM_ELEM_ADD_SYMMETRY_LINE         23
+#define  GEOM_ELEM_ADD_SYMMETRY_SURF         24
+#define  GEOM_ELEM_MOVE_TRANSLATE_POINT      25
+#define  GEOM_ELEM_MOVE_TRANSLATE_LINE       26
+#define  GEOM_ELEM_MOVE_TRANSLATE_SURF       27
+#define  GEOM_ELEM_MOVE_ROTATE_POINT         28
+#define  GEOM_ELEM_MOVE_ROTATE_LINE          29
+#define  GEOM_ELEM_MOVE_ROTATE_SURF          30
+#define  GEOM_ELEM_MOVE_DILATE_POINT         31
+#define  GEOM_ELEM_MOVE_DILATE_LINE          32
+#define  GEOM_ELEM_MOVE_DILATE_SURF          33
+#define  GEOM_ELEM_MOVE_SYMMETRY_POINT       34
+#define  GEOM_ELEM_MOVE_SYMMETRY_LINE        35
+#define  GEOM_ELEM_MOVE_SYMMETRY_SURF        36
+#define  GEOM_ELEM_EXTRUDE_TRANSLATE_POINT   37
+#define  GEOM_ELEM_EXTRUDE_TRANSLATE_LINE    38
+#define  GEOM_ELEM_EXTRUDE_TRANSLATE_SURF    39
+#define  GEOM_ELEM_EXTRUDE_ROTATE_POINT      40
+#define  GEOM_ELEM_EXTRUDE_ROTATE_LINE       41
+#define  GEOM_ELEM_EXTRUDE_ROTATE_SURF       42
+#define  GEOM_ELEM_DELETE_POINT              43
+#define  GEOM_ELEM_DELETE_LINE               44
+#define  GEOM_ELEM_DELETE_SURF               45
+#define  GEOM_ELEM_SKETCH                    46
+#define  GEOM_PHYS_ADD_POINT                 47
+#define  GEOM_PHYS_ADD_LINE                  48
+#define  GEOM_PHYS_ADD_SURF                  49
+#define  GEOM_PHYS_ADD_VOLUME                50
+#define  GEOM_PHYS_DELETE_POINT              51
+#define  GEOM_PHYS_DELETE_LINE               52
+#define  GEOM_PHYS_DELETE_SURF               53
+#define  GEOM_PHYS_DELETE_VOLUME             54
+#define  GEOM_PARSE                          55
 
 /* GeomCb */
 
@@ -78,6 +84,10 @@
 #define  GEOM_DILAT_Y                        20
 #define  GEOM_DILAT_Z                        21
 #define  GEOM_DILAT_F                        22
+#define  GEOM_SYMMETRY_A                     23
+#define  GEOM_SYMMETRY_B                     24
+#define  GEOM_SYMMETRY_C                     25
+#define  GEOM_SYMMETRY_D                     26
 
 void geom_event_handler (int event);
 
diff --git a/Unix/Geometry.cpp b/Unix/Geometry.cpp
index 3bb6fb20b5f805c7ef44d8bb89e911fe6f14d016..73de7c330bc297289910e13a68750cc50986d51d 100644
--- a/Unix/Geometry.cpp
+++ b/Unix/Geometry.cpp
@@ -1,4 +1,4 @@
-/* $Id: Geometry.cpp,v 1.5 2000-12-08 11:16:55 geuzaine Exp $ */
+/* $Id: Geometry.cpp,v 1.6 2000-12-13 13:57:00 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -646,6 +646,21 @@ void ForceGeometry_GD (Widgets_T *w){
                   NULL);
   }
 
+  XtVaSetValues(w->GD.symmDialog,
+                XmNmarginHeight, DIALOG_H,
+                XmNmarginWidth, DIALOG_W,
+                NULL);
+
+  XtVaSetValues(w->GD.symmFrame[0],
+                XmNshadowType, IN_FRAME_TYPE,
+                XmNshadowThickness, IN_FRAME_SHADOW,
+                NULL);
+
+  XtVaSetValues(w->GD.symmFrame[1],
+                XmNchildHorizontalSpacing, TITLE_SPACE,
+                XmNchildVerticalAlignment, TITLE_ALIGN,
+                NULL);
+
 }
 
 void ForceGeometry_MD (Widgets_T *w){
diff --git a/Unix/Register.cpp b/Unix/Register.cpp
index c0d1645fb65713eb3e43da1fe89da1363656580c..4bc3d6b2fed0c31d78660645bc2033fc179bc616 100644
--- a/Unix/Register.cpp
+++ b/Unix/Register.cpp
@@ -1,4 +1,4 @@
-/* $Id: Register.cpp,v 1.12 2000-12-08 11:16:55 geuzaine Exp $ */
+/* $Id: Register.cpp,v 1.13 2000-12-13 13:57:00 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -292,6 +292,11 @@ void RegisterCallbacks_GD(Widgets_T *w){
   register_valchg_cb  (w->GD.dilatText[2],   GeomCb,    GEOM_DILAT_Z);
   register_valchg_cb  (w->GD.dilatText[3],   GeomCb,    GEOM_DILAT_F);
 
+  register_cancel_cb  (w->GD.symmDialog,     ManageCb,  w->GD.symmDialog); 
+  register_valchg_cb  (w->GD.symmText[0],    GeomCb,    GEOM_SYMMETRY_A);
+  register_valchg_cb  (w->GD.symmText[1],    GeomCb,    GEOM_SYMMETRY_B);
+  register_valchg_cb  (w->GD.symmText[2],    GeomCb,    GEOM_SYMMETRY_C);
+  register_valchg_cb  (w->GD.symmText[3],    GeomCb,    GEOM_SYMMETRY_D);
 }
 
 void RegisterCallbacks_MD(Widgets_T *w){
diff --git a/Unix/Widgets.cpp b/Unix/Widgets.cpp
index 950eb6897b05e8b0368cf10a596b367e92066195..29c99b66c69ad74c130b12f6888f80adcba5138e 100644
--- a/Unix/Widgets.cpp
+++ b/Unix/Widgets.cpp
@@ -1,4 +1,4 @@
-/* $Id: Widgets.cpp,v 1.17 2000-12-08 11:16:55 geuzaine Exp $ */
+/* $Id: Widgets.cpp,v 1.18 2000-12-13 13:57:00 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -1998,7 +1998,7 @@ void CreateWidgets_GD(Widgets_T *w){
   /* Translation */
 
   i=0;
-  XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("CurrentTranslation")); i++;
+  XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Current Translation")); i++;
   XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Ok")); i++;
   XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++;
   XtSetArg(arg[i], XmNautoUnmanage, False); i++;
@@ -2082,7 +2082,7 @@ void CreateWidgets_GD(Widgets_T *w){
   w->GD.dilatText[2] = XmCreateTextField(w->GD.dilatFrameRowCol[0], "GDdilatText2", arg, i);
   XtManageChild(w->GD.dilatText[2]);
 
-  /* dilat - char length */
+  /* dilat - factor */
   
   i=0;
   w->GD.dilatFrame[0][1] = XmCreateFrame(w->GD.dilatRowCol, "GDdilatFrame01", arg, i);
@@ -2104,6 +2104,51 @@ void CreateWidgets_GD(Widgets_T *w){
   w->GD.dilatText[3] = XmCreateTextField(w->GD.dilatFrameRowCol[1], "GDdilatText3", arg, i);
   XtManageChild(w->GD.dilatText[3]);
 
+  /* Symmetry */
+
+  i=0;
+  XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Current Symmetry")); i++;
+  XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Ok")); i++;
+  XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++;
+  XtSetArg(arg[i], XmNautoUnmanage, False); i++;
+  w->GD.symmDialog = XmCreateTemplateDialog(w->M.shell, "GDsymmDialog", arg, i);
+  XtUnmanageChild(w->GD.symmDialog);
+
+  i=0;
+  w->GD.symmFrame[0] = XmCreateFrame(w->GD.symmDialog, "GDsymmFrame0", arg, i);
+  XtManageChild(w->GD.symmFrame[0]);
+  i=0;
+  XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Plane")); i++;
+  XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++;
+  w->GD.symmFrame[1] = XmCreateLabel(w->GD.symmFrame[0], "GDsymmFrame1", arg, i);
+  XtManageChild(w->GD.symmFrame[1]);
+
+  i=0;
+  XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++;
+  w->GD.symmFrameRowCol = XmCreateRowColumn(w->GD.symmFrame[0], "ODsymmFrameRowCol", arg, i);
+  XtManageChild(w->GD.symmFrameRowCol);
+
+  i=0;
+  XtSetArg(arg[i], XmNvalue, ""); i++;
+  XtSetArg(arg[i], XmNcolumns, 10); i++;
+  w->GD.symmText[0] = XmCreateTextField(w->GD.symmFrameRowCol, "GDsymmText0", arg, i);
+  XtManageChild(w->GD.symmText[0]);
+  i=0;
+  XtSetArg(arg[i], XmNvalue, ""); i++;
+  XtSetArg(arg[i], XmNcolumns, 10); i++;
+  w->GD.symmText[1] = XmCreateTextField(w->GD.symmFrameRowCol, "GDsymmText1", arg, i);
+  XtManageChild(w->GD.symmText[1]);
+  i=0;
+  XtSetArg(arg[i], XmNvalue, ""); i++;
+  XtSetArg(arg[i], XmNcolumns, 10); i++;
+  w->GD.symmText[2] = XmCreateTextField(w->GD.symmFrameRowCol, "GDsymmText2", arg, i);
+  XtManageChild(w->GD.symmText[2]);
+  i=0;
+  XtSetArg(arg[i], XmNvalue, ""); i++;
+  XtSetArg(arg[i], XmNcolumns, 10); i++;
+  w->GD.symmText[3] = XmCreateTextField(w->GD.symmFrameRowCol, "GDsymmText3", arg, i);
+  XtManageChild(w->GD.symmText[3]);
+
 }
 
 /* ------------------------------------------------------------------------ 
diff --git a/Unix/Widgets.h b/Unix/Widgets.h
index 54106ae7893c13924fccd7169ee3a7e73f4e81fc..2611bb269f1fafe2c28bfaa3e42505bb74363ee7 100644
--- a/Unix/Widgets.h
+++ b/Unix/Widgets.h
@@ -1,4 +1,4 @@
-/* $Id: Widgets.h,v 1.8 2000-12-08 11:16:55 geuzaine Exp $ */
+/* $Id: Widgets.h,v 1.9 2000-12-13 13:57:00 geuzaine Exp $ */
 #ifndef _WIDGETS_H_
 #define _WIDGETS_H_
 
@@ -169,6 +169,9 @@ typedef struct {
 
     Widget   dilatDialog, dilatRowCol ;
     Widget   dilatFrame[2][2], dilatFrameRowCol[2], dilatText[4] ;
+
+    Widget   symmDialog, symmRowCol ;
+    Widget   symmFrame[2], symmFrameRowCol, symmText[4] ;
   } GD;
 
   /* mesh dialogs */