diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index d0f88b4adcea93aa35c3d62072c88cd8ba40ffba..2d0e399dccaf7da2edbfef6ad26934084330d519 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.46 2001-05-01 18:58:24 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.47 2001-05-03 00:09:42 geuzaine Exp $
 
 #include <map>
 #include "Gmsh.h"
@@ -1301,6 +1301,73 @@ void mesh_define_transfinite_volume_cb(CALLBACK_ARGS){
   _add_transfinite(3);
 } 
 
+// Dynamic Solver Menus
+
+#include "Solvers.h"
+
+void getdp_cb(CALLBACK_ARGS){
+  static int first=1;
+  if(first){
+    first = 0;
+    strcpy(GetDP_Info.file,CTX.basefilename);
+    strcat(GetDP_Info.file,".pro");
+    strcpy(GetDP_Info.mesh,"");
+  }
+  WID->getdp_value[0]->value(GetDP_Info.file);
+  GetDP(GetDP_Info.file);
+  WID->create_getdp_window();
+}
+void getdp_file_open_cb(CALLBACK_ARGS){
+  char *newfile;
+  newfile = fl_file_chooser("Open Problem Definition File", "*", NULL);
+  if (newfile != NULL) strcpy(GetDP_Info.file,newfile); 
+  WID->getdp_value[0]->value(GetDP_Info.file);
+  GetDP(GetDP_Info.file);
+}
+void getdp_file_edit_cb(CALLBACK_ARGS){
+  Msg(WARNING, "Should lauch a file editor");
+}
+void getdp_choose_mesh_cb(CALLBACK_ARGS){
+  char *newfile;
+  newfile = fl_file_chooser("Open Mesh File", "*", NULL);
+  if (newfile != NULL) strcpy(GetDP_Info.mesh,newfile); 
+  WID->getdp_value[1]->value(GetDP_Info.mesh);
+}
+void getdp_pre_cb(CALLBACK_ARGS){
+  char arg[256];
+  if(strlen(GetDP_Info.mesh))
+    sprintf(arg, "%s -msh %s -pre %s", 
+	    GetDP_Info.file, GetDP_Info.mesh,
+	    GetDP_Info.res[WID->getdp_choice[0]->value()]);
+  else
+    sprintf(arg, "%s -pre %s", 
+	    GetDP_Info.file, 
+	    GetDP_Info.res[WID->getdp_choice[0]->value()]);
+
+  GetDP(arg);
+}
+void getdp_cal_cb(CALLBACK_ARGS){
+  char arg[256];
+  if(strlen(GetDP_Info.mesh))
+    sprintf(arg, "%s -msh %s -cal", GetDP_Info.file, GetDP_Info.mesh);
+  else
+    sprintf(arg, "%s -cal", GetDP_Info.file);
+  GetDP(arg);
+}
+void getdp_post_cb(CALLBACK_ARGS){
+  char arg[256];
+  if(strlen(GetDP_Info.mesh))
+    sprintf(arg, "%s -msh %s -bin -pos %s",
+	    GetDP_Info.file, GetDP_Info.mesh,
+	    GetDP_Info.postop[WID->getdp_choice[1]->value()]);
+  else
+    sprintf(arg, "%s -bin -pos %s",
+	    GetDP_Info.file,
+	    GetDP_Info.postop[WID->getdp_choice[1]->value()]);
+  GetDP(arg);
+}
+
+
 // Dynamic Post Menus
 
 void view_toggle_cb(CALLBACK_ARGS){
diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h
index 4cb0d5399cfc8c609d498e41e1558bd571957139..f0b2c4da4b5d9df628a610e806c31091854ac3d2 100644
--- a/Fltk/Callbacks.h
+++ b/Fltk/Callbacks.h
@@ -181,6 +181,16 @@ void con_mesh_define_length_cb(CALLBACK_ARGS) ;
 void con_mesh_define_transfinite_line_cb(CALLBACK_ARGS) ;
 void con_mesh_define_transfinite_volume_cb(CALLBACK_ARGS) ;
 
+// Dynamic Solver Menus
+
+void getdp_cb(CALLBACK_ARGS);
+void getdp_file_open_cb(CALLBACK_ARGS);
+void getdp_file_edit_cb(CALLBACK_ARGS);
+void getdp_choose_mesh_cb(CALLBACK_ARGS);
+void getdp_pre_cb(CALLBACK_ARGS);
+void getdp_cal_cb(CALLBACK_ARGS);
+void getdp_post_cb(CALLBACK_ARGS);
+
 // Dynamic post menus
 
 void view_toggle_cb(CALLBACK_ARGS) ;
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 47b53b7752cabcddbe748fb2628640d7fe32e3f9..b8f7edbd94bbc0f98d61c666f5b38d7e1fd6b39a 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.63 2001-05-01 18:58:24 geuzaine Exp $
+// $Id: GUI.cpp,v 1.64 2001-05-03 00:09:42 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.
@@ -246,6 +246,7 @@ Context_Item menu_mesh[] =
 
 Context_Item menu_solver[] = 
 { { "2Solver", NULL } ,
+  { "GetDP", (Fl_Callback *)getdp_cb } ,
   { NULL } };
 
 Context_Item menu_post[] = 
@@ -456,6 +457,7 @@ GUI::GUI(int argc, char **argv) {
   init_view_window = 0;
   init_geometry_context_window = 0;
   init_mesh_context_window = 0;
+  init_getdp_window = 0;
 
   if(strlen(CTX.display)) Fl::display(CTX.display);
 
@@ -494,6 +496,7 @@ GUI::GUI(int argc, char **argv) {
   create_view_options_window(-1);
   create_message_window();
   create_about_window();
+  create_getdp_window();
 
   // Draw the scene
   g_opengl_window->redraw();
@@ -717,9 +720,7 @@ void GUI::set_context(Context_Item *menu_asked, int flag){
       m_popup_butt[i]->hide();
     }
     break;
-  case 2 : // solver contexts
-    break;
-  default : // geometry or mesh contexts
+  default : // geometry, mesh, solver contexts
     for(i=0 ; i < NB_BUTT_MAX ; i++){
       m_toggle_butt[i]->hide();
       m_popup_butt[i]->hide();
@@ -2336,3 +2337,95 @@ void GUI::create_mesh_context_window(int num){
   }
 }
 
+
+//************** Create the window for the getdp solver **************
+
+void GUI::create_getdp_window(){
+  int i;
+  static Fl_Group *g[10];
+
+  if(!init_getdp_window){
+    init_getdp_window = 1 ;
+
+    int width = 25*CTX.fontsize;
+    int height = 5*WB+9*BH  + WB;
+    
+    getdp_window = new Fl_Window(width,height);
+    getdp_window->box(WINDOW_BOX);
+    getdp_window->label("GetDP Solver");
+    { 
+      Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH);
+      { 
+	g[0] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "General");
+	g[0]->labelsize(CTX.fontsize);
+
+	getdp_value[0] = new Fl_Output(8*CTX.fontsize, 2*WB+1*BH, BW, BH, "Problem");
+	getdp_butt[0]  = new Fl_Button(8*CTX.fontsize+BW-2*BB-WB, 3*WB+2*BH, BB, BH, "Edit");
+	getdp_butt[0]->callback(getdp_file_edit_cb);
+	getdp_butt[1]  = new Fl_Button(8*CTX.fontsize+BW-BB, 3*WB+2*BH, BB, BH, "Choose");
+	getdp_butt[1]->callback(getdp_file_open_cb);
+
+	getdp_choice[0] = new Fl_Choice(8*CTX.fontsize, 4*WB+3*BH, BW, BH,"Resolution");
+	getdp_choice[1] = new Fl_Choice(8*CTX.fontsize, 5*WB+4*BH, BW, BH,"PostOperation");
+
+	getdp_value[1] = new Fl_Output(8*CTX.fontsize, 6*WB+5*BH, BW, BH, "Mesh");
+	getdp_butt[2]  = new Fl_Button(8*CTX.fontsize+BW-BB, 7*WB+6*BH, BB, BH, "Choose");
+	getdp_butt[2]->callback(getdp_choose_mesh_cb);
+
+	for(i=0 ; i<2 ; i++){
+	  getdp_value[i]->labelsize(CTX.fontsize);
+	  getdp_value[i]->textsize(CTX.fontsize);
+	  getdp_value[i]->type(FL_HORIZONTAL);
+	  getdp_value[i]->align(FL_ALIGN_LEFT);
+	  getdp_value[i]->value(0);
+	}
+
+	for(i=0 ; i<3 ; i++){
+	  getdp_butt[i]->labelsize(CTX.fontsize);
+	}
+
+	for(i=0 ; i<2 ; i++){
+	  getdp_choice[i]->textsize(CTX.fontsize);
+	  getdp_choice[i]->labelsize(CTX.fontsize);
+	}
+
+        g[0]->end();
+      }
+      o->end();
+    }
+
+    { 
+      Fl_Button* o = new Fl_Button(width-4*BB-4*WB, height-BH-WB, BB, BH, "Pre");
+      o->labelsize(CTX.fontsize);
+      o->callback(getdp_pre_cb);
+    }
+    { 
+      Fl_Button* o = new Fl_Button(width-3*BB-3*WB, height-BH-WB, BB, BH, "Cal");
+      o->labelsize(CTX.fontsize);
+      o->callback(getdp_cal_cb);
+    }
+    { 
+      Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Post");
+      o->labelsize(CTX.fontsize);
+      o->callback(getdp_post_cb);
+    }
+    { 
+      Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
+      o->labelsize(CTX.fontsize);
+      o->callback(cancel_cb, (void*)getdp_window);
+    }
+
+
+    if(CTX.center_windows)
+      getdp_window->position(m_window->x()+m_window->w()/2-width/2,
+			     m_window->y()+9*BH-height/2);
+    getdp_window->end();
+  }
+  else{
+    if(getdp_window->shown())
+      getdp_window->redraw();
+    else
+      getdp_window->show();
+  }
+}
+
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index fb9e80959638a4689589d51d7d01b0f390f2dc39..cda15ce554a9fd7d0b29b8a109f384cf4059b5ab 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -169,6 +169,12 @@ public:
   Fl_Window        *context_mesh_window ;
   Fl_Input         *context_mesh_input[20] ;
 
+  // solver windows
+  int init_getdp_window;
+  Fl_Window        *getdp_window ;
+  Fl_Output        *getdp_value[50] ;
+  Fl_Choice        *getdp_choice[10] ;
+  Fl_Button        *getdp_butt[10] ;
 
   // the constructor
   GUI(int argc, char **argv);
@@ -187,6 +193,7 @@ public:
   void create_about_window();
   void create_geometry_context_window(int num);
   void create_mesh_context_window(int num);
+  void create_getdp_window();
 
   // general purpose interaction
   void run();
diff --git a/Fltk/Makefile b/Fltk/Makefile
index 1ecf46c12015c07e057e69d8ca2f9a4c1e67ac00..76f14c81800364a1fb447af06bf8f7be3f2aa988 100644
--- a/Fltk/Makefile
+++ b/Fltk/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.16 2001-04-23 10:38:08 geuzaine Exp $
+# $Id: Makefile,v 1.17 2001-05-03 00:09:42 geuzaine Exp $
 #
 # Makefile for "libFltk.a"
 #
@@ -32,7 +32,9 @@ SRC = Main.cpp \
       Callbacks.cpp\
       Opengl.cpp\
       Opengl_Window.cpp\
-      Colorbar_Window.cpp
+      Colorbar_Window.cpp\
+      Socket.cpp\
+      Solvers.cpp
 
 
 OBJ = $(SRC:.cpp=.o)
diff --git a/Fltk/Socket.cpp b/Fltk/Socket.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a452234dc87053d5e9ff1093ea31a5b833318d68
--- /dev/null
+++ b/Fltk/Socket.cpp
@@ -0,0 +1,184 @@
+/* $Id: Socket.cpp,v 1.1 2001-05-03 00:09:42 geuzaine Exp $ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/un.h>
+#include <unistd.h>
+
+#include "Message.h"
+
+int Socket_ReceiveData(int socket, void *buffer, int bytes){
+  int sofar, remaining, len;
+  char *buf;
+  
+  buf = (char*)buffer;
+  sofar = 0;
+  remaining = bytes;
+  do {
+    len = read(socket, buf + sofar, remaining);
+    if (len<=0) return 0;
+    sofar += len;
+    remaining -= len;
+  } while (remaining>0);
+  return bytes;
+}
+
+void Socket_SendData(int socket, void *buffer, int bytes){
+  int sofar, remaining, len;
+  char *buf;
+  
+  buf = (char*)buffer;
+  sofar = 0;
+  remaining = bytes;
+  do {
+    len = write(socket, buf + sofar, remaining);
+    sofar += len;
+    remaining -= len;
+  } while (remaining>0);
+}
+
+int Socket_ReceiveInt(int socket, int *i){
+  return Socket_ReceiveData(socket, i, sizeof(int));
+}
+
+void Socket_SendInt(int socket, int i){
+  Socket_SendData(socket, &i, sizeof(int));
+}
+
+int Socket_ReceiveDouble(int socket, double *x){
+  return Socket_ReceiveData(socket, x, sizeof(double));
+}
+
+void Socket_SendDouble(int socket, double x){
+  Socket_SendData(socket, &x, sizeof(double));
+}
+
+int Socket_ReceiveString(int socket, char str[]){
+   int len;
+
+   if (Socket_ReceiveInt(socket, &len)) {
+     if (Socket_ReceiveData(socket, str, len)==len) {
+       str[len] = '\0';
+       return 1;
+     }
+   }
+   return 0;
+}
+
+void Socket_SendString(int socket, char str[]){
+  int len;
+  
+  len = strlen(str);
+  Socket_SendInt(socket, len);
+  Socket_SendData(socket, str, len);
+}
+
+
+int Socket_StartProgram(char *progname, char *sockname){
+  int s, sock;
+#ifdef WIN32
+  int len;
+#else
+  socklen_t len ;
+#endif
+  struct sockaddr_un addr, from;
+  char command[1000];
+  fd_set rfds;
+  struct timeval tv;
+  int retval;
+
+  /* first delete the socket's name if it exists */
+  unlink(sockname);
+  
+  /* make the socket */
+  s = socket(PF_UNIX, SOCK_STREAM, 0);
+  if (s<0) {
+    Msg(GERROR, "Couldn't create socket");
+    return -1;
+  }
+  
+  /* bind the socket to its name */
+  strcpy(addr.sun_path, sockname);
+  addr.sun_family = AF_UNIX;
+  if(bind(s, (struct sockaddr *)&addr, strlen(addr.sun_path)+sizeof(addr.sun_family)) < 0) {
+    Msg(GERROR, "Couldn't bind socket to name");
+    return -1;
+  }
+  
+  /* change permissions on the socket name in case it has to be rm'd later */
+  chmod(sockname, 0666);
+  
+  /* Start the external function via system() call */
+  sprintf(command, "%s -socket %s &", progname, sockname);
+  system(command);
+  
+  /* wait for external function to connect */
+  if(listen(s, 20)) Msg(GERROR, "Socket listen failed");
+  
+  /* Watch s to see when it has input. */
+  FD_ZERO(&rfds);
+  FD_SET(s, &rfds);
+  /* Wait up to one second */
+  tv.tv_sec = 2;
+  tv.tv_usec = 0;
+  retval = select(s+1, &rfds, NULL, NULL, &tv);
+  
+  if(!retval){
+    Msg(GERROR, "Socket listening timeout");	
+    return -1;
+  }
+  
+  len = sizeof(from);
+  if ( (sock = accept(s, (struct sockaddr *)&from, &len)) < 0) {
+    Msg(GERROR, "Socket accept failed");	
+    return -1;
+  }
+  
+  close(s); /* don't need this socket anymore */
+  
+  return sock;
+}
+
+int Socket_StopProgram(char *progname, char *sockname, int sock){
+  if(unlink(sockname)==-1) Msg(WARNING, "Impossible to unlink the socket");
+  close(sock);
+  return 0;
+}
+
+
+int Socket_Connect(char *sockname){
+  struct sockaddr_un addr;
+  int len, sock;
+  int tries;
+
+  /* create socket */
+  sock = socket(PF_UNIX, SOCK_STREAM, 0);
+  if (sock<0){
+    Msg(GERROR, "Couldn't create socket");
+    return -1;
+  }
+
+  /* try to connect socket to given name */
+  strcpy(addr.sun_path, sockname);
+  addr.sun_family = AF_UNIX;
+  len = strlen(addr.sun_path)+sizeof(addr.sun_family);
+  for (tries=0;tries<5;tries++) {
+    if (connect(sock, (struct sockaddr *)&addr, len) < 0) {
+      Msg(GERROR, "Socket connect failed");
+    }
+    else {
+      return sock;
+    }
+  }
+   
+  return -1;
+}
+
+
+void Socket_Close(int sock){
+  close(sock);
+}
diff --git a/Fltk/Socket.h b/Fltk/Socket.h
new file mode 100644
index 0000000000000000000000000000000000000000..a25f56bb97bffa24c37c7a8b9cd80e3d4ae0f4f5
--- /dev/null
+++ b/Fltk/Socket.h
@@ -0,0 +1,17 @@
+#ifndef _SOCKET_H_
+#define _SOCKET_H_
+
+int  Socket_ReceiveData(int socket, void *buffer, int bytes);
+void Socket_SendData(int socket, void *buffer, int bytes);
+int  Socket_ReceiveInt(int socket, int *i);
+void Socket_SendInt(int socket, int i);
+int  Socket_ReceiveDouble(int socket, double *x);
+void Socket_SendDouble(int socket, double x);
+int  Socket_ReceiveString(int socket, char str[]);
+void Socket_SendString(int socket, char str[]);
+int  Socket_StartProgram(char *progname, char *sockname);
+int  Socket_StopProgram(char *progname, char *sockname, int sock);
+int  Socket_Connect(char *sockname);
+void Socket_Close(int sock);
+
+#endif
diff --git a/Fltk/Solvers.cpp b/Fltk/Solvers.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ff83bedc8eda68225c2bc053dae663098b93764e
--- /dev/null
+++ b/Fltk/Solvers.cpp
@@ -0,0 +1,117 @@
+// $Id: Solvers.cpp,v 1.1 2001-05-03 00:09:42 geuzaine Exp $
+
+#include "Gmsh.h"
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/un.h>
+#include <unistd.h>
+
+#include "Socket.h"
+#include "OpenFile.h"
+#include "Solvers.h"
+
+#include "GmshUI.h"
+#include "GUI.h"
+#include "Mesh.h"
+#include "Draw.h"
+
+
+extern GUI       *WID;
+
+
+#if defined(WIN32) && !defined(__CYGWIN__)
+#define SLASH "\\"
+#else
+#define SLASH "/"
+#endif
+
+#define GET_PATH(path_val)					\
+  char *tmp;							\
+  if     ((tmp = getenv("HOME"))) strcpy(path_val, tmp);	\
+  else if((tmp = getenv("TMP")))  strcpy(path_val, tmp);	\
+  else if((tmp = getenv("TEMP"))) strcpy(path_val, tmp);	\
+  else                            strcpy(path_val, "");		\
+  if(strlen(path_val)) strcat(path_val, SLASH);
+
+
+
+
+// interface to GetDP
+
+_GetDP_Info GetDP_Info ;
+
+int GetDP(char *args){
+  int sock, i, n ;
+  char progname[1000], sockname[1000], str[1000];
+
+  GET_PATH(sockname);
+  strcat(sockname, ".gmsh-socket-GetDP");
+
+  sprintf(progname, "getdp %s", args);
+  sock = Socket_StartProgram(progname, sockname);
+  if(sock<0){
+    Msg(GERROR, "Could not execute '%s'", progname);
+    return 0;
+  }
+
+  GetDP_Info.nbres = 0;
+  GetDP_Info.nbpostop = 0;
+
+  while(1){
+    Socket_ReceiveInt(sock, &i);
+
+    if(i<0){
+      Msg(INFO, "Finished '%s'", progname);
+      break;
+    }
+
+    Socket_ReceiveString(sock, str);
+
+    switch(i){
+    case 10 : // status
+      Msg(STATUS3N, "GetDP %s", str);
+      break ;
+    case 101 : // available resolution
+      strcpy(GetDP_Info.res[GetDP_Info.nbres++],str);
+      break ;
+    case 102 : // available postoperations
+      strcpy(GetDP_Info.postop[GetDP_Info.nbpostop++],str);
+      break ;
+    case 200 : // load postprocessing file
+      n = List_Nbr(Post_ViewList);
+      MergeProblem(str);
+      Draw(); 
+      if(n != List_Nbr(Post_ViewList))
+	WID->set_context(menu_post, 0);
+      break ;
+    default :
+      Msg(DIRECT, "GetDP > %s", str);
+      break ;
+    }
+
+  }
+
+  if(GetDP_Info.nbres){
+    WID->getdp_choice[0]->clear();
+    for(i=0;i<GetDP_Info.nbres;i++) 
+      WID->getdp_choice[0]->add(GetDP_Info.res[i]);
+    WID->getdp_choice[0]->value(0);
+  }
+
+  if(GetDP_Info.nbpostop){
+    WID->getdp_choice[1]->clear();
+    for(i=0;i<GetDP_Info.nbpostop;i++) 
+      WID->getdp_choice[1]->add(GetDP_Info.postop[i]);
+    WID->getdp_choice[1]->value(0);
+  }
+
+
+  Socket_StopProgram(progname, sockname, sock);
+
+  return 1;
+}
+
+
+
diff --git a/Graphics/Scale.cpp b/Graphics/Scale.cpp
index e31d2abf9a32e6d8467316df681189b46a95d27c..2b684377ce0c3ae5433940850f06d6f548614f69 100644
--- a/Graphics/Scale.cpp
+++ b/Graphics/Scale.cpp
@@ -1,4 +1,4 @@
-// $Id: Scale.cpp,v 1.18 2001-04-22 18:13:02 geuzaine Exp $
+// $Id: Scale.cpp,v 1.19 2001-05-03 00:09:42 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -21,8 +21,8 @@ static XCharStruct  overall;
   if(overall.width > cv_w) cv_w=overall.width
 
 #elif _FLTK
-
-#define CHECK_W  cv_w=gl_width(label)
+static double overall ; 
+#define CHECK_W  overall=gl_width(label) ; if(overall > cv_w) cv_w=overall
 
 #else
 
diff --git a/Makefile b/Makefile
index fb131d579982adc76be12d785c02ef3fe2b3664c..f441ec624e79aa8f6919d1533d911989e7afebe8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.94 2001-04-26 17:58:00 remacle Exp $
+# $Id: Makefile,v 1.95 2001-05-03 00:09:42 geuzaine Exp $
 # ----------------------------------------------------------------------
 #  Makefile for Gmsh  
 # ----------------------------------------------------------------------
@@ -184,7 +184,7 @@ tag:
 	echo "#define GMSH_VERSION  $(GMSH_RELEASE)" >  Common/GmshVersion.h
 	echo "#define GMSH_DATE     \"`date`\""      >> Common/GmshVersion.h
 	echo "#define GMSH_HOST     \"`hostname`\""  >> Common/GmshVersion.h
-	echo "#define GMSH_PACKAGER \"`hostname`\""    >> Common/GmshVersion.h
+	echo "#define GMSH_PACKAGER \"`whoami`\""    >> Common/GmshVersion.h
 	echo "#define GMSH_OS       \"`uname -sr`\"" >> Common/GmshVersion.h
 
 initialtag:
diff --git a/doc/VERSIONS b/doc/VERSIONS
index 8e91552892f97eb2e305df9e90042db9609e1cbb..2b2082094ec20417e40551823ad4a4ce05bf96ae 100644
--- a/doc/VERSIONS
+++ b/doc/VERSIONS
@@ -1,7 +1,7 @@
-$Id: VERSIONS,v 1.11 2001-05-01 18:59:37 geuzaine Exp $
+$Id: VERSIONS,v 1.12 2001-05-03 00:09:42 geuzaine Exp $
 
 New in 1.19: Fixed seg. fault scalar simplex post-processing; new
-"Solver" menu; 
+"Solver" menu; Sockets; fixed small scale display problems;
 
 New in 1.18: Fixed many small bugs and incoherences in
 post-processing; fixed broken background mesh in 1D mesh generation.
diff --git a/www/gmsh.html b/www/gmsh.html
index 8497d8538442812b120baa12fa96c47e8d4f420a..0ee7005bb41c9891a52b27a4ff592b32f35d54b9 100644
--- a/www/gmsh.html
+++ b/www/gmsh.html
@@ -50,7 +50,7 @@ ENDSCRIPT--->
 This page is a mirror of <a href="/gmsh/">/gmsh/</a><p>
 ENDMIRROR--->
 
-<!---BEGINDATE$Date: 2001-04-25 16:11:03 $ENDDATE--->
+<!---BEGINDATE$Date: 2001-05-03 00:09:42 $ENDDATE--->
 
 Copyright &copy; 1998-2001<br>
 Jean-Fran�ois Remacle and
@@ -449,8 +449,8 @@ href="http://mesa3d.sourceforge.net">http://mesa3d.sourceforge.net</A>
 (a Linux RPM is directly available <A
 href="/gmsh/thirdparty/Mesa-3.2-2.i386.rpm">here</A>).  Remember that
 you may have to reconfigure the loader (ldconfig under Linux) or
-modify the LD_LIBRARY_PATH (or SHLIB_PATH on HP) in order for Gmsh to
-find the libraries.
+modify the LD_LIBRARY_PATH (or SHLIB_PATH on HP) environment variable
+in order for Gmsh to find the libraries.
 
 
   </font></td>