diff --git a/Common/StringUtils.cpp b/Common/StringUtils.cpp
index f254172a49980a54c2d13a5964cd9a38b295157e..9d178b7da4d92b50db08ba337a934eac526312ea 100644
--- a/Common/StringUtils.cpp
+++ b/Common/StringUtils.cpp
@@ -129,3 +129,14 @@ std::string ReplacePercentS(std::string in, std::string val)
   }
   return out;
 }
+
+std::string ConvertFileToString(std::string fileName)
+{
+  FILE *fp = fopen(fileName.c_str(), "r");
+  if(!fp) return "";
+  std::string out;
+  char str[256];
+  while(!feof(fp) && fgets(str, sizeof(str), fp)) out += str;
+  fclose(fp);
+  return out;
+}
diff --git a/Common/StringUtils.h b/Common/StringUtils.h
index 4393b88361aa0e22ea0183c251742a27eff6b88f..9e66463848a3d242086b1bb388c557f62701d362 100644
--- a/Common/StringUtils.h
+++ b/Common/StringUtils.h
@@ -18,5 +18,6 @@ std::string FixRelativePath(std::string reference, std::string in);
 std::vector<std::string> SplitFileName(std::string fileName);
 std::vector<std::string> SplitWhiteSpace(std::string in, unsigned int len);
 std::string ReplacePercentS(std::string in, std::string val);
+std::string ConvertFileToString(std::string fileName);
 
 #endif
diff --git a/Fltk/extraDialogs.cpp b/Fltk/extraDialogs.cpp
index d506218e80c2ec73e3f41c3621b010186c6ed222..dc64ac4f52414824e8a875b0bc345b061b5385c8 100644
--- a/Fltk/extraDialogs.cpp
+++ b/Fltk/extraDialogs.cpp
@@ -7,6 +7,7 @@
 //   Stephen Guzik
 //
 
+#include <stdio.h>
 #include <FL/Fl_Value_Slider.H>
 #include <FL/Fl_Menu_Window.H>
 #include <FL/Fl_Select_Browser.H>
@@ -211,10 +212,8 @@ class ConnectionBrowser : public Fl_Hold_Browser {
         int i = value();
         if(i){
           remove(i);
-          if(i <= size())
-            select(i);
-          else if(i > 1)
-            select(i - 1);
+          if(i <= size()) select(i);
+          else if(i > 1) select(i - 1);
         }
         return 1;
       }
@@ -227,17 +226,12 @@ class ConnectionBrowser : public Fl_Hold_Browser {
     : Fl_Hold_Browser(x, y, w, h, l) {}
   void save(Fl_Preferences &prefs)
   {
-    std::set<std::string> uniq;
-    for(int i = 0; i < size(); i++) uniq.insert(text(i + 1));
-    char name[256];
-    int j = 0;
-    for(std::set<std::string>::iterator it = uniq.begin(); it != uniq.end(); it++){
-      sprintf(name, "connection%02d", j++);
-      prefs.set(name, it->c_str());
-    }
-    for(int i = j; i < 100; i++){
+    for(int i = 0; i < 100; i++){
+      char name[256];
       sprintf(name, "connection%02d", i);
-      if(prefs.entryExists(name))
+      if(i < size())
+        prefs.set(name, text(i + 1));
+      else if(prefs.entryExists(name)) 
         prefs.deleteEntry(name);
     }
   }
@@ -288,7 +282,7 @@ std::string connectionChooser()
 
   int old = chooser->browser->value();
   chooser->browser->clear();
-  for (int i = 0; i < 100; i ++) {
+  for (int i = 0; i < 100; i++) {
     char name[256], value[1024];
     sprintf(name, "connection%02d", i);
     if(prefs.entryExists(name)){
@@ -301,7 +295,7 @@ std::string connectionChooser()
     if(old > 0 && old <= n)
       chooser->input->value(chooser->browser->text(old));
     else
-      chooser->input->value(chooser->browser->text(n));
+      chooser->input->value(chooser->browser->text(1));
   }
   else
     chooser->input->value("./gmsh ../tutorial/view3.pos");
@@ -314,7 +308,19 @@ std::string connectionChooser()
       Fl_Widget* o = Fl::readqueue();
       if (!o) break;
       if (o == chooser->ok) {
-        chooser->browser->add(chooser->input->value());
+        if(strlen(chooser->input->value())){
+          // insert choosen value at the top of the history if it's not
+          // already present
+          bool found = false;
+          for(int i = 0; i < chooser->browser->size(); i++){
+            if(!strcmp(chooser->input->value(), chooser->browser->text(i + 1))){
+              found = true;
+              break;
+            }
+          }
+          if(!found)
+            chooser->browser->insert(1, chooser->input->value());
+        }
         chooser->browser->save(prefs);
         chooser->window->hide();
         return chooser->input->value();
diff --git a/Post/PViewDataRemote.h b/Post/PViewDataRemote.h
index 2551740d60f274f790c548426dbc440c20ccc77e..69df8c7f17177f467926d414a4eeca7751f31de3 100644
--- a/Post/PViewDataRemote.h
+++ b/Post/PViewDataRemote.h
@@ -13,6 +13,9 @@
 #include "GmshSocket.h"
 #include "PViewData.h"
 #include "SBoundingBox3d.h"
+#include "Options.h"
+#include "StringUtils.h"
+#include "Context.h"
 
 // The container for a remote dataset (does not contain any actual
 // data!)
@@ -64,7 +67,11 @@ class PViewDataRemote : public PViewData {
       return 1;
     }
     setDirty(true);
-    // server->SendString(GmshSocket::GMSH_PARSER_STRING, options);
+    std::string fileName = CTX::instance()->homeDir + CTX::instance()->tmpFileName;
+    // FIXME: until we rewrite the option code and allow nice serialization ;-)
+    PrintOptions(0, GMSH_FULLRC, 1, 0, fileName.c_str());
+    std::string options = ConvertFileToString(fileName);
+    server->SendString(GmshSocket::GMSH_PARSE_STRING, options.c_str());
     server->SendString(GmshSocket::GMSH_VERTEX_ARRAY, "Send the vertex arrays!");
     return 1;
   }